Flex With Rubyamf

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    6 Favorites

    Flex With Rubyamf - Presentation Transcript

    1. Flex and Rails Tony Hillerson Software Architect with RubyAMF EffectiveUI RailsConf
    2. Code and Slides: http://github.com/thillerson/preso_code/
    3. Sample du Jour: Stuff
    4. Why Flex and Rails? They Make The Great Tag Team!
    5. [SKIP INTRO]
    6. What are the Options?
    7. XML
    8. XML is the Default Option
    9. # POST /contexts # POST /contexts.xml def create @context = Context.new(params[:context]) respond_to do |format| if @context.save flash[:notice] = 'Context was successfully created.' format.html { redirect_to(@context) } format.xml { render :xml => @context, :status => :created, :location => @context } else format.html { render :action => \"new\" } format.xml { render :xml => @context.errors, :status => :unprocessable_entity } end end end
    10. JSON Javascript Object Notation
    11. JSON is in Rails Too format.json { render :json => @context.to_json } http://as3corlib.googlecode.com var obj:Object = JSON.decode(jsonString)
    12. AMF Action Message Format
    13. AMF is the Good Stuff Buck Thinks it’s Great!
    14. RubyAMF http://rubyamf.org http://rubyamf.googlecode.com
    15. Installing RubyAMF $ script/plugin install http://rubyamf.googlecode.com/svn/current/rubyamf • New File: app/controllers/rubyamf_controller.rb • New File: config/rubyamf_config.rb • config/initializers/mime_types.rb modified: Mime::Type.register \"application/x-amf\", :amf • config/routes.rb modified: ActionController::Routing::Routes.draw do |map| map.rubyamf_gateway 'rubyamf_gateway', :controller => 'rubyamf', :action => 'gateway' end
    16. Con guring RubyAMF module RubyAMF module Configuration ClassMappings.translate_case = true ClassMappings.assume_types = false ParameterMappings.scaffolding = true ClassMappings.register( :actionscript => 'Task', :ruby => 'Task', :type => 'active_record', #:associations => [\"context\"], :attributes => [\"id\", \"label\", \"context_id\", \"completed_at\", \"created_at\", \"updated_at\"]) end end
    17. Con guring RubyAMF ClassMappings.translate_case = false public var created_at:Date; ClassMappings.translate_case = true public var createdAt:Date; // created_at in rails
    18. Con guring RubyAMF ClassMappings.assume_types = true class Context < ActiveRecord::Base matches [RemoteClass(alias=\"Context\")] public class Context { for free
    19. Con guring RubyAMF ClassMappings.assume_types = false class Context < ActiveRecord::Base matches [RemoteClass(alias=\"Context\")] public class Context { with registration ClassMappings.register( :actionscript => 'Context', :ruby => 'Context', :type => 'active_record', :attributes => [\"id\", ...])
    20. Con guring RubyAMF ParameterMappings.scaffolding = false def save becomes save(context); @context = params[0] ParameterMappings.scaffolding = true def save save( @context = becomes {context:context} params[:context] );
    21. Connecting to Rails via RubyAMF <mx:RemoteObject id=\"contextsService\" destination=\"rubyamf\" endpoint=\"http://localhost:3000/rubyamf_gateway/\" source=\"ContextsController\" showBusyCursor=\"true\" /> public function save(context:Context):void { var call:AsyncToken = contextsService.save({context:context}); call.addResponder(responder); }
    22. Development Work ow
    23. 1. Generate and Migrate $ script/generate rubyamf_scaffold context label:string class CreateContexts < ActiveRecord::Migration def self.up create_table :contexts do |t| t.string :label t.timestamps end end def self.down drop_table :contexts end end $ rake db:migrate
    24. def load_all @contexts = Context.find :all respond_to do |format| format.amf { render :amf => @contexts } end end def save respond_to do |format| format.amf do if params[:context].save render :amf => params[:context] else render :amf => FaultObject.new(params[:context].errors.join(\"\\n\")) end end end end
    25. 2. Sample Data work: id: 1 label: Work home: id: 2 label: Home anarco_syndicalist_commune_biweekly_meetings: id: 3 label: Anarcho-syndicalist Commune Bi-weekly Meetings
    26. 3. Test class Context < ActiveRecord::Base validates_presence_of :label class ContextTest < ActiveSupport::TestCase def test_context_without_label_fails non_label_context = Context.new assert !(non_label_context.save) error_messages = non_label_context.errors.on(:label) assert !(error_messages.empty?) end
    27. 4. Con gure ClassMappings.register( :actionscript => 'Context', :ruby => 'Context', :type => 'active_record', #:associations => [\"tasks\"], :attributes => [\"id\", \"label\", \"created_at\", \"updated_at\"])
    28. 5. Wire <mx:RemoteObject id=\"contextsService\" destination=\"rubyamf\" endpoint=\"http://localhost:3000/rubyamf_gateway/\" source=\"ContextsController\" showBusyCursor=\"true\" /> <mx:RemoteObject id=\"tasksService\" destination=\"rubyamf\" endpoint=\"http://localhost:3000/rubyamf_gateway/\" source=\"TasksController\" showBusyCursor=\"true\" />
    29. 5. Wire public function loadAll():void { var call:AsyncToken = service.load_all(); call.addResponder(responder); } public function save(context:Context):void { var call:AsyncToken = service.save({context:context}); call.addResponder(responder); } public function destroy(context:Context):void { var call:AsyncToken = service.destroy({id:context.id}); call.addResponder(responder); }
    30. 5. Wire public function execute(event:CairngormEvent):void { var evt:SaveContextEvent = event as SaveContextEvent; var delegate:ContextsDelegate = new ContextsDelegate(this); delegate.save(evt.context); } public function result(data:Object):void { var result:ResultEvent = data as ResultEvent; var context:Context = result.result as Context; ... }
    31. X. Rinse and Repeat
    32. The Future
    33. Gem Plugin + Gem C Extension
    34. Gem Plugin C Extension
    35. An Impassioned Plea
    36. Resources: http://rubyamf.googlecode.com http://groups.google.com/group/rubyamf http://github.com/thillerson/rubyamf
    37. Your Bob Father You Thanks! Tony Hillerson http://slideshare.com/thillerson http://github.com/thillerson http://thillerson.blogspot.com http://effectiveui.com Twitter: thillerson Brightkite: thillerson 39

    + Tony HillersonTony Hillerson, 10 months ago

    custom

    2759 views, 6 favs, 0 embeds more stats

    Slides for my RailsConf 09 talk on RubyAMF and Rail more

    More info about this presentation

    © All Rights Reserved

    • Total Views 2759
      • 2759 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 6
    • Downloads 54
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories