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.
Files changed (50) hide show
  1. data/.gitignore +11 -9
  2. data/.rspec +4 -0
  3. data/.travis.yml +8 -3
  4. data/CONTRIBUTING.md +5 -5
  5. data/Gemfile +5 -1
  6. data/Gemfile.devtools +65 -0
  7. data/Guardfile +1 -11
  8. data/README.md +14 -8
  9. data/Rakefile +5 -103
  10. data/ashikawa-core.gemspec +3 -29
  11. data/config/flay.yml +3 -0
  12. data/config/flog.yml +2 -0
  13. data/config/mutant.yml +3 -0
  14. data/config/roodi.yml +18 -0
  15. data/config/site.reek +95 -0
  16. data/config/yardstick.yml +2 -0
  17. data/lib/ashikawa-core/collection.rb +138 -178
  18. data/lib/ashikawa-core/connection.rb +74 -26
  19. data/lib/ashikawa-core/cursor.rb +30 -9
  20. data/lib/ashikawa-core/database.rb +23 -19
  21. data/lib/ashikawa-core/document.rb +33 -8
  22. data/lib/ashikawa-core/exceptions/collection_not_found.rb +15 -0
  23. data/lib/ashikawa-core/exceptions/document_not_found.rb +4 -0
  24. data/lib/ashikawa-core/exceptions/index_not_found.rb +15 -0
  25. data/lib/ashikawa-core/exceptions/no_collection_provided.rb +4 -0
  26. data/lib/ashikawa-core/exceptions/unknown_path.rb +15 -0
  27. data/lib/ashikawa-core/figure.rb +73 -0
  28. data/lib/ashikawa-core/index.rb +25 -7
  29. data/lib/ashikawa-core/query.rb +68 -55
  30. data/lib/ashikawa-core/status.rb +77 -0
  31. data/lib/ashikawa-core/version.rb +1 -1
  32. data/spec/acceptance/basic_spec.rb +14 -18
  33. data/spec/acceptance/index_spec.rb +4 -2
  34. data/spec/acceptance/query_spec.rb +18 -19
  35. data/spec/acceptance_auth/auth_spec.rb +2 -2
  36. data/spec/setup/arangodb.sh +34 -39
  37. data/spec/spec_helper.rb +27 -0
  38. data/spec/unit/collection_spec.rb +25 -73
  39. data/spec/unit/connection_spec.rb +46 -15
  40. data/spec/unit/cursor_spec.rb +3 -3
  41. data/spec/unit/database_spec.rb +8 -7
  42. data/spec/unit/document_spec.rb +2 -2
  43. data/spec/unit/exception_spec.rb +21 -0
  44. data/spec/unit/figure_spec.rb +28 -0
  45. data/spec/unit/index_spec.rb +1 -1
  46. data/spec/unit/query_spec.rb +25 -25
  47. data/spec/unit/spec_helper.rb +6 -4
  48. data/spec/unit/status_spec.rb +51 -0
  49. data/tasks/adjustments.rake +46 -0
  50. metadata +31 -203
@@ -0,0 +1,2 @@
1
+ ---
2
+ threshold: 100
@@ -2,12 +2,13 @@ require "ashikawa-core/document"
2
2
  require "ashikawa-core/index"
3
3
  require "ashikawa-core/cursor"
4
4
  require "ashikawa-core/query"
5
- require "restclient/exceptions"
5
+ require "ashikawa-core/status"
6
+ require "ashikawa-core/figure"
6
7
  require "forwardable"
7
8
 
8
9
  module Ashikawa
9
10
  module Core
10
- # Represents a certain Collection within the Database
11
+ # A certain Collection within the Database
11
12
  class Collection
12
13
  extend Forwardable
13
14
 
@@ -16,7 +17,7 @@ module Ashikawa
16
17
  # @return [String]
17
18
  # @api public
18
19
  # @example Change the name of a collection
19
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
20
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
20
21
  # raw_collection = {
21
22
  # "name" => "example_1",
22
23
  # "waitForSync" => true,
@@ -25,7 +26,7 @@ module Ashikawa
25
26
  # "error" => false,
26
27
  # "code" => 200
27
28
  # }
28
- # collection = Ashikawa::Core::Collection.new database, raw_collection
29
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
29
30
  # collection.name # => "example_1"
30
31
  # collection.name = "example_2"
31
32
  # collection.name # => "example_2"
@@ -36,7 +37,7 @@ module Ashikawa
36
37
  # @return [Fixnum]
37
38
  # @api public
38
39
  # @example Get the id of the collection
39
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
40
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
40
41
  # raw_collection = {
41
42
  # "name" => "example_1",
42
43
  # "waitForSync" => true,
@@ -45,72 +46,16 @@ module Ashikawa
45
46
  # "error" => false,
46
47
  # "code" => 200
47
48
  # }
48
- # collection = Ashikawa::Core::Collection.new database, raw_collection
49
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
49
50
  # collection.id #=> 4588
50
51
  attr_reader :id
51
52
 
52
- # The database the collection belongs to
53
- #
54
- # @return [Database]
55
- # @api public
56
- attr_reader :database
57
-
58
- # Sending requests is delegated to the database
59
- delegate send_request: :@database
60
-
61
- # Create a new Collection object with a name and an optional ID
62
- #
63
- # @param [Database] database The database the connection belongs to
64
- # @param [Hash] raw_collection The raw collection returned from the server
65
- # @api public
66
- # @example Create a Collection object from scratch
67
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
68
- # raw_collection = {
69
- # "name" => "example_1",
70
- # "waitForSync" => true,
71
- # "id" => 4588,
72
- # "status" => 3,
73
- # "error" => false,
74
- # "code" => 200
75
- # }
76
- # collection = Ashikawa::Core::Collection.new database, raw_collection
77
- def initialize(database, raw_collection)
78
- @database = database
79
- @name = raw_collection['name'] if raw_collection.has_key? 'name'
80
- @id = raw_collection['id'].to_i if raw_collection.has_key? 'id'
81
- @status = raw_collection['status'].to_i if raw_collection.has_key? 'status'
82
- end
83
-
84
- # Change the name of the collection
85
- #
86
- # @param [String] new_name New Name
87
- # @return [String] New Name
88
- # @api public
89
- # @example Change the name of a collection
90
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
91
- # raw_collection = {
92
- # "name" => "example_1",
93
- # "waitForSync" => true,
94
- # "id" => 4588,
95
- # "status" => 3,
96
- # "error" => false,
97
- # "code" => 200
98
- # }
99
- # collection = Ashikawa::Core::Collection.new database, raw_collection
100
- # collection.name # => "example_1"
101
- # collection.name = "example_2"
102
- # collection.name # => "example_2"
103
- def name=(new_name)
104
- send_request_for_this_collection "/rename", put: { "name" => new_name }
105
- @name = new_name
106
- end
107
-
108
- # Checks if the collection is new born
53
+ # A wrapper around the status of the collection
109
54
  #
110
- # @return [Boolean]
55
+ # @return [Status]
111
56
  # @api public
112
- # @example Is the collection new born?
113
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
57
+ # @example
58
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
114
59
  # raw_collection = {
115
60
  # "name" => "example_1",
116
61
  # "waitForSync" => true,
@@ -119,18 +64,17 @@ module Ashikawa
119
64
  # "error" => false,
120
65
  # "code" => 200
121
66
  # }
122
- # collection = Ashikawa::Core::Collection.new database, raw_collection
123
- # collection.new_born? #=> false
124
- def new_born?
125
- @status == 1
126
- end
67
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
68
+ # collection.status.loaded? #=> true
69
+ # collection.status.new_born? #=> false
70
+ attr_reader :status
127
71
 
128
- # Checks if the collection is unloaded
72
+ # The database the collection belongs to
129
73
  #
130
- # @return [Boolean]
74
+ # @return [Database]
131
75
  # @api public
132
- # @example Is the collection unloaded?
133
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
76
+ # @example
77
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
134
78
  # raw_collection = {
135
79
  # "name" => "example_1",
136
80
  # "waitForSync" => true,
@@ -139,38 +83,20 @@ module Ashikawa
139
83
  # "error" => false,
140
84
  # "code" => 200
141
85
  # }
142
- # collection = Ashikawa::Core::Collection.new database, raw_collection
143
- # collection.unloaded? #=> false
144
- def unloaded?
145
- @status == 2
146
- end
86
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
87
+ # collection.database #=> #<Database: ...>
88
+ attr_reader :database
147
89
 
148
- # Checks if the collection is loaded
149
- #
150
- # @return [Boolean]
151
- # @api public
152
- # @example Is the collection loaded?
153
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
154
- # raw_collection = {
155
- # "name" => "example_1",
156
- # "waitForSync" => true,
157
- # "id" => 4588,
158
- # "status" => 3,
159
- # "error" => false,
160
- # "code" => 200
161
- # }
162
- # collection = Ashikawa::Core::Collection.new database, raw_collection
163
- # collection.loaded? #=> true
164
- def loaded?
165
- @status == 3
166
- end
90
+ # Sending requests is delegated to the database
91
+ def_delegator :@database, :send_request
167
92
 
168
- # Checks if the collection is in the process of being unloaded
93
+ # Create a new Collection object with a name and an optional ID
169
94
  #
170
- # @return [Boolean]
95
+ # @param [Database] database The database the connection belongs to
96
+ # @param [Hash] raw_collection The raw collection returned from the server
171
97
  # @api public
172
- # @example Is the collection unloaded?
173
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
98
+ # @example Create a Collection object from scratch
99
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
174
100
  # raw_collection = {
175
101
  # "name" => "example_1",
176
102
  # "waitForSync" => true,
@@ -179,18 +105,21 @@ module Ashikawa
179
105
  # "error" => false,
180
106
  # "code" => 200
181
107
  # }
182
- # collection = Ashikawa::Core::Collection.new database, raw_collection
183
- # collection.being_unloaded? #=> false
184
- def being_unloaded?
185
- @status == 4
108
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
109
+ def initialize(database, raw_collection)
110
+ @database = database
111
+ @name = raw_collection['name'] if raw_collection.has_key?('name')
112
+ @id = raw_collection['id'].to_i if raw_collection.has_key?('id')
113
+ @status = Status.new raw_collection['status'].to_i if raw_collection.has_key?('status')
186
114
  end
187
115
 
188
- # Checks if the collection is corrupted
116
+ # Change the name of the collection
189
117
  #
190
- # @return [Boolean]
118
+ # @param [String] new_name New Name
119
+ # @return [String] New Name
191
120
  # @api public
192
- # @example Is the collection corrupted?
193
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
121
+ # @example Change the name of a collection
122
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
194
123
  # raw_collection = {
195
124
  # "name" => "example_1",
196
125
  # "waitForSync" => true,
@@ -199,10 +128,13 @@ module Ashikawa
199
128
  # "error" => false,
200
129
  # "code" => 200
201
130
  # }
202
- # collection = Ashikawa::Core::Collection.new database, raw_collection
203
- # collection.corrupted? #=> false
204
- def corrupted?
205
- @status > 5
131
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
132
+ # collection.name # => "example_1"
133
+ # collection.name = "example_2"
134
+ # collection.name # => "example_2"
135
+ def name=(new_name)
136
+ send_information_to_server(:rename, :name, new_name)
137
+ @name = new_name
206
138
  end
207
139
 
208
140
  # Does the document wait until the data has been synchronised to disk?
@@ -210,7 +142,7 @@ module Ashikawa
210
142
  # @return [Boolean]
211
143
  # @api public
212
144
  # @example Does the collection wait for file synchronization?
213
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
145
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
214
146
  # raw_collection = {
215
147
  # "name" => "example_1",
216
148
  # "waitForSync" => true,
@@ -219,11 +151,10 @@ module Ashikawa
219
151
  # "error" => false,
220
152
  # "code" => 200
221
153
  # }
222
- # collection = Ashikawa::Core::Collection.new database, raw_collection
154
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
223
155
  # collection.wait_for_sync? #=> false
224
156
  def wait_for_sync?
225
- server_response = send_request_for_this_collection "/properties"
226
- server_response["waitForSync"]
157
+ get_information_from_server(:properties, :waitForSync)
227
158
  end
228
159
 
229
160
  # Change if the document will wait until the data has been synchronised to disk
@@ -231,7 +162,7 @@ module Ashikawa
231
162
  # @return [String] Response from the server
232
163
  # @api public
233
164
  # @example Tell the collection to wait for file synchronization
234
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
165
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
235
166
  # raw_collection = {
236
167
  # "name" => "example_1",
237
168
  # "waitForSync" => true,
@@ -240,10 +171,10 @@ module Ashikawa
240
171
  # "error" => false,
241
172
  # "code" => 200
242
173
  # }
243
- # collection = Ashikawa::Core::Collection.new database, raw_collection
174
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
244
175
  # collection.wait_for_sync = true
245
176
  def wait_for_sync=(new_value)
246
- send_request_for_this_collection "/properties", put: { "waitForSync" => new_value }
177
+ send_information_to_server(:properties, :waitForSync, new_value)
247
178
  end
248
179
 
249
180
  # Returns the number of documents in the collection
@@ -251,7 +182,7 @@ module Ashikawa
251
182
  # @return [Fixnum] Number of documents
252
183
  # @api public
253
184
  # @example How many documents are in the collection?
254
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
185
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
255
186
  # raw_collection = {
256
187
  # "name" => "example_1",
257
188
  # "waitForSync" => true,
@@ -260,25 +191,18 @@ module Ashikawa
260
191
  # "error" => false,
261
192
  # "code" => 200
262
193
  # }
263
- # collection = Ashikawa::Core::Collection.new database, raw_collection
194
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
264
195
  # collection.length # => 0
265
196
  def length
266
- server_response = send_request_for_this_collection "/count"
267
- server_response["count"]
197
+ get_information_from_server(:count, :count)
268
198
  end
269
199
 
270
- # Return a figure for the collection
200
+ # Return a Figure initialized with current data for the collection
271
201
  #
272
- # @param [Symbol] figure_type The figure you want to know:
273
- # * :datafiles_count - the number of active datafiles
274
- # * :alive_size - the total size in bytes used by all living documents
275
- # * :alive_count - the number of living documents
276
- # * :dead_size - the total size in bytes used by all dead documents
277
- # * :dead_count - the number of dead documents
278
- # @return [Fixnum] The figure you requested
202
+ # @return [Figure]
279
203
  # @api public
280
204
  # @example Get the datafile count for a collection
281
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
205
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
282
206
  # raw_collection = {
283
207
  # "name" => "example_1",
284
208
  # "waitForSync" => true,
@@ -287,12 +211,11 @@ module Ashikawa
287
211
  # "error" => false,
288
212
  # "code" => 200
289
213
  # }
290
- # collection = Ashikawa::Core::Collection.new database, raw_collection
291
- # collection.figure :datafiles_count #=> 0
292
- def figure(figure_type)
293
- server_response = send_request_for_this_collection "/figures"
294
- figure_area, figure_name = figure_type.to_s.split "_"
295
- server_response["figures"][figure_area][figure_name]
214
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
215
+ # collection.figure.datafiles_count #=> 0
216
+ def figure
217
+ raw_figure = get_information_from_server(:figures, :figures)
218
+ Figure.new(raw_figure)
296
219
  end
297
220
 
298
221
  # Deletes the collection
@@ -300,7 +223,7 @@ module Ashikawa
300
223
  # @return [String] Response from the server
301
224
  # @api public
302
225
  # @example Delete a collection
303
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
226
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
304
227
  # raw_collection = {
305
228
  # "name" => "example_1",
306
229
  # "waitForSync" => true,
@@ -309,10 +232,10 @@ module Ashikawa
309
232
  # "error" => false,
310
233
  # "code" => 200
311
234
  # }
312
- # collection = Ashikawa::Core::Collection.new database, raw_collection
235
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
313
236
  # collection.delete
314
237
  def delete
315
- send_request_for_this_collection "", delete: {}
238
+ send_request_for_this_collection("", :delete => {})
316
239
  end
317
240
 
318
241
  # Load the collection into memory
@@ -320,7 +243,7 @@ module Ashikawa
320
243
  # @return [String] Response from the server
321
244
  # @api public
322
245
  # @example Load a collection into memory
323
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
246
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
324
247
  # raw_collection = {
325
248
  # "name" => "example_1",
326
249
  # "waitForSync" => true,
@@ -329,10 +252,10 @@ module Ashikawa
329
252
  # "error" => false,
330
253
  # "code" => 200
331
254
  # }
332
- # collection = Ashikawa::Core::Collection.new database, raw_collection
255
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
333
256
  # collection.load
334
257
  def load
335
- send_request_for_this_collection "/load", put: {}
258
+ send_command_to_server(:load)
336
259
  end
337
260
 
338
261
  # Load the collection into memory
@@ -340,7 +263,7 @@ module Ashikawa
340
263
  # @return [String] Response from the server
341
264
  # @api public
342
265
  # @example Unload a collection into memory
343
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
266
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
344
267
  # raw_collection = {
345
268
  # "name" => "example_1",
346
269
  # "waitForSync" => true,
@@ -349,10 +272,10 @@ module Ashikawa
349
272
  # "error" => false,
350
273
  # "code" => 200
351
274
  # }
352
- # collection = Ashikawa::Core::Collection.new database, raw_collection
275
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
353
276
  # collection.unload
354
277
  def unload
355
- send_request_for_this_collection "/unload", put: {}
278
+ send_command_to_server(:unload)
356
279
  end
357
280
 
358
281
  # Delete all documents from the collection
@@ -360,7 +283,7 @@ module Ashikawa
360
283
  # @return [String] Response from the server
361
284
  # @api public
362
285
  # @example Remove all documents from a collection
363
- # database = Ashikawa::Core::Database.new "http://localhost:8529"
286
+ # database = Ashikawa::Core::Database.new("http://localhost:8529")
364
287
  # raw_collection = {
365
288
  # "name" => "example_1",
366
289
  # "waitForSync" => true,
@@ -369,10 +292,10 @@ module Ashikawa
369
292
  # "error" => false,
370
293
  # "code" => 200
371
294
  # }
372
- # collection = Ashikawa::Core::Collection.new database, raw_collection
295
+ # collection = Ashikawa::Core::Collection.new(database, raw_collection)
373
296
  # collection.truncate!
374
297
  def truncate!
375
- send_request_for_this_collection "/truncate", put: {}
298
+ send_command_to_server(:truncate)
376
299
  end
377
300
 
378
301
  # Fetch a certain document by its ID
@@ -381,37 +304,35 @@ module Ashikawa
381
304
  # @raise [DocumentNotFoundException] If the requested document was not found
382
305
  # @return Document
383
306
  # @api public
384
- # @example Fetch a document with the ID 12345
307
+ # @example Fetch the document with the ID 12345
385
308
  # document = collection[12345]
386
309
  def [](document_id)
387
- begin
388
- server_response = send_request "/document/#{@id}/#{document_id}"
389
- rescue RestClient::ResourceNotFound
390
- raise DocumentNotFoundException
391
- end
392
-
393
- Document.new @database, server_response
310
+ server_response = send_request("/document/#{@id}/#{document_id}")
311
+ Document.new(@database, server_response)
394
312
  end
395
313
 
396
314
  # Replace a document by its ID
397
315
  #
398
316
  # @param [Integer] document_id the id of the document
399
317
  # @param [Hash] raw_document the data you want to replace it with
318
+ # @return [Hash] parsed JSON response from the server
400
319
  # @api public
320
+ # @example Replace the document with the ID 12345
321
+ # collection[12345] = document
401
322
  def []=(document_id, raw_document)
402
- send_request "/document/#{@id}/#{document_id}", put: raw_document
323
+ send_request("/document/#{@id}/#{document_id}", :put => raw_document)
403
324
  end
404
325
 
405
326
  # Create a new document from raw data
406
327
  #
407
328
  # @param [Hash] raw_document
408
- # @return DocumentHash
329
+ # @return [Document] The created document
409
330
  # @api public
331
+ # @example Create a new document from raw data
332
+ # collection.create(raw_document)
410
333
  def create(raw_document)
411
- server_response = send_request "/document?collection=#{@id}",
412
- post: raw_document
413
-
414
- Document.new @database, server_response
334
+ server_response = send_request("/document?collection=#{@id}", :post => raw_document)
335
+ Document.new(@database, server_response)
415
336
  end
416
337
 
417
338
  alias :<< :create
@@ -424,14 +345,14 @@ module Ashikawa
424
345
  # @api public
425
346
  # @example Add a hash-index to the fields :name and :profession of a collection
426
347
  # people = database['people']
427
- # people.add_index :hash, :on => [:name, :profession]
348
+ # people.add_index(:hash, :on => [:name, :profession])
428
349
  def add_index(type, opts)
429
- server_response = send_request "/index?collection=#{@id}", post: {
350
+ response = send_request("/index?collection=#{@id}", :post => {
430
351
  "type" => type.to_s,
431
352
  "fields" => opts[:on].map { |field| field.to_s }
432
- }
353
+ })
433
354
 
434
- Index.new self, server_response
355
+ Index.new(self, response)
435
356
  end
436
357
 
437
358
  # Get an index by ID
@@ -439,21 +360,26 @@ module Ashikawa
439
360
  # @param [Integer] id
440
361
  # @return Index
441
362
  # @api public
363
+ # @example Get an Index by its ID
364
+ # people = database['people']
365
+ # people.index(1244) #=> #<Index: id=1244...>
442
366
  def index(id)
443
- server_response = send_request "/index/#{@id}/#{id}"
444
-
445
- Index.new self, server_response
367
+ server_response = send_request("/index/#{@id}/#{id}")
368
+ Index.new(self, server_response)
446
369
  end
447
370
 
448
371
  # Get all indices
449
372
  #
450
373
  # @return [Array<Index>]
451
374
  # @api public
375
+ # @example Get all indices
376
+ # people = database['people']
377
+ # people.indices #=> [#<Index: id=1244...>, ...]
452
378
  def indices
453
- server_response = send_request "/index?collection=#{@id}"
379
+ server_response = send_request("/index?collection=#{@id}")
454
380
 
455
381
  server_response["indexes"].map do |raw_index|
456
- Index.new self, raw_index
382
+ Index.new(self, raw_index)
457
383
  end
458
384
  end
459
385
 
@@ -461,18 +387,52 @@ module Ashikawa
461
387
  #
462
388
  # @return [Query]
463
389
  # @api public
390
+ # @example Get all documents in this collection
391
+ # people = database['people']
392
+ # people.query.all #=> #<Cursor: id=1244...>
464
393
  def query
465
- Query.new self
394
+ Query.new(self)
466
395
  end
467
396
 
468
397
  private
469
398
 
399
+ # Send a put request with a given key and value to the server
400
+ #
401
+ # @param [Symbol] path
402
+ # @param [Symbol] key
403
+ # @param [Symbol] value
404
+ # @return [Object] The result
405
+ # @api private
406
+ def send_information_to_server(path, key, value)
407
+ send_request_for_this_collection("/#{path}", :put => { key.to_s => value })
408
+ end
409
+
410
+ # Send a put request with the given command
411
+ #
412
+ # @param [Symbol] command The command you want to execute
413
+ # @return [Object] The result
414
+ # @api private
415
+ def send_command_to_server(command)
416
+ send_request_for_this_collection("/#{command}", :put => {})
417
+ end
418
+
419
+ # Send a get request to the server and return a certain attribute
420
+ #
421
+ # @param [Symbol] path The path without trailing slash
422
+ # @param [Symbol] attribute The attribute of the answer that should be returned
423
+ # @return [Object] The result
424
+ # @api private
425
+ def get_information_from_server(path, attribute)
426
+ server_response = send_request_for_this_collection("/#{path}")
427
+ server_response[attribute.to_s]
428
+ end
429
+
470
430
  # Send a request to the server with the name of the collection prepended
471
431
  #
472
432
  # @return [String] Response from the server
473
433
  # @api private
474
434
  def send_request_for_this_collection(path, method={})
475
- send_request "/collection/#{id}#{path}", method
435
+ send_request("/collection/#{id}#{path}", method)
476
436
  end
477
437
  end
478
438
  end