Class: TagAction

Inherits:
ActionFilter show all
Defined in:
lib/mspec/runner/actions/tag.rb

Overview

TagAction - Write tagged spec description string to a tag file associated with each spec file.

The action is triggered by specs whose descriptions match the filter created with ‘tags’ and/or ‘desc’

The action fires in the :after event, after the spec had been run. The action fires if the outcome of running the spec matches ‘outcome’.

The arguments are:

action:  :add, :del
outcome: :pass, :fail, :all
tag:     the tag to create/delete
comment: the comment to create
tags:    zero or more tags to get matching
         spec description strings from
desc:    zero or more strings to match the
         spec description strings

Instance Method Summary collapse

Methods inherited from ActionFilter

#load

Constructor Details

#initialize(action, outcome, tag, comment, tags = nil, descs = nil) ⇒ TagAction

Returns a new instance of TagAction.



25
26
27
28
29
30
31
32
33
# File 'lib/mspec/runner/actions/tag.rb', line 25

def initialize(action, outcome, tag, comment, tags=nil, descs=nil)
  super tags, descs
  @action = action
  @outcome = outcome
  @tag = tag
  @comment = comment
  @report = []
  @exception = false
end

Instance Method Details

#===(string) ⇒ Object

Returns true if there are no tag or description filters. This means that a TagAction matches any example by default. Otherwise, returns true if either the tag or the description filter matches string.



39
40
41
42
# File 'lib/mspec/runner/actions/tag.rb', line 39

def ===(string)
  return true unless @sfilter or @tfilter
  @sfilter === string or @tfilter === string
end

#after(state) ⇒ Object

Callback for the MSpec :after event. Performs the tag action depending on the type of action and the outcome of evaluating the example. See TagAction for a description of the actions.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mspec/runner/actions/tag.rb', line 59

def after(state)
  if self === state.description and outcome?
    tag = SpecTag.new
    tag.tag = @tag
    tag.comment = @comment
    tag.description = state.description

    case @action
    when :add
      changed = MSpec.write_tag tag
    when :del
      changed = MSpec.delete_tag tag
    end

    @report << state.description if changed
  end
end

#before(state) ⇒ Object

Callback for the MSpec :before event. Resets the #exception? flag to false.



46
47
48
# File 'lib/mspec/runner/actions/tag.rb', line 46

def before(state)
  @exception = false
end

#exception(exception) ⇒ Object

Callback for the MSpec :exception event. Sets the #exception? flag to true.



52
53
54
# File 'lib/mspec/runner/actions/tag.rb', line 52

def exception(exception)
  @exception = true
end

#exception?Boolean

Returns true if an exception was raised while evaluating the current example.

Returns:

  • (Boolean)


88
89
90
# File 'lib/mspec/runner/actions/tag.rb', line 88

def exception?
  @exception
end

#finishObject

Callback for the MSpec :finish event. Prints the actions performed while evaluating the examples.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/mspec/runner/actions/tag.rb', line 99

def finish
  case @action
  when :add
    if @report.empty?
      print "\nTagAction: no specs were tagged with '#{@tag}'\n"
    else
      print "\nTagAction: specs tagged with '#{@tag}':\n\n"
      print report
    end
  when :del
    if @report.empty?
      print "\nTagAction: no tags '#{@tag}' were deleted\n"
    else
      print "\nTagAction: tag '#{@tag}' deleted for specs:\n\n"
      print report
    end
  end
end

#outcome?Boolean

Returns true if the result of evaluating the example matches the outcome registered for this tag action. See TagAction for a description of the outcome types.

Returns:

  • (Boolean)


80
81
82
83
84
# File 'lib/mspec/runner/actions/tag.rb', line 80

def outcome?
  @outcome == :all or
      (@outcome == :pass and not exception?) or
      (@outcome == :fail and exception?)
end

#registerObject



118
119
120
121
122
123
124
# File 'lib/mspec/runner/actions/tag.rb', line 118

def register
  super
  MSpec.register :before,    self
  MSpec.register :exception, self
  MSpec.register :after,     self
  MSpec.register :finish,    self
end

#unregisterObject



126
127
128
129
130
131
132
# File 'lib/mspec/runner/actions/tag.rb', line 126

def unregister
  super
  MSpec.unregister :before,    self
  MSpec.unregister :exception, self
  MSpec.unregister :after,     self
  MSpec.unregister :finish,    self
end