Module: MotionPrime::HasNormalizer

Included in:
BaseElement, Model, ScreenSectionsMixin, Section, Styles, TabbedSection
Defined in:
motion-prime/helpers/has_normalizer.rb

Instance Method Summary collapse

Instance Method Details

#debug_infoObject



48
49
50
51
52
53
54
55
56
# File 'motion-prime/helpers/has_normalizer.rb', line 48

def debug_info
  if element?
    [self.class.name, self.name, section.try(:name)]
  elsif self.is_a?(Section)
    [self.class.name, self.name, @collection_section.try(:class).try(:name)]
  else
    [self.class.name]
  end
end

#element?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'motion-prime/helpers/has_normalizer.rb', line 44

def element?
  self.is_a?(BaseElement)
end

#normalize_object(object, receiver = nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'motion-prime/helpers/has_normalizer.rb', line 17

def normalize_object(object, receiver = nil)
  receiver ||= self
  if object.is_a?(Proc)
    normalize_value(object, receiver)
  elsif object.is_a?(Hash)
    object.inject({}) do |result, (key, nested_object)|
      @_key_chain ||= []
      @_key_chain << key
      result.merge(key => normalize_object(nested_object, receiver))
    end
  else
    object
  end
end

#normalize_options(unordered_options, receiver = nil, order = nil, keys = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'motion-prime/helpers/has_normalizer.rb', line 3

def normalize_options(unordered_options, receiver = nil, order = nil, keys = nil)
  options = if order
    Hash[unordered_options.sort_by { |k,v| order.index(k.to_s).to_i }]
  else
    unordered_options
  end

  filtered_options = keys.nil? ? options : options.slice(*keys)
  filtered_options.each do |key, option|
    @_key_chain = [key]
    unordered_options[key] = normalize_object(option, receiver)
  end
end

#normalize_value(object, receiver = nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'motion-prime/helpers/has_normalizer.rb', line 32

def normalize_value(object, receiver = nil)
  receiver ||= self
  if element?
    receiver.send(:instance_exec, section || screen, self, &object)
  else
    receiver.send(:instance_exec, self, &object)
  end
rescue => e
  Prime.logger.error "Can't normalize: ", *debug_info, @_key_chain
  raise e
end