Sha256: c180363b14f87f632cf31bbe84db2d4fac0f60010aea43bb8fd5676cd89b2173

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

require "active_support/inflector"
require "pp"

module Peto
  module RailsControllerHelper
    def contract
      self.class.to_s.sub("Controller", "")
    end

    def peto_class
      "Peto::#{contract.to_s.camelize}".constantize
    end

    def parse_caller(at)
      if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
        {:file => $1, :line => $2.to_i, :method => $3.to_sym}
      end
    end


    # respond

    def procedure_name
      parse_caller(caller[(0..caller.length).zip(caller).find {|index,at|
        parse_caller(at)[:method] == :call_subaction
      }.first - 1])[:method]
    end

    def call_procedure_response(response_type, *args)
      peto_class.send(:"#{procedure_name}_#{response_type}", *args)
    end

    def respond(*args)
      render(:json => call_procedure_response(:response, *args).to_json)
    end

    def error(error_name, *messages)
      call_procedure_response(:"error_#{error_name}", messages.join(","))
    end


    # subaction

    def index
      call_subaction(params[:procedure], params[:args])
    end

    def valid_args?(procedure, args)
      peto_class.send(:"#{procedure}_valid?", args)
    end

    def call_subaction(procedure, args)
      valid_args?(procedure, args)
      send(procedure, args)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
peto-0.2.3 lib/peto/rails/rails_controller_helper.rb
peto-0.2.2 lib/peto/rails/rails_controller_helper.rb