rom-mongo 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG.md +8 -0
- data/lib/rom/mongo.rb +6 -4
- data/lib/rom/mongo/adapter.rb +10 -3
- data/lib/rom/mongo/commands.rb +41 -0
- data/lib/rom/mongo/version.rb +1 -1
- data/rom-mongo.gemspec +4 -4
- data/spec/integration/adapter_spec.rb +82 -13
- metadata +20 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e69abd7cd3bef9b652297a3c97241b9ad3d2c6b
|
4
|
+
data.tar.gz: 6fd82e39ddece041401708ab9f57a0c72aecc8ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2b72325a9b94dcb9e5701d1a9d70b8a3cfc341f364b5ecb02185ff5d715dad8247d5443276a7ad0e7ff235f464f88779553b0e6cfde1276584885e49d0e37f3
|
7
|
+
data.tar.gz: b00bbd5a154c383e871a4ff58ae83c491ab3bc15a7a12c115c4ce87768f84245e16c63b0883ad758db97de564314a3fa7fbe766b8a05c33b9cd25260ddc746fc
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/lib/rom/mongo.rb
CHANGED
data/lib/rom/mongo/adapter.rb
CHANGED
@@ -2,7 +2,6 @@ module ROM
|
|
2
2
|
module Mongo
|
3
3
|
|
4
4
|
class Adapter < ROM::Adapter
|
5
|
-
attr_reader :connection
|
6
5
|
|
7
6
|
def self.schemes
|
8
7
|
[:mongo]
|
@@ -10,6 +9,10 @@ module ROM
|
|
10
9
|
|
11
10
|
class Dataset
|
12
11
|
include Charlatan.new(:collection, kind: Moped::Query)
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
collection.find.each(&block)
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
15
18
|
def initialize(*args)
|
@@ -22,8 +25,12 @@ module ROM
|
|
22
25
|
Dataset.new(connection[name])
|
23
26
|
end
|
24
27
|
|
25
|
-
def
|
26
|
-
|
28
|
+
def dataset?(name)
|
29
|
+
connection.collection_names.include?(name.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
def command_namespace
|
33
|
+
Mongo::Commands
|
27
34
|
end
|
28
35
|
|
29
36
|
ROM::Adapter.register(self)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'bson'
|
2
|
+
|
3
|
+
module ROM
|
4
|
+
module Mongo
|
5
|
+
|
6
|
+
module Commands
|
7
|
+
|
8
|
+
class Create < ROM::Commands::Create
|
9
|
+
alias_method :collection, :relation
|
10
|
+
|
11
|
+
def execute(document)
|
12
|
+
collection.insert(document)
|
13
|
+
[document]
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class Update < ROM::Commands::Update
|
19
|
+
alias_method :set, :call
|
20
|
+
alias_method :collection, :relation
|
21
|
+
|
22
|
+
def execute(attributes)
|
23
|
+
collection.update_all('$set' => attributes)
|
24
|
+
collection.to_a
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class Delete < ROM::Commands::Delete
|
30
|
+
|
31
|
+
def execute
|
32
|
+
removed = target.to_a
|
33
|
+
target.remove_all
|
34
|
+
removed
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/rom/mongo/version.rb
CHANGED
data/rom-mongo.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'rom/mongo/version'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rom-mongo"
|
8
|
-
spec.version = ROM::Mongo::VERSION
|
8
|
+
spec.version = ROM::Mongo::VERSION.dup
|
9
9
|
spec.authors = ["Piotr Solnica"]
|
10
10
|
spec.email = ["piotr.solnica@gmail.com"]
|
11
11
|
spec.summary = %q{MongoDB support for Ruby Object Mapper}
|
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "moped"
|
22
|
-
spec.add_runtime_dependency "rom", "~> 0.
|
22
|
+
spec.add_runtime_dependency "rom", "~> 0.4", ">= 0.4.0"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
25
|
-
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "bundler"
|
25
|
+
spec.add_development_dependency "rake"
|
26
26
|
end
|
@@ -3,21 +3,22 @@ require 'spec_helper'
|
|
3
3
|
require 'virtus'
|
4
4
|
|
5
5
|
describe 'Mongo adapter' do
|
6
|
+
subject(:rom) { setup.finalize }
|
7
|
+
|
6
8
|
let(:setup) { ROM.setup(mongo: 'mongo://127.0.0.1:27017/test') }
|
7
|
-
let(:rom) { setup.finalize }
|
8
9
|
|
9
10
|
after do
|
10
11
|
rom.mongo.connection.drop
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
+
before do
|
14
15
|
setup.schema do
|
15
16
|
base_relation(:users) do
|
16
17
|
repository :mongo
|
17
18
|
|
18
|
-
attribute
|
19
|
-
attribute
|
20
|
-
attribute
|
19
|
+
attribute '_id'
|
20
|
+
attribute 'name'
|
21
|
+
attribute 'email'
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
@@ -27,12 +28,20 @@ describe 'Mongo adapter' do
|
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
31
|
+
setup.commands(:users) do
|
32
|
+
define(:create)
|
33
|
+
define(:update)
|
34
|
+
define(:delete)
|
35
|
+
end
|
36
|
+
|
30
37
|
user_model = Class.new do
|
31
|
-
include Virtus.
|
38
|
+
include Virtus.value_object
|
32
39
|
|
33
|
-
|
34
|
-
|
35
|
-
|
40
|
+
values do
|
41
|
+
attribute :id, String
|
42
|
+
attribute :name, String
|
43
|
+
attribute :email, String
|
44
|
+
end
|
36
45
|
end
|
37
46
|
|
38
47
|
setup.mappers do
|
@@ -44,11 +53,71 @@ describe 'Mongo adapter' do
|
|
44
53
|
end
|
45
54
|
|
46
55
|
rom.schema.users.insert(name: 'Jane', email: 'jane@doe.org')
|
56
|
+
rom.schema.users.insert(name: 'Joe', email: 'joe@doe.org')
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'env#read' do
|
60
|
+
it 'returns mapped object' do
|
61
|
+
jane = rom.read(:users).by_name('Jane').to_a.first
|
62
|
+
|
63
|
+
expect(jane.id).to eql(rom.schema.users.find(name: 'Jane').one['_id'].to_s)
|
64
|
+
expect(jane.name).to eql('Jane')
|
65
|
+
expect(jane.email).to eql('jane@doe.org')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'adapter#dataset?' do
|
70
|
+
it 'returns true if a collection exists' do
|
71
|
+
expect(rom.mongo.adapter.dataset?(:users)).to be(true)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'returns false if a does not collection exist' do
|
75
|
+
expect(rom.mongo.adapter.dataset?(:not_here)).to be(false)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'commands' do
|
80
|
+
let(:commands) { rom.command(:users) }
|
47
81
|
|
48
|
-
|
82
|
+
describe 'create' do
|
83
|
+
it 'inserts a document into collection' do
|
84
|
+
id = BSON::ObjectId.new
|
49
85
|
|
50
|
-
|
51
|
-
|
52
|
-
|
86
|
+
result = commands.try { create(_id: id, name: 'joe', email: 'joe@doe.org') }
|
87
|
+
|
88
|
+
expect(result).to match_array([{ _id: id, name: 'joe', email: 'joe@doe.org' }])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'update' do
|
93
|
+
it 'updates a document in the collection' do
|
94
|
+
jane = rom.read(:users).by_name('Jane').first
|
95
|
+
|
96
|
+
result = commands.try { update(:by_name, 'Jane').set(email: 'jane.doe@test.com') }
|
97
|
+
|
98
|
+
expect(result).to match_array(
|
99
|
+
[{ '_id' => BSON::ObjectId.from_string(jane.id),
|
100
|
+
'name' => 'Jane',
|
101
|
+
'email' => 'jane.doe@test.com' }]
|
102
|
+
)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'delete' do
|
107
|
+
it 'deletes documents from the collection' do
|
108
|
+
jane = rom.read(:users).by_name('Jane').first
|
109
|
+
joe = rom.read(:users).by_name('Joe').first
|
110
|
+
|
111
|
+
result = commands.try { delete(:by_name, 'Joe').execute }
|
112
|
+
|
113
|
+
expect(result).to match_array(
|
114
|
+
[{ '_id' => BSON::ObjectId.from_string(joe.id),
|
115
|
+
'name' => 'Joe',
|
116
|
+
'email' => 'joe@doe.org' }]
|
117
|
+
)
|
118
|
+
|
119
|
+
expect(rom.read(:users).to_a).to eql([jane])
|
120
|
+
end
|
121
|
+
end
|
53
122
|
end
|
54
123
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: moped
|
@@ -30,42 +30,48 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.4'
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.4.0
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
41
|
- - ~>
|
39
42
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
43
|
+
version: '0.4'
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.4.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- -
|
58
|
+
- - '>='
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '0'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: rake
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- -
|
65
|
+
- - '>='
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
67
|
+
version: '0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- -
|
72
|
+
- - '>='
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
74
|
+
version: '0'
|
69
75
|
description: MongoDB support for Ruby Object Mapper
|
70
76
|
email:
|
71
77
|
- piotr.solnica@gmail.com
|
@@ -84,6 +90,7 @@ files:
|
|
84
90
|
- lib/rom-mongo.rb
|
85
91
|
- lib/rom/mongo.rb
|
86
92
|
- lib/rom/mongo/adapter.rb
|
93
|
+
- lib/rom/mongo/commands.rb
|
87
94
|
- lib/rom/mongo/version.rb
|
88
95
|
- rom-mongo.gemspec
|
89
96
|
- spec/integration/adapter_spec.rb
|
@@ -115,3 +122,4 @@ summary: MongoDB support for Ruby Object Mapper
|
|
115
122
|
test_files:
|
116
123
|
- spec/integration/adapter_spec.rb
|
117
124
|
- spec/spec_helper.rb
|
125
|
+
has_rdoc:
|