Module: Normalizr::Concern::ClassMethods

Defined in:
lib/normalizr/concern.rb

Instance Method Summary collapse

Instance Method Details

#normalize(*args, &block) ⇒ Object Also known as: normalize_attribute, normalize_attributes



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/normalizr/concern.rb', line 8

def normalize(*args, &block)
  options = Normalizr::OptionsParser.new(args, block)

  prepend Module.new {
    options.attributes.each do |method|
      define_method :"#{method}=" do |value|
        condition_lambda = -> condition { Proc === condition ? instance_exec(&condition) : send(condition) }

        positive = options.positive_condition.all?(&condition_lambda)
        negative = options.negative_condition.none?(&condition_lambda)

        if positive && negative
          value = Normalizr.normalize(value, *options.before)
          value = Normalizr.normalize(value, *options.after) if options.after.any?
        end

        super(value)
      end
    end
  }
end