Class: SpecGuard

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

Constant Summary collapse

@@ruby_version_override =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ SpecGuard


73
74
75
# File 'lib/mspec/guards/guard.rb', line 73

def initialize(*args)
  self.parameters = @args = args
end

Instance Attribute Details

#nameObject

Returns the value of attribute name


71
72
73
# File 'lib/mspec/guards/guard.rb', line 71

def name
  @name
end

#parametersObject

Returns the value of attribute parameters


71
72
73
# File 'lib/mspec/guards/guard.rb', line 71

def parameters
  @parameters
end

Class Method Details

.clearObject


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

def self.clear
  @report = nil
end

.clear_guardsObject


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

def self.clear_guards
  @guards = []
end

.finishObject


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

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


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

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

.reportObject


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

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 and RUBY_PATCHLEVEL = 71:

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

53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mspec/guards/guard.rb', line 53

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

  patch = RUBY_PATCHLEVEL.to_i
  patch = 0 if patch < 0
  version = "#{ruby_version_override || RUBY_VERSION}.#{patch}"
  version.split('.')[0,n].join('.')
end

.ruby_version_overrideObject


41
42
43
# File 'lib/mspec/guards/guard.rb', line 41

def self.ruby_version_override
  @@ruby_version_override
end

.ruby_version_override=(version) ⇒ Object


37
38
39
# File 'lib/mspec/guards/guard.rb', line 37

def self.ruby_version_override=(version)
  @@ruby_version_override = version
end

Instance Method Details

#===(other) ⇒ Object


94
95
96
# File 'lib/mspec/guards/guard.rb', line 94

def ===(other)
  true
end

#add(example) ⇒ Object


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

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

#implementation?(*args) ⇒ Boolean


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/mspec/guards/guard.rb', line 121

def implementation?(*args)
  args.any? do |name|
    !!case name
    when :rubinius
      RUBY_NAME =~ /^rbx/
    when :ruby
      RUBY_NAME =~ /^ruby/
    when :jruby
      RUBY_NAME =~ /^jruby/
    when :ironruby
      RUBY_NAME =~ /^ironruby/
    when :macruby
      RUBY_NAME =~ /^macruby/
    when :maglev
      RUBY_NAME =~ /^maglev/
    when :topaz
      RUBY_NAME =~ /^topaz/
    when :opal
      RUBY_NAME =~ /^opal/
    else
      false
    end
  end
end

#match?Boolean


176
177
178
# File 'lib/mspec/guards/guard.rb', line 176

def match?
  implementation?(*@args) or platform?(*@args)
end

#os?(*oses) ⇒ Boolean


168
169
170
171
172
173
174
# File 'lib/mspec/guards/guard.rb', line 168

def os?(*oses)
  oses.any? do |os|
    host_os = RbConfig::CONFIG['host_os'] || RUBY_PLATFORM
    host_os.downcase!
    host_os.match(os.to_s) || windows?(os, host_os)
  end
end

#platform?(*args) ⇒ Boolean


154
155
156
157
158
159
160
161
162
# File 'lib/mspec/guards/guard.rb', line 154

def platform?(*args)
  args.any? do |platform|
    if platform != :java && RUBY_PLATFORM.match('java') && os?(platform)
      true
    else
      RUBY_PLATFORM.match(platform.to_s) || windows?(platform, RUBY_PLATFORM)
    end
  end
end

#record(description) ⇒ Object


107
108
109
# File 'lib/mspec/guards/guard.rb', line 107

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

#report_keyObject


103
104
105
# File 'lib/mspec/guards/guard.rb', line 103

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

#reporting?Boolean


98
99
100
101
# File 'lib/mspec/guards/guard.rb', line 98

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

#standard?Boolean


146
147
148
# File 'lib/mspec/guards/guard.rb', line 146

def standard?
  implementation? :ruby
end

#unregisterObject


116
117
118
119
# File 'lib/mspec/guards/guard.rb', line 116

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

#windows?(sym, key) ⇒ Boolean


150
151
152
# File 'lib/mspec/guards/guard.rb', line 150

def windows?(sym, key)
  sym == :windows && !key.match(/(mswin|mingw)/).nil?
end

#wordsize?(size) ⇒ Boolean


164
165
166
# File 'lib/mspec/guards/guard.rb', line 164

def wordsize?(size)
  size == 8 * 1.size
end

#yield?(invert = false) ⇒ Boolean


77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/mspec/guards/guard.rb', line 77

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

  allow = match? ^ invert

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

  allow
end