loose_change 0.4.2 → 1.0.0
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/VERSION +1 -1
- data/lib/loose_change.rb +1 -0
- data/lib/loose_change/base.rb +1 -0
- data/lib/loose_change/validations.rb +28 -0
- data/loose_change.gemspec +5 -2
- data/test/validations_test.rb +48 -0
- metadata +8 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/loose_change.rb
CHANGED
@@ -21,6 +21,7 @@ module LooseChange
|
|
21
21
|
autoload :Pagination, File.dirname(__FILE__) + '/loose_change/pagination'
|
22
22
|
autoload :Helpers, File.dirname(__FILE__) + '/loose_change/helpers'
|
23
23
|
autoload :Spatial, File.dirname(__FILE__) + '/loose_change/spatial'
|
24
|
+
autoload :Validations, File.dirname(__FILE__) + '/loose_change/validations'
|
24
25
|
end
|
25
26
|
|
26
27
|
|
data/lib/loose_change/base.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module LooseChange
|
2
|
+
module Validations
|
3
|
+
|
4
|
+
# Ensure that only one document of this class can be created with
|
5
|
+
# each value. The <tt>:allow_nil</tt> option can be set to true
|
6
|
+
# to allow any number of documents with a blank value for this property.
|
7
|
+
def validates_uniqueness_of(property, opts = {})
|
8
|
+
view_by property
|
9
|
+
validates_with UniquenessValidator, :property => property, :allow_nil => opts[:allow_nil]
|
10
|
+
end
|
11
|
+
|
12
|
+
class UniquenessValidator < ActiveModel::Validator
|
13
|
+
|
14
|
+
def validate(record)
|
15
|
+
record.errors[@options[:property]] << "must be present" unless record.send(@options[:property]) || @options[:allow_nil]
|
16
|
+
record.errors[@options[:property]] << "is already taken" if record.send(@options[:property]).present? && duplicate_exists?(record)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def duplicate_exists?(record)
|
22
|
+
record.class.send(:view, "by_#{ @options[:property] }", :key => record.send(@options[:property]), :limit => 1).size > 0
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/loose_change.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{loose_change}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joshua Miller"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-01}
|
13
13
|
s.email = %q{josh@joshinharrisburg.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE",
|
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/loose_change/railtie.rb",
|
37
37
|
"lib/loose_change/server.rb",
|
38
38
|
"lib/loose_change/spatial.rb",
|
39
|
+
"lib/loose_change/validations.rb",
|
39
40
|
"lib/loose_change/views.rb",
|
40
41
|
"lib/tasks/loose_change.rb",
|
41
42
|
"loose_change.gemspec",
|
@@ -49,6 +50,7 @@ Gem::Specification.new do |s|
|
|
49
50
|
"test/resources/couchdb.png",
|
50
51
|
"test/spatial_test.rb",
|
51
52
|
"test/test_helper.rb",
|
53
|
+
"test/validations_test.rb",
|
52
54
|
"test/view_test.rb"
|
53
55
|
]
|
54
56
|
s.homepage = %q{http://github.com/joshuamiller/loose_change}
|
@@ -66,6 +68,7 @@ Gem::Specification.new do |s|
|
|
66
68
|
"test/persistence_test.rb",
|
67
69
|
"test/spatial_test.rb",
|
68
70
|
"test/test_helper.rb",
|
71
|
+
"test/validations_test.rb",
|
69
72
|
"test/view_test.rb"
|
70
73
|
]
|
71
74
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class ValidationsTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
context "a model that validates uniqueness without allow_nil" do
|
6
|
+
setup do
|
7
|
+
class UniqueModel < LooseChange::Base
|
8
|
+
use_database "test_db"
|
9
|
+
property :name
|
10
|
+
validates_uniqueness_of :name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
should "be valid if no others have been created" do
|
15
|
+
assert UniqueModel.new(:name => "Josh").valid?
|
16
|
+
end
|
17
|
+
|
18
|
+
should "not be valid attempting to create a second" do
|
19
|
+
UniqueModel.create(:name => "Josh")
|
20
|
+
model = UniqueModel.new(:name => "Josh")
|
21
|
+
assert !model.valid?
|
22
|
+
assert model.errors.has_key?(:name)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "not be valid without a value" do
|
26
|
+
model = UniqueModel.new
|
27
|
+
assert !model.valid?
|
28
|
+
assert model.errors.has_key?(:name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "a model that validates uniqueness with allow_nil as true" do
|
33
|
+
setup do
|
34
|
+
class AllowNilModel < LooseChange::Base
|
35
|
+
use_database "test_db"
|
36
|
+
property :name
|
37
|
+
validates_uniqueness_of :name, :allow_nil => true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
should "be valid if the property is nil" do
|
42
|
+
assert AllowNilModel.create
|
43
|
+
model = AllowNilModel.new
|
44
|
+
assert model.valid?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
metadata
CHANGED
@@ -3,10 +3,10 @@ name: loose_change
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
+
- 1
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
|
9
|
-
version: 0.4.2
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Joshua Miller
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-01-01 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -117,6 +117,7 @@ files:
|
|
117
117
|
- lib/loose_change/railtie.rb
|
118
118
|
- lib/loose_change/server.rb
|
119
119
|
- lib/loose_change/spatial.rb
|
120
|
+
- lib/loose_change/validations.rb
|
120
121
|
- lib/loose_change/views.rb
|
121
122
|
- lib/tasks/loose_change.rb
|
122
123
|
- loose_change.gemspec
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- test/resources/couchdb.png
|
131
132
|
- test/spatial_test.rb
|
132
133
|
- test/test_helper.rb
|
134
|
+
- test/validations_test.rb
|
133
135
|
- test/view_test.rb
|
134
136
|
has_rdoc: true
|
135
137
|
homepage: http://github.com/joshuamiller/loose_change
|
@@ -145,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
147
|
requirements:
|
146
148
|
- - ">="
|
147
149
|
- !ruby/object:Gem::Version
|
148
|
-
hash:
|
150
|
+
hash: 2822351378024837532
|
149
151
|
segments:
|
150
152
|
- 0
|
151
153
|
version: "0"
|
@@ -174,4 +176,5 @@ test_files:
|
|
174
176
|
- test/persistence_test.rb
|
175
177
|
- test/spatial_test.rb
|
176
178
|
- test/test_helper.rb
|
179
|
+
- test/validations_test.rb
|
177
180
|
- test/view_test.rb
|