ashikawa-core 0.5.1 → 0.6.0
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/.gitignore +11 -9
- data/.rspec +4 -0
- data/.travis.yml +8 -3
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +5 -1
- data/Gemfile.devtools +65 -0
- data/Guardfile +1 -11
- data/README.md +14 -8
- data/Rakefile +5 -103
- data/ashikawa-core.gemspec +3 -29
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/mutant.yml +3 -0
- data/config/roodi.yml +18 -0
- data/config/site.reek +95 -0
- data/config/yardstick.yml +2 -0
- data/lib/ashikawa-core/collection.rb +138 -178
- data/lib/ashikawa-core/connection.rb +74 -26
- data/lib/ashikawa-core/cursor.rb +30 -9
- data/lib/ashikawa-core/database.rb +23 -19
- data/lib/ashikawa-core/document.rb +33 -8
- data/lib/ashikawa-core/exceptions/collection_not_found.rb +15 -0
- data/lib/ashikawa-core/exceptions/document_not_found.rb +4 -0
- data/lib/ashikawa-core/exceptions/index_not_found.rb +15 -0
- data/lib/ashikawa-core/exceptions/no_collection_provided.rb +4 -0
- data/lib/ashikawa-core/exceptions/unknown_path.rb +15 -0
- data/lib/ashikawa-core/figure.rb +73 -0
- data/lib/ashikawa-core/index.rb +25 -7
- data/lib/ashikawa-core/query.rb +68 -55
- data/lib/ashikawa-core/status.rb +77 -0
- data/lib/ashikawa-core/version.rb +1 -1
- data/spec/acceptance/basic_spec.rb +14 -18
- data/spec/acceptance/index_spec.rb +4 -2
- data/spec/acceptance/query_spec.rb +18 -19
- data/spec/acceptance_auth/auth_spec.rb +2 -2
- data/spec/setup/arangodb.sh +34 -39
- data/spec/spec_helper.rb +27 -0
- data/spec/unit/collection_spec.rb +25 -73
- data/spec/unit/connection_spec.rb +46 -15
- data/spec/unit/cursor_spec.rb +3 -3
- data/spec/unit/database_spec.rb +8 -7
- data/spec/unit/document_spec.rb +2 -2
- data/spec/unit/exception_spec.rb +21 -0
- data/spec/unit/figure_spec.rb +28 -0
- data/spec/unit/index_spec.rb +1 -1
- data/spec/unit/query_spec.rb +25 -25
- data/spec/unit/spec_helper.rb +6 -4
- data/spec/unit/status_spec.rb +51 -0
- data/tasks/adjustments.rake +46 -0
- metadata +31 -203
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ashikawa
|
2
|
+
module Core
|
3
|
+
# This Exception is thrown when a document was requested from
|
4
|
+
# the server that does not exist.
|
5
|
+
class CollectionNotFoundException < RuntimeError
|
6
|
+
# String representation of the exception
|
7
|
+
#
|
8
|
+
# @return String
|
9
|
+
# @api private
|
10
|
+
def to_s
|
11
|
+
"You requested a collection from the server that does not exist"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,6 +3,10 @@ module Ashikawa
|
|
3
3
|
# This Exception is thrown when a document was requested from
|
4
4
|
# the server that does not exist.
|
5
5
|
class DocumentNotFoundException < RuntimeError
|
6
|
+
# String representation of the exception
|
7
|
+
#
|
8
|
+
# @return String
|
9
|
+
# @api private
|
6
10
|
def to_s
|
7
11
|
"You requested a document from the server that does not exist"
|
8
12
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ashikawa
|
2
|
+
module Core
|
3
|
+
# This Exception is thrown when an index was requested from
|
4
|
+
# the server that does not exist.
|
5
|
+
class IndexNotFoundException < RuntimeError
|
6
|
+
# String representation of the exception
|
7
|
+
#
|
8
|
+
# @return String
|
9
|
+
# @api private
|
10
|
+
def to_s
|
11
|
+
"You requested an index from the server that does not exist"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,6 +3,10 @@ module Ashikawa
|
|
3
3
|
# This Exception is thrown when a Query object should execute a simple query
|
4
4
|
# but no collection was provided upon creation
|
5
5
|
class NoCollectionProvidedException < RuntimeError
|
6
|
+
# String representation of the exception
|
7
|
+
#
|
8
|
+
# @return String
|
9
|
+
# @api private
|
6
10
|
def to_s
|
7
11
|
"A simple query can't be executed by a Query object without a collection"
|
8
12
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ashikawa
|
2
|
+
module Core
|
3
|
+
# This Exception is thrown when you request
|
4
|
+
# a path from the server which is not known
|
5
|
+
class UnknownPath < RuntimeError
|
6
|
+
# String representation of the exception
|
7
|
+
#
|
8
|
+
# @return String
|
9
|
+
# @api private
|
10
|
+
def to_s
|
11
|
+
"The path is unknown"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Ashikawa
|
2
|
+
module Core
|
3
|
+
# Wrapper around figures of a collection
|
4
|
+
class Figure
|
5
|
+
# Create a wrapper around given figures
|
6
|
+
#
|
7
|
+
# @param [Hash] raw_figure
|
8
|
+
# @api public
|
9
|
+
# @example Create a new figure from a raw figure
|
10
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
11
|
+
def initialize(raw_figure)
|
12
|
+
@datafiles = raw_figure["datafiles"]
|
13
|
+
@alive = raw_figure["alive"]
|
14
|
+
@dead = raw_figure["dead"]
|
15
|
+
end
|
16
|
+
|
17
|
+
# The number of active datafiles
|
18
|
+
#
|
19
|
+
# @return Fixnum
|
20
|
+
# @api public
|
21
|
+
# @example Get the number of datafiles
|
22
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
23
|
+
# figure.datafiles_count #=> 1337
|
24
|
+
def datafiles_count
|
25
|
+
@datafiles["count"]
|
26
|
+
end
|
27
|
+
|
28
|
+
# The total size in bytes used by all living documents
|
29
|
+
#
|
30
|
+
# @return Fixnum
|
31
|
+
# @api public
|
32
|
+
# @example Get the size of all living documents in bytes
|
33
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
34
|
+
# figure.alive_size #=> 1337
|
35
|
+
def alive_size
|
36
|
+
@alive["size"]
|
37
|
+
end
|
38
|
+
|
39
|
+
# The number of living documents
|
40
|
+
#
|
41
|
+
# @return Fixnum
|
42
|
+
# @api public
|
43
|
+
# @example Get the number of living documents
|
44
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
45
|
+
# figure.alive_count #=> 1337
|
46
|
+
def alive_count
|
47
|
+
@alive["count"]
|
48
|
+
end
|
49
|
+
|
50
|
+
# The total size in bytes used by all dead documents
|
51
|
+
#
|
52
|
+
# @return Fixnum
|
53
|
+
# @api public
|
54
|
+
# @example Get the size of all dead documents in bytes
|
55
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
56
|
+
# figure.dead_size #=> 1337
|
57
|
+
def dead_size
|
58
|
+
@dead["size"]
|
59
|
+
end
|
60
|
+
|
61
|
+
# The number of dead documents
|
62
|
+
#
|
63
|
+
# @return Fixnum
|
64
|
+
# @api public
|
65
|
+
# @example Get the number of dead documents
|
66
|
+
# figure = Ashikawa::Core::Figure.new(raw_figure)
|
67
|
+
# figure.dead_count #=> 1337
|
68
|
+
def dead_count
|
69
|
+
@dead["count"]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/ashikawa-core/index.rb
CHANGED
@@ -1,25 +1,37 @@
|
|
1
1
|
module Ashikawa
|
2
2
|
module Core
|
3
|
-
#
|
3
|
+
# An index on a certain collection
|
4
4
|
class Index
|
5
5
|
# The fields the index is defined on as symbols
|
6
6
|
# @return [Array<Symbol>]
|
7
7
|
# @api public
|
8
|
+
# @example Get the fields the index is set on
|
9
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
10
|
+
# index.fields #=> [:name]
|
8
11
|
attr_reader :on
|
9
12
|
|
10
13
|
# The type of index as a symbol
|
11
14
|
# @return [Symbol]
|
12
15
|
# @api public
|
16
|
+
# @example Get the type of the index
|
17
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
18
|
+
# index.type #=> :skiplist
|
13
19
|
attr_reader :type
|
14
20
|
|
15
21
|
# Is the unique constraint set?
|
16
22
|
# @return [Boolean]
|
17
23
|
# @api public
|
24
|
+
# @example Get the fields the index is set on
|
25
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
26
|
+
# index.unique #=> false
|
18
27
|
attr_reader :unique
|
19
28
|
|
20
29
|
# The id of the index
|
21
30
|
# @return [Int]
|
22
31
|
# @api public
|
32
|
+
# @example Get the id of this index
|
33
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
34
|
+
# index.id #=> 4567
|
23
35
|
attr_reader :id
|
24
36
|
|
25
37
|
# Create a new Index
|
@@ -27,20 +39,26 @@ module Ashikawa
|
|
27
39
|
# @param [Collection] collection The collection the index is defined on
|
28
40
|
# @param [Hash] raw_index The JSON representation of the index
|
29
41
|
# @return [Index]
|
30
|
-
# @api
|
42
|
+
# @api public
|
43
|
+
# @example Create a new index from the raw representation
|
44
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
31
45
|
def initialize(collection, raw_index)
|
32
46
|
@collection = collection
|
33
|
-
@id = raw_index["id"].split("/")[1].to_i if raw_index.has_key?
|
34
|
-
@on = raw_index["fields"].map { |field| field.to_sym } if raw_index.has_key?
|
35
|
-
@type = raw_index["type"].to_sym if raw_index.has_key?
|
36
|
-
@unique = raw_index["unique"] if raw_index.has_key?
|
47
|
+
@id = raw_index["id"].split("/")[1].to_i if raw_index.has_key?("id")
|
48
|
+
@on = raw_index["fields"].map { |field| field.to_sym } if raw_index.has_key?("fields")
|
49
|
+
@type = raw_index["type"].to_sym if raw_index.has_key?("type")
|
50
|
+
@unique = raw_index["unique"] if raw_index.has_key?("unique")
|
37
51
|
end
|
38
52
|
|
39
53
|
# Remove the index from the collection
|
40
54
|
#
|
55
|
+
# @return [Hash] parsed JSON response from the server
|
41
56
|
# @api public
|
57
|
+
# @example Remove this index from the collection
|
58
|
+
# index = Ashikawa::Core::Index.new(collection, raw_index)
|
59
|
+
# index.delete
|
42
60
|
def delete
|
43
|
-
@collection.send_request("index/#{@collection.id}/#{@id}", delete
|
61
|
+
@collection.send_request("index/#{@collection.id}/#{@id}", :delete => {})
|
44
62
|
end
|
45
63
|
end
|
46
64
|
end
|
data/lib/ashikawa-core/query.rb
CHANGED
@@ -2,6 +2,8 @@ require 'ashikawa-core/cursor'
|
|
2
2
|
require 'ashikawa-core/document'
|
3
3
|
require 'ashikawa-core/exceptions/no_collection_provided'
|
4
4
|
require 'forwardable'
|
5
|
+
require 'backports'
|
6
|
+
require 'rest-client'
|
5
7
|
|
6
8
|
module Ashikawa
|
7
9
|
module Core
|
@@ -10,12 +12,16 @@ module Ashikawa
|
|
10
12
|
extend Forwardable
|
11
13
|
|
12
14
|
# Delegate sending requests to the connection
|
13
|
-
|
15
|
+
def_delegator :@connection, :send_request
|
14
16
|
|
15
17
|
# Initializes a Query
|
16
18
|
#
|
17
19
|
# @param [Collection, Database] connection
|
18
20
|
# @return [Query]
|
21
|
+
# @api public
|
22
|
+
# @example Create a new query object
|
23
|
+
# collection = Ashikawa::Core::Collection.new(database, raw_collection)
|
24
|
+
# query = Ashikawa::Core::Query.new(collection)
|
19
25
|
def initialize(connection)
|
20
26
|
@connection = connection
|
21
27
|
end
|
@@ -29,12 +35,12 @@ module Ashikawa
|
|
29
35
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
30
36
|
# @api public
|
31
37
|
# @example Get an array with all documents
|
32
|
-
# query = Ashikawa::Core::Query.new
|
38
|
+
# query = Ashikawa::Core::Query.new(collection)
|
33
39
|
# query.all # => #<Cursor id=33>
|
34
40
|
def all(options={})
|
35
|
-
simple_query_request
|
41
|
+
simple_query_request("/simple/all",
|
36
42
|
options,
|
37
|
-
[:limit, :skip]
|
43
|
+
[:limit, :skip])
|
38
44
|
end
|
39
45
|
|
40
46
|
# Looks for documents in a collection which match the given criteria
|
@@ -47,12 +53,12 @@ module Ashikawa
|
|
47
53
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
48
54
|
# @api public
|
49
55
|
# @example Find all documents in a collection that are red
|
50
|
-
# query = Ashikawa::Core::Query.new
|
51
|
-
# query.by_example
|
56
|
+
# query = Ashikawa::Core::Query.new(collection)
|
57
|
+
# query.by_example({ "color" => "red" }, :options => { :limit => 1 }) #=> #<Cursor id=2444>
|
52
58
|
def by_example(example={}, options={})
|
53
|
-
simple_query_request
|
54
|
-
{ example
|
55
|
-
[:limit, :skip, :example]
|
59
|
+
simple_query_request("/simple/by-example",
|
60
|
+
{ :example => example }.merge(options),
|
61
|
+
[:limit, :skip, :example])
|
56
62
|
end
|
57
63
|
|
58
64
|
# Looks for one document in a collection which matches the given criteria
|
@@ -62,12 +68,12 @@ module Ashikawa
|
|
62
68
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
63
69
|
# @api public
|
64
70
|
# @example Find one document in a collection that is red
|
65
|
-
# query = Ashikawa::Core::Query.new
|
66
|
-
# query.first_example
|
71
|
+
# query = Ashikawa::Core::Query.new(collection)
|
72
|
+
# query.first_example({ "color" => "red"}) # => #<Document id=2444 color="red">
|
67
73
|
def first_example(example = {})
|
68
|
-
response = simple_query_request
|
69
|
-
{ example
|
70
|
-
[:example]
|
74
|
+
response = simple_query_request("/simple/first-example",
|
75
|
+
{ :example => example },
|
76
|
+
[:example])
|
71
77
|
response.first
|
72
78
|
end
|
73
79
|
|
@@ -83,12 +89,12 @@ module Ashikawa
|
|
83
89
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
84
90
|
# @api public
|
85
91
|
# @example Find all documents at Infinite Loop
|
86
|
-
# query = Ashikawa::Core::Query.new
|
87
|
-
# query.near
|
92
|
+
# query = Ashikawa::Core::Query.new(collection)
|
93
|
+
# query.near(:latitude => 37.331693, :longitude => -122.030468)
|
88
94
|
def near(options={})
|
89
|
-
simple_query_request
|
95
|
+
simple_query_request("/simple/near",
|
90
96
|
options,
|
91
|
-
[:latitude, :longitude, :distance, :skip, :limit, :geo]
|
97
|
+
[:latitude, :longitude, :distance, :skip, :limit, :geo])
|
92
98
|
end
|
93
99
|
|
94
100
|
# Looks for documents in a collection within a radius
|
@@ -104,12 +110,12 @@ module Ashikawa
|
|
104
110
|
# @api public
|
105
111
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
106
112
|
# @example Find all documents within a radius of 100 to Infinite Loop
|
107
|
-
# query = Ashikawa::Core::Query.new
|
108
|
-
# query.within
|
113
|
+
# query = Ashikawa::Core::Query.new(collection)
|
114
|
+
# query.within(:latitude => 37.331693, :longitude => -122.030468, :radius => 100)
|
109
115
|
def within(options={})
|
110
|
-
simple_query_request
|
116
|
+
simple_query_request("/simple/within",
|
111
117
|
options,
|
112
|
-
[:latitude, :longitude, :radius, :distance, :skip, :limit, :geo]
|
118
|
+
[:latitude, :longitude, :radius, :distance, :skip, :limit, :geo])
|
113
119
|
end
|
114
120
|
|
115
121
|
# Looks for documents in a collection with an attribute between two values
|
@@ -124,12 +130,12 @@ module Ashikawa
|
|
124
130
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
125
131
|
# @api public
|
126
132
|
# @example Find all documents within a radius of 100 to Infinite Loop
|
127
|
-
# query = Ashikawa::Core::Query.new
|
128
|
-
# query.within
|
133
|
+
# query = Ashikawa::Core::Query.new(collection)
|
134
|
+
# query.within(:latitude => 37.331693, :longitude => -122.030468, :radius => 100)
|
129
135
|
def in_range(options={})
|
130
|
-
simple_query_request
|
136
|
+
simple_query_request("/simple/range",
|
131
137
|
options,
|
132
|
-
[:attribute, :left, :right, :closed, :limit, :skip]
|
138
|
+
[:attribute, :left, :right, :closed, :limit, :skip])
|
133
139
|
end
|
134
140
|
|
135
141
|
# Send an AQL query to the database
|
@@ -140,12 +146,12 @@ module Ashikawa
|
|
140
146
|
# @return [Cursor]
|
141
147
|
# @api public
|
142
148
|
# @example Send an AQL query to the database
|
143
|
-
# query = Ashikawa::Core::Query.new
|
144
|
-
# query.execute
|
149
|
+
# query = Ashikawa::Core::Query.new(collection)
|
150
|
+
# query.execute("FOR u IN users LIMIT 2") # => #<Cursor id=33>
|
145
151
|
def execute(query, options = {})
|
146
|
-
post_request
|
147
|
-
options.merge({ query
|
148
|
-
[:query, :count, :batch_size]
|
152
|
+
post_request("/cursor",
|
153
|
+
options.merge({ :query => query }),
|
154
|
+
[:query, :count, :batch_size])
|
149
155
|
end
|
150
156
|
|
151
157
|
# Test if an AQL query is valid
|
@@ -154,14 +160,12 @@ module Ashikawa
|
|
154
160
|
# @return [Boolean]
|
155
161
|
# @api public
|
156
162
|
# @example Validate an AQL query
|
157
|
-
# query = Ashikawa::Core::Query.new
|
158
|
-
# query.valid?
|
163
|
+
# query = Ashikawa::Core::Query.new(collection)
|
164
|
+
# query.valid?("FOR u IN users LIMIT 2") # => true
|
159
165
|
def valid?(query)
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
false
|
164
|
-
end
|
166
|
+
!!post_request("/query", { :query => query })
|
167
|
+
rescue RestClient::BadRequest
|
168
|
+
false
|
165
169
|
end
|
166
170
|
|
167
171
|
private
|
@@ -179,7 +183,7 @@ module Ashikawa
|
|
179
183
|
# @return [collection]
|
180
184
|
# @api private
|
181
185
|
def collection
|
182
|
-
raise NoCollectionProvidedException unless @connection.respond_to?
|
186
|
+
raise NoCollectionProvidedException unless @connection.respond_to?(:database)
|
183
187
|
@connection
|
184
188
|
end
|
185
189
|
|
@@ -190,10 +194,10 @@ module Ashikawa
|
|
190
194
|
# @return [Hash] The filtered Hash
|
191
195
|
# @api private
|
192
196
|
def allowed_options(options, allowed_keys)
|
193
|
-
options.keep_if { |key, _| allowed_keys.include?
|
197
|
+
options.keep_if { |key, _| allowed_keys.include?(key) }
|
194
198
|
end
|
195
199
|
|
196
|
-
# Transforms the keys into
|
200
|
+
# Transforms the keys into the required format
|
197
201
|
#
|
198
202
|
# @param [Hash] request_data
|
199
203
|
# @return [Hash] Cleaned request data
|
@@ -208,18 +212,33 @@ module Ashikawa
|
|
208
212
|
#
|
209
213
|
# @param [String] path The path for the request
|
210
214
|
# @param [Hash] request_data The data send to the database
|
211
|
-
# @param [Array<Symbol>]
|
215
|
+
# @param [Array<Symbol>] allowed_keys The keys allowed for this request
|
212
216
|
# @return [String] Server response
|
213
217
|
# @raise [NoCollectionProvidedException] If you provided a database, no collection
|
214
218
|
# @api private
|
215
219
|
def simple_query_request(path, request_data, allowed_keys)
|
216
|
-
request_data = request_data.merge({ collection
|
217
|
-
put_request
|
220
|
+
request_data = request_data.merge({ :collection => collection.name })
|
221
|
+
put_request(path,
|
218
222
|
request_data,
|
219
|
-
allowed_keys << :collection
|
223
|
+
allowed_keys << :collection)
|
224
|
+
end
|
225
|
+
|
226
|
+
# Perform a wrapped request
|
227
|
+
#
|
228
|
+
# @param [String] path The path for the request
|
229
|
+
# @param [Symbol] request_method The request method to perform
|
230
|
+
# @param [Hash] request_data The data send to the database
|
231
|
+
# @param [Array] allowed_keys Keys allowed in request_data, if nil: All keys are allowed
|
232
|
+
# @return [Cursor]
|
233
|
+
# @api private
|
234
|
+
def wrapped_request(path, request_method, request_data, allowed_keys)
|
235
|
+
request_data = allowed_options(request_data, allowed_keys) unless allowed_keys.nil?
|
236
|
+
request_data = prepare_request_data(request_data)
|
237
|
+
server_response = send_request(path, { request_method => request_data })
|
238
|
+
Cursor.new(database, server_response)
|
220
239
|
end
|
221
240
|
|
222
|
-
# Perform a put request
|
241
|
+
# Perform a wrapped put request
|
223
242
|
#
|
224
243
|
# @param [String] path The path for the request
|
225
244
|
# @param [Hash] request_data The data send to the database
|
@@ -227,13 +246,10 @@ module Ashikawa
|
|
227
246
|
# @return [Cursor]
|
228
247
|
# @api private
|
229
248
|
def put_request(path, request_data, allowed_keys = nil)
|
230
|
-
|
231
|
-
request_data = prepare_request_data request_data
|
232
|
-
server_response = send_request path, :put => request_data
|
233
|
-
Cursor.new database, server_response
|
249
|
+
wrapped_request(path, :put, request_data, allowed_keys)
|
234
250
|
end
|
235
251
|
|
236
|
-
# Perform a post request
|
252
|
+
# Perform a wrapped post request
|
237
253
|
#
|
238
254
|
# @param [String] path The path for the request
|
239
255
|
# @param [Hash] request_data The data send to the database
|
@@ -241,10 +257,7 @@ module Ashikawa
|
|
241
257
|
# @return [Cursor]
|
242
258
|
# @api private
|
243
259
|
def post_request(path, request_data, allowed_keys = nil)
|
244
|
-
|
245
|
-
request_data = prepare_request_data request_data
|
246
|
-
server_response = send_request path, :post => request_data
|
247
|
-
Cursor.new database, server_response
|
260
|
+
wrapped_request(path, :post, request_data, allowed_keys)
|
248
261
|
end
|
249
262
|
end
|
250
263
|
end
|