Rhomobile – Ruby no Mobile
Quem sou?                  Rodrigo Martins            rodrigo@rrmartins.com                     @rr_martins               ...
Quem sou?   Antes            → PHP            → Java            → Clipper            → Zim                          Rodrig...
Quem sou?   Antes        Hoje, e Feliz!            → PHP        → Ruby            → Java       → Python            → Clipp...
Qual o futuro?
O que forma o Rhomobile?
Estrutura
Rhodes   O que é?    É um framework open-source, permite aos    desenvolvedores criar aplicações nativas para telefones  ...
Rhodes   Generando aplicação:$ rhodes app ror http://localhost:3000/applicationrhodes app <name_application> <path_server...
Rhodes   Generando aplicação:$ rhodes app ror http://localhost:3000/applicationrhodes app <name_application> <path_server...
Rhodes   index.erb.htmlEste é o arquivo de início, desta forma  <nome_aplicacao>/app/. A partir de agora todo o  código é...
Running the Application Rhodes   Executando:$ cd applicatonTest$ rake run:iphone   Rodando para outros Devises:$ rake ru...
rake tasks$ rake -T
Rhodes Generando Models$ cd application$ rhodes model pessoa nome, idade, sobrenome, sexo, cpfGenerating with model genera...
Views Rhodes edition   Exemplo rapido (app/index.erb.html):<div id="pageTitle"><h1>ApplicationTest</h1></div><div id="too...
Views Rhodes edition   Exemplo rapido (app/Pessoa/index.erb.html):<div data-role="page"> <div data-role="header" data-pos...
Views Rhodes edition   Exemplo rapido (app/Pessoa/index.erb.html):                                              He came o...
Views Rhodes edition   Exemplo rapido (app/Pessoa/index.erb.html):                                              He came o...
RhoSync   O que é?Um framework de sincronização é uma estrutura composta por um componente de cliente no dispositivo e um...
Instalar dependencias RhoSync$ sudo gem install rhosync$ wget http://redis.googlecode.com/files/redis-  2.2.7.tar.gz$ tar ...
Instalar RhoSync$ rhosync app applicationTest-server$ cd applicationTest-server/   If you are running first on the Mac or...
Rodando a aplicação RhoSync$ rake redis:start$ rake rhosync:startIf all went well you should see:[12:30:15 PM 2011-07-22] ...
Definindo Adapters RhoSyncLigar a um serviço de back-end com  RhoSync requer que você escreva uma  pequena quantidade de c...
Definindo Adapters RhoSync$ cd /applicationTest$ rhosync source pessoa---Generating with source generator:  [ADDED] source...
pessoa.rbclass Pessoa < SourceAdapter                                  def sync def initialize(source)                    ...
pessoa.rbdef delete(object_id) # TODO: write some code here if applicable # be sure to have a hash key and value for "obje...
settings/settings.yml   The generator will modify this file:#Sources:sources:Pessoa:    :poll_interval: 300
Testando synchronization$ rake rhosync:start$ rake rhosync:stop$ rake rhosync:restart
Sincronizando o modelclass Pessoainclude Rhom::PropertyBagenable :syncend
Creando Objetos com RhoSyncdef create(create_hash, blob=nil)    result = RestClient.post(@base, :pessoa => create_hash)   ...
Atualizar o adaptador de fonte$ rake rhosync:restart O objeto será criado imediatamente no cliente e enviado para o servid...
Autenticação   O arquivo application.rb, editando o metodo de authenticate:def authenticate(username, password, session)#...
Sourcehttp://docs.rhomobile.com/http://rhomobile.com/http://groups.google.com/group/rhomobile
Doubt? :D
Contact            Rodrigo Martins     rodrigo@rrmartins.com                @rr_martins          www.rrmartins.com
Upcoming SlideShare
Loading in …5
×

Desenvolvimento Mobile com Ruby

2,576 views

Published on

Palestra de Desenvolvimento Mobile com Ruby, no evento Rock And Rails, www.rockandrails.com.br

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,576
On SlideShare
0
From Embeds
0
Number of Embeds
246
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Desenvolvimento Mobile com Ruby

  1. 1. Rhomobile – Ruby no Mobile
  2. 2. Quem sou? Rodrigo Martins rodrigo@rrmartins.com @rr_martins www.rrmartins.com
  3. 3. Quem sou? Antes → PHP → Java → Clipper → Zim Rodrigo Martins rodrigo@rrmartins.com @rr_martins www.rrmartins.com
  4. 4. Quem sou? Antes Hoje, e Feliz! → PHP → Ruby → Java → Python → Clipper → Zim Rodrigo Martins rodrigo@rrmartins.com @rr_martins www.rrmartins.com
  5. 5. Qual o futuro?
  6. 6. O que forma o Rhomobile?
  7. 7. Estrutura
  8. 8. Rhodes O que é? É um framework open-source, permite aos desenvolvedores criar aplicações nativas para telefones móveis com a portabilidade de tecnologias web tais como XHTML, CSS, JavaScript e do poder do Ruby Instalação: $ gem install rhodes $ rhodes-setup
  9. 9. Rhodes Generando aplicação:$ rhodes app ror http://localhost:3000/applicationrhodes app <name_application> <path_server> rhoconfig.txt ->syncserver = http://localhost:3000/application
  10. 10. Rhodes Generando aplicação:$ rhodes app ror http://localhost:3000/applicationrhodes app <name_application> <path_server> rhoconfig.txt ->syncserver = http://localhost:3000/application
  11. 11. Rhodes index.erb.htmlEste é o arquivo de início, desta forma <nome_aplicacao>/app/. A partir de agora todo o código é um pouco semelhante a escrever um RubyOnRails aplicação.
  12. 12. Running the Application Rhodes Executando:$ cd applicatonTest$ rake run:iphone Rodando para outros Devises:$ rake run:iphone$ rake run:android$ rake run:bb
  13. 13. rake tasks$ rake -T
  14. 14. Rhodes Generando Models$ cd application$ rhodes model pessoa nome, idade, sobrenome, sexo, cpfGenerating with model generator: [ADDED] app/Pessoa/index.erb [ADDED] app/Pessoa/edit.erb [ADDED] app/Pessoa/new.erb [ADDED] app/Pessoa/show.erb [ADDED] app/Pessoa/index.bb.erb [ADDED] app/Pessoa/edit.bb.erb [ADDED] app/Pessoa/new.bb.erb [ADDED] app/Pessoa/show.bb.erb [ADDED] app/Pessoa/pessoa_controller.rb [ADDED] app/Pessoa/pessoa.rb [ADDED] app/test/pessoa_spec.rb
  15. 15. Views Rhodes edition Exemplo rapido (app/index.erb.html):<div id="pageTitle"><h1>ApplicationTest</h1></div><div id="toolbar"><div id="leftItem" class="blueButton"> <%= link_to "Sync", :controller => :Settings, :action => :do_sync %></div><% if SyncEngine::logged_in > 0 %> <div id="rightItem" class="regularButton"> <%= link_to "Logout", :controller => :Settings, :action => :logout %> </div><% else %> <div id="rightItem" class="regularButton"> <%= link_to "Login", :controller => :Settings, :action => :login %> </div><% end %></div>
  16. 16. Views Rhodes edition Exemplo rapido (app/Pessoa/index.erb.html):<div data-role="page"> <div data-role="header" data-position="inline"> <h1>Pessoas</h1> <a href="<%= Rho::RhoConfig.start_path %>" class="ui-btn-left" data-icon="home" data-direction="reverse">Home</a> <a href="<%= url_for :action => :new %>" class="ui-btn-right" data- icon="plus">New</a> </div> <div data-role="content"> <ul data-role="listview"> <% @pessoas.each do |pessoa| %> <li> <a href="<%= url_for :action => :show, :id => pessoa.object %>"> <%= pessoa.nome %> </a> </li> <% end %> </ul> </div></div>
  17. 17. Views Rhodes edition Exemplo rapido (app/Pessoa/index.erb.html): He came out of where?<div data-role="page"> <div data-role="header" data-position="inline"> <h1>Pessoas</h1> <a href="<%= Rho::RhoConfig.start_path %>" class="ui-btn-left" data-icon="home" data-direction="reverse">Home</a> <a href="<%= url_for :action => :new %>" class="ui-btn-right" data- icon="plus">New</a> </div> <div data-role="content"> <ul data-role="listview"> <% @pessoas.each do |pessoa| %> <li> <a href="<%= url_for :action => :show, :id => pessoa.object %>"> <%= pessoa.nome %> </a> </li> <% end %> </ul> </div></div>
  18. 18. Views Rhodes edition Exemplo rapido (app/Pessoa/index.erb.html): He came out of where?<div data-role="page"> <div data-role="header" data-position="inline"> <h1>Pessoas</h1> <a href="<%= Rho::RhoConfig.start_path %>" class="ui-btn-left" data-icon="home" data-direction="reverse">Home</a> <a href="<%= url_for :action => :new %>" class="ui-btn-right" data- icon="plus">New</a> </div> <div data-role="content"> <ul data-role="listview"> <% @pessoas.each do |pessoa| %> <li> <a href="<%= url_for :action => :show, :id => pessoa.object %>"> <%= pessoa.nome %> </a> </li> start_path = /app # rhoconfig.txt <% end %> </ul> </div></div>
  19. 19. RhoSync O que é?Um framework de sincronização é uma estrutura composta por um componente de cliente no dispositivo e um componente de servidor que roda em qualquer servidor que podem executar o Ruby.
  20. 20. Instalar dependencias RhoSync$ sudo gem install rhosync$ wget http://redis.googlecode.com/files/redis- 2.2.7.tar.gz$ tar xzf redis-2.2.7.tar.gz$ cd redis-2.2.7$ cd src; make$ make install$ cp ../redis.conf /usr/local/etc More: www.redis.io
  21. 21. Instalar RhoSync$ rhosync app applicationTest-server$ cd applicationTest-server/ If you are running first on the Mac or Linux, you must install dtach:$ sudo rake dtach:install
  22. 22. Rodando a aplicação RhoSync$ rake redis:start$ rake rhosync:startIf all went well you should see:[12:30:15 PM 2011-07-22] Rhosync Server v2.1.0 started...
  23. 23. Definindo Adapters RhoSyncLigar a um serviço de back-end com RhoSync requer que você escreva uma pequena quantidade de código Ruby para a consulta, criar, atualizar e excluir as operações de seu backend empresa particular.
  24. 24. Definindo Adapters RhoSync$ cd /applicationTest$ rhosync source pessoa---Generating with source generator: [ADDED] sources/pessoa.rb [ADDED] spec/sources/pessoa_spec.rb
  25. 25. pessoa.rbclass Pessoa < SourceAdapter def sync def initialize(source) # Manipulate @result before it is saved, or save it super(source) # yourself using the Rhosync::Store interface. end # By default, super is called below which simply saves @resultdef login super # TODO: Login to your data source here if necessary endend def create(create_hash,blob=nil) def query # TODO: Create a new record in your backend data # TODO: Query your backend data source and assign the sourcerecords # If your rhodes rhom object contains image/binary # to a nested hash structure called @result. For example: data # @result = { # (has the image_uri attribute), then a blob will be # "1"=>{"name"=>"Acme","industry"=>"Electronics"}, provided # "2"=>{"name"=>"Best", "industry"=>"Software"} raise "Please provide some code to create a single #} record in the backend data source using the raise SourceAdapterException.new("Please provide some create_hash"code to read records from the backend data source") End end def update(update_hash) raise "Please provide some code to update a single record in the backend data source using the update_hash" end
  26. 26. pessoa.rbdef delete(object_id) # TODO: write some code here if applicable # be sure to have a hash key and value for "object" # for now, well say that its OK to not have a delete operation # raise "Please provide some code to delete a single object in the backend#application using the hash values in name_value_list"enddef logoff # TODO: Logout from the data source if necessaryendend
  27. 27. settings/settings.yml The generator will modify this file:#Sources:sources:Pessoa: :poll_interval: 300
  28. 28. Testando synchronization$ rake rhosync:start$ rake rhosync:stop$ rake rhosync:restart
  29. 29. Sincronizando o modelclass Pessoainclude Rhom::PropertyBagenable :syncend
  30. 30. Creando Objetos com RhoSyncdef create(create_hash, blob=nil) result = RestClient.post(@base, :pessoa => create_hash) location = "#{result.headers[:location]}.json" new_record = RestClient.get(location).body JSON.parse(new_record)["pessoa"]["id"].to_send --------create_hash :{ “name” => “Lucas”, “idade” => “21”}
  31. 31. Atualizar o adaptador de fonte$ rake rhosync:restart O objeto será criado imediatamente no cliente e enviado para o servidor na próxima sincronização.
  32. 32. Autenticação O arquivo application.rb, editando o metodo de authenticate:def authenticate(username, password, session)# ... connect to backend using API and authenticate ...if success # save the data for later use in the source adapter Store.put_value("username:#{username}:token",username)endreturn successend
  33. 33. Sourcehttp://docs.rhomobile.com/http://rhomobile.com/http://groups.google.com/group/rhomobile
  34. 34. Doubt? :D
  35. 35. Contact Rodrigo Martins rodrigo@rrmartins.com @rr_martins www.rrmartins.com

×