= peto peto is a RPC code generator. Defining types and procedures on RPC from contract files. Contract file is simple YAML format. name: foo types: human: [name:string, age:integer] procedures: find_human: args: [id:integer] returns: [found:human] errors: [human not found, invalid id] peto generates some codes. * human.rb(or human.as) : human's structure class * foo.rb(or foo.as) : procedure class. this has find_human, find_human_response, find_human_error_human_not_found, find_human_error_invalid_id Use Foo class methods to create hash and send it as JSON string for RPC. peto has a Rails helper module. Look examples/rails_app and use it, if you want to create Rails RPC server. == Usage installing: % gem install peto contract file (foo.yml): name: foo types: animal: [name:string] user: [name:string, age:integer, animals:array:animal] procedures: set_user: args: [user:user] invoke command: % peto foo.yml rb -o generated/ use foo.rb: $: << "generated/" require "foo" require "animal" require "user" cat = Peto::Animal.new(:name => "cat") dog = Peto::Animal.new(:name => "dog") user = Peto::User.new(:name => "alice", :age => 23, :animals=>[cat, dog]) # generating procedure hash Peto::Foo.set_user(user) == in Rails === setup create your new application % rails new myapp add autoload_paths to config/application.rb config.autoload_paths += %W(#{config.root}/generated) add including to app/controller/application_controller.rb require "peto/rails/rails_controller_helper" class ApplicationController < ActionController::Base include Peto::RailsControllerHelper # ... end add to test/test_helper.rb require "peto/rails/rails_controller_test_helper" class ActionController::TestCase include Peto::RailsControllerTestHelper end add match to config/routes.rb match ':controller(/:action)' === using % # on your rails home % create contract/foo.yml % mkdir generated % peto contract/foo.yml -o generated/ add subaction to app/controller/foo_controller.rb # this is subaction def set_user(args) respond(123, "foo bar baz") end subaction is an action method in imitation of rails controller. this has args to use likes params. post procedure name and parameters to application, be called subaction. in test/functional/foo_controller_test.rb test "set_user" do peto_post("set_user", Peto::User.new(:name=>"alice")) assert_response :success assert_peto_response("a"=>123, "b"=>"foo bar baz") end run server % rails server post next JSON to http://server/foo/ { "procedure" : "set_user", "args" : { "user" : { "name" : "alice" } } } this JSON string is created by ActiveSupport::JSON.encode(Peto::Foo.set_user(user)) == Note on Patches/Pull Requests * Fork the project. * Make your feature addition or bug fix. * Add tests for it. This is important so I don't break it in a future version unintentionally. * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) * Send me a pull request. Bonus points for topic branches. == Copyright Copyright (c) 2010 Toshiyuki Hirooka. See LICENSE for details.