ashikawa-core 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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