Module: Spec::Matchers

Defined in:
lib/spec-i18n/matchers/be.rb,
lib/spec-i18n/matchers/method_missing.rb,
lib/spec-i18n/matchers/register_all_matchers.rb,
lib/spec-i18n/matchers/translate_basic_matchers.rb

Defined Under Namespace

Classes: Be

Constant Summary collapse

RSPEC_MATCHERS =
[ :be_close, :be_an_instance_of, :be_a_kind_of,
:eql, :equal, :exist, :have, :have_at_least, 
:have_at_most, :have_exactly, :include, :match, 
:raise_error, :satisfy ]
MATCHERS_WITH_QUESTIONS =
[ :eql, :equal ]

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object

:nodoc:



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/spec-i18n/matchers/method_missing.rb', line 3

def method_missing(sym, *args, &block) # :nodoc:

  begin
    language = SpecI18n.natural_language
    be_word = language.keywords['matchers']['be']      
    sym = be_to_english(sym, be_word)
  end
  
  return Matchers::BePredicate.new(sym, *args, &block) if sym.to_s =~ /^be_/
  return Matchers::Has.new(sym, *args, &block) if sym.to_s =~ /^have_/
  
  super
end

Class Method Details

.register_all_matchersObject



4
5
6
7
8
9
10
11
12
# File 'lib/spec-i18n/matchers/register_all_matchers.rb', line 4

def self.register_all_matchers
  Spec::Matchers::Be.register_be_matcher
  ["true", "false", "nil", "empty"].each do |matcher|
    class_eval <<-BE_WORD
      translate_be_#{matcher}
    BE_WORD
  end
  translate_basic_matchers
end

.translate_basic_matchersObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/spec-i18n/matchers/translate_basic_matchers.rb', line 12

def translate_basic_matchers
  language = SpecI18n.natural_language        
  RSPEC_MATCHERS.each do |rspec_matcher|
    matcher = language.keywords['matchers'][rspec_matcher.to_s]

    # TODO: Generating warnings for the incomplete languages
    next unless matcher

    matcher.split('|').map do |matcher_value|
      alias_method "#{matcher_value}?", "#{rspec_matcher}?" if MATCHERS_WITH_QUESTIONS.include?(rspec_matcher)
      alias_method matcher_value, rspec_matcher
    end
  end
end

Instance Method Details

#be_to_english(sym, be_word) ⇒ Object

:ser_matcher == :be_matcher :be_true == :be_true



19
20
21
22
23
# File 'lib/spec-i18n/matchers/method_missing.rb', line 19

def be_to_english(sym, be_word)
  be_word = be_word || 'be'
  
  sym.to_s.gsub(/#{be_word}/, 'be').to_sym
end

#languageObject



67
68
69
# File 'lib/spec-i18n/matchers/be.rb', line 67

def language
  SpecI18n.natural_language
end

#matcher_be_some(options = {}) ⇒ Object



62
63
64
65
# File 'lib/spec-i18n/matchers/be.rb', line 62

def matcher_be_some(options={})
  option = options.keys.select { |key| options[key] != nil }
  language.word_be(option.to_s).map { |word| word.to_sym}
end

#translate_be_emptyObject



52
53
54
55
56
57
58
59
60
# File 'lib/spec-i18n/matchers/be.rb', line 52

def translate_be_empty
  matcher_be_some(:empty => true).each do |matcher|
    Spec::Matchers.define matcher do
      match do |actual|
        actual.empty?
      end
    end
  end
end

#translate_be_falseObject



32
33
34
35
36
37
38
39
40
# File 'lib/spec-i18n/matchers/be.rb', line 32

def translate_be_false
  matcher_be_some(:false => true).each do |matcher|
    Spec::Matchers.define matcher do
      match do |actual|
        !actual
      end
    end
  end
end

#translate_be_nilObject



42
43
44
45
46
47
48
49
50
# File 'lib/spec-i18n/matchers/be.rb', line 42

def translate_be_nil
  matcher_be_some(:nil => true).each do |matcher|
    Spec::Matchers.define matcher do
      match do |actual|
        actual.nil?
      end
    end
  end
end

#translate_be_trueObject



22
23
24
25
26
27
28
29
30
# File 'lib/spec-i18n/matchers/be.rb', line 22

def translate_be_true
  matcher_be_some(:true => true).each do |matcher|
    Spec::Matchers.define matcher do
      match do |actual|
        !!actual
      end
    end
  end
end