adapter-mongo 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ pkg/*
2
2
  *.gem
3
3
  .bundle
4
4
  log/*
5
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - ree
5
+ - 1.9.2
6
+ - 1.9.3
7
+ notifications:
8
+ email: false
9
+ bundler_args: --without development
data/Gemfile CHANGED
@@ -1,12 +1,18 @@
1
1
  source "http://rubygems.org"
2
2
  gemspec
3
3
 
4
- group(:development) do
5
- gem 'rake'
6
- gem 'rspec', '~> 2.3'
7
- gem 'log_buddy', '~> 0.5.0'
8
- gem 'timecop', '~> 0.3.5'
9
- gem 'i18n', '0.5.0'
10
- gem 'activesupport', '~> 3', :require => 'active_support'
11
- gem 'bson_ext', :require => false
4
+ gem 'rake', '~> 0.9.0'
5
+
6
+ gem 'mongo', '~> 1.6'
7
+ gem 'bson_ext', '~> 1.6', :require => false
8
+
9
+ group(:test) do
10
+ gem 'rspec', '~> 2.8'
11
+ end
12
+
13
+ group(:guard) do
14
+ gem 'guard', '~> 1.0.0'
15
+ gem 'guard-rspec', '~> 0.6.0'
16
+ gem 'guard-bundler', '~> 0.1.0'
17
+ gem 'growl', '~> 1.0.0'
12
18
  end
data/Guardfile ADDED
@@ -0,0 +1,10 @@
1
+ guard 'bundler' do
2
+ watch('Gemfile')
3
+ watch(/^.+\.gemspec/)
4
+ end
5
+
6
+ guard 'rspec', :version => 2 do
7
+ watch(%r{^spec/.+_spec\.rb$})
8
+ watch(%r{^lib/adapter/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+ end
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # adapter-mongo
2
+
3
+ Mongo adapter for adapter gem.
4
+
5
+ ```ruby
6
+ require 'adapter/mongo'
7
+
8
+ client = Mongo::Connection.new.db('adapter')['testing']
9
+ adapter = Adapter[:mongo].new(client)
10
+ adapter.clear
11
+
12
+ adapter.write('foo', 'bar')
13
+ puts 'Should be bar: ' + adapter.read('foo').inspect
14
+
15
+ adapter.delete('foo')
16
+ puts 'Should be nil: ' + adapter.read('foo').inspect
17
+
18
+ adapter.write('foo', 'bar')
19
+ adapter.clear
20
+ puts 'Should be nil: ' + adapter.read('foo').inspect
21
+
22
+ puts 'Should be bar: ' + adapter.fetch('foo', 'bar')
23
+ ```
24
+
25
+ See examples/ or specs/ for more usage.
26
+
27
+ ## Contributing
28
+
29
+ * Fork the project.
30
+ * Make your feature addition or bug fix.
31
+ * Add tests for it. This is important so we don't break it in a future version unintentionally.
32
+ * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine, but bump version in a commit by itself so we can ignore when we pull)
33
+ * Send us a pull request. Bonus points for topic branches.
@@ -1,5 +1,5 @@
1
1
  module Adapter
2
2
  module Mongo
3
- VERSION = "0.5.4"
3
+ VERSION = "0.5.5"
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ require 'adapter/mongo'
2
+
3
+ Adapter.define(:mongo_atomic, Adapter::Mongo) do
4
+ def write(key, value)
5
+ criteria = {:_id => key_for(key)}
6
+ updates = {'$set' => encode(value)}
7
+ client.update(criteria, updates, :upsert => true, :safe => options[:safe])
8
+ end
9
+ end
data/lib/adapter-mongo.rb CHANGED
@@ -1 +1,2 @@
1
- require 'adapter/mongo'
1
+ require 'adapter/mongo'
2
+ require 'adapter/mongo_atomic'
data/spec/helper.rb CHANGED
@@ -3,19 +3,10 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
3
3
  require 'rubygems'
4
4
  require 'bundler'
5
5
 
6
- Bundler.require(:default, :development)
7
-
8
- require 'pathname'
9
- require 'logger'
10
-
11
- root_path = Pathname(__FILE__).dirname.join('..').expand_path
12
- lib_path = root_path.join('lib')
13
- log_path = root_path.join('log')
14
- log_path.mkpath
6
+ Bundler.require(:default, :test)
15
7
 
16
8
  require 'adapter/spec/an_adapter'
17
9
  require 'adapter/spec/types'
18
-
19
10
  require 'adapter-mongo'
20
11
 
21
12
  shared_examples_for "a mongo adapter" do
@@ -28,11 +19,45 @@ shared_examples_for "a mongo adapter" do
28
19
  adapter[key].should == {'_id' => 'key', 'foo' => :bar}
29
20
  end
30
21
  end
31
- end
32
22
 
33
- logger = Logger.new(log_path.join('test.log'))
34
- LogBuddy.init(:logger => logger)
23
+ it "allows using object id's as keys in correct type" do
24
+ id = BSON::ObjectId.new
25
+ adapter.write(id, 'ham')
26
+ client.find_one('_id' => id).should_not be_nil
27
+ adapter.read(id).should == 'ham'
28
+ end
29
+
30
+ it "stores hashes right in document" do
31
+ adapter.write('foo', 'steak' => 'bacon')
32
+ client.find_one('_id' => 'foo').should == {'_id' => 'foo', 'steak' => 'bacon'}
33
+ end
34
+
35
+ describe "with safe option" do
36
+ before do
37
+ client.ensure_index([['email', 1]], :unique => true)
38
+ @adapter = Adapter[adapter_name].new(client, :safe => true)
39
+ end
40
+
41
+ after do
42
+ client.drop_index('email_1')
43
+ end
44
+
45
+ it "does not raise operation failure on write if operation succeeds" do
46
+ adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
47
+ lambda {
48
+ adapter.write(BSON::ObjectId.new, {'email' => 'steve@orderedlist.com'})
49
+ }.should_not raise_error(Mongo::OperationFailure)
50
+ end
51
+
52
+ it "raises operation failure on write if operation fails" do
53
+ adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
54
+ lambda {
55
+ adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
56
+ }.should raise_error(Mongo::OperationFailure)
57
+ end
58
+ end
59
+ end
35
60
 
36
- Rspec.configure do |c|
61
+ RSpec.configure do |c|
37
62
 
38
63
  end
@@ -0,0 +1,27 @@
1
+ require 'helper'
2
+
3
+ describe "Mongo atomic adapter" do
4
+ before do
5
+ @client = Mongo::Connection.new.db('test')['test']
6
+ @adapter = Adapter[adapter_name].new(@client)
7
+ @adapter.clear
8
+ end
9
+
10
+ let(:adapter_name) { :mongo_atomic }
11
+
12
+ let(:adapter) { @adapter }
13
+ let(:client) { @client }
14
+
15
+ it_should_behave_like 'a mongo adapter'
16
+
17
+ it "allows updating only part of a document" do
18
+ oid = BSON::ObjectId.new
19
+ adapter.write(oid, {'a' => 'c', 'b' => 'd'})
20
+ adapter.write(oid, {'a' => 'z'})
21
+ adapter.read(oid).should eq({
22
+ '_id' => oid,
23
+ 'a' => 'z',
24
+ 'b' => 'd',
25
+ })
26
+ end
27
+ end
data/spec/mongo_spec.rb CHANGED
@@ -3,49 +3,14 @@ require 'helper'
3
3
  describe "Mongo adapter" do
4
4
  before do
5
5
  @client = Mongo::Connection.new.db('test')['test']
6
- @adapter = Adapter[:mongo].new(@client)
6
+ @adapter = Adapter[adapter_name].new(@client)
7
7
  @adapter.clear
8
8
  end
9
9
 
10
+ let(:adapter_name) { :mongo }
11
+
10
12
  let(:adapter) { @adapter }
11
13
  let(:client) { @client }
12
14
 
13
15
  it_should_behave_like 'a mongo adapter'
14
-
15
- it "allows using object id's as keys in correct type" do
16
- id = BSON::ObjectId.new
17
- adapter.write(id, 'ham')
18
- client.find_one('_id' => id).should_not be_nil
19
- adapter.read(id).should == 'ham'
20
- end
21
-
22
- it "stores hashes right in document" do
23
- adapter.write('foo', 'steak' => 'bacon')
24
- client.find_one('_id' => 'foo').should == {'_id' => 'foo', 'steak' => 'bacon'}
25
- end
26
-
27
- describe "with safe option" do
28
- before do
29
- client.ensure_index([['email', 1]], :unique => true)
30
- @adapter = Adapter[:mongo].new(@client, :safe => true)
31
- end
32
-
33
- after do
34
- client.drop_index('email_1')
35
- end
36
-
37
- it "does not raise operation failure on write if operation succeeds" do
38
- adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
39
- lambda {
40
- adapter.write(BSON::ObjectId.new, {'email' => 'steve@orderedlist.com'})
41
- }.should_not raise_error(Mongo::OperationFailure)
42
- end
43
-
44
- it "raises operation failure on write if operation fails" do
45
- adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
46
- lambda {
47
- adapter.write(BSON::ObjectId.new, {'email' => 'john@orderedlist.com'})
48
- }.should raise_error(Mongo::OperationFailure)
49
- end
50
- end
51
- end
16
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adapter-mongo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 4
10
- version: 0.5.4
9
+ - 5
10
+ version: 0.5.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - John Nunemaker
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-20 00:00:00 Z
18
+ date: 2012-05-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime
@@ -58,17 +58,20 @@ extra_rdoc_files: []
58
58
 
59
59
  files:
60
60
  - .gitignore
61
+ - .travis.yml
61
62
  - Gemfile
62
- - Gemfile.lock
63
+ - Guardfile
63
64
  - LICENSE
64
- - README.rdoc
65
+ - README.md
65
66
  - Rakefile
66
67
  - adapter-mongo.gemspec
67
68
  - examples/mongo.rb
68
69
  - lib/adapter-mongo.rb
69
70
  - lib/adapter/mongo.rb
70
71
  - lib/adapter/mongo/version.rb
72
+ - lib/adapter/mongo_atomic.rb
71
73
  - spec/helper.rb
74
+ - spec/mongo_atomic_spec.rb
72
75
  - spec/mongo_spec.rb
73
76
  homepage: ""
74
77
  licenses: []
@@ -105,4 +108,5 @@ specification_version: 3
105
108
  summary: Adapter for mongo
106
109
  test_files:
107
110
  - spec/helper.rb
111
+ - spec/mongo_atomic_spec.rb
108
112
  - spec/mongo_spec.rb
data/Gemfile.lock DELETED
@@ -1,43 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- adapter-mongo (0.5.4)
5
- adapter (~> 0.5)
6
- mongo (~> 1.5)
7
-
8
- GEM
9
- remote: http://rubygems.org/
10
- specs:
11
- activesupport (3.0.3)
12
- adapter (0.5.2)
13
- bson (1.5.2)
14
- bson_ext (1.5.2)
15
- bson (= 1.5.2)
16
- diff-lcs (1.1.2)
17
- i18n (0.5.0)
18
- log_buddy (0.5.0)
19
- mongo (1.5.2)
20
- bson (= 1.5.2)
21
- rake (0.9.2.2)
22
- rspec (2.4.0)
23
- rspec-core (~> 2.4.0)
24
- rspec-expectations (~> 2.4.0)
25
- rspec-mocks (~> 2.4.0)
26
- rspec-core (2.4.0)
27
- rspec-expectations (2.4.0)
28
- diff-lcs (~> 1.1.2)
29
- rspec-mocks (2.4.0)
30
- timecop (0.3.5)
31
-
32
- PLATFORMS
33
- ruby
34
-
35
- DEPENDENCIES
36
- activesupport (~> 3)
37
- adapter-mongo!
38
- bson_ext
39
- i18n (= 0.5.0)
40
- log_buddy (~> 0.5.0)
41
- rake
42
- rspec (~> 2.3)
43
- timecop (~> 0.3.5)
data/README.rdoc DELETED
@@ -1,31 +0,0 @@
1
- = adapter-mongo
2
-
3
- Mongo adapter for adapter gem.
4
-
5
- require 'adapter/mongo'
6
-
7
- client = Mongo::Connection.new.db('adapter')['testing']
8
- adapter = Adapter[:mongo].new(client)
9
- adapter.clear
10
-
11
- adapter.write('foo', 'bar')
12
- puts 'Should be bar: ' + adapter.read('foo').inspect
13
-
14
- adapter.delete('foo')
15
- puts 'Should be nil: ' + adapter.read('foo').inspect
16
-
17
- adapter.write('foo', 'bar')
18
- adapter.clear
19
- puts 'Should be nil: ' + adapter.read('foo').inspect
20
-
21
- puts 'Should be bar: ' + adapter.fetch('foo', 'bar')
22
-
23
- See examples/ or specs/ for more usage.
24
-
25
- == Note on Patches/Pull Requests
26
-
27
- * Fork the project.
28
- * Make your feature addition or bug fix.
29
- * Add tests for it. This is important so we don't break it in a future version unintentionally.
30
- * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine, but bump version in a commit by itself so we can ignore when we pull)
31
- * Send us a pull request. Bonus points for topic branches.