rails_age 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -4
- data/README.md +120 -6
- data/lib/apache_age/entities/class_methods.rb +112 -0
- data/lib/apache_age/entities/common_methods.rb +118 -0
- data/lib/apache_age/entities/edge.rb +98 -0
- data/lib/apache_age/entities/entity.rb +69 -0
- data/lib/apache_age/entities/vertex.rb +53 -0
- data/lib/apache_age/types/age_type_generator.rb +46 -0
- data/lib/apache_age/validators/unique_edge_validator.rb +53 -0
- data/lib/apache_age/validators/unique_vertex_validator.rb +28 -0
- data/lib/apache_age/validators/vertex_type_validator.rb +14 -0
- data/lib/rails_age/version.rb +1 -1
- data/lib/rails_age.rb +10 -7
- data/lib/tasks/install.rake +91 -0
- metadata +30 -18
- data/lib/apache_age/class_methods.rb +0 -75
- data/lib/apache_age/common_methods.rb +0 -126
- data/lib/apache_age/edge.rb +0 -64
- data/lib/apache_age/entity.rb +0 -67
- data/lib/apache_age/vertex.rb +0 -52
data/lib/apache_age/entity.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
module ApacheAge
|
2
|
-
class Entity
|
3
|
-
class << self
|
4
|
-
def find_by(attributes)
|
5
|
-
where_clause = attributes.map { |k, v| "find.#{k} = '#{v}'" }.join(' AND ')
|
6
|
-
handle_find(where_clause)
|
7
|
-
end
|
8
|
-
|
9
|
-
def find(id)
|
10
|
-
where_clause = "id(find) = #{id}"
|
11
|
-
handle_find(where_clause)
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def age_graph = 'age_schema'
|
17
|
-
|
18
|
-
def handle_find(where_clause)
|
19
|
-
# try to find a vertex
|
20
|
-
match_node = '(find)'
|
21
|
-
cypher_sql = find_sql(match_node, where_clause)
|
22
|
-
age_response = execute_find(cypher_sql)
|
23
|
-
|
24
|
-
if age_response.nil?
|
25
|
-
# if not a vertex try to find an edge
|
26
|
-
match_edge = '()-[find]->()'
|
27
|
-
cypher_sql = find_sql(match_edge, where_clause)
|
28
|
-
age_response = execute_find(cypher_sql)
|
29
|
-
return nil if age_response.nil?
|
30
|
-
end
|
31
|
-
|
32
|
-
instantiate_result(age_response)
|
33
|
-
end
|
34
|
-
|
35
|
-
def execute_find(cypher_sql)
|
36
|
-
age_result = ActiveRecord::Base.connection.execute(cypher_sql)
|
37
|
-
return nil if age_result.values.first.nil?
|
38
|
-
|
39
|
-
age_result
|
40
|
-
end
|
41
|
-
|
42
|
-
def instantiate_result(age_response)
|
43
|
-
age_type = age_response.values.first.first.split('::').last
|
44
|
-
json_string = age_response.values.first.first.split('::').first
|
45
|
-
json_data = JSON.parse(json_string)
|
46
|
-
|
47
|
-
age_label = json_data['label']
|
48
|
-
attribs = json_data.except('label', 'properties')
|
49
|
-
.merge(json_data['properties'])
|
50
|
-
.symbolize_keys
|
51
|
-
|
52
|
-
"#{json_data['label'].gsub('__', '::')}".constantize.new(**attribs)
|
53
|
-
end
|
54
|
-
|
55
|
-
def find_sql(match_clause, where_clause)
|
56
|
-
<<-SQL
|
57
|
-
SELECT *
|
58
|
-
FROM cypher('#{age_graph}', $$
|
59
|
-
MATCH #{match_clause}
|
60
|
-
WHERE #{where_clause}
|
61
|
-
RETURN find
|
62
|
-
$$) as (found agtype);
|
63
|
-
SQL
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
data/lib/apache_age/vertex.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module ApacheAge
|
2
|
-
module Vertex
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
# include ApacheAge::Entity
|
5
|
-
|
6
|
-
included do
|
7
|
-
include ActiveModel::Model
|
8
|
-
include ActiveModel::Dirty
|
9
|
-
include ActiveModel::Attributes
|
10
|
-
|
11
|
-
attribute :id, :integer
|
12
|
-
|
13
|
-
extend ApacheAge::ClassMethods
|
14
|
-
include ApacheAge::CommonMethods
|
15
|
-
end
|
16
|
-
|
17
|
-
def age_type = 'vertex'
|
18
|
-
|
19
|
-
# AgeSchema::Nodes::Company.create(company_name: 'Bedrock Quarry')
|
20
|
-
# SELECT *
|
21
|
-
# FROM cypher('age_schema', $$
|
22
|
-
# CREATE (company:Company {company_name: 'Bedrock Quarry'})
|
23
|
-
# RETURN company
|
24
|
-
# $$) as (Company agtype);
|
25
|
-
def create_sql
|
26
|
-
alias_name = age_alias || age_label.downcase
|
27
|
-
<<-SQL
|
28
|
-
SELECT *
|
29
|
-
FROM cypher('#{age_graph}', $$
|
30
|
-
CREATE (#{alias_name}#{self})
|
31
|
-
RETURN #{alias_name}
|
32
|
-
$$) as (#{age_label} agtype);
|
33
|
-
SQL
|
34
|
-
end
|
35
|
-
|
36
|
-
# So far just properties of string type with '' around them
|
37
|
-
def update_sql
|
38
|
-
alias_name = age_alias || age_label.downcase
|
39
|
-
set_caluse =
|
40
|
-
age_properties.map { |k, v| v ? "#{alias_name}.#{k} = '#{v}'" : "#{alias_name}.#{k} = NULL" }.join(', ')
|
41
|
-
<<-SQL
|
42
|
-
SELECT *
|
43
|
-
FROM cypher('#{age_graph}', $$
|
44
|
-
MATCH (#{alias_name}:#{age_label})
|
45
|
-
WHERE id(#{alias_name}) = #{id}
|
46
|
-
SET #{set_caluse}
|
47
|
-
RETURN #{alias_name}
|
48
|
-
$$) as (#{age_label} agtype);
|
49
|
-
SQL
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|