text 5 Mar Create Facebook application in Ruby on Rails

Vediamo come creare una semplicissima app per facebook in Rails che stampa ‘Hello NOME_UTETE_FACEBOOK COGNOME_UTETE_FACEBOOK’

Per prima cosa installiamo la gemma facebooker

sudo gem install facebooker

Poi creiamo un’app vuota

rails myfaceapp

e il plugin facebooker per rails

./script/plugin install git://github.com/mmangino/facebooker.git

Ok creiamo un controller, per esempio ciccio con la vista index

script/generate controller ciccio index

Modifichiamo subito il file app/controllers/application_controller.rb aggiungendo

ensure_application_is_installed_by_facebook_user
filter_parameter_logging :fb_sig_friends

A questo punto andiamo a modificare l’azione index nel controller ciccio (file app/controllers/ciccio_controller.rb)

def index
  @firstName = facebook_session.user.first_name
  @lastName = facebook_session.user.last_name
end

Infine editiamo la vista dell’azione index app/views/ciccio/index.html.erb

Hello <%= @firstName %> <%= @lastName %>!

Bene. Ora la nostra app e` quasi pronta…

Ora dobbiamo configurarla er in facebook. Andiamo all’indirizzo http://www.facebook.com/developers/apps.php e creiamo una nuova app (Imposta Nuova Applicazione). Inseriamo il nome dell’app e accettiamo la licenza. Andiamo poi sul tab ‘Modelli’ (Canvas) e inseriamo Canvas page URL con mytestapp e Canvas Callback URL con http://localhost:3000/ciccio/index/. Salviamo le modifiche.

A questo punto l’ultimo passo: copiamo la Chiave API e la Secret Key (Applicazione Nascosta). Ora nella nosta app rails creiamo il file app/config/facebooker.yml come segue:

development:
  api_key: API_KEY_APPENA_COPIATA
  secret_key: SECRET_KEY_APPENA_COPIATA
  pretty_errors: true
  set_asset_host_to_callback_url: true
test:
  api_key: API_KEY_APPENA_COPIATA
  secret_key: SECRET_KEY_APPENA_COPIATA
  pretty_errors: true
  set_asset_host_to_callback_url: true
production:
  api_key: API_KEY_APPENA_COPIATA
  secret_key: SECRET_KEY_APPENA_COPIATA
  pretty_errors: true
  set_asset_host_to_callback_url: true

Avviamo la nostra app con ./script/server e testiamola all’indirizzo http://apps.facebook.com/mytestapp/


text 24 Feb Streaming link Radio 105

text 2 Feb Customize Globalize2 to return default locale when translation is missing

Globalize2 (fantastico plugin per Ruby on Rails per globalizzare la nostra applicazione [tradurre il contenuti nel DB]) ritorna nil se non trova una traduzione per un campo del DB. Questo in molti casi e` un pacco e sarebbe bello che ritornasse il valore del locale di default.

Per fare cio` andiamo ad modificare globalize2.
Prendiamo il file in globalize2/lib/globalize/active_record/adapter.rb

Andiamo alla funzione def fetch_attribute(locale, attr_name) linea 53

def fetch_attribute(locale, attr_name)
  translations = fetch_translations(locale)
  value, requested_locale = nil, locale
  Globalize.fallbacks(locale).each do |fallback|
    translation = translations.detect { |t| t.locale == fallback }
    value  = translation && translation.send(attr_name)
    locale = fallback && break if value
  end
  set_metadata(value, :locale => locale, :requested_locale => requested_locale)
  value
end

Modifichiamo dopo set_metadata:

def fetch_attribute(locale, attr_name)
  translations = fetch_translations(locale)
  value, requested_locale = nil, locale
  Globalize.fallbacks(locale).each do |fallback|
    translation = translations.detect { |t| t.locale == fallback }
    value  = translation && translation.send(attr_name)
    locale = fallback && break if value
  end
  set_metadata(value, :locale => locale, :requested_locale => requested_locale)
  value = fetch_attribute(I18n.default_locale, attr_name) if value.nil? && locale != I18n.default_locale # ADDED BY PIOZ
  value
end

In questo modo se value e` nil ricalcolera` value con il locale di default.


text 18 Jan Send mail with attachment via ruby SMTP

Vediamo come inviare una mail con allegato usando l’API di Ruby per SMTP. Di seguito il codice:

def send_newsletter

  body = "Testo del messaggio"

  filecontent = File.read("allegato.pdf")
  encodedcontent = [filecontent].pack("m") # base64
  marker = "AUNIQUEMARKER"

  # Define the main headers.
  part1 =<<EOF
From: from@mail.com <Pioz>
To: <to@mail.it>
Subject: Oggetto del messaggio
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=#{marker}
--#{marker}
EOF

  # Define the message action
  part2 =<<EOF
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding:8bit

#{body}
--#{marker}
EOF

  # Define the attachment section
  part3 =<<EOF
Content-Type: application/pdf; name="allegato.pdf"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="allegato.pdf"

#{encodedcontent}
--#{marker}--
EOF

  mailtext = part1 + part2 + part3

  Net::SMTP.start('mail.server.it', 25, 'mail.server.it', USERNAME, PASSWORD, :login) do |smtp|
    smtp.send_message mailtext, "from@mail.com", "to@mail.it"
  end
end

Ecco.. in pratica inviamo una mail in multipart divisa in tre parti: una per dire che e` multipart, una per il body della mail (formato HTML nell’esempio) e l’ultima per l’allegato.


text 6 Jan Inline RJS on controller

Beh, renderizziamo un rjs direttamente dal controller… easy:

def index
  @polli = Polli.all
  render(:update) { |page| page.alert('Yeah') }
end