class Intercept::Strategy::Mapper

Attributes

bucket_map[R]
fallback_strategy[R]

Public Class Methods

new(bucket_map, fallback_strategy = nil) click to toggle source
# File lib/intercept/strategy/mapper.rb, line 8
def initialize(bucket_map, fallback_strategy = nil)
  @bucket_map = parse_bucket_map bucket_map
  @fallback_strategy = fallback_strategy
end

Public Instance Methods

process(value) click to toggle source
# File lib/intercept/strategy/mapper.rb, line 13
def process(value)
  return value if value.nil? || value.empty?

  mapped_value = map_value(value)

  if fallback_strategy && mapped_value.empty?
    fallback_strategy.process(value)
  else
    mapped_value
  end
end

Private Instance Methods

map_value(value) click to toggle source
# File lib/intercept/strategy/mapper.rb, line 35
def map_value(value)
  value.map do |unit|
    bucket_map.call.find do |bucket, _|
      bucket.match?(unit)
    end&.fetch(1)
  end.compact.uniq
end
parse_bucket_map(bucket_map) click to toggle source
# File lib/intercept/strategy/mapper.rb, line 27
def parse_bucket_map(bucket_map)
  if bucket_map.respond_to?(:call)
    bucket_map
  else
    raise '@param bucket_map must respond to #call'
  end
end