Sha256: 9f3e8a3946f00ff63d18f33d1bd18918bdab3bd2b567d4211cbe7708a4bfcfe6
Contents?: true
Size: 1.03 KB
Versions: 2
Compression:
Stored size: 1.03 KB
Contents
module Billogram class RelationBuilder attr_reader :resource, :attributes def initialize(resource, attributes) @resource = resource @attributes = attributes end def call resource_relations.each do |type, relation_names| build_relation(type, relation_names) end end private def relation_class(relation_name) Object.const_get("Billogram::#{relation_name.to_s.split('_').map(&:capitalize).join()}") end def relation_attributes(relation_name) attributes.delete(relation_name.to_s) end def resource_relations resource.class.relations end def build_relation(type, relation_names) relation_names.each do |name| if attrs = relation_attributes(name) if type == :one value = relation_class(name).new(attrs) elsif type == :many value = attrs.map{|item| relation_class(name[0..-2]).new(item) } end resource.public_send("#{name}=", value) end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
billogram-0.3.1 | lib/billogram/relation_builder.rb |
billogram-0.3.0 | lib/billogram/relation_builder.rb |