Sha256: 0bab28c41ed11d6bccbd249c021b29b4a93087dfac571654a758ed2cdfbc8c41

Contents?: true

Size: 1.41 KB

Versions: 7

Compression:

Stored size: 1.41 KB

Contents

module ClassAction
  module RSpec

    # Adds support for speccing Class Actions. Sets up the example as
    module ClassActionExampleGroup
      def self.included(target)
        target.send :include, ::RSpec::Rails::ControllerExampleGroup
        target.extend ClassMethods
        target.send :include, InstanceMethods

        target.class_eval do
          # I don't know why ControllerExampleGroup overrides this.
          metadata[:type] = :class_action

          subject { action }
          before do
            # This is required for response testing, as we won't use
            # ActionController::TestCase#process
            @controller.instance_variable_set '@_response', @response
          end
        end
      end

      module ClassMethods
        def action_class
          described_class
        end
        def controller_class
          # Controller::Action => Controller
          described_class.name.sub(/(.*)::.*$/, '\1').constantize
        end
      end

      module InstanceMethods
        def action
          @action ||= self.class.action_class.new(@controller)
        end

        def assigns(*)
          action.send :copy_assigns_to_controller
          super
        end
      end

      def assigns
        @action.send :copy_assigns_to_controller
        super
      end

    end

  end
end

RSpec.configure do |c|
  c.include ClassAction::RSpec::ClassActionExampleGroup, type: :class_action
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
class-action-1.3.2 lib/class_action/rspec/class_action_example_group.rb
class-action-1.3.1 lib/class_action/rspec/class_action_example_group.rb
class-action-1.3.0 lib/class_action/rspec/class_action_example_group.rb
class-action-1.2.2 lib/class_action/rspec/class_action_example_group.rb
class-action-1.2.1 lib/class_action/rspec/class_action_example_group.rb
class-action-1.2.0 lib/class_action/rspec/class_action_example_group.rb
class-action-1.1.0 lib/class_action/rspec/class_action_example_group.rb