Module: Normalizr

Extended by:
Normalizr
Included in:
Normalizr
Defined in:
lib/normalizr.rb,
lib/normalizr/concern.rb,
lib/normalizr/version.rb,
lib/normalizr/exceptions.rb,
lib/normalizr/configuration.rb,
lib/normalizr/rspec/matcher.rb,
lib/normalizr/options_parser.rb

Defined Under Namespace

Modules: Concern, RSpec Classes: Configuration, MissingNormalizer, OptionsParser

Constant Summary collapse

VERSION =
'0.6.0'

Instance Method Summary collapse

Instance Method Details

#configurationObject



14
15
16
# File 'lib/normalizr.rb', line 14

def configuration
  @configuration ||= Configuration.new
end

#configure(&block) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/normalizr.rb', line 18

def configure(&block)
  unless block_given?
    raise ArgumentError, '.configure must be called with a block'
  end

  configuration.instance_eval(&block)
end

#find(name) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/normalizr.rb', line 26

def find(name)
  unless name.respond_to?(:call)
    configuration.normalizers.fetch(name) { raise MissingNormalizer.new(name) }
  else
    name
  end
end

#normalize(obj, *normalizers) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/normalizr.rb', line 44

def normalize(obj, *normalizers)
  normalizers_with_default(normalizers).reduce(obj) do |memo, name|
    name, options = name.first if Hash === name

    process(memo, name, options)
  end
end

#process(obj, name, options) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/normalizr.rb', line 34

def process(obj, name, options)
  if Array === obj
    obj.map { |item| process(item, name, options) }.tap do |ary|
      ary.compact! if name == :blank
    end
  else
    find(name).call(obj, options)
  end
end