mongo_odm 0.1.8
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/Gemfile +11 -0
- data/LICENSE +20 -0
- data/README.rdoc +251 -0
- data/Rakefile +70 -0
- data/lib/mongo_odm.rb +48 -0
- data/lib/mongo_odm/collection.rb +42 -0
- data/lib/mongo_odm/core_ext/conversions.rb +262 -0
- data/lib/mongo_odm/cursor.rb +11 -0
- data/lib/mongo_odm/document.rb +34 -0
- data/lib/mongo_odm/document/associations.rb +39 -0
- data/lib/mongo_odm/document/associations/has_many.rb +19 -0
- data/lib/mongo_odm/document/associations/has_one.rb +19 -0
- data/lib/mongo_odm/document/attribute_methods.rb +103 -0
- data/lib/mongo_odm/document/attribute_methods/dirty.rb +51 -0
- data/lib/mongo_odm/document/attribute_methods/localization.rb +67 -0
- data/lib/mongo_odm/document/attribute_methods/query.rb +35 -0
- data/lib/mongo_odm/document/attribute_methods/read.rb +39 -0
- data/lib/mongo_odm/document/attribute_methods/write.rb +37 -0
- data/lib/mongo_odm/document/callbacks.rb +29 -0
- data/lib/mongo_odm/document/fields.rb +66 -0
- data/lib/mongo_odm/document/inspect.rb +28 -0
- data/lib/mongo_odm/document/persistence.rb +96 -0
- data/lib/mongo_odm/document/validations.rb +46 -0
- data/lib/mongo_odm/errors.rb +18 -0
- data/lib/mongo_odm/version.rb +7 -0
- data/spec/models/00-blank_slate.rb +4 -0
- data/spec/models/01-shape.rb +8 -0
- data/spec/models/02-circle.rb +7 -0
- data/spec/models/03-big_red_circle.rb +8 -0
- data/spec/mongo_odm/core_ext/conversions_spec.rb +423 -0
- data/spec/mongo_odm/document/fields_spec.rb +187 -0
- data/spec/mongo_odm/document/inspect_spec.rb +19 -0
- data/spec/mongo_odm/document_spec.rb +12 -0
- data/spec/mongo_odm/mongo_odm_spec.rb +84 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +12 -0
- metadata +185 -0
@@ -0,0 +1,187 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe MongoODM::Document::Fields do
|
5
|
+
|
6
|
+
describe ".field" do
|
7
|
+
|
8
|
+
context "with a name and no type" do
|
9
|
+
|
10
|
+
before do
|
11
|
+
BlankSlate.field(:testing_no_type)
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
BlankSlate.instance_variable_set(:@fields, nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "adds a String field to the class" do
|
19
|
+
BlankSlate.fields[:testing_no_type].should be_kind_of(MongoODM::Document::Fields::Field)
|
20
|
+
BlankSlate.fields[:testing_no_type].type.should == String
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with a name and a type" do
|
26
|
+
|
27
|
+
before do
|
28
|
+
BlankSlate.field(:testing_float, Float)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "adds the typed field to the class" do
|
32
|
+
BlankSlate.fields[:testing_float].should be_kind_of(MongoODM::Document::Fields::Field)
|
33
|
+
BlankSlate.fields[:testing_float].type.should == Float
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
describe ".fields" do
|
41
|
+
|
42
|
+
context "on classes without defined fields" do
|
43
|
+
|
44
|
+
before do
|
45
|
+
@klass = BlankSlate
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns an empty hash" do
|
49
|
+
@klass.fields.should == {}
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
context "on parent classes" do
|
55
|
+
|
56
|
+
before do
|
57
|
+
@klass = Shape
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns a hash with the defined fields" do
|
61
|
+
expected_fields = [:x, :y, :color]
|
62
|
+
expected_fields.each do |field_name|
|
63
|
+
@klass.fields[field_name].should be_kind_of(MongoODM::Document::Fields::Field)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "allows indifferent access to the hash" do
|
68
|
+
@klass.fields[:x].should == @klass.fields["x"]
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
context "on subclasses" do
|
74
|
+
|
75
|
+
before do
|
76
|
+
@klass = BigRedCircle
|
77
|
+
end
|
78
|
+
|
79
|
+
it "returns all the fields defined on the class and its subclasses" do
|
80
|
+
expected_fields = [:x, :y, :radius, :color]
|
81
|
+
expected_fields.each do |field_name|
|
82
|
+
@klass.fields[field_name].should be_kind_of(MongoODM::Document::Fields::Field)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
it "overrides field descriptions on any parent class" do
|
87
|
+
@klass.fields[:color].default.should == "red"
|
88
|
+
@klass.fields[:radius].default.should == 20.0
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe MongoODM::Document::Fields::Field do
|
98
|
+
|
99
|
+
describe ".new" do
|
100
|
+
|
101
|
+
context "with a name :testing_float and a type class Float" do
|
102
|
+
|
103
|
+
before do
|
104
|
+
@field = MongoODM::Document::Fields::Field.new(:testing_float, Float)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "creates a new Field instance with name :testing_float and type Float" do
|
108
|
+
@field.name.should == :testing_float
|
109
|
+
@field.type.should == Float
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
context "with a name :testing_float, a type class Float and a default option 1.0" do
|
115
|
+
|
116
|
+
before do
|
117
|
+
@field = MongoODM::Document::Fields::Field.new(:testing_float, Float, :default => 1.0)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "creates a new Field instance with name :testing_float, type Float and default 1.0" do
|
121
|
+
@field.name.should == :testing_float
|
122
|
+
@field.type.should == Float
|
123
|
+
@field.default.should == 1.0
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "#default" do
|
131
|
+
|
132
|
+
context "when the field described a default value" do
|
133
|
+
|
134
|
+
before do
|
135
|
+
@field = MongoODM::Document::Fields::Field.new(:color, String, :default => "red")
|
136
|
+
end
|
137
|
+
|
138
|
+
it "returns the value" do
|
139
|
+
@field.default.should == "red"
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
context "when the field described a block that returns the default value" do
|
145
|
+
|
146
|
+
before do
|
147
|
+
@field = MongoODM::Document::Fields::Field.new(:color, String, :default => lambda { "b" + "lue"} )
|
148
|
+
end
|
149
|
+
|
150
|
+
it "calls the block and returns the result" do
|
151
|
+
@field.default.should == "blue"
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
describe "#type_cast" do
|
159
|
+
|
160
|
+
context "when the field's `type' class responds to type_cast" do
|
161
|
+
|
162
|
+
before do
|
163
|
+
@field = MongoODM::Document::Fields::Field.new(:number, Integer)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "returns the casted value" do
|
167
|
+
@field.type_cast("32.3").should == 32
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
context "when the field's `type' class do not respond to type_cast" do
|
173
|
+
|
174
|
+
before do
|
175
|
+
class InvalidClass; end
|
176
|
+
@field = MongoODM::Document::Fields::Field.new(:invalid, InvalidClass)
|
177
|
+
end
|
178
|
+
|
179
|
+
it "returns the raw value" do
|
180
|
+
lambda { @field.type_cast("whatever") }.should raise_error(MongoODM::Errors::TypeCastMissing)
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe MongoODM::Document::Inspect do
|
5
|
+
|
6
|
+
describe ".inspect" do
|
7
|
+
it "returns a string with the name of the class that includes the MongoODM::Document module and a list of its properties with types" do
|
8
|
+
Shape.inspect.should == "Shape(x: Float, y: Float, color: String)"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#inspect" do
|
13
|
+
it "returns a string with the name of the class that includes the MongoODM::Document module and a list of its attributes with values" do
|
14
|
+
circle = Circle.new(:x => 10, :y => 12.5, :radius => 1.2)
|
15
|
+
circle.inspect.should == "#<Circle x: 10.0, y: 12.5, color: nil, radius: 1.2>"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe MongoODM::Document do
|
5
|
+
# TODO: See ActiveModel::Lint::Tests for a minimal set of tests
|
6
|
+
# test_valid?
|
7
|
+
# test_new_record?
|
8
|
+
# test_destroyed?
|
9
|
+
# test_model_naming
|
10
|
+
# test_errors_aref
|
11
|
+
# test_errors_full_messages
|
12
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe MongoODM do
|
5
|
+
|
6
|
+
describe "included modules" do
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#connection" do
|
11
|
+
|
12
|
+
context "when connection does not exist" do
|
13
|
+
|
14
|
+
before do
|
15
|
+
MongoODM.connection = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "creates a new Mongo::Connection instance" do
|
19
|
+
MongoODM.connection.should be_kind_of(Mongo::Connection)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when connection already exists" do
|
25
|
+
|
26
|
+
before do
|
27
|
+
@connection = MongoODM.connection
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns the current Mongo::Connection instance" do
|
31
|
+
MongoODM.connection.should == @connection
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns a different Mongo::Connection instance per thread" do
|
35
|
+
thread = Thread.new { @connection.should_not == MongoODM.connection }
|
36
|
+
thread.join
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns a different Mongo::Connection when configuration changes" do
|
40
|
+
MongoODM.config = {:port => 9000}
|
41
|
+
@connection.should_not == MongoODM.connection
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#connection=" do
|
49
|
+
it "accepts a Mongo::Connection instance to set the connection" do
|
50
|
+
connection = Mongo::Connection.new('localhost', 27017)
|
51
|
+
MongoODM.connection = connection
|
52
|
+
connection.should == MongoODM.connection
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#config" do
|
57
|
+
|
58
|
+
context "when no configuration was passed" do
|
59
|
+
|
60
|
+
it "returns an empty hash" do
|
61
|
+
MongoODM.config.should == {}
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when a custom configuration was passed" do
|
67
|
+
|
68
|
+
before do
|
69
|
+
MongoODM.config = {:host => "localhost", :port => 9000}
|
70
|
+
end
|
71
|
+
|
72
|
+
after do
|
73
|
+
MongoODM.config = {}
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should return the configuration as a hash" do
|
77
|
+
MongoODM.config.should == {:host => "localhost", :port => 9000}
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
require "spec"
|
7
|
+
require "spec/mocks"
|
8
|
+
require "mongo_odm"
|
9
|
+
|
10
|
+
# Load all example models
|
11
|
+
MODELS_PATH = File.join(File.dirname(__FILE__), "models")
|
12
|
+
Dir[ File.join(MODELS_PATH, "*.rb") ].sort.each { |file| require file }
|
metadata
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongo_odm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 8
|
9
|
+
version: 0.1.8
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Carlos Paramio
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-06-10 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - "="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
- beta3
|
33
|
+
version: 3.0.0.beta3
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: activemodel
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - "="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 3
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
- beta3
|
49
|
+
version: 3.0.0.beta3
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: mongo
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - "="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 0
|
63
|
+
- 1
|
64
|
+
version: 1.0.1
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: bson
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - "="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 1
|
77
|
+
- 0
|
78
|
+
- 1
|
79
|
+
version: 1.0.1
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: bson_ext
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - "="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
segments:
|
91
|
+
- 1
|
92
|
+
- 0
|
93
|
+
- 1
|
94
|
+
version: 1.0.1
|
95
|
+
type: :runtime
|
96
|
+
version_requirements: *id005
|
97
|
+
description: mongo_odm is a flexible persistence module for any Ruby class to MongoDB.
|
98
|
+
email: carlos@evolve.st
|
99
|
+
executables: []
|
100
|
+
|
101
|
+
extensions: []
|
102
|
+
|
103
|
+
extra_rdoc_files:
|
104
|
+
- LICENSE
|
105
|
+
- README.rdoc
|
106
|
+
files:
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE
|
109
|
+
- README.rdoc
|
110
|
+
- Rakefile
|
111
|
+
- lib/mongo_odm.rb
|
112
|
+
- lib/mongo_odm/collection.rb
|
113
|
+
- lib/mongo_odm/core_ext/conversions.rb
|
114
|
+
- lib/mongo_odm/cursor.rb
|
115
|
+
- lib/mongo_odm/document.rb
|
116
|
+
- lib/mongo_odm/document/associations.rb
|
117
|
+
- lib/mongo_odm/document/associations/has_many.rb
|
118
|
+
- lib/mongo_odm/document/associations/has_one.rb
|
119
|
+
- lib/mongo_odm/document/attribute_methods.rb
|
120
|
+
- lib/mongo_odm/document/attribute_methods/dirty.rb
|
121
|
+
- lib/mongo_odm/document/attribute_methods/localization.rb
|
122
|
+
- lib/mongo_odm/document/attribute_methods/query.rb
|
123
|
+
- lib/mongo_odm/document/attribute_methods/read.rb
|
124
|
+
- lib/mongo_odm/document/attribute_methods/write.rb
|
125
|
+
- lib/mongo_odm/document/callbacks.rb
|
126
|
+
- lib/mongo_odm/document/fields.rb
|
127
|
+
- lib/mongo_odm/document/inspect.rb
|
128
|
+
- lib/mongo_odm/document/persistence.rb
|
129
|
+
- lib/mongo_odm/document/validations.rb
|
130
|
+
- lib/mongo_odm/errors.rb
|
131
|
+
- lib/mongo_odm/version.rb
|
132
|
+
- spec/models/00-blank_slate.rb
|
133
|
+
- spec/models/01-shape.rb
|
134
|
+
- spec/models/02-circle.rb
|
135
|
+
- spec/models/03-big_red_circle.rb
|
136
|
+
- spec/mongo_odm/core_ext/conversions_spec.rb
|
137
|
+
- spec/mongo_odm/document/fields_spec.rb
|
138
|
+
- spec/mongo_odm/document/inspect_spec.rb
|
139
|
+
- spec/mongo_odm/document_spec.rb
|
140
|
+
- spec/mongo_odm/mongo_odm_spec.rb
|
141
|
+
- spec/spec.opts
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
has_rdoc: true
|
144
|
+
homepage: http://github.com/carlosparamio/mongo_odm
|
145
|
+
licenses: []
|
146
|
+
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options:
|
149
|
+
- --charset=UTF-8
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
version: "0"
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
segments:
|
166
|
+
- 0
|
167
|
+
version: "0"
|
168
|
+
requirements: []
|
169
|
+
|
170
|
+
rubyforge_project:
|
171
|
+
rubygems_version: 1.3.7
|
172
|
+
signing_key:
|
173
|
+
specification_version: 3
|
174
|
+
summary: mongo_odm is a flexible persistence module for any Ruby class to MongoDB.
|
175
|
+
test_files:
|
176
|
+
- spec/models/00-blank_slate.rb
|
177
|
+
- spec/models/01-shape.rb
|
178
|
+
- spec/models/02-circle.rb
|
179
|
+
- spec/models/03-big_red_circle.rb
|
180
|
+
- spec/mongo_odm/core_ext/conversions_spec.rb
|
181
|
+
- spec/mongo_odm/document/fields_spec.rb
|
182
|
+
- spec/mongo_odm/document/inspect_spec.rb
|
183
|
+
- spec/mongo_odm/document_spec.rb
|
184
|
+
- spec/mongo_odm/mongo_odm_spec.rb
|
185
|
+
- spec/spec_helper.rb
|