keymaker 0.0.7 → 0.0.8

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.
Files changed (50) hide show
  1. data/README.md +71 -11
  2. data/Rakefile +1 -1
  3. data/keymaker.gemspec +46 -15
  4. data/lib/keymaker.rb +25 -12
  5. data/lib/keymaker/configuration.rb +4 -0
  6. data/lib/keymaker/errors.rb +22 -0
  7. data/lib/keymaker/match_method.rb +24 -0
  8. data/lib/keymaker/request.rb +2 -1
  9. data/lib/keymaker/{add_node_to_index_request.rb → requests/add_node_to_index_request.rb} +0 -0
  10. data/lib/keymaker/requests/batch_get_nodes_request.rb +24 -0
  11. data/lib/keymaker/requests/batch_request.rb +18 -0
  12. data/lib/keymaker/{create_node_request.rb → requests/create_node_request.rb} +0 -0
  13. data/lib/keymaker/{create_relationship_request.rb → requests/create_relationship_request.rb} +0 -0
  14. data/lib/keymaker/requests/delete_node_request.rb +18 -0
  15. data/lib/keymaker/{delete_relationship_request.rb → requests/delete_relationship_request.rb} +0 -0
  16. data/lib/keymaker/{execute_cypher_request.rb → requests/execute_cypher_request.rb} +0 -0
  17. data/lib/keymaker/{execute_gremlin_request.rb → requests/execute_gremlin_request.rb} +0 -0
  18. data/lib/keymaker/requests/get_node_request.rb +16 -0
  19. data/lib/keymaker/requests/get_relationship_types_request.rb +18 -0
  20. data/lib/keymaker/{path_traverse_request.rb → requests/path_traverse_request.rb} +0 -0
  21. data/lib/keymaker/{remove_node_from_index_request.rb → requests/remove_node_from_index_request.rb} +0 -0
  22. data/lib/keymaker/requests/service_root_request.rb +11 -0
  23. data/lib/keymaker/{update_node_properties_request.rb → requests/update_node_properties_request.rb} +0 -0
  24. data/lib/keymaker/response.rb +8 -1
  25. data/lib/keymaker/service.rb +17 -43
  26. data/spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_a_201_status_code.yml +204 -0
  27. data/spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_application/json.yml +204 -0
  28. data/spec/cassettes/Keymaker_AddNodeToIndexRequest/returns_the_Neo4j_REST_API_starting_point_response_request.yml +204 -0
  29. data/spec/cassettes/Keymaker_BatchRequest/when_a_resource_is_not_found/raises_BatchRequestError.yml +120 -0
  30. data/spec/cassettes/Keymaker_BatchRequest/when_to_and_method_are_not_set/raises_BatchRequestError.yml +106 -0
  31. data/spec/cassettes/Keymaker_BatchRequest/with_valid_options/returns_a_200_status_code.yml +129 -0
  32. data/spec/cassettes/Keymaker_BatchRequest/with_valid_options/runs_the_commands_and_returns_their_respective_results.yml +129 -0
  33. data/spec/cassettes/Keymaker_GetNodeRequest/with_a_non-existent_node_id/raises_ResourceNotFound.yml +101 -0
  34. data/spec/cassettes/Keymaker_GetNodeRequest/with_an_empty_node_id/raises_ClientError.yml +111 -0
  35. data/spec/cassettes/Keymaker_GetRelationshipTypesRequest/with_existing_relationships/returns_a_unique_array_of_relationship_types.yml +220 -0
  36. data/spec/cassettes/Keymaker_ServiceRootRequest/returns_a_200_status_code.yml +105 -0
  37. data/spec/cassettes/Keymaker_ServiceRootRequest/returns_application/json.yml +105 -0
  38. data/spec/cassettes/Keymaker_ServiceRootRequest/returns_the_Neo4j_REST_API_starting_point_response_request.yml +105 -0
  39. data/spec/{keymaker/configuration_spec.rb → configuration_spec.rb} +0 -0
  40. data/spec/keymaker/requests/add_node_to_index_request_spec.rb +41 -0
  41. data/spec/keymaker/requests/batch_get_nodes_request_spec.rb +23 -0
  42. data/spec/keymaker/requests/batch_request_spec.rb +115 -0
  43. data/spec/keymaker/requests/delete_node_request_spec.rb +37 -0
  44. data/spec/keymaker/requests/get_node_request_spec.rb +24 -0
  45. data/spec/keymaker/requests/get_relationship_types_request_spec.rb +17 -0
  46. data/spec/keymaker/requests/service_root_request_spec.rb +35 -0
  47. data/spec/{keymaker/service_spec.rb → service_spec.rb} +0 -0
  48. data/spec/support/vcr.rb +8 -0
  49. metadata +116 -19
  50. data/lib/keymaker/batch_get_nodes_request.rb +0 -19
@@ -0,0 +1,16 @@
1
+ module Keymaker
2
+ class GetNodeRequest < Request
3
+ def submit
4
+ service.get(node_uri(opts[:node_id]), {}).on_error do |response|
5
+ case response.status
6
+ when 404
7
+ raise ResourceNotFound.new(response, response.body)
8
+ when (400..499)
9
+ raise ClientError.new(response, response.body)
10
+ when (500..599)
11
+ raise ServerError.new(response, response.body)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Keymaker
2
+
3
+ class GetRelationshipTypesRequest < Request
4
+
5
+ def submit
6
+ service.get(relationship_types_path, {}).on_error do |response|
7
+ case response.status
8
+ when (400..499)
9
+ raise ClientError.new(response, response.body)
10
+ when (500..599)
11
+ raise ServerError.new(response, response.body)
12
+ end
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,11 @@
1
+ module Keymaker
2
+
3
+ class ServiceRootRequest < Request
4
+
5
+ def submit
6
+ service.get("db/data/", opts)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -30,7 +30,14 @@ module Keymaker
30
30
  end
31
31
 
32
32
  def success?
33
- (200..207).include?(status)
33
+ (200..299).include?(status)
34
+ end
35
+
36
+ def on_error
37
+ unless success?
38
+ yield self
39
+ end
40
+ self
34
41
  end
35
42
 
36
43
  end
@@ -4,6 +4,8 @@ module Keymaker
4
4
 
5
5
  class Service
6
6
 
7
+ extend MatchMethodMacros
8
+
7
9
  attr_accessor :config
8
10
 
9
11
  def initialize(config)
@@ -22,106 +24,78 @@ module Keymaker
22
24
  end
23
25
  end
24
26
 
27
+ # Raw requests to Neo4j REST API which live in lib/requests/*
28
+ match_method(/_request$/) do |name, *args|
29
+ "Keymaker::#{name.to_s.classify}".constantize.new(self, args.first).submit
30
+ end
31
+
32
+ def method_missing(name, *args)
33
+ # match_method uses modules, so we can use super to delegate to
34
+ # the generated #method_missing definitions.
35
+ super
36
+ end
37
+
38
+ ## Nodes
25
39
  # Create Node
26
40
  def create_node(attrs)
41
+ # TODO: parse response into manageable Ruby objects
27
42
  create_node_request(attrs)
28
43
  end
29
44
 
30
- def create_node_request(opts)
31
- CreateNodeRequest.new(self, opts).submit
32
- end
33
-
34
45
  # Update Node properties
35
46
  def update_node_properties(node_id, attrs)
36
47
  update_node_properties_request({node_id: node_id}.merge(attrs))
37
48
  end
38
49
 
39
- def update_node_properties_request(opts)
40
- UpdateNodePropertiesRequest.new(self, opts).submit
41
- end
42
-
43
50
  # Create Relationship
44
51
  def create_relationship(rel_type, start_node_id, end_node_id, data={})
45
52
  create_relationship_request({node_id: start_node_id, rel_type: rel_type, end_node_id: end_node_id, data: data})
46
53
  end
47
54
 
48
- def create_relationship_request(opts)
49
- CreateRelationshipRequest.new(self, opts).submit
50
- end
51
-
52
55
  # Delete Relationship
53
56
  def delete_relationship(relationship_id)
54
57
  delete_relationship_request(relationship_id: relationship_id)
55
58
  end
56
59
 
57
- def delete_relationship_request(opts)
58
- DeleteRelationshipRequest.new(self, opts).submit
59
- end
60
-
61
60
  # Add Node to Index
62
61
  def add_node_to_index(index_name, key, value, node_id)
63
62
  add_node_to_index_request(index_name: index_name, key: key, value: value, node_id: node_id)
64
63
  end
65
64
 
66
- def add_node_to_index_request(opts)
67
- AddNodeToIndexRequest.new(self, opts).submit
68
- end
69
-
70
65
  # Remove Node from Index
71
66
  def remove_node_from_index(index_name, key, value, node_id)
72
67
  remove_node_from_index_request(index_name: index_name, key: key, value: value, node_id: node_id)
73
68
  end
74
69
 
75
- def remove_node_from_index_request(opts)
76
- RemoveNodeFromIndexRequest.new(self, opts).submit
77
- end
78
-
79
70
  # Path Traverse
80
71
  def path_traverse(start_node_id, data={})
81
72
  path_traverse_request({node_id: start_node_id}.merge(data))
82
73
  end
83
74
 
84
- def path_traverse_request(opts)
85
- PathTraverseRequest.new(self, opts).submit
86
- end
87
-
88
75
  # Batch
89
76
  ## GET Nodes
90
77
  def batch_get_nodes(node_ids)
91
78
  batch_get_nodes_request(node_ids)
92
79
  end
93
80
 
94
- def batch_get_nodes_request(opts)
95
- BatchGetNodesRequest.new(self, opts).submit
96
- end
97
-
98
81
  # Cypher Query
99
82
  def execute_query(query, params)
100
83
  execute_cypher_request({query: query, params: params})
101
84
  end
102
85
 
103
- def execute_cypher_request(opts)
104
- ExecuteCypherRequest.new(self, opts).submit
105
- end
106
-
107
86
  # Gremlin Script
108
87
  def execute_script(script, params={})
109
88
  execute_gremlin_request({script: script, params: params})
110
89
  end
111
90
 
112
- def execute_gremlin_request(opts)
113
- ExecuteGremlinRequest.new(self, opts).submit
114
- end
115
-
116
91
  # HTTP Verbs
117
-
118
92
  def get(url, body)
119
93
  faraday_response = connection.get(parse_url(url), body)
120
94
  Keymaker::Response.new(self, faraday_response)
121
95
  end
122
96
 
123
- def delete(url)
124
- faraday_response = connection.delete(parse_url(url))
97
+ def delete(url, body={})
98
+ faraday_response = connection.delete(parse_url(url), body)
125
99
  Keymaker::Response.new(self, faraday_response)
126
100
  end
127
101
 
@@ -0,0 +1,204 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://localhost:7477/db/data/ext/GremlinPlugin/graphdb/execute_script
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"script":"g.clear();g.V()"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: !!null
16
+ headers:
17
+ content-length:
18
+ - '3'
19
+ content-encoding:
20
+ - UTF-8
21
+ content-type:
22
+ - application/json
23
+ access-control-allow-origin:
24
+ - ! '*'
25
+ connection:
26
+ - close
27
+ server:
28
+ - Jetty(6.1.25)
29
+ body:
30
+ encoding: US-ASCII
31
+ string: ! '[ ]'
32
+ http_version: !!null
33
+ recorded_at: Fri, 06 Jul 2012 02:25:17 GMT
34
+ - request:
35
+ method: delete
36
+ uri: http://localhost:7477/db/data/index/node/users
37
+ body:
38
+ encoding: US-ASCII
39
+ string: ''
40
+ headers: {}
41
+ response:
42
+ status:
43
+ code: 404
44
+ message: !!null
45
+ headers:
46
+ content-length:
47
+ - '470'
48
+ content-encoding:
49
+ - UTF-8
50
+ content-type:
51
+ - application/json
52
+ access-control-allow-origin:
53
+ - ! '*'
54
+ connection:
55
+ - close
56
+ server:
57
+ - Jetty(6.1.25)
58
+ body:
59
+ encoding: US-ASCII
60
+ string: ! "{\n \"message\" : \"No node index named 'users'.\",\n \"exception\"
61
+ : \"org.neo4j.graphdb.NotFoundException: No node index named 'users'.\",\n
62
+ \ \"stacktrace\" : [ \"org.neo4j.server.rest.web.DatabaseActions.removeNodeIndex(DatabaseActions.java:421)\",
63
+ \"org.neo4j.server.rest.web.RestfulGraphDatabase.deleteNodeIndex(RestfulGraphDatabase.java:729)\",
64
+ \"java.lang.reflect.Method.invoke(Method.java:597)\", \"org.neo4j.server.statistic.StatisticFilter.doFilter(StatisticFilter.java:62)\"
65
+ ]\n}"
66
+ http_version: !!null
67
+ recorded_at: Fri, 06 Jul 2012 02:25:17 GMT
68
+ - request:
69
+ method: post
70
+ uri: http://localhost:7477/db/data/node
71
+ body:
72
+ encoding: UTF-8
73
+ string: ! '{"email":"john@resistance.net"}'
74
+ headers:
75
+ Content-Type:
76
+ - application/json
77
+ response:
78
+ status:
79
+ code: 201
80
+ message: !!null
81
+ headers:
82
+ content-length:
83
+ - '1150'
84
+ location:
85
+ - http://localhost:7477/db/data/node/1006
86
+ content-encoding:
87
+ - UTF-8
88
+ content-type:
89
+ - application/json
90
+ access-control-allow-origin:
91
+ - ! '*'
92
+ connection:
93
+ - close
94
+ server:
95
+ - Jetty(6.1.25)
96
+ body:
97
+ encoding: US-ASCII
98
+ string: ! "{\n \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/out\",\n
99
+ \ \"data\" : {\n \"email\" : \"john@resistance.net\"\n },\n \"traverse\"
100
+ : \"http://localhost:7477/db/data/node/1006/traverse/{returnType}\",\n \"all_typed_relationships\"
101
+ : \"http://localhost:7477/db/data/node/1006/relationships/all/{-list|&|types}\",\n
102
+ \ \"property\" : \"http://localhost:7477/db/data/node/1006/properties/{key}\",\n
103
+ \ \"self\" : \"http://localhost:7477/db/data/node/1006\",\n \"properties\"
104
+ : \"http://localhost:7477/db/data/node/1006/properties\",\n \"outgoing_typed_relationships\"
105
+ : \"http://localhost:7477/db/data/node/1006/relationships/out/{-list|&|types}\",\n
106
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/in\",\n
107
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1006/relationships\",\n
108
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1006/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
109
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/all\",\n
110
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/in/{-list|&|types}\"\n}"
111
+ http_version: !!null
112
+ recorded_at: Fri, 06 Jul 2012 02:25:17 GMT
113
+ - request:
114
+ method: post
115
+ uri: http://localhost:7477/db/data/node
116
+ body:
117
+ encoding: UTF-8
118
+ string: ! '{"email":"sarah@resistance.net"}'
119
+ headers:
120
+ Content-Type:
121
+ - application/json
122
+ response:
123
+ status:
124
+ code: 201
125
+ message: !!null
126
+ headers:
127
+ content-length:
128
+ - '1151'
129
+ location:
130
+ - http://localhost:7477/db/data/node/1007
131
+ content-encoding:
132
+ - UTF-8
133
+ content-type:
134
+ - application/json
135
+ access-control-allow-origin:
136
+ - ! '*'
137
+ connection:
138
+ - close
139
+ server:
140
+ - Jetty(6.1.25)
141
+ body:
142
+ encoding: US-ASCII
143
+ string: ! "{\n \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1007/relationships/out\",\n
144
+ \ \"data\" : {\n \"email\" : \"sarah@resistance.net\"\n },\n \"traverse\"
145
+ : \"http://localhost:7477/db/data/node/1007/traverse/{returnType}\",\n \"all_typed_relationships\"
146
+ : \"http://localhost:7477/db/data/node/1007/relationships/all/{-list|&|types}\",\n
147
+ \ \"property\" : \"http://localhost:7477/db/data/node/1007/properties/{key}\",\n
148
+ \ \"self\" : \"http://localhost:7477/db/data/node/1007\",\n \"properties\"
149
+ : \"http://localhost:7477/db/data/node/1007/properties\",\n \"outgoing_typed_relationships\"
150
+ : \"http://localhost:7477/db/data/node/1007/relationships/out/{-list|&|types}\",\n
151
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1007/relationships/in\",\n
152
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1007/relationships\",\n
153
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1007/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
154
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1007/relationships/all\",\n
155
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1007/relationships/in/{-list|&|types}\"\n}"
156
+ http_version: !!null
157
+ recorded_at: Fri, 06 Jul 2012 02:25:17 GMT
158
+ - request:
159
+ method: post
160
+ uri: http://localhost:7477/db/data/index/node/users
161
+ body:
162
+ encoding: UTF-8
163
+ string: ! '{"key":"email","value":"john@resistance.net","uri":"http://localhost:7477/db/data/node/1006"}'
164
+ headers:
165
+ Content-Type:
166
+ - application/json
167
+ response:
168
+ status:
169
+ code: 201
170
+ message: !!null
171
+ headers:
172
+ content-length:
173
+ - '1247'
174
+ location:
175
+ - http://localhost:7477/db/data/index/node/users/email/john%40resistance.net/1006
176
+ content-encoding:
177
+ - UTF-8
178
+ content-type:
179
+ - application/json
180
+ access-control-allow-origin:
181
+ - ! '*'
182
+ connection:
183
+ - close
184
+ server:
185
+ - Jetty(6.1.25)
186
+ body:
187
+ encoding: US-ASCII
188
+ string: ! "{\n \"indexed\" : \"http://localhost:7477/db/data/index/node/users/email/john%40resistance.net/1006\",\n
189
+ \ \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/out\",\n
190
+ \ \"data\" : {\n \"email\" : \"john@resistance.net\"\n },\n \"traverse\"
191
+ : \"http://localhost:7477/db/data/node/1006/traverse/{returnType}\",\n \"all_typed_relationships\"
192
+ : \"http://localhost:7477/db/data/node/1006/relationships/all/{-list|&|types}\",\n
193
+ \ \"property\" : \"http://localhost:7477/db/data/node/1006/properties/{key}\",\n
194
+ \ \"self\" : \"http://localhost:7477/db/data/node/1006\",\n \"properties\"
195
+ : \"http://localhost:7477/db/data/node/1006/properties\",\n \"outgoing_typed_relationships\"
196
+ : \"http://localhost:7477/db/data/node/1006/relationships/out/{-list|&|types}\",\n
197
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/in\",\n
198
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1006/relationships\",\n
199
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1006/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
200
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/all\",\n
201
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1006/relationships/in/{-list|&|types}\"\n}"
202
+ http_version: !!null
203
+ recorded_at: Fri, 06 Jul 2012 02:25:27 GMT
204
+ recorded_with: VCR 2.2.2
@@ -0,0 +1,204 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://localhost:7477/db/data/ext/GremlinPlugin/graphdb/execute_script
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"script":"g.clear();g.V()"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: !!null
16
+ headers:
17
+ content-length:
18
+ - '3'
19
+ content-encoding:
20
+ - UTF-8
21
+ content-type:
22
+ - application/json
23
+ access-control-allow-origin:
24
+ - ! '*'
25
+ connection:
26
+ - close
27
+ server:
28
+ - Jetty(6.1.25)
29
+ body:
30
+ encoding: US-ASCII
31
+ string: ! '[ ]'
32
+ http_version: !!null
33
+ recorded_at: Fri, 06 Jul 2012 02:25:34 GMT
34
+ - request:
35
+ method: delete
36
+ uri: http://localhost:7477/db/data/index/node/users
37
+ body:
38
+ encoding: US-ASCII
39
+ string: ''
40
+ headers: {}
41
+ response:
42
+ status:
43
+ code: 404
44
+ message: !!null
45
+ headers:
46
+ content-length:
47
+ - '470'
48
+ content-encoding:
49
+ - UTF-8
50
+ content-type:
51
+ - application/json
52
+ access-control-allow-origin:
53
+ - ! '*'
54
+ connection:
55
+ - close
56
+ server:
57
+ - Jetty(6.1.25)
58
+ body:
59
+ encoding: US-ASCII
60
+ string: ! "{\n \"message\" : \"No node index named 'users'.\",\n \"exception\"
61
+ : \"org.neo4j.graphdb.NotFoundException: No node index named 'users'.\",\n
62
+ \ \"stacktrace\" : [ \"org.neo4j.server.rest.web.DatabaseActions.removeNodeIndex(DatabaseActions.java:421)\",
63
+ \"org.neo4j.server.rest.web.RestfulGraphDatabase.deleteNodeIndex(RestfulGraphDatabase.java:729)\",
64
+ \"java.lang.reflect.Method.invoke(Method.java:597)\", \"org.neo4j.server.statistic.StatisticFilter.doFilter(StatisticFilter.java:62)\"
65
+ ]\n}"
66
+ http_version: !!null
67
+ recorded_at: Fri, 06 Jul 2012 02:25:34 GMT
68
+ - request:
69
+ method: post
70
+ uri: http://localhost:7477/db/data/node
71
+ body:
72
+ encoding: UTF-8
73
+ string: ! '{"email":"john@resistance.net"}'
74
+ headers:
75
+ Content-Type:
76
+ - application/json
77
+ response:
78
+ status:
79
+ code: 201
80
+ message: !!null
81
+ headers:
82
+ content-length:
83
+ - '1150'
84
+ location:
85
+ - http://localhost:7477/db/data/node/1008
86
+ content-encoding:
87
+ - UTF-8
88
+ content-type:
89
+ - application/json
90
+ access-control-allow-origin:
91
+ - ! '*'
92
+ connection:
93
+ - close
94
+ server:
95
+ - Jetty(6.1.25)
96
+ body:
97
+ encoding: US-ASCII
98
+ string: ! "{\n \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/out\",\n
99
+ \ \"data\" : {\n \"email\" : \"john@resistance.net\"\n },\n \"traverse\"
100
+ : \"http://localhost:7477/db/data/node/1008/traverse/{returnType}\",\n \"all_typed_relationships\"
101
+ : \"http://localhost:7477/db/data/node/1008/relationships/all/{-list|&|types}\",\n
102
+ \ \"property\" : \"http://localhost:7477/db/data/node/1008/properties/{key}\",\n
103
+ \ \"self\" : \"http://localhost:7477/db/data/node/1008\",\n \"properties\"
104
+ : \"http://localhost:7477/db/data/node/1008/properties\",\n \"outgoing_typed_relationships\"
105
+ : \"http://localhost:7477/db/data/node/1008/relationships/out/{-list|&|types}\",\n
106
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/in\",\n
107
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1008/relationships\",\n
108
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1008/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
109
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/all\",\n
110
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/in/{-list|&|types}\"\n}"
111
+ http_version: !!null
112
+ recorded_at: Fri, 06 Jul 2012 02:25:34 GMT
113
+ - request:
114
+ method: post
115
+ uri: http://localhost:7477/db/data/node
116
+ body:
117
+ encoding: UTF-8
118
+ string: ! '{"email":"sarah@resistance.net"}'
119
+ headers:
120
+ Content-Type:
121
+ - application/json
122
+ response:
123
+ status:
124
+ code: 201
125
+ message: !!null
126
+ headers:
127
+ content-length:
128
+ - '1151'
129
+ location:
130
+ - http://localhost:7477/db/data/node/1009
131
+ content-encoding:
132
+ - UTF-8
133
+ content-type:
134
+ - application/json
135
+ access-control-allow-origin:
136
+ - ! '*'
137
+ connection:
138
+ - close
139
+ server:
140
+ - Jetty(6.1.25)
141
+ body:
142
+ encoding: US-ASCII
143
+ string: ! "{\n \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1009/relationships/out\",\n
144
+ \ \"data\" : {\n \"email\" : \"sarah@resistance.net\"\n },\n \"traverse\"
145
+ : \"http://localhost:7477/db/data/node/1009/traverse/{returnType}\",\n \"all_typed_relationships\"
146
+ : \"http://localhost:7477/db/data/node/1009/relationships/all/{-list|&|types}\",\n
147
+ \ \"property\" : \"http://localhost:7477/db/data/node/1009/properties/{key}\",\n
148
+ \ \"self\" : \"http://localhost:7477/db/data/node/1009\",\n \"properties\"
149
+ : \"http://localhost:7477/db/data/node/1009/properties\",\n \"outgoing_typed_relationships\"
150
+ : \"http://localhost:7477/db/data/node/1009/relationships/out/{-list|&|types}\",\n
151
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1009/relationships/in\",\n
152
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1009/relationships\",\n
153
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1009/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
154
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1009/relationships/all\",\n
155
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1009/relationships/in/{-list|&|types}\"\n}"
156
+ http_version: !!null
157
+ recorded_at: Fri, 06 Jul 2012 02:25:34 GMT
158
+ - request:
159
+ method: post
160
+ uri: http://localhost:7477/db/data/index/node/users
161
+ body:
162
+ encoding: UTF-8
163
+ string: ! '{"key":"email","value":"john@resistance.net","uri":"http://localhost:7477/db/data/node/1008"}'
164
+ headers:
165
+ Content-Type:
166
+ - application/json
167
+ response:
168
+ status:
169
+ code: 201
170
+ message: !!null
171
+ headers:
172
+ content-length:
173
+ - '1247'
174
+ location:
175
+ - http://localhost:7477/db/data/index/node/users/email/john%40resistance.net/1008
176
+ content-encoding:
177
+ - UTF-8
178
+ content-type:
179
+ - application/json
180
+ access-control-allow-origin:
181
+ - ! '*'
182
+ connection:
183
+ - close
184
+ server:
185
+ - Jetty(6.1.25)
186
+ body:
187
+ encoding: US-ASCII
188
+ string: ! "{\n \"indexed\" : \"http://localhost:7477/db/data/index/node/users/email/john%40resistance.net/1008\",\n
189
+ \ \"outgoing_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/out\",\n
190
+ \ \"data\" : {\n \"email\" : \"john@resistance.net\"\n },\n \"traverse\"
191
+ : \"http://localhost:7477/db/data/node/1008/traverse/{returnType}\",\n \"all_typed_relationships\"
192
+ : \"http://localhost:7477/db/data/node/1008/relationships/all/{-list|&|types}\",\n
193
+ \ \"property\" : \"http://localhost:7477/db/data/node/1008/properties/{key}\",\n
194
+ \ \"self\" : \"http://localhost:7477/db/data/node/1008\",\n \"properties\"
195
+ : \"http://localhost:7477/db/data/node/1008/properties\",\n \"outgoing_typed_relationships\"
196
+ : \"http://localhost:7477/db/data/node/1008/relationships/out/{-list|&|types}\",\n
197
+ \ \"incoming_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/in\",\n
198
+ \ \"extensions\" : {\n },\n \"create_relationship\" : \"http://localhost:7477/db/data/node/1008/relationships\",\n
199
+ \ \"paged_traverse\" : \"http://localhost:7477/db/data/node/1008/paged/traverse/{returnType}{?pageSize,leaseTime}\",\n
200
+ \ \"all_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/all\",\n
201
+ \ \"incoming_typed_relationships\" : \"http://localhost:7477/db/data/node/1008/relationships/in/{-list|&|types}\"\n}"
202
+ http_version: !!null
203
+ recorded_at: Fri, 06 Jul 2012 02:25:34 GMT
204
+ recorded_with: VCR 2.2.2