Class: HasMeta::MetaData

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/has_meta/meta_data.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#data_typeObject (readonly)

Returns the value of attribute data_type.



7
8
9
# File 'lib/has_meta/meta_data.rb', line 7

def data_type
  @data_type
end

#valueObject

Returns the value of attribute value.



6
7
8
# File 'lib/has_meta/meta_data.rb', line 6

def value
  @value
end

Class Method Details

.generate_value_hash(*values) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/has_meta/meta_data.rb', line 23

def self.generate_value_hash *values
  # values = 'some text'
  # values = ['some text', 'some other text']
  # values = ['some text', 'some other text', 9]
  if values.size == 1
    # {text_value: 'some text'}
    value_hash_for values.pop
  else
    # ['some text', 'some other text', 9]
    # [{text_value: 'some text'}, {text_value: 'some other text'}, {integer_value: 9}]
    # {:text_value=>[{:text_value=>"some text"}, {:text_value=>"some other text"}], :integer_value=>[{:integer_value=>9}]}
    # values.map { |value| value_hash_for value }.group_by { |x| x.keys.first }.map {|k, v| {k => v.map {|x| x.values.first}}}
    values
      .map { |value| value_hash_for value }
      .group_by { |x| x.keys.first }
      .reduce({}) do |acc, hash|
        key, value = *hash 
        acc.merge({key => value.size == 1 ? value.first.values.first : value.map {|x| x.values.first}})
      end
      # .map {|k, v| {k => v.map {|x| x.values.first}}}
  end
end