module Swamp::Controller

Public Class Methods

included(base) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 5
def self.included(base)
  base.extend ClassMethods
end

Public Instance Methods

action!(klass, **kwargs) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 9
def action!(klass, **kwargs)
  result = klass.new.call(params.to_unsafe_h.merge(request: request, **kwargs))

  setup_exposures!(klass, result)

  if result.render?
    render_result(result, klass)
  elsif result.redirect?
    redirect_result(result, klass)
  end
end

Private Instance Methods

redirect_result(result, klass) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 28
def redirect_result(result, klass)
  setup_flash(result, klass)
  redirect_to result.redirection_path, result.redirection_options
end
render_result(result, klass) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 23
def render_result(result, klass)
  setup_flash_now(result, klass)
  render result.template
end
setup_exposures!(klass, result) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 33
def setup_exposures!(klass, result)
  klass.exposures.each do |key, value|
    instance_variable_set(value, result.exposures[key])
  end
end
setup_flash(result, klass) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 47
def setup_flash(result, klass)
  return unless klass.exposures.key?(:flash)

  result.flash.each do |type, message|
    flash[type] = message
  end
end
setup_flash_now(result, klass) click to toggle source
# File lib/swamp/rails_actions/controller.rb, line 39
def setup_flash_now(result, klass)
  return unless klass.exposures.key?(:flash)

  result.flash.each do |type, message|
    flash.now[type] = message
  end
end