Module: Ooor::Serialization

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
lib/ooor/serialization.rb

Instance Method Summary collapse

Instance Method Details

#serializable_hash(options = nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/ooor/serialization.rb', line 15

def serializable_hash(options = nil)
  options ||= {}
  hash = super(options)

  attribute_names = attributes.keys.sort
  included_associations = {}
  serialize_many2one(included_associations)
  serialize_x_to_many(included_associations)

  method_names = Array.wrap(options[:methods]).map { |n| n if respond_to?(n.to_s) }.compact
  Hash[(attribute_names + method_names).map { |n| [n, send(n)] }].merge(included_associations)
end

#serialize_many2one(included_associations) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/ooor/serialization.rb', line 28

def serialize_many2one(included_associations)
  self.class.many2one_associations.keys.each do |k|
    if loaded_associations[k].is_a? Base
      included_associations[k] = loaded_associations[k].as_json[loaded_associations[k].class.openerp_model.gsub('.', '_')]
    elsif associations[k].is_a? Array
      included_associations[k] = {"id" => associations[k][0], "name" => associations[k][1]}
    end
  end
end

#serialize_x_to_many(included_associations) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/ooor/serialization.rb', line 38

def serialize_x_to_many(included_associations)
  (self.class.one2many_associations.keys + self.class.many2many_associations.keys).each do |k|
    if loaded_associations[k].is_a? Array
      included_associations[k] = loaded_associations[k].map {|item| item.as_json[item.class.openerp_model.gsub('.', '_')]}
    else
      included_associations[k] = associations[k].map {|id| {"id" => id}} if associations[k]
    end
  end
end