Class: Teeth::ScannerDefinitionGroup

Inherits:
Array
  • Object
show all
Defined in:
lib/teeth/scanner_definition.rb

Constant Summary collapse

DEFAULT_DEFINITIONS =
{}

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



96
97
98
99
# File 'lib/teeth/scanner_definition.rb', line 96

def method_missing(called_method_name, *args, &block)
  args[1] ||={}
  add(called_method_name, args[0], args[1])
end

Instance Method Details

#add(name, regex, options = {}) ⇒ Object



81
82
83
84
# File 'lib/teeth/scanner_definition.rb', line 81

def add(name, regex, options={})
  assert_defn_has_unique_name(name)
  push ScannerDefinition.new(name, regex, options)
end

#assert_defn_has_unique_name(name) ⇒ Object



86
87
88
89
90
# File 'lib/teeth/scanner_definition.rb', line 86

def assert_defn_has_unique_name(name)
  if defn_names.include?(name.to_s)
    raise DuplicateDefinitionError, "a definition for #{name.to_s} has already been defined"
  end
end

#defaults_for(*default_types) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/teeth/scanner_definition.rb', line 101

def defaults_for(*default_types)
  default_types.each do |default_type|
    unless default_definitions = DEFAULT_DEFINITIONS[default_type]
      raise InvalidDefaultDefinitionName, "no default definitions found for #{default_type.to_s}"
    end
    default_definitions.each do |defn|
      begin
        add(defn.first, defn.last)
      rescue DuplicateDefinitionError
      end
    end
  end
end

#defn_namesObject



92
93
94
# File 'lib/teeth/scanner_definition.rb', line 92

def defn_names
  map { |defn_statement| defn_statement.name.to_s }
end