module Normalizy::Extension

Public Instance Methods

extract_filter(rule, rule_options, attribute, filters: Normalizy.config.filters) click to toggle source
# File lib/normalizy/extensions.rb, line 10
def extract_filter(rule, rule_options, attribute, filters: Normalizy.config.filters)
  options = rule_options.merge(attribute: attribute, object: self)

  return [filters[rule] || rule, options] unless rule.is_a?(Hash)

  filter  = filters[rule.keys.first] || rule
  options = (rule.values.first || {}).merge(options)

  [filter, options]
end
extract_rule(rule) click to toggle source
# File lib/normalizy/extensions.rb, line 21
def extract_rule(rule)
  if rule.is_a?(Hash)
    [rule.keys.first, rule.values.first]
  else
    [rule, {}]
  end
end
extract_value(value, filter, options, block) click to toggle source
# File lib/normalizy/extensions.rb, line 29
def extract_value(value, filter, options, block)
  if filter.respond_to?(:call)
    if filter.method(:call).arity == -2
      filter.call value, options, &block
    else
      filter.call value, &block
    end
  elsif respond_to?(filter)
    if method(filter).arity == -2
      send filter, value, options, &block
    else
      send filter, value, &block
    end
  elsif value.respond_to?(filter)
    value.send filter, &block
  else
    value
  end
end
normalizy!(attribute:, block:, options:, rules:, value:) click to toggle source
# File lib/normalizy/extensions.rb, line 49
def normalizy!(attribute:, block:, options:, rules:, value:)
  rules ||= Normalizy.config.default_filters

  return if rules.blank? && block.blank?

  result = value

  [rules].flatten.compact.each do |rule|
    rule_name, rule_options = extract_rule(rule)

    unalias_for(rule_name).each do |unaliased_rule|
      filter, filter_options = extract_filter(unaliased_rule, rule_options, attribute)
      result                 = extract_value(result, filter, filter_options, block)
    end
  end

  result
end
unalias_for(rule, aliases: Normalizy.config.normalizy_aliases) click to toggle source
# File lib/normalizy/extensions.rb, line 68
def unalias_for(rule, aliases: Normalizy.config.normalizy_aliases)
  [aliases.key?(rule) ? aliases[rule] : rule].flatten.compact
end