module DirModel::Model::Relations
Public Instance Methods
append_dir_model(source_path, options={})
click to toggle source
Appends model to the parent and returns it
@return [Model] return the child if it is valid, otherwise returns nil
# File lib/dir_model/model/relations.rb, line 22 def append_dir_model(source_path, options={}) relation_name = options[:relation_name] _options = options[:relation_options] related_class = _options[:dir_model_class] foreign_key = _options[:foreign_key] foreign_value = self.send(foreign_key) related_dir_model = related_class.new(source_path, options.reverse_merge(parent: self, foreign_value: foreign_value)) return unless related_dir_model unless related_dir_model.skip? if public_send(relation_name).present? raise StandardError.new("There are more of one #{relation_name} => #{related_class} for #{self.class.name}") end public_send("#{relation_name}=", related_dir_model) related_dir_model else nil end end
append_dir_models(source_path, options={})
click to toggle source
Appends modeld to the parent and returns it
@return [Model] return the child if it is valid, otherwise returns nil
# File lib/dir_model/model/relations.rb, line 48 def append_dir_models(source_path, options={}) relation_name = self.class.has_many_relationship.keys.first _options = self.class.has_many_relationship.values.first related_class = _options[:dir_model_class] foreign_key = _options[:foreign_key] foreign_value = self.send(foreign_key) related_dir_model = related_class.new(source_path, options.reverse_merge(parent: self, foreign_value: foreign_value)) return unless related_dir_model unless related_dir_model.skip? public_send(relation_name) << related_dir_model related_dir_model else nil end end
child?()
click to toggle source
@return [Boolean] returns true, if the instance is a child
# File lib/dir_model/model/relations.rb, line 11 def child? !!parent end
has_many(relation_name, dir_model_class, options)
click to toggle source
Defines a relationship between a dir model
@param [Symbol] relation_name the name of the relation @param [DirModel::Import] dir_model_class class of the relation @param [Hash] basically for set :foreign_key
# File lib/dir_model/model/relations.rb, line 112 def has_many(relation_name, dir_model_class, options) raise "for now, DirModel's has_many may only be called once" if @_has_many_relationship.present? relation_name = relation_name.to_sym has_many_relationship_object.merge(relation_name => { dir_model_class: dir_model_class }.merge(options)) define_method(:has_many?) do true end define_method(relation_name) do # # equal to: @relation_name ||= [] # variable_name = "@#{relation_name}" instance_variable_get(variable_name) || instance_variable_set(variable_name, []) end end
has_many?()
click to toggle source
# File lib/dir_model/model/relations.rb, line 72 def has_many? false end
has_one(relation_name, dir_model_class, options)
click to toggle source
Defines a relationship between a dir model
@param [Symbol] relation_name the name of the relation @param [DirModel::Import] dir_model_class class of the relation
# File lib/dir_model/model/relations.rb, line 81 def has_one(relation_name, dir_model_class, options) relation_name = relation_name.to_sym has_one_relationship_object.merge(relation_name => { dir_model_class: dir_model_class }.merge(options)) define_method(:has_one?) do true end define_method(:has_one) do self.class.has_one_relationship end define_method("#{relation_name}=") do |value| instance_variable_set("@#{relation_name}", value) end define_method(relation_name) do instance_variable_get("@#{relation_name}") end end
has_one?()
click to toggle source
# File lib/dir_model/model/relations.rb, line 68 def has_one? false end
has_relations?()
click to toggle source
# File lib/dir_model/model/relations.rb, line 15 def has_relations? has_one? || has_many? end