Sha256: a07a7a743519a7c54ab13b2345140291cdd94200593a12d6c573e18cfb287e93
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 KB
Contents
# frozen_string_literal: true module Rubanok class Rule # :nodoc: UNDEFINED = Object.new attr_reader :owner, :fields, :activate_on, :activate_always, :ignore_empty_values, :filter_with def initialize(fields, activate_on: fields, activate_always: false, ignore_empty_values: Rubanok.ignore_empty_values, filter_with: nil) @owner = owner @fields = fields.freeze @activate_on = Array(activate_on).freeze @activate_always = activate_always @ignore_empty_values = ignore_empty_values @filter_with = filter_with end def project(params) fields.each_with_object({}) do |field, acc| val = fetch_value params, field next acc if val == UNDEFINED acc[field] = val acc end end def applicable?(params) return true if activate_always == true activate_on.all? { |field| fetch_value(params, field) != UNDEFINED } end def to_method_name @method_name ||= build_method_name end private def build_method_name "__#{fields.join("_")}__" end def fetch_value(params, field) return UNDEFINED unless params.key?(field) val = params[field] val = filter_with.call(val) if filter_with return UNDEFINED if empty?(val) val end using(Module.new do refine NilClass do def empty? true end end refine Object do def empty? false end end end) def empty?(val) return false unless ignore_empty_values val.empty? end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rubanok-0.3.0 | lib/rubanok/rule.rb |