adapter-mongo 0.5.4 → 0.5.5

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 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.