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,77 @@
1
+ module Ashikawa
2
+ module Core
3
+ # Wrapper around the status of a collection
4
+ class Status
5
+ STATUS_NEW_BORN = 1
6
+ STATUS_UNLOADED = 2
7
+ STATUS_LOADED = 3
8
+ STATUS_BEING_UNLOADED = 4
9
+ MAX_UNCORRUPTED = 5
10
+
11
+ # Create a wrapper around a given status
12
+ #
13
+ # @param [Fixnum] code
14
+ # @api public
15
+ # @example Create a new status
16
+ # status = Ashikawa::Core::Status.new(3)
17
+ def initialize(code)
18
+ @code = code
19
+ end
20
+
21
+ # Checks if the collection is new born
22
+ #
23
+ # @return [Boolean]
24
+ # @api public
25
+ # @example Is the collection new born?
26
+ # status = Ashikawa::Core::Status.new(3)
27
+ # status.new_born? #=> false
28
+ def new_born?
29
+ @code == STATUS_NEW_BORN
30
+ end
31
+
32
+ # Checks if the collection is unloaded
33
+ #
34
+ # @return [Boolean]
35
+ # @api public
36
+ # @example Is the collection unloaded?
37
+ # status = Ashikawa::Core::Status.new(3)
38
+ # status.unloaded? #=> false
39
+ def unloaded?
40
+ @code == STATUS_UNLOADED
41
+ end
42
+
43
+ # Checks if the collection is loaded
44
+ #
45
+ # @return [Boolean]
46
+ # @api public
47
+ # @example Is the collection loaded?
48
+ # status = Ashikawa::Core::Status.new(3)
49
+ # status.loaded? #=> true
50
+ def loaded?
51
+ @code == STATUS_LOADED
52
+ end
53
+
54
+ # Checks if the collection is in the process of being unloaded
55
+ #
56
+ # @return [Boolean]
57
+ # @api public
58
+ # @example Is the collection unloaded?
59
+ # status = Ashikawa::Core::Status.new(3)
60
+ # status.being_unloaded? #=> false
61
+ def being_unloaded?
62
+ @code == STATUS_BEING_UNLOADED
63
+ end
64
+
65
+ # Checks if the collection is corrupted
66
+ #
67
+ # @return [Boolean]
68
+ # @api public
69
+ # @example Is the collection corrupted?
70
+ # status = Ashikawa::Core::Status.new(3)
71
+ # status.corrupted? #=> false
72
+ def corrupted?
73
+ @code > MAX_UNCORRUPTED
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,6 +1,6 @@
1
1
  module Ashikawa
2
2
  module Core
3
3
  # Current version of Ashikawa::Core
4
- VERSION = "0.5.1"
4
+ VERSION = "0.6.0"
5
5
  end
6
6
  end
@@ -3,10 +3,6 @@ require 'acceptance/spec_helper'
3
3
  describe "Basics" do
4
4
  subject { ARANGO_HOST }
5
5
 
6
- # it "should have booted up an ArangoDB instance" do
7
- # expect { RestClient.get(subject) }.to_not raise_error
8
- # end
9
-
10
6
  describe "initialized database" do
11
7
  subject { Ashikawa::Core::Database.new ARANGO_HOST }
12
8
 
@@ -21,7 +17,7 @@ describe "Basics" do
21
17
  end
22
18
 
23
19
  it "should create and delete collections" do
24
- subject.collections.should ==[]
20
+ subject.collections.should == []
25
21
  subject["collection_1"]
26
22
  subject["collection_2"]
27
23
  subject["collection_3"]
@@ -44,20 +40,20 @@ describe "Basics" do
44
40
 
45
41
  it "should be possible to load and unload collections" do
46
42
  my_collection = subject["test_collection"]
47
- my_collection.loaded?.should be_true
43
+ my_collection.status.loaded?.should be_true
48
44
  my_collection.unload
49
45
  my_id = my_collection.id
50
46
  my_collection = subject[my_id]
51
- subject[my_id].loaded?.should be_false
47
+ subject[my_id].status.loaded?.should be_false
52
48
  end
53
49
 
54
50
  it "should be possible to get figures" do
55
51
  my_collection = subject["test_collection"]
56
- my_collection.figure(:datafiles_count).class.should == Fixnum
57
- my_collection.figure(:alive_size).class.should == Fixnum
58
- my_collection.figure(:alive_count).class.should == Fixnum
59
- my_collection.figure(:dead_size).class.should == Fixnum
60
- my_collection.figure(:dead_count).class.should == Fixnum
52
+ my_collection.figure.datafiles_count.class.should == Fixnum
53
+ my_collection.figure.alive_size.class.should == Fixnum
54
+ my_collection.figure.alive_count.class.should == Fixnum
55
+ my_collection.figure.dead_size.class.should == Fixnum
56
+ my_collection.figure.dead_count.class.should == Fixnum
61
57
  end
62
58
 
63
59
  it "should change and receive information about waiting for sync" do
@@ -71,8 +67,8 @@ describe "Basics" do
71
67
  it "should be possible to get information about the number of documents" do
72
68
  empty_collection = subject["empty_collection"]
73
69
  empty_collection.length.should == 0
74
- empty_collection << { name: "testname", age: 27}
75
- empty_collection << { name: "anderer name", age: 28}
70
+ empty_collection << { :name => "testname", :age => 27}
71
+ empty_collection << { :name => "anderer name", :age => 28}
76
72
  empty_collection.length.should == 2
77
73
  empty_collection.truncate!
78
74
  empty_collection.length.should == 0
@@ -81,7 +77,7 @@ describe "Basics" do
81
77
  it "should be possible to update the attributes of a document" do
82
78
  collection = subject["documenttests"]
83
79
 
84
- document = collection.create name: "The Dude", bowling: true
80
+ document = collection.create :name => "The Dude", :bowling => true
85
81
  document_id = document.id
86
82
  document["name"] = "Other Dude"
87
83
  document.save
@@ -92,11 +88,11 @@ describe "Basics" do
92
88
  it "should be possible to access and create documents from a collection" do
93
89
  collection = subject["documenttests"]
94
90
 
95
- document = collection.create name: "The Dude", bowling: true
91
+ document = collection.create :name => "The Dude", :bowling => true
96
92
  document_id = document.id
97
93
  collection[document_id]["name"].should == "The Dude"
98
94
 
99
- collection[document_id] = { name: "Other Dude", bowling: true }
95
+ collection[document_id] = { :name => "Other Dude", :bowling => true }
100
96
  collection[document_id]["name"].should == "Other Dude"
101
97
  end
102
98
  end
@@ -104,7 +100,7 @@ describe "Basics" do
104
100
  describe "created document" do
105
101
  let(:database) { Ashikawa::Core::Database.new ARANGO_HOST }
106
102
  let(:collection) { database["documenttests"] }
107
- subject { collection.create name: "The Dude" }
103
+ subject { collection.create :name => "The Dude" }
108
104
  let(:document_id) { subject.id }
109
105
 
110
106
  it "should be possible to manipulate documents and save them" do
@@ -3,13 +3,13 @@ require 'acceptance/spec_helper'
3
3
  describe "Indices" do
4
4
  let(:database) { Ashikawa::Core::Database.new ARANGO_HOST }
5
5
  subject { database["documenttest"] }
6
- let(:index) { subject.add_index :skiplist, on: [:identifier] }
6
+ let(:index) { subject.add_index :skiplist, :on => [:identifier] }
7
7
 
8
8
  it "should be possible to set indices" do
9
9
  index.delete
10
10
 
11
11
  expect {
12
- subject.add_index :skiplist, on: [:identifier]
12
+ subject.add_index :skiplist, :on => [:identifier]
13
13
  }.to change { subject.indices.length }.by(1)
14
14
  end
15
15
 
@@ -19,6 +19,8 @@ describe "Indices" do
19
19
  end
20
20
 
21
21
  it "should be possible to remove indices" do
22
+ pending "Delete doesn't work at random"
23
+
22
24
  expect {
23
25
  index.delete
24
26
  }.to change { subject.indices.length }.by(-1)
@@ -6,18 +6,17 @@ describe "Queries" do
6
6
 
7
7
  describe "AQL query via the database" do
8
8
  it "should return the documents" do
9
+ query = "FOR u IN my_collection FILTER u.bowling == true RETURN u"
10
+ options = { :batch_size => 2, :count => true }
11
+
9
12
  collection << { "name" => "Jeff Lebowski", "bowling" => true }
10
13
  collection << { "name" => "Walter Sobchak", "bowling" => true }
11
14
  collection << { "name" => "Donny Kerabatsos", "bowling" => true }
12
15
  collection << { "name" => "Jeffrey Lebowski", "bowling" => false }
13
16
 
14
- query = "FOR u IN my_collection FILTER u.bowling == true RETURN u"
15
- results = database.query.execute query, batch_size: 2, count: true
16
-
17
- results.length.should == 3
18
- results = results.map { |person| person["name"] }
19
- results.should include "Jeff Lebowski"
20
- results.should_not include "Jeffrey Lebowski"
17
+ names = database.query.execute(query, options).map { |person| person["name"] }
18
+ names.should include "Jeff Lebowski"
19
+ names.should_not include "Jeffrey Lebowski"
21
20
  end
22
21
 
23
22
  it "should be possible to validate" do
@@ -34,39 +33,39 @@ describe "Queries" do
34
33
  before(:each) { subject.truncate! }
35
34
 
36
35
  it "should return all documents of a collection" do
37
- subject << { name: "testname", age: 27}
36
+ subject << { :name => "testname", :age => 27}
38
37
  subject.query.all.first["name"].should == "testname"
39
38
  end
40
39
 
41
40
  it "should be possible to limit and skip results" do
42
- subject << { name: "test1"}
43
- subject << { name: "test2"}
44
- subject << { name: "test3"}
41
+ subject << { :name => "test1"}
42
+ subject << { :name => "test2"}
43
+ subject << { :name => "test3"}
45
44
 
46
- subject.query.all(limit: 2).length.should == 2
47
- subject.query.all(skip: 2).length.should == 1
45
+ subject.query.all(:limit => 2).length.should == 2
46
+ subject.query.all(:skip => 2).length.should == 1
48
47
  end
49
48
 
50
49
  it "should be possible to query documents by example" do
51
50
  subject << { "name" => "Random Document" }
52
- result = subject.query.by_example name: "Random Document"
51
+ result = subject.query.by_example :name => "Random Document"
53
52
  result.length.should == 1
54
53
  end
55
54
 
56
55
  describe "query by geo coordinates" do
57
56
  before :each do
58
- subject.add_index :geo, on: [:latitude, :longitude]
57
+ subject.add_index :geo, :on => [:latitude, :longitude]
59
58
  subject << { "name" => "cologne", "latitude" => 50.948045, "longitude" => 6.961212 }
60
59
  subject << { "name" => "san francisco", "latitude" => -122.395899, "longitude" => 37.793621 }
61
60
  end
62
61
 
63
62
  it "should be possible to query documents near a certain location" do
64
- found_places = subject.query.near latitude: 50, longitude: 6
63
+ found_places = subject.query.near :latitude => 50, :longitude => 6
65
64
  found_places.first["name"].should == "cologne"
66
65
  end
67
66
 
68
67
  it "should be possible to query documents within a certain range" do
69
- found_places = subject.query.within latitude: 50.948040, longitude: 6.961210, radius: 2
68
+ found_places = subject.query.within :latitude => 50.948040, :longitude => 6.961210, :radius => 2
70
69
  found_places.length.should == 1
71
70
  found_places.first["name"].should == "cologne"
72
71
  end
@@ -74,14 +73,14 @@ describe "Queries" do
74
73
 
75
74
  describe "queries by integer ranges" do
76
75
  before :each do
77
- subject.add_index :skiplist, on: [:age]
76
+ subject.add_index :skiplist, :on => [:age]
78
77
  subject << { "name" => "Georg", "age" => 12 }
79
78
  subject << { "name" => "Anne", "age" => 21 }
80
79
  subject << { "name" => "Jens", "age" => 49 }
81
80
  end
82
81
 
83
82
  it "should be possible to query documents for numbers in a certain range" do
84
- found_people = subject.query.in_range attribute: "age", left: 20, right: 30, closed: true
83
+ found_people = subject.query.in_range :attribute => "age", :left => 20, :right => 30, :closed => true
85
84
  found_people.length.should == 1
86
85
  found_people.first["name"].should == "Anne"
87
86
  end
@@ -20,7 +20,7 @@ describe "authenticated database" do
20
20
 
21
21
  context "with user and password" do
22
22
  it "should allow acces to DB" do
23
- subject.authenticate_with username: 'testuser', password: 'testpassword'
23
+ subject.authenticate_with :username => 'testuser', :password => 'testpassword'
24
24
 
25
25
  expect do
26
26
  subject["new_collection"]
@@ -29,7 +29,7 @@ describe "authenticated database" do
29
29
  end
30
30
 
31
31
  it "should deny acces if username and password are wrong" do
32
- subject.authenticate_with username: 'ruffy', password: 'three_headed_monkey'
32
+ subject.authenticate_with :username => 'ruffy', :password => 'three_headed_monkey'
33
33
 
34
34
  expect do
35
35
  subject["denied"]
@@ -3,60 +3,55 @@
3
3
  DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4
4
  cd $DIR
5
5
 
6
- #VERSION=1.0.2
7
- VERSION=1.1.beta1
8
-
6
+ VERSION=1.1.2
9
7
  NAME=ArangoDB-$VERSION
10
8
 
11
9
  if [ ! -d "$DIR/$NAME" ]; then
12
10
  # download ArangoDB
11
+ echo "wget http://www.arangodb.org/travisCI/$NAME.tar.gz"
13
12
  wget http://www.arangodb.org/travisCI/$NAME.tar.gz
13
+ echo "tar zxf $NAME.tar.gz"
14
14
  tar zxf $NAME.tar.gz
15
15
  fi
16
16
 
17
-
17
+ ARCH=$(arch)
18
18
  PID=$(echo $PPID)
19
19
  TMP_DIR="/tmp/arangodb.$PID"
20
20
  PID_FILE="/tmp/arangodb.$PID.pid"
21
21
  ARANGODB_DIR="$DIR/$NAME"
22
- UPDATE_SCRIPT="${ARANGODB_DIR}/js/server/arango-upgrade.js"
23
22
 
24
- # create database directory
25
- mkdir ${TMP_DIR}
23
+ ARANGOD="${ARANGODB_DIR}/bin/arangod"
24
+ if [ "$ARCH" == "x86_64" ]; then
25
+ ARANGOD="${ARANGOD}_x86_64"
26
+ fi
26
27
 
27
- # check for update script
28
- echo "looking for: $UPDATE_SCRIPT"
29
- if [ -f "$UPDATE_SCRIPT" ] ; then
30
- # version 1.1
31
- ${ARANGODB_DIR}/bin/arangod \
32
- --database.directory ${TMP_DIR} \
33
- --configuration none \
34
- --server.endpoint tcp://127.0.0.1:8529 \
35
- --javascript.startup-directory ${ARANGODB_DIR}/js \
36
- --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
37
- --javascript.script "$UPDATE_SCRIPT"
28
+ # (re-)create database directory
29
+ rm -rf ${TMP_DIR}
30
+ mkdir ${TMP_DIR}
38
31
 
39
- ${ARANGODB_DIR}/bin/arangod \
40
- --database.directory ${TMP_DIR} \
41
- --configuration none \
42
- --server.endpoint tcp://127.0.0.1:8529 \
43
- --javascript.startup-directory ${ARANGODB_DIR}/js \
44
- --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
45
- --javascript.action-directory ${ARANGODB_DIR}/js/actions/system \
46
- --database.maximal-journal-size 1048576 \
47
- --server.disable-admin-interface true \
48
- --server.disable-authentication true \
49
- --javascript.gc-interval 1 &
50
- else
51
- # version 1.0
52
- ${ARANGODB_DIR}/bin/arangod ${TMP_DIR} \
53
- --configuration none \
54
- --pid-file ${PID_FILE} \
55
- --javascript.startup-directory ${ARANGODB_DIR}/js \
56
- --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
57
- --javascript.action-directory ${ARANGODB_DIR}/js/actions/system \
58
- --database.maximal-journal-size 1000000 \
59
- --javascript.gc-interval 1 &
32
+ echo "Starting arangodb '${ARANGOD}'"
33
+
34
+ ${ARANGOD} \
35
+ --database.directory ${TMP_DIR} \
36
+ --configuration none \
37
+ --server.endpoint tcp://127.0.0.1:8529 \
38
+ --javascript.startup-directory ${ARANGODB_DIR}/js \
39
+ --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
40
+ --javascript.action-directory ${ARANGODB_DIR}/js/actions/system \
41
+ --database.maximal-journal-size 1048576 \
42
+ --server.disable-admin-interface true \
43
+ --server.disable-authentication true \
44
+ --javascript.gc-interval 1 &
45
+
46
+ sleep 2
47
+
48
+ echo "Check for arangod process"
49
+ process=$(ps auxww | grep "bin/arangod" | grep -v grep)
50
+
51
+ if [ "x$process" == "x" ]; then
52
+ echo "no 'arangod' process found"
53
+ echo "ARCH = $ARCH"
54
+ exit 1
60
55
  fi
61
56
 
62
57
  echo "Waiting until ArangoDB is ready on port 8529"
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ if ENV['COVERAGE'] == 'true'
4
+ require 'simplecov'
5
+
6
+ SimpleCov.start do
7
+ command_name 'spec:unit'
8
+ add_filter 'config'
9
+ add_filter 'spec'
10
+ minimum_coverage 100
11
+ end
12
+ end
13
+
14
+ require 'ashikawa-core'
15
+ require 'rspec'
16
+
17
+ if RUBY_VERSION < '1.9'
18
+ require 'rspec/autorun'
19
+ end
20
+
21
+ # require spec support files and shared behavior
22
+ Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each do |file|
23
+ require file
24
+ end
25
+
26
+ RSpec.configure do |config|
27
+ end
@@ -28,45 +28,6 @@ describe Ashikawa::Core::Collection do
28
28
  collection.query
29
29
  end
30
30
 
31
- describe "the status code" do
32
- it "should know if the collection is new born" do
33
- my_collection = subject.new @database, { "status" => "1" }
34
- my_collection.new_born?.should == true
35
-
36
- my_collection = subject.new @database, { "status" => "200" }
37
- my_collection.new_born?.should == false
38
- end
39
-
40
- it "should know if the collection is unloaded" do
41
- my_collection = subject.new @database, { "status" => "2" }
42
- my_collection.unloaded?.should == true
43
-
44
- my_collection = subject.new @database, { "status" => "200" }
45
- my_collection.unloaded?.should == false
46
- end
47
-
48
- it "should know if the collection is loaded" do
49
- my_collection = subject.new @database, { "status" => "3" }
50
- my_collection.loaded?.should == true
51
-
52
- my_collection = subject.new @database, { "status" => "200" }
53
- my_collection.loaded?.should == false
54
- end
55
-
56
- it "should know if the collection is being unloaded" do
57
- my_collection = subject.new @database, { "status" => "4" }
58
- my_collection.being_unloaded?.should == true
59
-
60
- my_collection = subject.new @database, { "status" => "200" }
61
- my_collection.being_unloaded?.should == false
62
- end
63
-
64
- it "should know if the collection is corrupted" do
65
- my_collection = subject.new @database, { "status" => "6" }
66
- my_collection.corrupted?.should == true
67
- end
68
- end
69
-
70
31
  describe "attributes of a collection" do
71
32
  it "should check if the collection waits for sync" do
72
33
  @database.stub(:send_request).with("/collection/4590/properties", {}).and_return { server_response("/collections/4590") }
@@ -88,12 +49,12 @@ describe Ashikawa::Core::Collection do
88
49
  @database.stub(:send_request).with("/collection/73482/figures", {}).and_return { server_response("/collections/73482-figures") }
89
50
  @database.should_receive(:send_request).with("/collection/73482/figures", {}).at_least(1).times
90
51
 
52
+ mock Ashikawa::Core::Figure
53
+ Ashikawa::Core::Figure.stub(:new)
54
+ Ashikawa::Core::Figure.should_receive(:new).exactly(1).times.with(server_response("/collections/73482-figures")["figures"])
55
+
91
56
  my_collection = subject.new @database, { "id" => "73482" }
92
- my_collection.figure(:datafiles_count).should == 1
93
- my_collection.figure(:alive_size).should == 0
94
- my_collection.figure(:alive_count).should == 0
95
- my_collection.figure(:dead_size).should == 2384
96
- my_collection.figure(:dead_count).should == 149
57
+ my_collection.figure
97
58
  end
98
59
  end
99
60
 
@@ -101,43 +62,43 @@ describe Ashikawa::Core::Collection do
101
62
  subject { Ashikawa::Core::Collection.new @database, { "id" => "4590", "name" => "example_1" } }
102
63
 
103
64
  it "should get deleted" do
104
- @database.stub(:send_request).with("/collection/4590", delete: {})
105
- @database.should_receive(:send_request).with("/collection/4590", delete: {})
65
+ @database.stub(:send_request).with("/collection/4590", :delete => {})
66
+ @database.should_receive(:send_request).with("/collection/4590", :delete => {})
106
67
 
107
68
  subject.delete
108
69
  end
109
70
 
110
71
  it "should get loaded" do
111
- @database.stub(:send_request).with("/collection/4590/load", put: {})
112
- @database.should_receive(:send_request).with("/collection/4590/load", put: {})
72
+ @database.stub(:send_request).with("/collection/4590/load", :put => {})
73
+ @database.should_receive(:send_request).with("/collection/4590/load", :put => {})
113
74
 
114
75
  subject.load
115
76
  end
116
77
 
117
78
  it "should get unloaded" do
118
- @database.stub(:send_request).with("/collection/4590/unload", put: {})
119
- @database.should_receive(:send_request).with("/collection/4590/unload", put: {})
79
+ @database.stub(:send_request).with("/collection/4590/unload", :put => {})
80
+ @database.should_receive(:send_request).with("/collection/4590/unload", :put => {})
120
81
 
121
82
  subject.unload
122
83
  end
123
84
 
124
85
  it "should get truncated" do
125
- @database.stub(:send_request).with("/collection/4590/truncate", put: {})
126
- @database.should_receive(:send_request).with("/collection/4590/truncate", put: {})
86
+ @database.stub(:send_request).with("/collection/4590/truncate", :put => {})
87
+ @database.should_receive(:send_request).with("/collection/4590/truncate", :put => {})
127
88
 
128
89
  subject.truncate!
129
90
  end
130
91
 
131
92
  it "should change if it waits for sync" do
132
- @database.stub(:send_request).with("/collection/4590/properties", put: {"waitForSync" => true})
133
- @database.should_receive(:send_request).with("/collection/4590/properties", put: {"waitForSync" => true})
93
+ @database.stub(:send_request).with("/collection/4590/properties", :put => {"waitForSync" => true})
94
+ @database.should_receive(:send_request).with("/collection/4590/properties", :put => {"waitForSync" => true})
134
95
 
135
96
  subject.wait_for_sync = true
136
97
  end
137
98
 
138
99
  it "should change its name" do
139
- @database.stub(:send_request).with("/collection/4590/rename", put: {"name" => "my_new_name"})
140
- @database.should_receive(:send_request).with("/collection/4590/rename", put: {"name" => "my_new_name"})
100
+ @database.stub(:send_request).with("/collection/4590/rename", :put => {"name" => "my_new_name"})
101
+ @database.should_receive(:send_request).with("/collection/4590/rename", :put => {"name" => "my_new_name"})
141
102
 
142
103
  subject.name = "my_new_name"
143
104
  end
@@ -154,17 +115,17 @@ describe Ashikawa::Core::Collection do
154
115
  end
155
116
 
156
117
  it "should replace a document by ID" do
157
- @database.stub(:send_request).with("/document/4590/333", put: {"name" => "The Dude"})
158
- @database.should_receive(:send_request).with("/document/4590/333", put: {"name" => "The Dude"})
118
+ @database.stub(:send_request).with("/document/4590/333", :put => {"name" => "The Dude"})
119
+ @database.should_receive(:send_request).with("/document/4590/333", :put => {"name" => "The Dude"})
159
120
 
160
121
  subject[333] = {"name" => "The Dude"}
161
122
  end
162
123
 
163
124
  it "should create a new document" do
164
- @database.stub(:send_request).with("/document?collection=4590", post: { "name" => "The Dude" }).and_return do
125
+ @database.stub(:send_request).with("/document?collection=4590", :post => { "name" => "The Dude" }).and_return do
165
126
  server_response('documents/new-4590-333')
166
127
  end
167
- @database.stub(:send_request).with("/document/4590/333", post: { "name" => "The Dude" }).and_return { server_response('documents/4590-333') }
128
+ @database.stub(:send_request).with("/document/4590/333", :post => { "name" => "The Dude" }).and_return { server_response('documents/4590-333') }
168
129
 
169
130
  # Documents need to get initialized:
170
131
  Ashikawa::Core::Document.should_receive(:new)
@@ -173,7 +134,7 @@ describe Ashikawa::Core::Collection do
173
134
  end
174
135
 
175
136
  it "should create a new document with `<<`" do
176
- @database.stub(:send_request).with("/document?collection=4590", post: { "name" => "The Dude" }).and_return do
137
+ @database.stub(:send_request).with("/document?collection=4590", :post => { "name" => "The Dude" }).and_return do
177
138
  server_response('documents/new-4590-333')
178
139
  end
179
140
  @database.stub(:send_request).with("/document/4590/333").and_return { server_response('documents/4590-333') }
@@ -184,28 +145,19 @@ describe Ashikawa::Core::Collection do
184
145
  subject << {"name" => "The Dude"}
185
146
  end
186
147
 
187
- it "should raise an exception if a document is not found" do
188
- @database.stub(:send_request).with("/document/4590/333") do
189
- raise RestClient::ResourceNotFound
190
- end
191
- @database.should_receive(:send_request).with("/document/4590/333")
192
-
193
- expect { subject[333] }.to raise_error(Ashikawa::Core::DocumentNotFoundException)
194
- end
195
-
196
148
  describe "indices" do
197
149
  it "should add a new index" do
198
- @database.stub(:send_request).with("/index?collection=4590", post: {
150
+ @database.stub(:send_request).with("/index?collection=4590", :post => {
199
151
  "type" => "hash", "fields" => [ "a", "b" ]
200
152
  }).and_return { server_response('indices/new-hash-index') }
201
- @database.should_receive(:send_request).with("/index?collection=4590", post: {
153
+ @database.should_receive(:send_request).with("/index?collection=4590", :post => {
202
154
  "type" => "hash", "fields" => [ "a", "b" ]
203
155
  })
204
156
 
205
157
  Ashikawa::Core::Index.should_receive(:new).with(subject,
206
158
  server_response('indices/new-hash-index'))
207
159
 
208
- subject.add_index :hash, on: [ :a, :b ]
160
+ subject.add_index :hash, :on => [ :a, :b ]
209
161
  end
210
162
 
211
163
  it "should get an index by ID" do