Module: Frontyard::Controller

Defined in:
app/controllers/frontyard/controller.rb

Instance Method Summary collapse

Instance Method Details

#formObject

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_paramsObject



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