module ShadowController

Constants

VERSION

Public Instance Methods

shadow_controller() click to toggle source
# File lib/shadow_controller.rb, line 4
def shadow_controller
  controller = self.described_class
  raise_misuse if misused? controller
  mock controller
  draw_routes controller
end

Private Instance Methods

actions(controller) click to toggle source
# File lib/shadow_controller.rb, line 13
def actions(controller)
  controller.action_methods
end
draw_routes(controller) click to toggle source
# File lib/shadow_controller.rb, line 29
def draw_routes(controller)
  before do
    routes.draw do
      eval dynamic_routes(controller).join(" ")
    end
  end
end
dynamic_routes(controller) click to toggle source
# File lib/shadow_controller.rb, line 43
def dynamic_routes(controller)
  actions(controller).map do |action|
    %Q[
      get "/anonymous/#{action}"
      post "/anonymous/#{action}"
      patch "/anonymous/#{action}"
      put "/anonymous/#{action}"
      delete "/anonymous/#{action}"
    ]
  end
end
first_action(controller) click to toggle source
# File lib/shadow_controller.rb, line 25
def first_action(controller)
  actions(controller).first
end
misused?(controller) click to toggle source
# File lib/shadow_controller.rb, line 21
def misused?(controller)
  controller != ApplicationController
end
mock(controller) click to toggle source
# File lib/shadow_controller.rb, line 37
def mock(controller)
  method = first_action(controller).to_sym
  controller_path = controller.instance_method(method).source_location[0]
  controller { eval File.read(controller_path) }
end
raise_misuse() click to toggle source
# File lib/shadow_controller.rb, line 17
def raise_misuse
  raise "ControllerMime is currently limited to use with ApplicationController only"
end