Class: Neo4j::ActiveNode::HasN::Association
Defined Under Namespace
Classes: RelFactory, RelWrapper
Instance Attribute Summary collapse
Instance Method Summary
collapse
#arrow_cypher
#add_destroy_callbacks, #validate_dependent
#decorated_rel_type, decorated_rel_type, rel_transformer
Constructor Details
#initialize(type, direction, name, options = {type: nil}) ⇒ Association
Returns a new instance of Association.
14
15
16
17
18
19
20
21
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 14
def initialize(type, direction, name, options = {type: nil})
validate_init_arguments(type, direction, name, options)
@type = type.to_sym
@name = name
@direction = direction.to_sym
@target_class_name_from_name = name.to_s.pluralize.classify
apply_vars_from_options(options)
end
|
Instance Attribute Details
#dependent ⇒ Object
Returns the value of attribute dependent.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def dependent
@dependent
end
|
#direction ⇒ Object
Returns the value of attribute direction.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def direction
@direction
end
|
#model_class ⇒ Object
Returns the value of attribute model_class.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def model_class
@model_class
end
|
#name ⇒ Object
Returns the value of attribute name.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def name
@name
end
|
#relationship ⇒ Object
Returns the value of attribute relationship.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def relationship
@relationship
end
|
#relationship_class_name ⇒ Object
Returns the value of attribute relationship_class_name.
124
125
126
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 124
def relationship_class_name
@relationship_class_name
end
|
#type ⇒ Object
Returns the value of attribute type.
12
13
14
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 12
def type
@type
end
|
Instance Method Details
#_create_relationship(start_object, node_or_nodes, properties) ⇒ Object
147
148
149
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 147
def _create_relationship(start_object, node_or_nodes, properties)
RelFactory.create(start_object, node_or_nodes, properties, self)
end
|
#callback(type) ⇒ Object
102
103
104
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 102
def callback(type)
@callbacks[type]
end
|
#create_method ⇒ Object
143
144
145
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 143
def create_method
unique? ? :create_unique : :create
end
|
#creates_unique_option ⇒ Object
139
140
141
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 139
def creates_unique_option
@unique || :none
end
|
#derive_model_class ⇒ Object
23
24
25
26
27
28
29
30
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 23
def derive_model_class
refresh_model_class! if pending_model_refresh?
return @model_class unless @model_class.nil?
return nil if relationship_class.nil?
dir_class = direction == :in ? :from_class : :to_class
return false if relationship_class.send(dir_class).to_s.to_sym == :any
relationship_class.send(dir_class)
end
|
#discovered_model ⇒ Object
86
87
88
89
90
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 86
def discovered_model
target_classes.select do |constant|
constant.ancestors.include?(::Neo4j::ActiveNode)
end
end
|
#pending_model_refresh? ⇒ Boolean
56
57
58
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 56
def pending_model_refresh?
!!@pending_model_refresh
end
|
106
107
108
109
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 106
def perform_callback(caller, other_node, type)
return if callback(type).nil?
caller.send(callback(type), other_node)
end
|
#queue_model_refresh! ⇒ Object
39
40
41
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 39
def queue_model_refresh!
@pending_model_refresh = true
end
|
#refresh_model_class! ⇒ Object
32
33
34
35
36
37
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 32
def refresh_model_class!
@pending_model_refresh = @target_classes_or_nil = nil
@model_class = ClassArguments.constantize_argument(@model_class.to_s) if @model_class
end
|
#relationship_class ⇒ Object
130
131
132
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 130
def relationship_class
@relationship_class ||= @relationship_class_name && @relationship_class_name.constantize
end
|
#relationship_class? ⇒ Boolean
Also known as:
rel_class?
151
152
153
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 151
def relationship_class?
!!relationship_class
end
|
#relationship_class_type ⇒ Object
126
127
128
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 126
def relationship_class_type
relationship_class._type.to_sym
end
|
#relationship_type(create = false) ⇒ Object
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 111
def relationship_type(create = false)
case
when relationship_class
relationship_class_type
when !@relationship_type.nil?
@relationship_type
when @origin
origin_type
else
(create || exceptional_target_class?) && decorated_rel_type(@name)
end
end
|
#target_class ⇒ Object
92
93
94
95
96
97
98
99
100
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 92
def target_class
return @target_class if @target_class
return if !(target_class_names && target_class_names.size == 1)
class_const = ClassArguments.constantize_argument(target_class_names[0])
@target_class = class_const
end
|
#target_class_names ⇒ Object
60
61
62
63
64
65
66
67
68
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 60
def target_class_names
option = target_class_option(derive_model_class)
@target_class_names ||= if option.is_a?(Array)
option.map(&:to_s)
elsif option
[option.to_s]
end
end
|
#target_class_option(model_class) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 43
def target_class_option(model_class)
case model_class
when nil
@target_class_name_from_name ? "#{association_model_namespace}::#{@target_class_name_from_name}" : @target_class_name_from_name
when Array
model_class.map { |sub_model_class| target_class_option(sub_model_class) }
when false
false
else
model_class.to_s[0, 2] == '::' ? model_class.to_s : "::#{model_class}"
end
end
|
#target_classes ⇒ Object
70
71
72
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 70
def target_classes
ClassArguments.constantize_argument(target_class_names)
end
|
#target_classes_or_nil ⇒ Object
74
75
76
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 74
def target_classes_or_nil
@target_classes_or_nil ||= discovered_model if target_class_names
end
|
#target_where_clause ⇒ Object
78
79
80
81
82
83
84
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 78
def target_where_clause
return if model_class == false
Array.new(target_classes).map do |target_class|
"#{name}:`#{target_class.mapped_label_name}`"
end.join(' OR ')
end
|
134
135
136
137
|
# File 'lib/neo4j/active_node/has_n/association.rb', line 134
def unique?
return relationship_class.unique? if rel_class?
@origin ? origin_association.unique? : !!@unique
end
|