class Totes::Matcher
Constants
- ALIASES
Public Class Methods
build(name, *args, &block)
click to toggle source
# File lib/totes/matcher.rb, line 17 def self.build(name, *args, &block) name = ALIASES[name.to_sym] || name.to_s klass = name.gsub(/(\A|_)([a-z])/){ $2.upcase } klass = const_get(klass) rescue nil if !klass && name =~ /^be_[a-z]/ klass = BeAnything args.unshift name.gsub(/^be_/, "") end klass && klass.new(*args, &block) end
error_must(template=nil)
click to toggle source
# File lib/totes/matcher.rb, line 30 def self.error_must(template=nil) template ? (@error_must = template) : @error_must end
error_wont(template=nil)
click to toggle source
# File lib/totes/matcher.rb, line 34 def self.error_wont(template=nil) template ? (@error_wont = template) : @error_wont end
new(value)
click to toggle source
# File lib/totes/matcher.rb, line 38 def initialize(value) @value = value end
Public Instance Methods
likes(subject)
click to toggle source
# File lib/totes/matcher.rb, line 48 def likes(subject) raise "#{self.class.name}#likes(subject) is not implemented yet" end
test(subject, fail_on: false)
click to toggle source
# File lib/totes/matcher.rb, line 42 def test(subject, fail_on: false) if likes(subject) == fail_on fail(subject, positive: !fail_on) end end
Private Instance Methods
build_error(subject, positive)
click to toggle source
# File lib/totes/matcher.rb, line 58 def build_error(subject, positive) template = positive ? self.class.error_must : self.class.error_wont template % {subject: subject.inspect}.merge(find_params_in(template)) end
fail(subject, positive: true)
click to toggle source
Calls superclass method
# File lib/totes/matcher.rb, line 54 def fail(subject, positive: true) super Totes::Error, build_error(subject, positive) end
find_params_in(template)
click to toggle source
# File lib/totes/matcher.rb, line 63 def find_params_in(template) {}.tap do |params| template.scan(/%\{(.+?)\}/).each do |match| var_name = match[0].to_sym if instance_variable_defined?("@#{var_name}") params[var_name] = instance_variable_get("@#{var_name}").inspect end end end end