riot-datamapper 0.0.4 → 0.1.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/README.md +9 -5
- data/lib/riot-datamapper/has_validation.rb +31 -0
- data/lib/riot-datamapper/version.rb +1 -1
- data/test/has_validation_test.rb +42 -0
- metadata +47 -52
data/README.md
CHANGED
@@ -39,11 +39,16 @@ class User
|
|
39
39
|
|
40
40
|
property :foo, String
|
41
41
|
property :bar, Serial
|
42
|
+
property :buzz, Integer
|
42
43
|
property :monkey, Boolean, :default => false
|
43
44
|
property :name, String, :default => 'monkey', :required => true
|
44
45
|
|
45
46
|
has n, :comments, :through => :posts
|
46
47
|
has 1, :address
|
48
|
+
|
49
|
+
validates_presence_of :foo
|
50
|
+
validates_uniquness_of :bar
|
51
|
+
validates_length_of :buzz, :maximum => 20
|
47
52
|
end
|
48
53
|
|
49
54
|
class Address
|
@@ -87,6 +92,10 @@ context "User Model" do
|
|
87
92
|
|
88
93
|
asserts_topic.has_association :has_n, :comments, :through => :posts
|
89
94
|
asserts_topic.has_association :has 1, :address
|
95
|
+
|
96
|
+
asserts_topic.has_validation :validates_presence_of, :foo
|
97
|
+
asserts_topic.has_validation :validates_uniquness_of, :bar
|
98
|
+
asserts_topic.has_validation :validates_length_of, :buzz, :maximum => 20
|
90
99
|
end
|
91
100
|
|
92
101
|
context "Address Model" do
|
@@ -119,11 +128,6 @@ context "Post Model" do
|
|
119
128
|
end
|
120
129
|
```
|
121
130
|
|
122
|
-
## TODO ##
|
123
|
-
|
124
|
-
* Add more macros
|
125
|
-
* Add validation macros so you can do something like #has_validation :validates_presence_of
|
126
|
-
|
127
131
|
## Copyright
|
128
132
|
|
129
133
|
Copyright © 2011 Arthur Chiu. See [MIT-LICENSE](https://github.com/achiu/riot-datamapper/blob/master/MIT-LICENSE) for details.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Riot
|
2
|
+
module DataMapper
|
3
|
+
class HasValidation < Riot::AssertionMacro
|
4
|
+
register :has_validation
|
5
|
+
|
6
|
+
def evaluate(model, validation, field, options={})
|
7
|
+
|
8
|
+
validator = model.validators.context(:default).detect do |v|
|
9
|
+
keyword = validation.to_s.match(/validates_(\w+)_of/)[1]
|
10
|
+
v.class.inspect.downcase =~ /#{keyword}/ && v.field_name.to_sym == field.to_sym
|
11
|
+
end
|
12
|
+
|
13
|
+
fail_msg = "expected #{model} to have validation :#{validation} on :#{field}"
|
14
|
+
pass_msg = "#{model} has validation :#{validation} on :#{field}"
|
15
|
+
options_msg = " with options #{options.inspect}"
|
16
|
+
|
17
|
+
return fail(fail_msg) if validator.nil?
|
18
|
+
|
19
|
+
unless options.empty?
|
20
|
+
if options.all? { |key, value| validator.options[key] == value }
|
21
|
+
pass_msg << options_msg
|
22
|
+
else
|
23
|
+
return fail(fail_msg + options_msg)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
pass(pass_msg)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path('../teststrap', __FILE__)
|
2
|
+
|
3
|
+
context "has_validation macro" do
|
4
|
+
setup do
|
5
|
+
Object.send(:remove_const, :FooBar) if Object.const_defined?(:FooBar)
|
6
|
+
|
7
|
+
class FooBar
|
8
|
+
include DataMapper::Resource
|
9
|
+
|
10
|
+
property :id, Serial
|
11
|
+
property :foo, String
|
12
|
+
property :bar, Integer
|
13
|
+
property :buzz, Integer
|
14
|
+
|
15
|
+
validates_presence_of :foo
|
16
|
+
validates_numericality_of :bar
|
17
|
+
validates_length_of :buzz, :maximum => 20
|
18
|
+
end
|
19
|
+
DataMapper.finalize ; FooBar
|
20
|
+
end
|
21
|
+
|
22
|
+
asserts "that it passes when the model has the validation" do
|
23
|
+
Riot::DataMapper::HasValidation.new.evaluate(topic, :validates_presence_of, :foo).first
|
24
|
+
end.equals :pass
|
25
|
+
|
26
|
+
asserts "that it fails when the model does not have the validation" do
|
27
|
+
Riot::DataMapper::HasValidation.new.evaluate(topic, :validates_presence_of, :bar).first
|
28
|
+
end.equals :fail
|
29
|
+
|
30
|
+
asserts "that it passes when the model has the validation and options" do
|
31
|
+
Riot::DataMapper::HasValidation.new.evaluate(topic, :validates_length_of, :buzz, :maximum => 20).first
|
32
|
+
end.equals :pass
|
33
|
+
|
34
|
+
asserts "that it fails when the model does not have the validation and options" do
|
35
|
+
Riot::DataMapper::HasValidation.new.evaluate(topic, :validates_length_of, :buzz, :maximum => 30).first
|
36
|
+
end.equals :fail
|
37
|
+
|
38
|
+
asserts "that it has message when the model has the validation and options" do
|
39
|
+
Riot::DataMapper::HasValidation.new.evaluate(topic, :validates_length_of, :buzz, :maximum => 20).last
|
40
|
+
end.equals "FooBar has validation :validates_length_of on :buzz with options {:maximum=>20}"
|
41
|
+
|
42
|
+
end
|
metadata
CHANGED
@@ -1,60 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: riot-datamapper
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.0.4
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Arthur Chiu
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-08-15 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: riot
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2172728880 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: dm-core
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *2172728880
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: dm-core
|
27
|
+
requirement: &2172728460 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: dm-validations
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *2172728460
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: dm-validations
|
38
|
+
requirement: &2172759240 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :runtime
|
47
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2172759240
|
48
47
|
description: Riot Assertion Macros for DataMapper
|
49
|
-
email:
|
48
|
+
email:
|
50
49
|
- mr.arthur.chiu@gmail.com
|
51
50
|
executables: []
|
52
|
-
|
53
51
|
extensions: []
|
54
|
-
|
55
52
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
files:
|
53
|
+
files:
|
58
54
|
- .gitignore
|
59
55
|
- Gemfile
|
60
56
|
- MIT-LICENSE
|
@@ -68,35 +64,34 @@ files:
|
|
68
64
|
- riot-datamapper.gemspec
|
69
65
|
- test/has_association_test.rb
|
70
66
|
- test/has_property_test.rb
|
67
|
+
- test/has_validation_test.rb
|
71
68
|
- test/teststrap.rb
|
72
69
|
homepage: https://www.github.com/achiu/riot-datamapper
|
73
70
|
licenses: []
|
74
|
-
|
75
71
|
post_install_message:
|
76
72
|
rdoc_options: []
|
77
|
-
|
78
|
-
require_paths:
|
73
|
+
require_paths:
|
79
74
|
- lib
|
80
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
76
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version:
|
86
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
82
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version:
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
92
87
|
requirements: []
|
93
|
-
|
94
88
|
rubyforge_project: riot-datamapper
|
95
|
-
rubygems_version: 1.8.
|
89
|
+
rubygems_version: 1.8.6
|
96
90
|
signing_key:
|
97
91
|
specification_version: 3
|
98
92
|
summary: Riot Assertion Macros for DataMapper
|
99
|
-
test_files:
|
93
|
+
test_files:
|
100
94
|
- test/has_association_test.rb
|
101
95
|
- test/has_property_test.rb
|
96
|
+
- test/has_validation_test.rb
|
102
97
|
- test/teststrap.rb
|