Class: ClassAction::RSpec::HaveClassActionMatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/class_action/rspec/have_class_action_matcher.rb

Instance Method Summary collapse

Constructor Details

#initialize(action_name) ⇒ HaveClassActionMatcher

Returns a new instance of HaveClassActionMatcher.



6
7
8
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 6

def initialize(action_name)
  @action_name = action_name.to_s
end

Instance Method Details

#descriptionObject



29
30
31
32
33
34
35
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 29

def description
  if @klass
    "have class action :#{@action_name} using class #{@klass}"
  else
    "have class action :#{@action_name}"
  end
end

#failure_messageObject



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 37

def failure_message
  case @reason
  when :unsupported
    "expected controller of class #{@controller.class} to have class action :#{@action_name}, but it does not support class actions"
  when :incorrect_class
    "expected action #{@controller.class}##{@action_name} to use class #{@klass}, but it used #{@found_class}"
  when :not_a_class_action
    "expected action #{@controller.class}##{@action_name} to be a class action"
  else
    "expected controller of class #{@controller.class} to have class action :#{@action_name}"
  end
end

#failure_message_when_negatedObject



50
51
52
53
54
55
56
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 50

def failure_message_when_negated
  if @klass
    "expected #{@controller.class}##{@action_name} not to be a class action using class #{@klass}"
  else
    "expected #{@controller.class}##{@action_name} not to be a class action"
  end
end

#matches?(controller) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 15

def matches?(controller)
  @controller = controller
  @reason = :unsupported and return false unless controller.respond_to?(:_class_action, true)
  @reason = :not_an_action and return false unless controller.respond_to?(@action_name)
  @reason = :not_a_class_action and return false unless controller.respond_to?(:"_#{@action_name}_action_class", true)

  if @klass
    @found_class = controller.send(:"_#{@action_name}_action_class").class
    @reason = :incorrect_class and return false if @found_class != @klass
  end

  true
end

#using_class(klass) ⇒ Object



10
11
12
13
# File 'lib/class_action/rspec/have_class_action_matcher.rb', line 10

def using_class(klass)
  @klass = klass
  self
end