lib/extensions/mspec/mspec/guards/guard.rb in rhodes-5.5.18 vs lib/extensions/mspec/mspec/guards/guard.rb in rhodes-6.0.11

- old
+ new

@@ -1,8 +1,8 @@ require 'mspec/runner/mspec' require 'mspec/runner/actions/tally' -require 'rbconfig' +require 'mspec/utils/ruby_name' class SpecGuard def self.report @report ||= Hash.new { |h,k| h[k] = [] } end @@ -29,58 +29,43 @@ def self.clear_guards @guards = [] end - @@ruby_version_override = nil - - def self.ruby_version_override=(version) - @@ruby_version_override = version - end - - def self.ruby_version_override - @@ruby_version_override - end - - # Returns a partial Ruby version string based on +which+. For example, - # if RUBY_VERSION = 8.2.3 and RUBY_PATCHLEVEL = 71: + # 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.71" + # :full => "8.2.3" def self.ruby_version(which = :minor) case which when :major n = 1 when :minor n = 2 - when :tiny, :teeny + when :tiny, :teeny, :full 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('.') + RUBY_VERSION.split('.')[0,n].join('.') end - attr_accessor :name, :parameters + attr_accessor :name def initialize(*args) - self.parameters = @args = args + @parameters = args end - def yield?(invert=false) + def yield?(invert = false) return true if MSpec.mode? :unguarded allow = match? ^ invert - if not allow and reporting? + if !allow and reporting? MSpec.guard MSpec.register :finish, SpecGuard MSpec.register :add, self return true elsif MSpec.mode? :verify @@ -88,21 +73,31 @@ end allow end - def ===(other) - true + def run_if(name, &block) + @name = name + yield if yield?(false) + ensure + unregister end + def run_unless(name, &block) + @name = name + yield if yield?(true) + ensure + unregister + end + def reporting? MSpec.mode?(:report) or (MSpec.mode?(:report_on) and SpecGuard.guards.include?(name)) end def report_key - "#{name} #{parameters.join(", ")}" + "#{name} #{@parameters.join(", ")}" end def record(description) SpecGuard.report[report_key] << description end @@ -115,60 +110,9 @@ def unregister MSpec.unguard MSpec.unregister :add, self end - 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/ - else - false - end - end - end - - def standard? - implementation? :ruby - end - - def windows?(sym, key) - sym == :windows && !key.match(/(mswin|mingw)/).nil? - end - - 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 - - def wordsize?(size) - size == 8 * 1.size - end - - 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 - def match? - implementation?(*@args) or platform?(*@args) + raise "must be implemented by the subclass" end end