Usando SWF no Rails

. domingo, 23 de março de 2008
0 comentários


Caso queira colocar um arquivo SWF na view de seu projeto rails, irá se deparar com um pequeno dilema: Qual tag devo usar?
Isto se deve ao fato no Mozilla(firefox, etc) a tag correta é <embed> já no Internet Explorer é <object>.
Para resolver este entre outros existe uma biblioteca javascript chamada de SWFObject

Vamos colocar nos trilhos

Nivel de Dificuldade: Babinha
Utilidade: Inserção de banners, videos e uma infinidade de recursos que um SWF pode oferecer.

Primeiro baixe o SWFObject ( http://code.google.com/p/swfobject/ )
descompacte o conteúdo do arquivo na pasta /public/javascript do seu projeto

Inclua a chamada ao arquivo js no layout
<%= javascript_include_tag 'swfobject' %>

Crie uma pasta chamada swf em /public e adicione os seus arquivos swf.

Agora para a chamada do swf na view vamos criar um helper, adicione no arquivo /app/helper/application_helper.rb o seguinte código:



1

2 module ApplicationHelper

3 # swfobject Helper

4 def swf_object(swf, id, width, height, flash_version, background_color)

5

6 output = "<script type=’text/javascript’>"

7 output << "var so = new SWFObject(’#{swf}‘, ‘#{id}‘, ‘#{width}‘, ‘#{height}‘,

8 #{flash_version}‘, ‘#{background_color}‘);"

9 output << "so.write(’#{id}‘);"

10 output << "</script>"

11 end

12 end



Para utilizar é simples, na view chame o método swf_object do helper passando os parâmetros apropriados:




1 <%= swf_object("/swfs/apresentacao.swf", "flash_id", "550", "400"
, "9", "#000000") %>



Vamos incrementar o nosso helper um pouco mais, adicionando uma mensagem dizendo qual a versão do flash necessária. Podemos também passar parâmetros via swfobject.



; 1

2 module ApplicationHelper

3 # swfobject Helper

4 def swf_object(swf, id, width, height, flash_version,

5 background_color, params = {}, vars = {}, create_div = false)

6

7 create_div ? output = "<div id=’#{id}‘>Este site requer

8 <a href=’http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW’

9 target=’_blank’>Flash player</a> #{flash_version} or higher.</div><script type=’text/javascript’>":

10 output = "<script type=’text/javascript’>"

11

12 output << "var so = new SWFObject(’#{swf}‘, ‘#{id}‘, ‘#{width}‘, ‘#{height}‘,

13 #{flash_version}‘, ‘#{background_color}‘);"

14

15 params.each {|key, value| output << "so.addParam(’#{key}‘, ‘#{value}‘);"}

16 vars.each {|key, value| output << "so.addVariable(’#{key}‘, ‘#{value}‘);"}

17 output << "so.write(’#{id}‘);"

18 output << "</script>"

19 end

20 end


Chamando na View:


1 <%= swf_object("/swfs/apresentacao.swf", "flash_id", "550", "400", "9", "#000000",

2 {:quality => "high"},

3 {:var_nome => "Henry", :var_sobrenome => "Hamon"}) %>



Dentro do swf as variáveis alimentadas estariam estariam na raiz, '_level0.var_nome' para o AS2 e 'Application.application.parameters.var_nome' no Flex.

Referências:
http://blog.eleventyten.com/2007/06/08/embedding-swf-content-with-ror/
http://www.nomedojogo.com/2008/01/24/screencast-5-dry-evitando-repeticoes-no-html/

Gostaria de agradeçer ao Julio, Jair, Millnitz, Felipe Santiago e a Nelci pelo apoio e ao Paulo Cassiano pelo conselho e apoio também.
Até a próxima semana!!!

. segunda-feira, 17 de março de 2008
3 comentários



No RailsPodCast.br #8 foi lançado um desafio para escrever um artigo para poder ganhar a promoção da PeepCode, bom como eu sou mais ligeiro que uma lesma paraplégica, até decidir sobre o que escrever a promoção já tinha passado.

Num projeto que estava desenvolvendo para um cliente surgiu algo bem peculiar, pois tive que conectar a minha aplicação em 2 banco de dados distintos, logo imaginei que teria que enfrentar um "bicho de sete cabeças" mas depois de umas buscas na api do rails vi que fazer isto é muito simples, bom chega de bla bla blá e vamos ao que interessa.

Nível de Dificuldade: Babinha, Mamão com Açúcar
Utilidade: SDS (Só Deus Sabe)

A primeira coisa e a mais óbvia a ser feita é a conexão no database.yml

primario:
adapter: mysql
database: aplicacao
username: root
password: xyz
host: servidorprincipal

secundario:
adapter: mysql
database: dbauxiliar
username: admin
password: yyz
host: servidorsecundario

Agora o complicado, na classe ActiveRecord existe um método chamado de establish_connection que como o próprio nome diz 'estabelece uma conexão'

class Client < ActiveRecord::Base
establish_connection "primario"
end

class User < ActiveRecord::Base
establish_connection "secundario"
end

isto funcionará em todos os enviroments, claro desde que seja especificado no database.yml

primario_development:
# blablabla
primario_test:
# blablabla
primario_production:
# blablabla

secundario_development:
# blablabla
secundario_test:
# blablabla
secundario_production:
# blablabla

agora use a constante RAILS_ENV no método establish_connection

class Client < ActiveRecord::Base
establish_connection "primario_#{RAILS_ENV}"
end

class User < ActiveRecord::Base
establish_connection "secundario_#{RAILS_ENV}"
end

Bom é isto... levei mais tempo pensando no que escrever do que escrevendo em si, mas foi o primeiro artigo, não chega nem aos pés dos escritos pelo Akita ou os do Carlos Eduardo...

Comentem, estou preparado para "caneladas" e "chutes no saco" hehehehe...

Abraços