Sha256: aa8901cfd6e0a8320e60783cf46ad332c0c3850dbd594f5308cb1a912f031a7e
Contents?: true
Size: 1.82 KB
Versions: 6
Compression:
Stored size: 1.82 KB
Contents
module ActiveForce module Association class RelationModelBuilder class << self def build(association, value, association_mapping = {}) new(association, value, association_mapping).build_relation_model end end def initialize(association, value, association_mapping = {}) @association = association @value = value @association_mapping = association_mapping end def build_relation_model klass = resolve_class klass.new(@association, @value, @association_mapping).call end private def resolve_class association_builder = @value.class.name.gsub('::', '_') ActiveForce::Association.const_get "BuildFrom#{association_builder}" rescue NameError raise "Don't know how to build relation from #{@value.class.name}" end end class AbstractBuildFrom attr_reader :association, :value, :association_mapping def initialize(association, value, association_mapping = {}) @association = association @value = value @association_mapping = association_mapping end def call raise "Must implement #{self.class.name}#call" end end class BuildFromHash < AbstractBuildFrom def call association.build(value, association_mapping) end end class BuildFromArray < AbstractBuildFrom def call value.map { |mash| association.build(mash, association_mapping) } end end class BuildFromNilClass < AbstractBuildFrom def call association.is_a?(HasManyAssociation) ? [] : nil end end class BuildFromRestforce_SObject < BuildFromHash end class BuildFromRestforce_Mash < BuildFromHash end class BuildFromRestforce_Collection < BuildFromArray end end end
Version data entries
6 entries across 6 versions & 1 rubygems