keymaker 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +36 -10
- data/keymaker.gemspec +37 -33
- data/lib/keymaker.rb +3 -2
- data/lib/keymaker/configuration.rb +14 -24
- data/lib/keymaker/node.rb +1 -1
- data/lib/keymaker/request.rb +0 -2
- data/lib/keymaker/requests/add_node_to_index_request.rb +10 -1
- data/lib/keymaker/requests/create_relationship_request.rb +8 -1
- data/lib/keymaker/requests/delete_relationship_request.rb +10 -1
- data/lib/keymaker/requests/execute_cypher_request.rb +8 -3
- data/lib/keymaker/requests/execute_gremlin_request.rb +8 -3
- data/lib/keymaker/requests/remove_node_from_index_request.rb +0 -2
- data/lib/keymaker/requests/service_root_request.rb +1 -1
- data/lib/keymaker/requests/{path_traverse_request.rb → traverse_path_request.rb} +16 -4
- data/lib/keymaker/requests/update_node_properties_request.rb +8 -1
- data/lib/keymaker/response.rb +1 -0
- data/lib/keymaker/service.rb +16 -4
- data/spec/cassettes/Keymaker_AddNodeToIndexRequest/{returns_a_201_status_code.yml → with_valid_options/returns_a_201_status_code.yml} +54 -55
- data/spec/cassettes/Keymaker_AddNodeToIndexRequest/{returns_application → with_valid_options/returns_application}/json.yml +54 -55
- data/spec/cassettes/Keymaker_AddNodeToIndexRequest/{returns_the_Neo4j_REST_API_starting_point_response_request.yml → with_valid_options/returns_the_Neo4j_REST_API_starting_point_response_request.yml} +54 -55
- data/spec/cassettes/Keymaker_CreateNodeRequest/returns_a_201_status_code.yml +112 -0
- data/spec/cassettes/Keymaker_CreateNodeRequest/returns_application/json.yml +112 -0
- data/spec/cassettes/Keymaker_CreateNodeRequest/with_properties/creates_a_node_with_the_given_properties.yml +112 -0
- data/spec/cassettes/Keymaker_CreateNodeRequest/without_properties/creates_an_empty_node.yml +112 -0
- data/spec/cassettes/Keymaker_CreateRelationshipRequest/with_invalid_options/raises_ClientError.yml +201 -0
- data/spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/creates_a_node_with_the_given_properties.yml +233 -0
- data/spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/returns_a_201_status_code.yml +196 -0
- data/spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/returns_application/json.yml +196 -0
- data/spec/cassettes/Keymaker_CreateRelationshipRequest/without_properties/creates_an_empty_relationship_of_type_birthed_.yml +195 -0
- data/spec/cassettes/Keymaker_DeleteRelationshipRequest/with_a_non-existent_relationship/raises_ResourceNotFound.yml +191 -0
- data/spec/cassettes/Keymaker_DeleteRelationshipRequest/with_an_existing_relationship/deletes_the_relationship.yml +219 -0
- data/spec/cassettes/Keymaker_ExecuteCypherRequest/with_a_valid_Cypher_Query/returns_a_200_status_code.yml +111 -0
- data/spec/cassettes/Keymaker_ExecuteCypherRequest/with_an_invalid_Cypher_Query/raises_ClientError.yml +108 -0
- data/spec/cassettes/Keymaker_ExecuteGremlinRequest/with_a_valid_Gremlin_Script/returns_a_200_status_code.yml +98 -0
- data/spec/cassettes/Keymaker_ExecuteGremlinRequest/with_an_invalid_Gremlin_Script/raises_ClientError.yml +107 -0
- data/spec/cassettes/Keymaker_TraversePathRequest/_traverse_path_properties/with_options/builds_the_query_properties_with_defaults.yml +157 -0
- data/spec/cassettes/Keymaker_TraversePathRequest/with_invalid_options/raise_a_ClientError.yml +193 -0
- data/spec/cassettes/Keymaker_TraversePathRequest/with_valid_options/returns_status_code_200.yml +269 -0
- data/spec/cassettes/Keymaker_UpdateNodePropertiesRequest/_node_properties/excludes_the_node_id.yml +157 -0
- data/spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_invalid_options/raises_a_ClientError.yml +193 -0
- data/spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_valid_options/returns_a_status_of_204.yml +182 -0
- data/spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_valid_options/updates_the_properties.yml +214 -0
- data/spec/keymaker/requests/add_node_to_index_request_spec.rb +30 -28
- data/spec/keymaker/requests/batch_get_nodes_request_spec.rb +4 -4
- data/spec/keymaker/requests/batch_request_spec.rb +33 -33
- data/spec/keymaker/requests/create_node_request_spec.rb +34 -0
- data/spec/keymaker/requests/create_relationship_request_spec.rb +58 -0
- data/spec/keymaker/requests/delete_relationship_request_spec.rb +28 -0
- data/spec/keymaker/requests/execute_cypher_request_spec.rb +23 -0
- data/spec/keymaker/requests/execute_gremlin_request_spec.rb +23 -0
- data/spec/keymaker/requests/service_root_request_spec.rb +9 -9
- data/spec/keymaker/requests/traverse_path_request_spec.rb +50 -0
- data/spec/keymaker/requests/update_node_properties_request_spec.rb +50 -0
- data/spec/keymaker/service_spec.rb +31 -0
- data/spec/keymaker_spec.rb +26 -2
- data/spec/support/keymaker.rb +10 -4
- metadata +86 -10
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
A multi-layer REST API Ruby wrapper for the Neo4j graph database built on top of [Faraday][].
|
4
4
|
|
5
|
+
- Layer 1 interacts with the Neo4j REST API raw requests
|
6
|
+
- Layer 2 binds the raw HTTP requests into Ruby Objects
|
7
|
+
- Layer 3 implements ActiveModel and treats Nodes and Relationships as Ruby Objects
|
8
|
+
|
5
9
|
```
|
6
10
|
Oracle: Our time is up. Listen to me, Neo.
|
7
11
|
You can save Zion if you reach The Source,
|
@@ -24,7 +28,7 @@ rake neo4j:start RAILS_ENV=test
|
|
24
28
|
Add this line to your application's Gemfile:
|
25
29
|
|
26
30
|
```ruby
|
27
|
-
gem
|
31
|
+
gem "keymaker"
|
28
32
|
```
|
29
33
|
|
30
34
|
And then execute:
|
@@ -52,18 +56,18 @@ Then, create a Rails initializer `config/initializers/keymaker.rb`:
|
|
52
56
|
|
53
57
|
```ruby
|
54
58
|
if Rails.env.development? || Rails.env.test?
|
55
|
-
database_config = YAML::load_file(
|
59
|
+
database_config = YAML::load_file("config/neo4j.yml")
|
56
60
|
Keymaker.configure do |c|
|
57
|
-
c.server = database_config["#{Rails.env}"][
|
58
|
-
c.port = database_config["#{Rails.env}"][
|
61
|
+
c.server = database_config["#{Rails.env}"]["server"]
|
62
|
+
c.port = database_config["#{Rails.env}"]["port"]
|
59
63
|
end
|
60
64
|
else
|
61
65
|
# Heroku neo4j add-on
|
62
66
|
Keymaker.configure do |c|
|
63
|
-
c.server = ENV[
|
64
|
-
c.port = ENV[
|
65
|
-
c.username = ENV[
|
66
|
-
c.password = ENV[
|
67
|
+
c.server = ENV["NEO4J_HOST"]
|
68
|
+
c.port = ENV["NEO4J_PORT"]
|
69
|
+
c.username = ENV["NEO4J_LOGIN"]
|
70
|
+
c.password = ENV["NEO4J_PASSWORD"]
|
67
71
|
end
|
68
72
|
end
|
69
73
|
```
|
@@ -79,18 +83,40 @@ end
|
|
79
83
|
|
80
84
|
## Create a node ##
|
81
85
|
|
82
|
-
|
86
|
+
terminator_response = Keymaker.service.create_node_request({:name => "Terminator",
|
87
|
+
:catch_phrase => "I'll be back"})
|
88
|
+
terminator = Keymaker.service.get_node(terminator_response.neo4j_id)
|
89
|
+
|
90
|
+
john_response = Keymaker.service.create_node_request({:name => "John Connor",
|
91
|
+
:catch_phrase => "No problemo"})
|
92
|
+
|
93
|
+
john_connor = Keymaker.service.get_node(john_response.neo4j_id)
|
94
|
+
john_connor.name # => "John Connor"
|
95
|
+
john_connor.catch_phrase # => "No problemo"
|
83
96
|
|
84
97
|
## Update node properties ##
|
85
98
|
|
99
|
+
Keymaker.service.update_node_properties_request({:node_id => john_connor.neo4j_id,
|
100
|
+
:catch_phrase => "Easy money!"})
|
101
|
+
john_connor.catch_phrase # => "Easy money!"
|
102
|
+
|
86
103
|
## Delete a node ##
|
87
104
|
|
105
|
+
Keymaker.service.delete_node_request({:node_id => john_connor.neo4j_id})
|
106
|
+
Keymaker.service.get_node_request({:node_id => john_connor.neo4j_id})
|
107
|
+
# => Keymaker::ResourceNotFound raised
|
108
|
+
|
88
109
|
## Create a relationship ##
|
89
110
|
|
90
|
-
|
111
|
+
rel = Keymaker.service.create_relationship_request({:node_id => john_connor.neo4j_id,
|
112
|
+
:end_node_id => terminator.neo4j_id,
|
113
|
+
:rel_type => "knows",
|
114
|
+
:data => {:since => "Summer of 1984"})
|
91
115
|
|
92
116
|
## Delete a relationship ##
|
93
117
|
|
118
|
+
Keymaker.service.delete_relationship_request(:relationship_id => rel.neo4j_id)
|
119
|
+
|
94
120
|
```
|
95
121
|
|
96
122
|
### Nodes
|
data/keymaker.gemspec
CHANGED
@@ -1,55 +1,31 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
## This is the rakegem gemspec template. Make sure you read and understand
|
3
|
-
## all of the comments. Some sections require modification, and others can
|
4
|
-
## be deleted if you don't need them. Once you understand the contents of
|
5
|
-
## this file, feel free to delete any comments that begin with two hash marks.
|
6
|
-
## You can find comprehensive Gem::Specification documentation, at
|
7
|
-
## http://docs.rubygems.org/read/chapter/20
|
8
2
|
Gem::Specification.new do |s|
|
9
3
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
4
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
5
|
s.rubygems_version = '1.3.5'
|
12
6
|
|
13
|
-
## Leave these as is they will be modified for you by the rake gemspec task.
|
14
|
-
## If your rubyforge_project name is different, then edit it and comment out
|
15
|
-
## the sub! line in the Rakefile
|
16
7
|
s.name = 'keymaker'
|
17
|
-
s.version = '0.0.
|
18
|
-
s.date = '2012-
|
8
|
+
s.version = '0.0.9'
|
9
|
+
s.date = '2012-09-22'
|
19
10
|
|
20
|
-
## Make sure your summary is short. The description may be as long
|
21
|
-
## as you like.
|
22
11
|
s.description = %q{A multi-layer REST API wrapper for neo4j.}
|
23
12
|
s.summary = %q{A multi-layer REST API wrapper for neo4j.}
|
24
13
|
|
25
|
-
## List the primary authors. If there are a bunch of authors, it's probably
|
26
|
-
## better to set the email to an email list or something. If you don't have
|
27
|
-
## a custom homepage, consider using your GitHub URL or the like.
|
28
14
|
s.authors = ["Rogelio J. Samour", "Travis L. Anderson"]
|
29
15
|
s.email = ["rogelio@therubymug.com", "travis@travisleeanderson.com"]
|
30
16
|
s.homepage = "https://github.com/therubymug/keymaker"
|
31
17
|
|
32
|
-
## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
|
33
|
-
## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
|
34
18
|
s.require_paths = %w[lib]
|
35
19
|
|
36
|
-
## Specify any RDoc options here. You'll want to add your README and
|
37
|
-
## LICENSE files to the extra_rdoc_files list.
|
38
|
-
## s.rdoc_options = ["--charset=UTF-8"]
|
39
20
|
s.extra_rdoc_files = %w[README.md LICENSE.md]
|
40
21
|
|
41
|
-
## List your runtime dependencies here. Runtime dependencies are those
|
42
|
-
## that are needed for an end user to actually USE your code.
|
43
|
-
## s.add_dependency('DEPNAME', [">= 1.1.0", "< 2.0.0"])
|
44
22
|
s.add_dependency 'activemodel'
|
45
23
|
s.add_dependency 'activesupport'
|
46
24
|
s.add_dependency 'addressable'
|
25
|
+
s.add_dependency 'hashie'
|
47
26
|
s.add_dependency 'faraday'
|
48
27
|
s.add_dependency 'faraday_middleware'
|
49
28
|
|
50
|
-
## List your development dependencies here. Development dependencies are
|
51
|
-
## those that are only needed during development
|
52
|
-
## s.add_development_dependency('DEVDEPNAME', [">= 1.1.0", "< 2.0.0"])
|
53
29
|
s.add_development_dependency 'fakeweb'
|
54
30
|
s.add_development_dependency 'rake'
|
55
31
|
s.add_development_dependency 'rspec'
|
@@ -86,34 +62,64 @@ Gem::Specification.new do |s|
|
|
86
62
|
lib/keymaker/requests/execute_gremlin_request.rb
|
87
63
|
lib/keymaker/requests/get_node_request.rb
|
88
64
|
lib/keymaker/requests/get_relationship_types_request.rb
|
89
|
-
lib/keymaker/requests/path_traverse_request.rb
|
90
65
|
lib/keymaker/requests/remove_node_from_index_request.rb
|
91
66
|
lib/keymaker/requests/service_root_request.rb
|
67
|
+
lib/keymaker/requests/traverse_path_request.rb
|
92
68
|
lib/keymaker/requests/update_node_properties_request.rb
|
93
69
|
lib/keymaker/response.rb
|
94
70
|
lib/keymaker/serialization.rb
|
95
71
|
lib/keymaker/service.rb
|
96
|
-
spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_a_201_status_code.yml
|
97
|
-
spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_application/json.yml
|
98
|
-
spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_the_Neo4j_REST_API_starting_point_response_request.yml
|
72
|
+
spec/cassettes/Keymaker_AddNodeToIndexRequest/with_valid_options/returns_a_201_status_code.yml
|
73
|
+
spec/cassettes/Keymaker_AddNodeToIndexRequest/with_valid_options/returns_application/json.yml
|
74
|
+
spec/cassettes/Keymaker_AddNodeToIndexRequest/with_valid_options/returns_the_Neo4j_REST_API_starting_point_response_request.yml
|
99
75
|
spec/cassettes/Keymaker_BatchRequest/when_a_resource_is_not_found/raises_BatchRequestError.yml
|
100
76
|
spec/cassettes/Keymaker_BatchRequest/when_to_and_method_are_not_set/raises_BatchRequestError.yml
|
101
77
|
spec/cassettes/Keymaker_BatchRequest/with_valid_options/returns_a_200_status_code.yml
|
102
78
|
spec/cassettes/Keymaker_BatchRequest/with_valid_options/runs_the_commands_and_returns_their_respective_results.yml
|
79
|
+
spec/cassettes/Keymaker_CreateNodeRequest/returns_a_201_status_code.yml
|
80
|
+
spec/cassettes/Keymaker_CreateNodeRequest/returns_application/json.yml
|
81
|
+
spec/cassettes/Keymaker_CreateNodeRequest/with_properties/creates_a_node_with_the_given_properties.yml
|
82
|
+
spec/cassettes/Keymaker_CreateNodeRequest/without_properties/creates_an_empty_node.yml
|
83
|
+
spec/cassettes/Keymaker_CreateRelationshipRequest/with_invalid_options/raises_ClientError.yml
|
84
|
+
spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/creates_a_node_with_the_given_properties.yml
|
85
|
+
spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/returns_a_201_status_code.yml
|
86
|
+
spec/cassettes/Keymaker_CreateRelationshipRequest/with_properties/returns_application/json.yml
|
87
|
+
spec/cassettes/Keymaker_CreateRelationshipRequest/without_properties/creates_an_empty_relationship_of_type_birthed_.yml
|
88
|
+
spec/cassettes/Keymaker_DeleteRelationshipRequest/with_a_non-existent_relationship/raises_ResourceNotFound.yml
|
89
|
+
spec/cassettes/Keymaker_DeleteRelationshipRequest/with_an_existing_relationship/deletes_the_relationship.yml
|
90
|
+
spec/cassettes/Keymaker_ExecuteCypherRequest/with_a_valid_Cypher_Query/returns_a_200_status_code.yml
|
91
|
+
spec/cassettes/Keymaker_ExecuteCypherRequest/with_an_invalid_Cypher_Query/raises_ClientError.yml
|
92
|
+
spec/cassettes/Keymaker_ExecuteGremlinRequest/with_a_valid_Gremlin_Script/returns_a_200_status_code.yml
|
93
|
+
spec/cassettes/Keymaker_ExecuteGremlinRequest/with_an_invalid_Gremlin_Script/raises_ClientError.yml
|
103
94
|
spec/cassettes/Keymaker_GetNodeRequest/with_a_non-existent_node_id/raises_ResourceNotFound.yml
|
104
95
|
spec/cassettes/Keymaker_GetNodeRequest/with_an_empty_node_id/raises_ClientError.yml
|
105
96
|
spec/cassettes/Keymaker_GetRelationshipTypesRequest/with_existing_relationships/returns_a_unique_array_of_relationship_types.yml
|
106
97
|
spec/cassettes/Keymaker_ServiceRootRequest/returns_a_200_status_code.yml
|
107
98
|
spec/cassettes/Keymaker_ServiceRootRequest/returns_application/json.yml
|
108
99
|
spec/cassettes/Keymaker_ServiceRootRequest/returns_the_Neo4j_REST_API_starting_point_response_request.yml
|
100
|
+
spec/cassettes/Keymaker_TraversePathRequest/_traverse_path_properties/with_options/builds_the_query_properties_with_defaults.yml
|
101
|
+
spec/cassettes/Keymaker_TraversePathRequest/with_invalid_options/raise_a_ClientError.yml
|
102
|
+
spec/cassettes/Keymaker_TraversePathRequest/with_valid_options/returns_status_code_200.yml
|
103
|
+
spec/cassettes/Keymaker_UpdateNodePropertiesRequest/_node_properties/excludes_the_node_id.yml
|
104
|
+
spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_invalid_options/raises_a_ClientError.yml
|
105
|
+
spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_valid_options/returns_a_status_of_204.yml
|
106
|
+
spec/cassettes/Keymaker_UpdateNodePropertiesRequest/with_valid_options/updates_the_properties.yml
|
109
107
|
spec/configuration_spec.rb
|
110
108
|
spec/keymaker/requests/add_node_to_index_request_spec.rb
|
111
109
|
spec/keymaker/requests/batch_get_nodes_request_spec.rb
|
112
110
|
spec/keymaker/requests/batch_request_spec.rb
|
111
|
+
spec/keymaker/requests/create_node_request_spec.rb
|
112
|
+
spec/keymaker/requests/create_relationship_request_spec.rb
|
113
113
|
spec/keymaker/requests/delete_node_request_spec.rb
|
114
|
+
spec/keymaker/requests/delete_relationship_request_spec.rb
|
115
|
+
spec/keymaker/requests/execute_cypher_request_spec.rb
|
116
|
+
spec/keymaker/requests/execute_gremlin_request_spec.rb
|
114
117
|
spec/keymaker/requests/get_node_request_spec.rb
|
115
118
|
spec/keymaker/requests/get_relationship_types_request_spec.rb
|
116
119
|
spec/keymaker/requests/service_root_request_spec.rb
|
120
|
+
spec/keymaker/requests/traverse_path_request_spec.rb
|
121
|
+
spec/keymaker/requests/update_node_properties_request_spec.rb
|
122
|
+
spec/keymaker/service_spec.rb
|
117
123
|
spec/keymaker_spec.rb
|
118
124
|
spec/service_spec.rb
|
119
125
|
spec/spec_helper.rb
|
@@ -122,7 +128,5 @@ Gem::Specification.new do |s|
|
|
122
128
|
]
|
123
129
|
# = MANIFEST =
|
124
130
|
|
125
|
-
## Test files will be grabbed from the file list. Make sure the path glob
|
126
|
-
## matches what you actually use.
|
127
131
|
s.test_files = s.files.grep(%r{^spec/})
|
128
132
|
end
|
data/lib/keymaker.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'faraday_middleware'
|
3
|
+
require 'hashie'
|
3
4
|
require 'active_model'
|
4
5
|
require 'active_support/core_ext/string/inflections'
|
5
6
|
|
@@ -28,7 +29,7 @@ require 'keymaker/requests/get_relationship_types_request'
|
|
28
29
|
|
29
30
|
require 'keymaker/requests/execute_cypher_request'
|
30
31
|
require 'keymaker/requests/execute_gremlin_request'
|
31
|
-
require 'keymaker/requests/
|
32
|
+
require 'keymaker/requests/traverse_path_request'
|
32
33
|
require 'keymaker/requests/service_root_request'
|
33
34
|
|
34
35
|
require 'keymaker/indexing'
|
@@ -39,7 +40,7 @@ require 'keymaker/railtie' if defined? Rails::Railtie
|
|
39
40
|
|
40
41
|
module Keymaker
|
41
42
|
|
42
|
-
VERSION = "0.0.
|
43
|
+
VERSION = "0.0.9"
|
43
44
|
|
44
45
|
def self.service
|
45
46
|
@service ||= Keymaker::Service.new(Keymaker::Configuration.new)
|
@@ -3,25 +3,21 @@ require "addressable/uri"
|
|
3
3
|
module Keymaker
|
4
4
|
class Configuration
|
5
5
|
|
6
|
-
attr_accessor :protocol, :server, :port,
|
7
|
-
:data_directory, :cypher_path, :gremlin_path,
|
8
|
-
:log_file, :log_enabled, :logger,
|
6
|
+
attr_accessor :protocol, :server, :port, :data_directory,
|
9
7
|
:authentication, :username, :password
|
10
8
|
|
11
9
|
def initialize(attrs={})
|
12
10
|
self.protocol = attrs.fetch(:protocol) {'http'}
|
13
11
|
self.server = attrs.fetch(:server) {'localhost'}
|
14
12
|
self.port = attrs.fetch(:port) {7474}
|
15
|
-
self.data_directory = attrs.fetch(:data_directory) {'db/data'}
|
16
|
-
self.cypher_path = attrs.fetch(:cypher_path) {'cypher'}
|
17
|
-
self.gremlin_path = attrs.fetch(:gremlin_path) {'ext/GremlinPlugin/graphdb/execute_script'}
|
18
13
|
self.authentication = attrs.fetch(:authentication) {{}}
|
19
14
|
self.username = attrs.fetch(:username) {nil}
|
20
15
|
self.password = attrs.fetch(:password) {nil}
|
16
|
+
self.data_directory = 'db/data'
|
21
17
|
end
|
22
18
|
|
23
19
|
def service_root
|
24
|
-
|
20
|
+
@service_root ||= Keymaker.service.service_root_request.body
|
25
21
|
end
|
26
22
|
|
27
23
|
def service_root_url
|
@@ -47,32 +43,30 @@ module Keymaker
|
|
47
43
|
end
|
48
44
|
end
|
49
45
|
|
46
|
+
# paths
|
47
|
+
|
50
48
|
def full_cypher_path
|
51
|
-
|
49
|
+
service_root.cypher
|
52
50
|
end
|
53
51
|
|
54
52
|
def full_gremlin_path
|
55
|
-
|
53
|
+
service_root.extensions.fetch('GremlinPlugin', {}).fetch('execute_script', nil)
|
56
54
|
end
|
57
55
|
|
58
56
|
def node_path
|
59
|
-
|
57
|
+
service_root.node
|
60
58
|
end
|
61
59
|
|
62
60
|
def node_properties_path(node_id)
|
63
|
-
[node_path, node_id.to_s,
|
64
|
-
end
|
65
|
-
|
66
|
-
def path_traverse_node_path(node_id)
|
67
|
-
[node_path, node_id.to_s, "traverse", "path"].join("/")
|
61
|
+
[node_path, node_id.to_s, 'properties'].join('/')
|
68
62
|
end
|
69
63
|
|
70
|
-
def
|
71
|
-
[
|
64
|
+
def node_uri(node_id)
|
65
|
+
[node_path, node_id.to_s].join("/")
|
72
66
|
end
|
73
67
|
|
74
68
|
def batch_path
|
75
|
-
|
69
|
+
service_root.batch
|
76
70
|
end
|
77
71
|
|
78
72
|
def relationship_path(relationship_id)
|
@@ -80,7 +74,7 @@ module Keymaker
|
|
80
74
|
end
|
81
75
|
|
82
76
|
def relationship_types_path
|
83
|
-
|
77
|
+
service_root.relationship_types
|
84
78
|
end
|
85
79
|
|
86
80
|
def relationships_path_for_node(node_id)
|
@@ -92,11 +86,7 @@ module Keymaker
|
|
92
86
|
end
|
93
87
|
|
94
88
|
def node_index_path(index_name)
|
95
|
-
[
|
96
|
-
end
|
97
|
-
|
98
|
-
def node_uri(node_id)
|
99
|
-
[service_root, node_path, node_id.to_s].join("/")
|
89
|
+
[service_root.node_index, index_name.to_s].join("/")
|
100
90
|
end
|
101
91
|
|
102
92
|
end
|
data/lib/keymaker/node.rb
CHANGED
data/lib/keymaker/request.rb
CHANGED
@@ -3,7 +3,6 @@ module Keymaker
|
|
3
3
|
|
4
4
|
extend Forwardable
|
5
5
|
|
6
|
-
def_delegator :config, :batch_node_path
|
7
6
|
def_delegator :config, :batch_path
|
8
7
|
def_delegator :config, :data_directory_path
|
9
8
|
def_delegator :config, :full_cypher_path
|
@@ -13,7 +12,6 @@ module Keymaker
|
|
13
12
|
def_delegator :config, :node_path
|
14
13
|
def_delegator :config, :node_properties_path
|
15
14
|
def_delegator :config, :node_uri
|
16
|
-
def_delegator :config, :path_traverse_node_path
|
17
15
|
def_delegator :config, :relationship_path
|
18
16
|
def_delegator :config, :relationships_path_for_node
|
19
17
|
def_delegator :config, :relationship_types_path
|
@@ -2,7 +2,16 @@ module Keymaker
|
|
2
2
|
class AddNodeToIndexRequest < Request
|
3
3
|
|
4
4
|
def submit
|
5
|
-
service.post(node_index_path(opts[:index_name]), {key: opts[:key], value: opts[:value], uri: node_uri(opts[:node_id])})
|
5
|
+
service.post(node_index_path(opts[:index_name]), {key: opts[:key], value: opts[:value], uri: node_uri(opts[:node_id])}).on_error do |response|
|
6
|
+
case response.status
|
7
|
+
when 404
|
8
|
+
raise ResourceNotFound.new(response, response.body)
|
9
|
+
when (400..499)
|
10
|
+
raise ClientError.new(response, response.body)
|
11
|
+
when (500..599)
|
12
|
+
raise ServerError.new(response, response.body)
|
13
|
+
end
|
14
|
+
end
|
6
15
|
end
|
7
16
|
|
8
17
|
end
|
@@ -10,7 +10,14 @@ module Keymaker
|
|
10
10
|
class CreateRelationshipRequest < Request
|
11
11
|
|
12
12
|
def submit
|
13
|
-
service.post(relationships_path_for_node(opts[:node_id]), rel_properties)
|
13
|
+
service.post(relationships_path_for_node(opts[:node_id]), rel_properties).on_error do |response|
|
14
|
+
case response.status
|
15
|
+
when (400..499)
|
16
|
+
raise ClientError.new(response, response.body)
|
17
|
+
when (500..599)
|
18
|
+
raise ServerError.new(response, response.body)
|
19
|
+
end
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
def rel_properties
|
@@ -9,7 +9,16 @@ module Keymaker
|
|
9
9
|
class DeleteRelationshipRequest < Request
|
10
10
|
|
11
11
|
def submit
|
12
|
-
service.delete(relationship_path(opts[:relationship_id]))
|
12
|
+
service.delete(relationship_path(opts[:relationship_id])).on_error do |response|
|
13
|
+
case response.status
|
14
|
+
when 404
|
15
|
+
raise ResourceNotFound.new(response, response.body)
|
16
|
+
when (400..499)
|
17
|
+
raise ClientError.new(response, response.body)
|
18
|
+
when (500..599)
|
19
|
+
raise ServerError.new(response, response.body)
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
14
23
|
|
15
24
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module Keymaker
|
2
2
|
class ExecuteCypherRequest < Request
|
3
|
-
|
4
3
|
def submit
|
5
|
-
service.post(full_cypher_path, opts).
|
4
|
+
service.post(full_cypher_path, opts).on_error do |response|
|
5
|
+
case response.status
|
6
|
+
when (400..499)
|
7
|
+
raise ClientError.new(response, response.body)
|
8
|
+
when (500..599)
|
9
|
+
raise ServerError.new(response, response.body)
|
10
|
+
end
|
11
|
+
end
|
6
12
|
end
|
7
|
-
|
8
13
|
end
|
9
14
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module Keymaker
|
2
2
|
class ExecuteGremlinRequest < Request
|
3
|
-
|
4
3
|
def submit
|
5
|
-
service.post(full_gremlin_path, opts).
|
4
|
+
service.post(full_gremlin_path, opts).on_error do |response|
|
5
|
+
case response.status
|
6
|
+
when (400..499)
|
7
|
+
raise ClientError.new(response, response.body)
|
8
|
+
when (500..599)
|
9
|
+
raise ServerError.new(response, response.body)
|
10
|
+
end
|
11
|
+
end
|
6
12
|
end
|
7
|
-
|
8
13
|
end
|
9
14
|
end
|