Class: Mustermann::Mapper
- Inherits:
-
Object
- Object
- Mustermann::Mapper
- Defined in:
- lib/mustermann/mapper.rb
Overview
A mapper allows mapping one string to another based on pattern parsing and expanding.
Instance Method Summary collapse
-
#[]=(key, value) ⇒ Object
Add a single mapping.
-
#convert(input, values = {}) ⇒ Object
(also: #[])
Convert a string according to mappings.
-
#initialize(map = {}, additional_values: :ignore, **options, &block) ⇒ Mapper
constructor
Creates a new mapper.
-
#to_h ⇒ Hash{Patttern: Expander}
Hash version of the mapper.
-
#update(map) ⇒ Object
Add multiple mappings.
Constructor Details
#initialize(**options) { ... } ⇒ Mapper #initialize(**options) {|mapper| ... } ⇒ Mapper #initialize(map = {}, **options) ⇒ Mapper
Creates a new mapper.
45 46 47 48 49 50 51 |
# File 'lib/mustermann/mapper.rb', line 45 def initialize(map = {}, additional_values: :ignore, **, &block) @options = @additional_values = additional_values @set = Set.new(use_trie: false, use_cache: false, **) block.arity == 0 ? update(yield) : yield(self) if block update(map) if map end |
Instance Method Details
#[]=(key, value) ⇒ Object
Add a single mapping.
82 83 84 |
# File 'lib/mustermann/mapper.rb', line 82 def []=(key, value) update key => value end |
#convert(input, values = {}) ⇒ Object Also known as: []
Convert a string according to mappings. You can pass in additional params.
71 72 73 74 75 76 |
# File 'lib/mustermann/mapper.rb', line 71 def convert(input, values = {}) @set.match_all(input).inject(input) do |current, m| params = Hash[values.merge(m.params).map { |k, v| [k.to_s, v] }] m.value.(params) ? m.value.(params) : current end end |
#to_h ⇒ Hash{Patttern: Expander}
Returns Hash version of the mapper.
64 |
# File 'lib/mustermann/mapper.rb', line 64 def to_h = @set.patterns.to_h { [_1, @set[_1]] } |
#update(map) ⇒ Object
Add multiple mappings.
56 57 58 59 60 61 |
# File 'lib/mustermann/mapper.rb', line 56 def update(map) map.to_h.each_pair do |input, output| output = Expander.new(*output, additional_values: @additional_values, **@options) unless output.is_a? Expander @set.add(input, output) end end |