Sha256: c73c8deed577012f20879032df2eab7e8b54dde4e32868be1f77a2a855d89cc5

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

# coding: UTF-8
module Raccoon
  class Controller

    attr_reader :routes

    def initialize &proc
      instance_eval &proc
    end

    def add router = nil, &block
      @routes ||= []
      @routes << router if router
      @routes << Router.new(&block) if block_given?
    end

    [:get, :post, :put, :delete].each do |name|
      define_method name do |args, &proc|
        add do
          method name
          name          args[:name]          if args[:name]
          controller    args[:controller]    if args[:controller]
          action        args[:action]        if args[:action]
          params        args[:params]        if args[:params]
          response_code args[:response_code] if args[:response_code]
          before        args[:before]        if args[:before]
          after         args[:after]         if args[:after]
        end
      end
    end

    class << self
      def case &block
        new(&block).routes.each do |router|
          describe router.controller_class, type: :controller do
            render_views if ::Raccoon.config.render_views
        
            before do
              router.before.call
            end
        
            context "when requests #{router.method.to_s.upcase} #{router.controller}##{router.action}" do
              let(:params) { router.params.call }

              # Check HTTP Response Code
              it "should be #{Rack::Utils::HTTP_STATUS_CODES[router.response_code]}" do
                send(router.method, router.action, params)
                expect(response.response_code).to eq(router.response_code)
              end
            end

            after do
              router.after.call
            end
        
          end
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
raccoon-0.0.1 lib/raccoon/controller.rb