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