Class: SpecGuard

Inherits:
Object show all
Defined in:
lib/extensions/mspec/mspec/guards/guard.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ SpecGuard

Returns a new instance of SpecGuard.



57
58
59
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 57

def initialize(*args)
  @parameters = args
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



55
56
57
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 55

def name
  @name
end

Class Method Details

.clearObject



10
11
12
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 10

def self.clear
  @report = nil
end

.clear_guardsObject



30
31
32
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 30

def self.clear_guards
  @guards = []
end

.finishObject



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 14

def self.finish
  report.keys.sort.each do |key|
    desc = report[key]
    size = desc.size
    spec = size == 1 ? "spec" : "specs"
    print "\n\n#{size} #{spec} omitted by guard: #{key}:\n"
    desc.each { |description| print "\n", description; }
  end

  print "\n\n"
end

.guardsObject



26
27
28
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 26

def self.guards
  @guards ||= []
end

.reportObject



6
7
8
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 6

def self.report
  @report ||= Hash.new { |h,k| h[k] = [] }
end

.ruby_version(which = :minor) ⇒ Object

Returns a partial Ruby version string based on which. For example, if RUBY_VERSION = 8.2.3:

:major  => "8"
:minor  => "8.2"
:tiny   => "8.2.3"
:teeny  => "8.2.3"
:full   => "8.2.3"


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 42

def self.ruby_version(which = :minor)
  case which
  when :major
    n = 1
  when :minor
    n = 2
  when :tiny, :teeny, :full
    n = 3
  end

  RUBY_VERSION.split('.')[0,n].join('.')
end

Instance Method Details

#add(example) ⇒ Object



105
106
107
108
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 105

def add(example)
  record example.description
  MSpec.retrieve(:formatter).tally.counter.guards!
end

#match?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 115

def match?
  raise "must be implemented by the subclass"
end

#record(description) ⇒ Object



101
102
103
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 101

def record(description)
  SpecGuard.report[report_key] << description
end

#report_keyObject



97
98
99
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 97

def report_key
  "#{name} #{@parameters.join(", ")}"
end

#reporting?Boolean

Returns:

  • (Boolean)


92
93
94
95
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 92

def reporting?
  MSpec.mode?(:report) or
    (MSpec.mode?(:report_on) and SpecGuard.guards.include?(name))
end

#run_if(name, &block) ⇒ Object



78
79
80
81
82
83
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 78

def run_if(name, &block)
  @name = name
  yield if yield?(false)
ensure
  unregister
end

#run_unless(name, &block) ⇒ Object



85
86
87
88
89
90
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 85

def run_unless(name, &block)
  @name = name
  yield if yield?(true)
ensure
  unregister
end

#unregisterObject



110
111
112
113
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 110

def unregister
  MSpec.unguard
  MSpec.unregister :add, self
end

#yield?(invert = false) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/extensions/mspec/mspec/guards/guard.rb', line 61

def yield?(invert = false)
  return true if MSpec.mode? :unguarded

  allow = match? ^ invert

  if !allow and reporting?
    MSpec.guard
    MSpec.register :finish, SpecGuard
    MSpec.register :add,    self
    return true
  elsif MSpec.mode? :verify
    return true
  end

  allow
end