Sha256: 855c66f52326d8334f630dd5417b0ee69ba1b87b7c56f62f508adb3f7aac9026

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module Motorhead
  module Helpers
    module UrlHelper
      #FIXME there has to be a better way doing this...
      def method_missing(meth, *args, &block)
        if main_app.routes.url_helpers.instance_methods.include? meth
          main_app.send meth, *args, &block
        else
          super
        end
      end
    end
  end

  module Controller
    extend ActiveSupport::Concern

    included do
      helper Motorhead::Helpers::UrlHelper
    end
  end

  module AbstractController
    def send_action(method_name, *args)
      if self.is_a?(Motorhead::Controller)
        begin
          super
          @_motorhead_action_successfully_finished = true
          env['motorhead_view_assigns'] = view_assigns
        rescue => e
          (self.class.parent::Engine.on_error || Motorhead.config.on_error).call(e)
        end
      else
        if env.key? 'motorhead_render_result'
          headers.delete 'X-Cascade'
          ret = env.delete 'motorhead_render_result'
          self.response_body = ret
        else
          super
        end
      end
    end
  end

  module ActionController
    def process_action(*args)
      if self.is_a?(Motorhead::Controller)
        headers['X-Cascade'] = 'pass'
        if self.class.parent::Engine.active?(self)
          super
        end
      else
        super
      end
    end

    def view_assigns
      if env.key? 'motorhead_view_assigns'
        super.merge env['motorhead_view_assigns']
      else
        super
      end
    end

    def render_to_body(options = {})
      return if (headers['X-Cascade'] == 'pass') && !defined?(@_motorhead_action_successfully_finished)
      env['motorhead_render_result'] = super
    end
  end
end

AbstractController::Base.prepend Motorhead::AbstractController
ActionController::Base.prepend Motorhead::ActionController

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
motorhead-0.1.0 lib/motorhead/abstract_controller.rb