Module: Frontyard::Controller
- Defined in:
- app/controllers/frontyard/controller.rb
Instance Method Summary collapse
-
#form ⇒ Object
Get the form class for the current controller.
- #form_params ⇒ Object
- #render_view(action_name: self.action_name, **kwargs) ⇒ Object
Instance Method Details
#form ⇒ Object
Get the form class for the current controller
4 5 6 7 |
# File 'app/controllers/frontyard/controller.rb', line 4 def form namespace = controller_name.camelize ::Views.const_get("#{namespace}::Form") end |
#form_params ⇒ Object
9 10 11 |
# File 'app/controllers/frontyard/controller.rb', line 9 def form_params form.process_params(params) end |
#render_view(action_name: self.action_name, **kwargs) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'app/controllers/frontyard/controller.rb', line 13 def render_view(action_name: self.action_name, **kwargs) klass = "views/#{controller_name}/#{action_name}".classify.constantize # Get the initialize parameters from the view class init_params = klass.instance_method(:initialize).parameters # Symbolize all keys in kwargs symbolized_kwargs = kwargs.transform_keys(&:to_sym) # Start with kwargs, but fill in required params from controller if missing view_data = {} init_params.each do |type, name| sym_name = name.to_sym if symbolized_kwargs.key?(sym_name) # Parameter was provided in kwargs view_data[sym_name] = symbolized_kwargs[sym_name] elsif type == :keyreq && respond_to?(name, true) # Required parameter not provided, call controller method view_data[sym_name] = send(name) elsif type == :key && respond_to?(name, true) # Optional parameter not provided, call controller method view_data[sym_name] = send(name) end end view_data[:flash] = flash render_data = symbolized_kwargs.except(*view_data.keys) render klass.new(**view_data), **render_data end |