Sha256: d30929cce3028a2126ba11bc30cc0b521f9067c270d65d089a2b2bf3ae19ff73

Contents?: true

Size: 1.09 KB

Versions: 4

Compression:

Stored size: 1.09 KB

Contents

module Rasti
  module Web
    class Controller
      
      extend Forwardable

      def_delegators :request, :params, :session
      def_delegator :response, :redirect, :redirect_to

      attr_reader :request, :response, :render

      def initialize(request, response, render)
        @request = request
        @response = response
        @render = render
      end

      def execute(action_name)
        public_send action_name
      rescue => ex
        if respond_to? ex.class.name
          public_send ex.class.name, ex
        else
          raise ex
        end
      end

      class << self
        def action(action_name)
          raise "Undefined action '#{action_name}' in #{name}" unless instance_methods.include? action_name.to_sym
          
          Endpoint.new do |req, res, render|
            new(req, res, render).execute(action_name)
          end
        end

        alias_method :>>, :action

        def rescue_from(exception_class, &block)
          define_method exception_class.name do |ex|
            instance_exec ex, &block
          end
        end
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rasti-web-0.0.4 lib/rasti/web/controller.rb
rasti-web-0.0.3 lib/rasti/web/controller.rb
rasti-web-0.0.2 lib/rasti/web/controller.rb
rasti-web-0.0.1 lib/rasti/web/controller.rb