class AutoForme::Frameworks::Rails

  1. lib/autoforme/frameworks/rails.rb
Superclass: Framework

Methods

Public Class

  1. new
  2. setup

Public Instance

  1. setup_routes

Constants

ALL_SUPPORTED_ACTIONS_REGEXP = Regexp.union(AutoForme::Action::ALL_SUPPORTED_ACTIONS.map{|x| /#{Regexp.escape(x)}/})  

Public Class methods

new(*)

Define an autoforme method in the controller which handles the actions.

[show source]
   # File lib/autoforme/frameworks/rails.rb
47 def initialize(*)
48   super
49   framework = self
50   @controller.send(:define_method, :autoforme) do
51     if @autoforme_action = framework.action_for(Request.new(self))
52       if redirect = catch(:redirect){@autoforme_text = @autoforme_action.handle; nil}
53         redirect_to redirect
54       elsif @autoforme_action.output_type == 'csv'
55         response.headers['Content-Type'] = 'text/csv'
56         response.headers['Content-Disposition'] = "attachment; filename=#{@autoforme_action.output_filename}"
57         render :body=>@autoforme_text
58       elsif @autoforme_action.request.xhr?
59         render :html=>@autoforme_text.html_safe
60       else
61         render :inline=>"<%=raw @autoforme_text %>", :layout=>true
62       end
63     else
64       render :plain=>'Unhandled Request', :status=>404
65     end
66   end
67 end
setup(controller, opts, &block)

After setting up the framework, add a route for the framework to Rails, so that requests are correctly routed.

[show source]
   # File lib/autoforme/frameworks/rails.rb
40 def self.setup(controller, opts, &block)
41   f = super
42   f.setup_routes
43   f
44 end

Public Instance methods

setup_routes()

Add a route for the framework to Rails routing.

[show source]
   # File lib/autoforme/frameworks/rails.rb
72 def setup_routes
73   if prefix
74     pre = prefix.to_s[1..-1] + '/'
75   end
76   model_regexp = Regexp.union(models.keys.map{|m| Regexp.escape(m)})
77   controller = @controller.name.sub(/Controller\z/, '').underscore
78   ::Rails.application.routes.prepend do
79     match "#{pre}:autoforme_model/:autoforme_action(/:id)" , :controller=>controller, :action=>'autoforme', :via=>[:get, :post],
80       :constraints=>{:autoforme_model=>model_regexp, :autoforme_action=>ALL_SUPPORTED_ACTIONS_REGEXP}
81   end
82   ::Rails.application.reload_routes!
83 end