minidoc 0.0.1

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.
@@ -0,0 +1,183 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class PersistenceTest < Minidoc::TestCase
4
+ def test_ids
5
+ user = User.new
6
+ assert_equal BSON::ObjectId, user.id.class
7
+
8
+ user = User.new(_id: BSON::ObjectId('52955cc5f9f6a538a9000001'))
9
+ assert_equal BSON::ObjectId('52955cc5f9f6a538a9000001'), user.id
10
+
11
+ user = User.new("_id" => BSON::ObjectId('52955cc5f9f6a538a9000001'))
12
+ assert_equal BSON::ObjectId('52955cc5f9f6a538a9000001'), user.id
13
+ end
14
+
15
+ def test_new_record
16
+ user = User.new
17
+ assert_equal true, user.new_record?
18
+ user.save
19
+ assert_equal false, user.new_record?
20
+ end
21
+
22
+ def test_raises_duplicate_key_where_appropriate
23
+ mock_collection = mock()
24
+ User.stubs(:collection).returns(mock_collection)
25
+ mock_collection.stubs(:<<).raises(Mongo::OperationFailure.new('Duplicate key exception', Minidoc::DuplicateKey::DUPLICATE_KEY_ERROR_CODE))
26
+
27
+ user = User.new
28
+ assert_raises(Minidoc::DuplicateKey) { user.save }
29
+ end
30
+
31
+ def test_reraises_other_exception_types
32
+ mock_collection = mock()
33
+ User.stubs(:collection).returns(mock_collection)
34
+ mock_collection.stubs(:<<).raises(ArgumentError)
35
+
36
+ user = User.new
37
+ assert_raises(ArgumentError) { user.save }
38
+ end
39
+
40
+ def test_persisted
41
+ user = User.new
42
+ assert_equal false, user.persisted?
43
+ user.save
44
+ assert_equal true, user.persisted?
45
+ user.destroy
46
+ assert_equal false, user.persisted?
47
+ end
48
+
49
+ def test_save
50
+ user = User.new
51
+ old_id = user.id
52
+ assert_equal true, user.save
53
+ assert_equal 1, User.count
54
+ assert_equal old_id, user.id
55
+ end
56
+
57
+ def test_create
58
+ user = User.create!(name: "Bryan")
59
+ assert_equal "Bryan", user.name
60
+ assert_equal 1, User.count
61
+
62
+ user = User.create(name: "Bryan")
63
+ assert_equal "Bryan", user.name
64
+ assert_equal 2, User.count
65
+ end
66
+
67
+ def test_update
68
+ user = User.create(name: "Bryan")
69
+ user.name = "Noah"
70
+ assert_equal "Noah", user.name
71
+ user.save
72
+ assert_equal "Noah", user.reload.name
73
+ end
74
+
75
+ def test_destroy
76
+ user = User.create(name: "Bryan")
77
+ assert_equal false, user.destroyed?
78
+ user.destroy
79
+ assert_equal 0, User.count
80
+ assert_equal true, user.destroyed?
81
+ end
82
+
83
+ def test_delete
84
+ user = User.create(name: "Bryan")
85
+ User.delete(user.id)
86
+ assert_equal 0, User.count
87
+
88
+ user = User.create(name: "Bryan")
89
+ User.delete(user.id.to_s)
90
+ assert_equal 0, User.count
91
+
92
+ user = User.create(name: "Bryan")
93
+ user.delete
94
+ assert_equal 0, User.count
95
+ end
96
+
97
+ def test_reload
98
+ user = User.create(name: "Bryan")
99
+ assert_equal "Bryan", user.reload.name
100
+
101
+ User.collection.update({_id: user.id}, {name: "Noah"})
102
+ assert_equal "Noah", user.reload.name
103
+ end
104
+
105
+ def test_class_set
106
+ user = User.create(name: "Bryan")
107
+ User.set(user.id, name: "Noah")
108
+ assert_equal "Bryan", user.name # Class set can't trigger update
109
+ assert_equal "Noah", user.reload.name
110
+ assert_equal "Noah", User.first.name
111
+
112
+ User.set(user.id.to_s, name: "Mike")
113
+ assert_equal "Mike", user.reload.name
114
+ assert_equal "Mike", User.first.name
115
+ end
116
+
117
+ def test_instance_set
118
+ user = User.create(name: "Bryan")
119
+ user.set(name: "Noah")
120
+ assert_equal "Noah", user.name
121
+ assert_equal "Noah", user.reload.name
122
+ assert_equal "Noah", User.first.name
123
+
124
+ user = User.create(name: "Bryan")
125
+ user.set("name" => "Noah")
126
+ assert_equal "Noah", user.name
127
+ assert_equal "Noah", user.reload.name
128
+ end
129
+
130
+ def test_class_unset
131
+ user = User.create(name: "Bryan")
132
+ User.unset(user.id, :name)
133
+ assert_equal "Bryan", user.name # Class set can't trigger update
134
+ assert_equal nil, user.reload.name
135
+ assert_equal nil, User.first.name
136
+
137
+ User.unset(user.id.to_s, :name)
138
+ assert_equal nil, user.reload.name
139
+ assert_equal nil, User.first.name
140
+ end
141
+
142
+ def test_instance_unset
143
+ user = User.create(name: "Bryan")
144
+ user.unset(:name)
145
+ assert_equal nil, user.name
146
+ assert_equal nil, user.reload.name
147
+ assert_equal nil, User.first.name
148
+
149
+ user = User.create(name: "Bryan")
150
+ user.unset("name")
151
+ assert_equal nil, user.name
152
+ assert_equal nil, user.reload.name
153
+ end
154
+
155
+ def test_atomic_set_failure
156
+ user = User.create(name: "from", age: 18)
157
+
158
+ refute user.atomic_set({ name: "not-from" }, name: "to")
159
+ assert_equal "from", user.name
160
+ assert_equal 18, user.age
161
+
162
+ user.reload
163
+ assert_equal "from", user.name
164
+ assert_equal 18, user.age
165
+ end
166
+
167
+ def test_atomic_set_success
168
+ user = User.create(name: "from", age: 18)
169
+ other_user = User.create(name: "from", age: 21)
170
+
171
+ assert user.atomic_set({ name: "from" }, name: "to")
172
+ assert_equal "to", user.name
173
+ assert_equal 18, user.age
174
+
175
+ user.reload
176
+ assert_equal "to", user.name
177
+ assert_equal 18, user.age
178
+
179
+ other_user.reload
180
+ assert_equal "from", other_user.name
181
+ assert_equal 21, other_user.age
182
+ end
183
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class QueryTest < Minidoc::TestCase
4
+ def test_count_all
5
+ User.collection << { name: "Joe" }
6
+ User.collection << { name: "Bryan" }
7
+ assert_equal 2, User.count
8
+ end
9
+
10
+ def test_count_query
11
+ User.collection << { name: "Joe" }
12
+ User.collection << { name: "Bryan" }
13
+ assert_equal 1, User.count(name: "Bryan")
14
+ end
15
+
16
+ def test_exists
17
+ User.collection << { name: "Joe" }
18
+ assert User.exists?(name: "Joe")
19
+ refute User.exists?(name: "Bryan")
20
+ end
21
+
22
+ def test_first
23
+ assert_equal nil, User.first
24
+ user = User.create(name: "Bryan")
25
+ assert_equal "Bryan", User.first.name
26
+ assert_equal user, User.first
27
+ end
28
+
29
+ def test_find
30
+ user = User.create(name: "Bryan")
31
+ assert_equal [user], User.find({}).to_a
32
+ assert_equal [], User.find(name: "Noah").to_a
33
+ end
34
+
35
+ def test_find_one
36
+ user = User.create(name: "Bryan")
37
+ assert_equal user, User.find_one({})
38
+ assert_equal nil, User.find_one(name: "Noah")
39
+ end
40
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class ReadOnlyTest < Minidoc::TestCase
4
+ class ReadOnlyUser < Minidoc::ReadOnly
5
+ self.collection_name = "users"
6
+ attribute :name, String
7
+ end
8
+
9
+ def test_read_only
10
+ assert_raises NoMethodError do
11
+ ReadOnlyUser.create(name: "Bryan")
12
+ end
13
+
14
+ rw_user = User.create(name: "Bryan")
15
+ user = ReadOnlyUser.first
16
+ assert_equal "Bryan", user.name
17
+ assert_equal rw_user.id, user.id
18
+ assert_equal user, user.as_value
19
+
20
+ assert_raises NoMethodError do
21
+ user.name = "Noah"
22
+ end
23
+ end
24
+
25
+ def test_value
26
+ user = User.new(name: "Bryan")
27
+ user.name = "Noah"
28
+ user = user.as_value
29
+
30
+ assert_raises NoMethodError do
31
+ user.name = "Noah"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TimestampsTest < Minidoc::TestCase
4
+ class User < ::User
5
+ include Minidoc::Timestamps
6
+ timestamps!
7
+ end
8
+
9
+ def test_create
10
+ user = User.create
11
+ assert user.created_at
12
+ assert_equal user.created_at, user.updated_at
13
+ end
14
+
15
+ def test_update
16
+ user = User.create
17
+ sleep 0.001
18
+ user.save
19
+ refute_equal user.created_at, user.updated_at
20
+ end
21
+ end
@@ -0,0 +1,68 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class UniquenessValidatorTest < Minidoc::TestCase
4
+ class User < ::User
5
+ validates :name, uniqueness: true
6
+ end
7
+
8
+ class InsensitiveUser < ::User
9
+ attribute :insensitive, String
10
+ validates :insensitive, uniqueness: { case_sensitive: false }
11
+ end
12
+
13
+ class ScopedUser < ::User
14
+ attribute :country_id, Integer
15
+ attribute :tax_id_number, Integer
16
+ validates :tax_id_number, uniqueness: { scope: :country_id }
17
+ end
18
+
19
+ def test_invalid_with_existing_value
20
+ User.create!(name: "same name")
21
+ user = User.new(name: "same name")
22
+ assert_equal false, user.valid?
23
+ assert_equal ["has already been taken"], user.errors[:name]
24
+ end
25
+
26
+ def test_case_sensitive_by_default
27
+ User.create!(name: "different case")
28
+ user = User.new(name: "DIFFERENT CASE")
29
+ assert_equal true, user.valid?
30
+ end
31
+
32
+ def test_unique_persisted_record_is_valid
33
+ user = User.create!(name: "lonely")
34
+ assert_equal true, user.valid?
35
+ end
36
+
37
+ def test_case_insensitive
38
+ InsensitiveUser.create!(insensitive: "equivalent")
39
+ user = InsensitiveUser.new(insensitive: "EquivALENT")
40
+ assert_equal false, user.valid?
41
+ assert_equal ["has already been taken"], user.errors[:insensitive]
42
+ end
43
+
44
+ def test_same_value_within_scope
45
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
46
+ user = ScopedUser.new(country_id: 1, tax_id_number: 1)
47
+ assert_equal false, user.valid?
48
+ assert_equal ["has already been taken"], user.errors[:tax_id_number]
49
+ end
50
+
51
+ def test_different_value_within_scope
52
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
53
+ user = ScopedUser.new(country_id: 1, tax_id_number: 2)
54
+ assert_equal true, user.valid?
55
+ end
56
+
57
+ def test_same_value_outside_scope
58
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
59
+ user = ScopedUser.new(country_id: 2, tax_id_number: 1)
60
+ assert_equal true, user.valid?
61
+ end
62
+
63
+ def test_same_value_outside_scope
64
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
65
+ user = ScopedUser.new(country_id: 2, tax_id_number: 2)
66
+ assert_equal true, user.valid?
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class ValidationsTest < Minidoc::TestCase
4
+ class User < ::User
5
+ validates :name, presence: true
6
+ end
7
+
8
+ def test_valid
9
+ user = User.new
10
+ assert_equal false, user.valid?
11
+ end
12
+
13
+ def test_errors
14
+ user = User.new
15
+ user.valid?
16
+ assert_equal ["can't be blank"], user.errors[:name]
17
+ end
18
+
19
+ def test_create_bang
20
+ assert_raises Minidoc::RecordInvalid do
21
+ User.create!
22
+ end
23
+ end
24
+
25
+ def test_invalid_save
26
+ user = User.new
27
+ assert_equal false, user.save
28
+ assert_equal true, user.new_record?
29
+ end
30
+
31
+ def test_save_bang
32
+ assert_raises Minidoc::RecordInvalid do
33
+ User.new.save!
34
+ end
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minidoc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bryan Helmkamp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: virtus
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: mongo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ - bryan@brynary.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".ruby-version"
120
+ - ".travis.yml"
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - lib/minidoc.rb
126
+ - lib/minidoc/associations.rb
127
+ - lib/minidoc/autoload.rb
128
+ - lib/minidoc/connection.rb
129
+ - lib/minidoc/counters.rb
130
+ - lib/minidoc/duplicate_key.rb
131
+ - lib/minidoc/finders.rb
132
+ - lib/minidoc/grid.rb
133
+ - lib/minidoc/indexes.rb
134
+ - lib/minidoc/read_only.rb
135
+ - lib/minidoc/record_invalid.rb
136
+ - lib/minidoc/test_helpers.rb
137
+ - lib/minidoc/timestamps.rb
138
+ - lib/minidoc/validations.rb
139
+ - lib/minidoc/value.rb
140
+ - minidoc.gemspec
141
+ - test/activemodel_test.rb
142
+ - test/belongs_to_test.rb
143
+ - test/connection_test.rb
144
+ - test/counters_test.rb
145
+ - test/duplicate_key_test.rb
146
+ - test/grid_test.rb
147
+ - test/helper.rb
148
+ - test/indexes_test.rb
149
+ - test/locale/en.yml
150
+ - test/persistence_test.rb
151
+ - test/query_test.rb
152
+ - test/read_only_test.rb
153
+ - test/timestamps_test.rb
154
+ - test/uniqueness_validator_test.rb
155
+ - test/validations_test.rb
156
+ homepage: https://github.com/brynary/minidoc
157
+ licenses:
158
+ - MIT
159
+ metadata: {}
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 2.5.1
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: Lightweight wrapper for MongoDB documents
180
+ test_files:
181
+ - test/activemodel_test.rb
182
+ - test/belongs_to_test.rb
183
+ - test/connection_test.rb
184
+ - test/counters_test.rb
185
+ - test/duplicate_key_test.rb
186
+ - test/grid_test.rb
187
+ - test/helper.rb
188
+ - test/indexes_test.rb
189
+ - test/locale/en.yml
190
+ - test/persistence_test.rb
191
+ - test/query_test.rb
192
+ - test/read_only_test.rb
193
+ - test/timestamps_test.rb
194
+ - test/uniqueness_validator_test.rb
195
+ - test/validations_test.rb
196
+ has_rdoc: