mongodb 0.0.2 → 0.0.3
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/Rakefile +1 -1
- data/lib/mongodb/object/object_helper.rb +2 -2
- data/readme.md +56 -129
- data/spec/object/crud_spec.rb +1 -1
- metadata +8 -36
- data/lib/mongodb/integration/locales.rb +0 -4
- data/lib/mongodb/integration/locales/activemodel/ru.yml +0 -27
- data/lib/mongodb/model.rb +0 -26
- data/lib/mongodb/model/assignment.rb +0 -65
- data/lib/mongodb/model/attribute_convertors.rb +0 -54
- data/lib/mongodb/model/callbacks.rb +0 -36
- data/lib/mongodb/model/crud.rb +0 -57
- data/lib/mongodb/model/db.rb +0 -53
- data/lib/mongodb/model/misc.rb +0 -33
- data/lib/mongodb/model/model.rb +0 -11
- data/lib/mongodb/model/query.rb +0 -36
- data/lib/mongodb/model/scope.rb +0 -99
- data/lib/mongodb/model/spec.rb +0 -12
- data/lib/mongodb/model/support/types.rb +0 -110
- data/lib/mongodb/model/validation.rb +0 -5
- data/spec/integration/am_conversion_spec.rb +0 -1
- data/spec/integration/am_validation_spec.rb +0 -34
- data/spec/integration/validatable2_spec.rb +0 -40
- data/spec/model/assignment_spec.rb +0 -80
- data/spec/model/attribute_convertors_spec.rb +0 -73
- data/spec/model/callbacks_spec.rb +0 -47
- data/spec/model/crud_spec.rb +0 -151
- data/spec/model/db_spec.rb +0 -63
- data/spec/model/misc_spec.rb +0 -58
- data/spec/model/query_spec.rb +0 -47
- data/spec/model/scope_spec.rb +0 -149
- data/spec/model/spec_helper.rb +0 -4
- data/spec/model/validation_spec.rb +0 -37
@@ -1 +0,0 @@
|
|
1
|
-
# to_json, to_xml
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# require 'model/spec_helper'
|
2
|
-
# require 'active_model'
|
3
|
-
#
|
4
|
-
# describe "Validations" do
|
5
|
-
# with_mongo_model
|
6
|
-
#
|
7
|
-
# before do
|
8
|
-
# class Unit
|
9
|
-
# inherit Mongo::Model
|
10
|
-
# collection :units
|
11
|
-
#
|
12
|
-
# include ActiveModel::Validations
|
13
|
-
#
|
14
|
-
# attr_accessor :name, :status
|
15
|
-
#
|
16
|
-
# validates_presence_of :name
|
17
|
-
# end
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# after{remove_constants :Unit}
|
21
|
-
#
|
22
|
-
# it "ActiveModel integration smoke test" do
|
23
|
-
# unit = Unit.new
|
24
|
-
# unit.should be_invalid
|
25
|
-
# unit.errors.size.should == 1
|
26
|
-
# unit.errors.first.first.should == :name
|
27
|
-
# unit.save.should be_false
|
28
|
-
#
|
29
|
-
# unit.name = 'Zeratul'
|
30
|
-
# unit.should be_valid
|
31
|
-
# unit.errors.should be_empty
|
32
|
-
# unit.save.should be_true
|
33
|
-
# end
|
34
|
-
# end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
require 'validatable'
|
3
|
-
|
4
|
-
describe "Integration with validatable2" do
|
5
|
-
with_mongo_model
|
6
|
-
|
7
|
-
before do
|
8
|
-
class Unit
|
9
|
-
inherit Mongo::Model
|
10
|
-
collection :units
|
11
|
-
|
12
|
-
include Validatable
|
13
|
-
|
14
|
-
attr_accessor :name, :status
|
15
|
-
|
16
|
-
validates_presence_of :name
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
after{remove_constants :Unit}
|
21
|
-
|
22
|
-
it "ActiveModel integration smoke test" do
|
23
|
-
unit = Unit.new
|
24
|
-
unit.should_not be_valid
|
25
|
-
unit.errors.size.should == 1
|
26
|
-
unit.errors.first.first.should == :name
|
27
|
-
unit.save.should be_false
|
28
|
-
|
29
|
-
unit.name = 'Zeratul'
|
30
|
-
unit.should be_valid
|
31
|
-
unit.errors.should be_empty
|
32
|
-
unit.save.should be_true
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should not save errors as instance variables" do
|
36
|
-
unit = Unit.new
|
37
|
-
unit.valid?
|
38
|
-
unit.instance_variables.select{|iv_name| iv_name !~ /^@_/}.should be_empty
|
39
|
-
end
|
40
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
|
3
|
-
describe 'Model callbacks' do
|
4
|
-
with_mongo
|
5
|
-
|
6
|
-
after{remove_constants :User, :Writer}
|
7
|
-
|
8
|
-
it "should update attributes" do
|
9
|
-
class User
|
10
|
-
inherit Mongo::Model
|
11
|
-
|
12
|
-
attr_accessor :name, :has_mail, :age, :banned
|
13
|
-
end
|
14
|
-
|
15
|
-
u = User.new
|
16
|
-
u.set name: 'Alex', has_mail: '1', age: '31', banned: '0'
|
17
|
-
[u.name, u.has_mail, u.age, u.banned].should == ['Alex', '1', '31', '0']
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should update only specified attributes" do
|
21
|
-
class User
|
22
|
-
inherit Mongo::Model
|
23
|
-
|
24
|
-
attr_accessor :name, :has_mail, :age, :position, :banned
|
25
|
-
|
26
|
-
assign do
|
27
|
-
name String, true
|
28
|
-
has_mail Boolean, true
|
29
|
-
age Integer, true
|
30
|
-
position true
|
31
|
-
banned Boolean
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
u = User.new
|
36
|
-
u.set name: 'Alex', has_mail: '1', age: '31', position: [11, 34] ,banned: '0'
|
37
|
-
[u.name, u.has_mail, u.age, u.position, u.banned].should == ['Alex', true, 31, [11, 34], nil]
|
38
|
-
|
39
|
-
# should allow to forcefully cast and update any attribute
|
40
|
-
u.set! banned: '0'
|
41
|
-
u.banned.should == false
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should inherit assignment rules" do
|
45
|
-
class User
|
46
|
-
inherit Mongo::Model
|
47
|
-
|
48
|
-
attr_accessor :age
|
49
|
-
|
50
|
-
assign do
|
51
|
-
age Integer, true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class Writer < User
|
56
|
-
attr_accessor :posts
|
57
|
-
|
58
|
-
assign do
|
59
|
-
posts Integer, true
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
u = Writer.new
|
64
|
-
u.set age: '20', posts: '12'
|
65
|
-
[u.age, u.posts].should == [20, 12]
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'casting smoke test' do
|
69
|
-
[
|
70
|
-
Boolean, '1', true,
|
71
|
-
Date, '2011-08-23', Date.parse('2011-08-23'),
|
72
|
-
Float, '1.2', 1.2,
|
73
|
-
Integer, '10', 10,
|
74
|
-
String, 'Hi', 'Hi',
|
75
|
-
Time, '2011-08-23', Date.parse('2011-08-23').to_time
|
76
|
-
].each_slice 3 do |type, raw, expected|
|
77
|
-
type.cast(raw).should == expected
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
|
3
|
-
describe "Attribute Convertors" do
|
4
|
-
with_mongo_model
|
5
|
-
|
6
|
-
after(:all){remove_constants :TheSample}
|
7
|
-
|
8
|
-
convertors = Mongo::Model::AttributeConvertors::CONVERTORS
|
9
|
-
|
10
|
-
it ":line convertor" do
|
11
|
-
v = ['a', 'b']
|
12
|
-
str_v = 'a, b'
|
13
|
-
convertors[:line][:from_string].call(str_v).should == v
|
14
|
-
convertors[:line][:to_string].call(v).should == str_v
|
15
|
-
end
|
16
|
-
|
17
|
-
it ":yaml convertor" do
|
18
|
-
v = {'a' => 'b'}
|
19
|
-
str_v = v.to_yaml.strip
|
20
|
-
|
21
|
-
convertors[:yaml][:from_string].call(str_v).should == v
|
22
|
-
convertors[:yaml][:to_string].call(v).should == str_v
|
23
|
-
end
|
24
|
-
|
25
|
-
it ":json convertor" do
|
26
|
-
v = {'a' => 'b'}
|
27
|
-
str_v = v.to_json.strip
|
28
|
-
convertors[:json][:from_string].call(str_v).should == v
|
29
|
-
convertors[:json][:to_string].call(v).should == str_v
|
30
|
-
end
|
31
|
-
|
32
|
-
it ":field should generate helper methods if :as_string option provided" do
|
33
|
-
class ::TheSample
|
34
|
-
inherit Mongo::Model
|
35
|
-
|
36
|
-
attr_accessor :tags, :protected_tags
|
37
|
-
available_as_string :tags, :line
|
38
|
-
available_as_string :protected_tags, :line
|
39
|
-
|
40
|
-
def initialize
|
41
|
-
@tags, @protected_tags = [], []
|
42
|
-
end
|
43
|
-
|
44
|
-
assign do
|
45
|
-
tags_as_string true
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
o = TheSample.new
|
50
|
-
|
51
|
-
# get
|
52
|
-
o.tags_as_string.should == ''
|
53
|
-
o.tags = %w(Java Ruby)
|
54
|
-
o._clear_cache
|
55
|
-
o.tags_as_string.should == 'Java, Ruby'
|
56
|
-
|
57
|
-
# set
|
58
|
-
o.tags_as_string = ''
|
59
|
-
o.tags.should == []
|
60
|
-
o.tags_as_string = 'Java, Ruby'
|
61
|
-
o.tags.should == %w(Java Ruby)
|
62
|
-
|
63
|
-
# mass assignment
|
64
|
-
o.tags = []
|
65
|
-
o.set tags_as_string: 'Java, Ruby'
|
66
|
-
o.tags.should == %w(Java Ruby)
|
67
|
-
|
68
|
-
# # protection
|
69
|
-
o.protected_tags = []
|
70
|
-
o.set protected_tags_as_string: 'Java, Ruby'
|
71
|
-
o.protected_tags.should == []
|
72
|
-
end
|
73
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
|
3
|
-
describe 'Model callbacks' do
|
4
|
-
with_mongo
|
5
|
-
|
6
|
-
after(:all){remove_constants :TheModel, :Player}
|
7
|
-
|
8
|
-
it "callback integration" do
|
9
|
-
class TheModel
|
10
|
-
inherit Mongo::Model
|
11
|
-
end
|
12
|
-
|
13
|
-
model = TheModel.new
|
14
|
-
|
15
|
-
model.should_receive(:run_before_callbacks).with(:save, {method: :save})
|
16
|
-
model._run_callbacks :before, :save
|
17
|
-
end
|
18
|
-
|
19
|
-
it "integration smoke test" do
|
20
|
-
class Player
|
21
|
-
inherit Mongo::Model
|
22
|
-
|
23
|
-
before_validate :before_validate_check
|
24
|
-
after_save :after_save_check
|
25
|
-
|
26
|
-
attr_accessor :missions
|
27
|
-
|
28
|
-
class Mission
|
29
|
-
inherit Mongo::Model
|
30
|
-
|
31
|
-
before_validate :before_validate_check
|
32
|
-
after_save :after_save_check
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
mission = Player::Mission.new
|
37
|
-
player = Player.new
|
38
|
-
player.missions = [mission]
|
39
|
-
|
40
|
-
player.should_receive(:before_validate_check).once.ordered.and_return(nil)
|
41
|
-
mission.should_receive(:before_validate_check).once.ordered.and_return(nil)
|
42
|
-
player.should_receive(:after_save_check).once.ordered.and_return(nil)
|
43
|
-
mission.should_receive(:after_save_check).once.ordered.and_return(nil)
|
44
|
-
|
45
|
-
db.units.save(player).should be_true
|
46
|
-
end
|
47
|
-
end
|
data/spec/model/crud_spec.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
require 'object/crud_shared'
|
3
|
-
|
4
|
-
describe "Model CRUD" do
|
5
|
-
with_mongo_model
|
6
|
-
|
7
|
-
describe 'simple' do
|
8
|
-
before :all do
|
9
|
-
class Unit
|
10
|
-
inherit Mongo::Model
|
11
|
-
collection :units
|
12
|
-
|
13
|
-
attr_accessor :name, :info
|
14
|
-
def == o; [self.class, name, info] == [o.class, o.respond_to(:name), o.respond_to(:info)] end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
after(:all){remove_constants :Unit}
|
18
|
-
|
19
|
-
before do
|
20
|
-
@zeratul = Unit.build name: 'Zeratul', info: 'Dark Templar'
|
21
|
-
end
|
22
|
-
|
23
|
-
it_should_behave_like "object CRUD"
|
24
|
-
|
25
|
-
it 'model crud' do
|
26
|
-
# read
|
27
|
-
Unit.count.should == 0
|
28
|
-
Unit.all.should == []
|
29
|
-
Unit.first.should == nil
|
30
|
-
|
31
|
-
# create
|
32
|
-
@zeratul.save.should be_true
|
33
|
-
@zeratul._id.should_not be_nil
|
34
|
-
|
35
|
-
# read
|
36
|
-
Unit.count.should == 1
|
37
|
-
Unit.all.should == [@zeratul]
|
38
|
-
Unit.first.should == @zeratul
|
39
|
-
Unit.first.object_id.should_not == @zeratul.object_id
|
40
|
-
|
41
|
-
# update
|
42
|
-
@zeratul.info = 'Killer of Cerebrates'
|
43
|
-
@zeratul.save.should be_true
|
44
|
-
Unit.count.should == 1
|
45
|
-
Unit.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
|
46
|
-
|
47
|
-
# destroy
|
48
|
-
@zeratul.destroy.should be_true
|
49
|
-
Unit.count.should == 0
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should be able to save to another collection' do
|
53
|
-
# create
|
54
|
-
@zeratul.save(collection: db.heroes).should be_true
|
55
|
-
@zeratul._id.should_not be_nil
|
56
|
-
|
57
|
-
# read
|
58
|
-
Unit.count.should == 0
|
59
|
-
db.heroes.count.should == 1
|
60
|
-
db.heroes.first.should == @zeratul
|
61
|
-
db.heroes.first.object_id.should_not == @zeratul.object_id
|
62
|
-
|
63
|
-
# update
|
64
|
-
@zeratul.info = 'Killer of Cerebrates'
|
65
|
-
@zeratul.save(collection: db.heroes).should be_true
|
66
|
-
Unit.count.should == 0
|
67
|
-
db.heroes.count.should == 1
|
68
|
-
db.heroes.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
|
69
|
-
|
70
|
-
# destroy
|
71
|
-
@zeratul.destroy(collection: db.heroes).should be_true
|
72
|
-
db.heroes.count.should == 0
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'build' do
|
76
|
-
u = Unit.build name: 'Zeratul'
|
77
|
-
u.name.should == 'Zeratul'
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'create' do
|
81
|
-
u = Unit.create(name: 'Zeratul')
|
82
|
-
u.new_record?.should be_false
|
83
|
-
|
84
|
-
u = Unit.create!(name: 'Zeratul')
|
85
|
-
u.new_record?.should be_false
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'destroy_all' do
|
89
|
-
Unit.create(name: 'Zeratul')
|
90
|
-
Unit.count.should == 1
|
91
|
-
Unit.destroy_all
|
92
|
-
Unit.count.should == 0
|
93
|
-
|
94
|
-
Unit.destroy_all!
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe 'embedded' do
|
99
|
-
before :all do
|
100
|
-
class Player
|
101
|
-
inherit Mongo::Model
|
102
|
-
collection :players
|
103
|
-
|
104
|
-
attr_accessor :missions
|
105
|
-
def == o; [self.class, self.missions] == [o.class, o.respond_to(:missions)] end
|
106
|
-
|
107
|
-
class Mission
|
108
|
-
inherit Mongo::Model
|
109
|
-
|
110
|
-
attr_accessor :name, :stats
|
111
|
-
def == o; [self.class, self.name, self.stats] == [o.class, o.respond_to(:name), o.respond_to(:stats)] end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
after(:all){remove_constants :Player}
|
116
|
-
|
117
|
-
before do
|
118
|
-
@mission_class = Player::Mission
|
119
|
-
@player = Player.new
|
120
|
-
@player.missions = [
|
121
|
-
Player::Mission.build(name: 'Wasteland', stats: {buildings: 5, units: 10}),
|
122
|
-
Player::Mission.build(name: 'Backwater Station', stats: {buildings: 8, units: 25}),
|
123
|
-
]
|
124
|
-
end
|
125
|
-
|
126
|
-
it_should_behave_like 'embedded object CRUD'
|
127
|
-
|
128
|
-
it 'crud' do
|
129
|
-
# create
|
130
|
-
@player.save.should be_true
|
131
|
-
@player._id.should_not be_nil
|
132
|
-
|
133
|
-
# read
|
134
|
-
Player.count.should == 1
|
135
|
-
Player.first.should == @player
|
136
|
-
Player.first.object_id.should_not == @players.object_id
|
137
|
-
|
138
|
-
# update
|
139
|
-
@player.missions.first.stats[:units] = 9
|
140
|
-
@player.missions << Player::Mission.build(name: 'Desperate Alliance', stats: {buildings: 11, units: 40})
|
141
|
-
@player.save.should be_true
|
142
|
-
Player.count.should == 1
|
143
|
-
Player.first.should == @player
|
144
|
-
Player.first.object_id.should_not == @player.object_id
|
145
|
-
|
146
|
-
# destroy
|
147
|
-
@player.destroy.should be_true
|
148
|
-
Player.count.should == 0
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
data/spec/model/db_spec.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'model/spec_helper'
|
2
|
-
|
3
|
-
describe 'Collection & Database' do
|
4
|
-
with_mongo
|
5
|
-
|
6
|
-
before :all do
|
7
|
-
class TheModel
|
8
|
-
inherit Mongo::Model
|
9
|
-
end
|
10
|
-
end
|
11
|
-
after(:all){remove_constants :TheModel}
|
12
|
-
|
13
|
-
after do
|
14
|
-
TheModel.db = nil
|
15
|
-
TheModel.collection = nil
|
16
|
-
Mongo::Model.connection, Mongo::Model.db = nil, nil
|
17
|
-
end
|
18
|
-
|
19
|
-
it "global setting" do
|
20
|
-
Mongo::Model.connection = db.connection
|
21
|
-
Mongo::Model.db = db
|
22
|
-
|
23
|
-
Mongo::Model.connection.should == db.connection
|
24
|
-
Mongo::Model.db.should == db
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should allow set database per model" do
|
28
|
-
Mongo::Model.connection = db.connection
|
29
|
-
Mongo::Model.db = db
|
30
|
-
|
31
|
-
TheModel.db.should == db
|
32
|
-
|
33
|
-
TheModel.db :test
|
34
|
-
TheModel.db.name.should == 'test'
|
35
|
-
|
36
|
-
TheModel.db = nil
|
37
|
-
TheModel.db db
|
38
|
-
TheModel.db.should == db
|
39
|
-
|
40
|
-
TheModel.db = nil
|
41
|
-
TheModel.db{db}
|
42
|
-
TheModel.db.should == db
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should allow set collection per model" do
|
46
|
-
Mongo::Model.db = db
|
47
|
-
|
48
|
-
# TheModel.default_collection_name.should == :the_model
|
49
|
-
# TheModel.collection.name.should == 'the_model'
|
50
|
-
|
51
|
-
TheModel.collection :units
|
52
|
-
TheModel.collection.name.should == 'units'
|
53
|
-
|
54
|
-
TheModel.collection = nil
|
55
|
-
units = db.units
|
56
|
-
TheModel.collection units
|
57
|
-
TheModel.collection.should == units
|
58
|
-
|
59
|
-
TheModel.collection = nil
|
60
|
-
TheModel.collection{units}
|
61
|
-
TheModel.collection.should == units
|
62
|
-
end
|
63
|
-
end
|