Class: Sequel::Model::Associations::AssociationReflection

Inherits:
Hash
  • Object
show all
Includes:
Inflections
Defined in:
lib/sequel/model/associations.rb

Overview

AssociationReflection is a Hash subclass that keeps information on Sequel::Model associations. It provides methods to reduce internal code duplication. It should not be instantiated by the user.

Constant Summary

Constants included from Inflections

Inflections::CAMELIZE_CONVERT_REGEXP, Inflections::CAMELIZE_MODULE_REGEXP, Inflections::DASH, Inflections::DEMODULIZE_CONVERT_REGEXP, Inflections::EMPTY_STRING, Inflections::SLASH, Inflections::UNDERSCORE, Inflections::UNDERSCORE_CONVERT_REGEXP1, Inflections::UNDERSCORE_CONVERT_REGEXP2, Inflections::UNDERSCORE_CONVERT_REPLACE, Inflections::UNDERSCORE_MODULE_REGEXP, Inflections::VALID_CONSTANT_NAME_REGEXP

Instance Method Summary collapse

Methods included from Inflections

clear, irregular, plural, singular, uncountable

Methods inherited from Hash

#&, #case, #sql_expr, #sql_negate, #sql_or, #|, #~

Instance Method Details

#_add_methodObject

Name symbol for the _add internal association method



21
22
23
# File 'lib/sequel/model/associations.rb', line 21

def _add_method
  :"_add_#{singularize(self[:name])}"
end

#_dataset_methodObject

Name symbol for the _dataset association method



26
27
28
# File 'lib/sequel/model/associations.rb', line 26

def _dataset_method
  :"_#{self[:name]}_dataset"
end

#_remove_all_methodObject

Name symbol for the _remove_all internal association method



31
32
33
# File 'lib/sequel/model/associations.rb', line 31

def _remove_all_method
  :"_remove_all_#{self[:name]}"
end

#_remove_methodObject

Name symbol for the _remove internal association method



36
37
38
# File 'lib/sequel/model/associations.rb', line 36

def _remove_method
  :"_remove_#{singularize(self[:name])}"
end

#_setter_methodObject

Name symbol for the _setter association method



41
42
43
# File 'lib/sequel/model/associations.rb', line 41

def _setter_method
  :"_#{self[:name]}="
end

#add_methodObject

Name symbol for the add association method



46
47
48
# File 'lib/sequel/model/associations.rb', line 46

def add_method
  :"add_#{singularize(self[:name])}"
end

#associated_classObject

The class associated to the current model class via this association



56
57
58
# File 'lib/sequel/model/associations.rb', line 56

def associated_class
  self[:class] ||= constantize(self[:class_name])
end

#association_methodObject

Name symbol for association method, the same as the name of the association.



51
52
53
# File 'lib/sequel/model/associations.rb', line 51

def association_method
  self[:name]
end

#dataset_helper_methodObject

Name symbol for the _helper internal association method



67
68
69
# File 'lib/sequel/model/associations.rb', line 67

def dataset_helper_method
  :"_#{self[:name]}_dataset_helper"
end

#dataset_methodObject

Name symbol for the dataset association method



62
63
64
# File 'lib/sequel/model/associations.rb', line 62

def dataset_method
  :"#{self[:name]}_dataset"
end

#dataset_need_primary_key?Boolean

Whether the dataset needs a primary key to function, true by default.

Returns:

  • (Boolean)


72
73
74
# File 'lib/sequel/model/associations.rb', line 72

def dataset_need_primary_key?
  true
end

#eager_graph_lazy_dataset?Boolean

Whether to eagerly graph a lazy dataset, true by default. If this is false, the association won’t respect the :eager_graph option when loading the association for a single record.

Returns:

  • (Boolean)


85
86
87
# File 'lib/sequel/model/associations.rb', line 85

def eager_graph_lazy_dataset?
  true
end

#eager_loading_use_associated_key?Boolean

By default associations do not need to select a key in an associated table to eagerly load.

Returns:

  • (Boolean)


78
79
80
# File 'lib/sequel/model/associations.rb', line 78

def eager_loading_use_associated_key?
  false
end

#need_associated_primary_key?Boolean

Whether the associated object needs a primary key to be added/removed, false by default.

Returns:

  • (Boolean)


91
92
93
# File 'lib/sequel/model/associations.rb', line 91

def need_associated_primary_key?
  false
end

#reciprocalObject

Returns the reciprocal association variable, if one exists. The reciprocal association is the association in the associated class that is the opposite of the current association. For example, Album.many_to_one :artist and Artist.one_to_many :albums are reciprocal associations. This information is to populate reciprocal associations. For example, when you do this_artist.add_album(album) it sets album.artist to this_artist.



101
102
103
104
105
106
107
108
109
110
111
# File 'lib/sequel/model/associations.rb', line 101

def reciprocal
  return self[:reciprocal] if include?(:reciprocal)
  r_type = reciprocal_type
  key = self[:key]
  associated_class.all_association_reflections.each do |assoc_reflect|
    if assoc_reflect[:type] == r_type && assoc_reflect[:key] == key && assoc_reflect.associated_class == self[:model]
      return self[:reciprocal] = assoc_reflect[:name]
    end
  end
  self[:reciprocal] = nil
end

#reciprocal_array?Boolean

Whether the reciprocal of this association returns an array of objects instead of a single object, true by default.

Returns:

  • (Boolean)


115
116
117
# File 'lib/sequel/model/associations.rb', line 115

def reciprocal_array?
  true
end

#remove_all_methodObject

Name symbol for the remove_all_ association method



120
121
122
# File 'lib/sequel/model/associations.rb', line 120

def remove_all_method
  :"remove_all_#{self[:name]}"
end

#remove_methodObject

Name symbol for the remove_ association method



125
126
127
# File 'lib/sequel/model/associations.rb', line 125

def remove_method
  :"remove_#{singularize(self[:name])}"
end

#returns_array?Boolean

Whether this association returns an array of objects instead of a single object, true by default.

Returns:

  • (Boolean)


131
132
133
# File 'lib/sequel/model/associations.rb', line 131

def returns_array?
  true
end

#selectObject

The columns to select when loading the association, nil by default.



136
137
138
# File 'lib/sequel/model/associations.rb', line 136

def select
  self[:select]
end

#set_reciprocal_to_self?Boolean

Whether to set the reciprocal association to self when loading associated records, false by default.

Returns:

  • (Boolean)


142
143
144
# File 'lib/sequel/model/associations.rb', line 142

def set_reciprocal_to_self?
  false
end

#setter_methodObject

Name symbol for the setter association method



147
148
149
# File 'lib/sequel/model/associations.rb', line 147

def setter_method
  :"#{self[:name]}="
end