keymaker 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|