Module: ApacheAge::Entities::Edge
- Extended by:
- ActiveSupport::Concern
- Included in:
- ApacheAge::Edge
- Defined in:
- lib/apache_age/entities/edge.rb
Instance Method Summary collapse
- #age_type ⇒ Object
- #create_sql ⇒ Object
- #end_class ⇒ Object
- #end_node_class ⇒ Object
- #initialize(**attributes) ⇒ Object
- #start_class ⇒ Object
- #start_node_class ⇒ Object
-
#update_sql ⇒ Object
So far just properties of string type with '' around them.
-
#validate_nodes ⇒ Object
Custom validation method to validate start_node and end_node.
Instance Method Details
#age_type ⇒ Object
36 |
# File 'lib/apache_age/entities/edge.rb', line 36 def age_type = 'edge' |
#create_sql ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/apache_age/entities/edge.rb', line 50 def create_sql self.start_node = start_node.save unless start_node.persisted? self.end_node = end_node.save unless end_node.persisted? start_node_age_label = ActiveRecord::Base.sanitize_sql(start_node.age_label) end_node_age_label = ActiveRecord::Base.sanitize_sql(end_node.age_label) sanitized_start_id = ActiveRecord::Base.sanitize_sql(["?", start_node.id]) sanitized_end_id = ActiveRecord::Base.sanitize_sql(["?", end_node.id]) # cant use sanitize_sql_like because it escapes the % and _ characters # label_name = ActiveRecord::Base.sanitize_sql_like(age_label) reject_keys = i[id start_id end_id start_node end_node] sanitized_properties = self.to_h.reject { |k, _v| reject_keys.include?(k) }.reject { |_k, v| v.nil? } .map { |k, v| "#{k}: #{ActiveRecord::Base.sanitize_sql(["?", v])}" } .join(', ') " SELECT *\n FROM cypher('\#{age_graph}', $$\n MATCH (from_node:\#{start_node_age_label}), (to_node:\#{end_node_age_label})\n WHERE id(from_node) = \#{sanitized_start_id} AND id(to_node) = \#{sanitized_end_id}\n CREATE (from_node)-[edge:\#{age_label} {\#{sanitized_properties}}]->(to_node)\n RETURN edge\n $$) as (edge agtype);\n SQL\nend\n" |
#end_class ⇒ Object
37 |
# File 'lib/apache_age/entities/edge.rb', line 37 def end_class = end_node.class |
#end_node_class ⇒ Object
39 |
# File 'lib/apache_age/entities/edge.rb', line 39 def end_node_class = end_node.class |
#initialize(**attributes) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/apache_age/entities/edge.rb', line 28 def initialize(**attributes) super self.end_id ||= end_node.id if end_node self.start_id ||= start_node.id if start_node self.end_node ||= Entity.find(end_id) if end_id self.start_node ||= Entity.find(start_id) if start_id end |
#start_class ⇒ Object
38 |
# File 'lib/apache_age/entities/edge.rb', line 38 def start_class = start_node.class |
#start_node_class ⇒ Object
40 |
# File 'lib/apache_age/entities/edge.rb', line 40 def start_node_class = start_node.class |
#update_sql ⇒ Object
So far just properties of string type with '' around them
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/apache_age/entities/edge.rb', line 78 def update_sql alias_name = age_alias || age_label.downcase set_clause = age_properties.map do |k, v| if v sanitized_value = ActiveRecord::Base.sanitize_sql(["?", v]) "#{alias_name}.#{k} = #{sanitized_value}" else "#{alias_name}.#{k} = NULL" end end.join(', ') sanitized_id = ActiveRecord::Base.sanitize_sql(["?", id]) " SELECT *\n FROM cypher('\#{age_graph}', $$\n MATCH ()-[\#{alias_name}:\#{age_label}]->()\n WHERE id(\#{alias_name}) = \#{sanitized_id}\n SET \#{set_clause}\n RETURN \#{alias_name}\n $$) as (\#{age_label} agtype);\n SQL\nend\n" |
#validate_nodes ⇒ Object
Custom validation method to validate start_node and end_node
45 46 47 48 |
# File 'lib/apache_age/entities/edge.rb', line 45 def validate_nodes errors.add(:start_node, 'invalid') if start_node && !start_node.valid? errors.add(:end_node, 'invalid') if end_node && !end_node.valid? end |