Integrating Flex And Rails With Ruby Amf

50 %
50 %
Information about Integrating Flex And Rails With Ruby Amf

Published on May 6, 2009

Author: railsconf

Source: slideshare.net

Flex and Rails Tony Hillerson Software Architect with RubyAMF EffectiveUI RailsConf

Code and Slides: http://github.com/thillerson/preso_code/

Sample du Jour: Stuff

Why Flex and Rails? They Make The Great Tag Team!

[SKIP INTRO]

What are the Options?

XML

XML is the Default Option

# 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 => quot;newquot; } format.xml { render :xml => @context.errors, :status => :unprocessable_entity } end end end

JSON Javascript Object Notation

JSON is in Rails Too format.json { render :json => @context.to_json } http://as3corlib.googlecode.com var obj:Object = JSON.decode(jsonString)

AMF Action Message Format

AMF is the Good Stuff Buck Thinks it’s Great!

RubyAMF http://rubyamf.org http://rubyamf.googlecode.com

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 quot;application/x-amfquot;, :amf • config/routes.rb modified: ActionController::Routing::Routes.draw do |map| map.rubyamf_gateway 'rubyamf_gateway', :controller => 'rubyamf', :action => 'gateway' end

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 => [quot;contextquot;], :attributes => [quot;idquot;, quot;labelquot;, quot;context_idquot;, quot;completed_atquot;, quot;created_atquot;, quot;updated_atquot;]) end end

Con guring RubyAMF ClassMappings.translate_case = false public var created_at:Date; ClassMappings.translate_case = true public var createdAt:Date; // created_at in rails

Con guring RubyAMF ClassMappings.assume_types = true class Context < ActiveRecord::Base matches [RemoteClass(alias=quot;Contextquot;)] public class Context { for free

Con guring RubyAMF ClassMappings.assume_types = false class Context < ActiveRecord::Base matches [RemoteClass(alias=quot;Contextquot;)] public class Context { with registration ClassMappings.register( :actionscript => 'Context', :ruby => 'Context', :type => 'active_record', :attributes => [quot;idquot;, ...])

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] );

Connecting to Rails via RubyAMF <mx:RemoteObject id=quot;contextsServicequot; destination=quot;rubyamfquot; endpoint=quot;http://localhost:3000/rubyamf_gateway/quot; source=quot;ContextsControllerquot; showBusyCursor=quot;truequot; /> public function save(context:Context):void { var call:AsyncToken = contextsService.save({context:context}); call.addResponder(responder); }

Development Work ow

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

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(quot;nquot;)) end end end end

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

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

4. Con gure ClassMappings.register( :actionscript => 'Context', :ruby => 'Context', :type => 'active_record', #:associations => [quot;tasksquot;], :attributes => [quot;idquot;, quot;labelquot;, quot;created_atquot;, quot;updated_atquot;])

5. Wire <mx:RemoteObject id=quot;contextsServicequot; destination=quot;rubyamfquot; endpoint=quot;http://localhost:3000/rubyamf_gateway/quot; source=quot;ContextsControllerquot; showBusyCursor=quot;truequot; /> <mx:RemoteObject id=quot;tasksServicequot; destination=quot;rubyamfquot; endpoint=quot;http://localhost:3000/rubyamf_gateway/quot; source=quot;TasksControllerquot; showBusyCursor=quot;truequot; />

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); }

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; ... }

X. Rinse and Repeat

The Future

Gem Plugin + Gem C Extension

Gem Plugin C Extension

An Impassioned Plea

Resources: http://rubyamf.googlecode.com http://groups.google.com/group/rubyamf http://github.com/thillerson/rubyamf

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

Add a comment

Related pages

Integrating Flex and Rails with RubyAMF - RailsConf ...

Integrating Flex and Rails with RubyAMF - RailsConf. Toggle navigation MENU WHP. ... We’ll be expounding on some topics covered in “Flex on Rails: ...
Read more

Integrating Flex and Rails with RubyAMF: RailsConf 2009 ...

Integrating Flex and Rails with RubyAMF. Tony Hillerson (Tack Mobile) ... On any given day he may be working with Flex, Java, Rails, Maven, Ant, Ruby, ...
Read more

Integrating Flex and Rails with RubyAMF - Documents

Search; Home; Documents; Integrating Flex and Rails with RubyAMF
Read more

Integrating Flex and Rails with RubyAMF | SpeakerRate

Integrating Flex and Rails with RubyAMF A talk by Tony Hillerson at RailsConf 2009. About the Talk
Read more

Our thoughts as blogs – Flex and Rails : Send – Receive ...

Flex and Rails : Send – Receive JSON/XML/AMF ... from Flex and Rails using XML or JSON or AMF ... rails apps using th below command. ruby script ...
Read more

ruby on rails - AS3: How to send an array of objects in a ...

I need to send an array of objects from Flex to a Ruby Web ... implementation of rails AMF ... net/railsconf/integrating-flex-and-rails-with-ruby-amf.
Read more

Ruby amf with rails 3 - Google Groups

Ruby amf with rails 3 Showing 1-10 of 10 messages. ... Nate: 10/12/10 4:48 PM: I have a controller named facebook but when I make my call from flex
Read more

ruby - Rails and Flex - Stack Overflow

Rails and Flex. up vote 3 down vote ... Flex or Ruby On Rails for a new website? ... issue integrating flex with ruby on rails.
Read more

Adobe Flex mit Ruby on Rails - webmasters-akademie.de

Ruby AMF Jetzt anmelden. Lernziele. ... Sie erfahren, wie Sie mit Hilfe von REST/XML und AMF Daten zwischen Rails und Flex-Anwendungen austauschen, ...
Read more