Ca a l’air tout con mais j’ai pas mal galéré au final pour transposer mon script Ruby en une app (basique) en Rails.

Mon Controller Users:

class UsersController < ApplicationController
def index
 
end
def name
	require 'rubygems'
	gem 'twitter'
	require 'twitter'
 
	# Récupération de la liste des id à comparer et transformation en Array
	@query = params[:query]
	@list = @query.scan(/\w+/)
 
	# Tableau des followers en commun
	@mutual = Twitter.follower_ids(@list[0])
	@list.each_with_index { |e,i| @mutual &= Twitter.follower_ids(e) unless i==0}
	@number = @mutual.length.to_s
	@realnames = Array.new
	@mutual.each { |e| @realnames.push(Twitter.user(e).name) }
	@comparison = @list.join(", ")
end
end

La méthode index sert à rien, c’est juste pour avoir un View.
Par contre, la méthode name fait tout.

Voici le View index :

<% form_tag :action => 'name' do %>
<%= text_field_tag(:query) %> 
<%= submit_tag "Go!" %> 
<% end %>

Je crée un form non lié au Model parce que je sauvegarde rien dans la bdd de toute façon. J’ai un champ texte tout con avec comme param :query pour que je puisse l’utiliser dans mon Controller (voir plus haut). En paramètre du form j’ai :action =>; 'name', ça redirige vers l’action name.

Le View name :

<h2><span class="comparison"><%= @comparison %></span> have <span class="number"><%= @number %></span> followers in common :</h2>
<% @realnames.each do |e| %> 
<p><%= e %></p>
<% end %>

Pour comprendre ce View il faut voir le Controller (plus haut).

  • @query c’est le String que je récupère du text input. C’est du type “bbx iamstark”
  • @list c’est ce String transformé en Array du type ['bbx', 'iamstark']
  • @mutual c’est le tableau des followers commun. Je l’initialise avec les followers du premier user (ici ‘bbx’)
  • après je boucle en comparant les followers de chaque user, et je garde que les éléments en commun
  • @realnames ça contient les vrais noms des users, et non plus les id
  • @comparison c’est juste un Array transformé en String avec chaque nom séparé par une virgule

Après j’affiche tout dans mon View et ça donne :
mutualr