judge 1.4.0 → 1.5.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/judge.gemspec +1 -1
- data/lib/generators/judge/templates/judge.js +2 -2
- data/lib/generators/judge/templates/underscore.js +121 -60
- data/lib/judge.rb +2 -1
- data/lib/judge/each_validator.rb +21 -0
- data/lib/judge/message_collection.rb +47 -56
- data/lib/judge/message_config.rb +41 -0
- data/lib/judge/validator.rb +10 -7
- data/lib/judge/validator_collection.rb +2 -4
- data/lib/judge/version.rb +1 -1
- data/spec/each_validator_spec.rb +17 -0
- data/spec/form_builder_spec.rb +1 -1
- data/spec/html_spec.rb +1 -1
- data/spec/javascripts/helpers/underscore.js +121 -60
- data/spec/message_collection_spec.rb +30 -41
- data/spec/setup.rb +6 -1
- data/spec/{factories.rb → support/factories.rb} +0 -0
- data/spec/support/locale/en.yml +18 -0
- data/spec/support/setup.rb +72 -0
- data/spec/{spec_helper.rb → support/spec_helper.rb} +2 -2
- data/spec/support/validators/city_validator.rb +9 -0
- data/spec/validator_collection_spec.rb +1 -1
- data/spec/validator_spec.rb +2 -6
- metadata +30 -20
@@ -1,83 +1,72 @@
|
|
1
|
-
require "spec_helper"
|
1
|
+
require "support/spec_helper"
|
2
2
|
|
3
3
|
describe Judge::MessageCollection do
|
4
4
|
|
5
|
-
|
6
|
-
@user = FactoryGirl.build(:user)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "has hash of messages in messages attr" do
|
10
|
-
amv = User.validators_on(:name).first
|
11
|
-
message_collection = Judge::MessageCollection.new(@user, :name, amv)
|
12
|
-
message_collection.messages.should be_a Hash
|
13
|
-
end
|
5
|
+
let(:user) { FactoryGirl.build(:user) }
|
14
6
|
|
15
7
|
it "has to_hash method which returns messages hash" do
|
16
8
|
amv = User.validators_on(:name).first
|
17
|
-
message_collection = Judge::MessageCollection.new(
|
9
|
+
message_collection = Judge::MessageCollection.new(user, :name, amv)
|
18
10
|
message_collection.should respond_to :to_hash
|
19
11
|
message_collection.to_hash.should be_a Hash
|
20
12
|
end
|
21
13
|
|
22
|
-
describe "
|
14
|
+
describe "base messages" do
|
23
15
|
it "adds correct base message to messages hash" do
|
24
16
|
amv = User.validators_on(:name).first
|
25
|
-
|
26
|
-
|
27
|
-
message_collection.send(:generate_base!)
|
28
|
-
message_collection.to_hash[:blank].should be_a String
|
17
|
+
messages = Judge::MessageCollection.new(user, :name, amv).to_hash
|
18
|
+
messages[:blank].should eql "Name must not be blank"
|
29
19
|
end
|
30
20
|
end
|
31
21
|
|
32
|
-
describe "
|
22
|
+
describe "options messages" do
|
33
23
|
it "adds correct optional messages to messages hash when present (length)" do
|
34
24
|
amv = User.validators_on(:username).first
|
35
|
-
|
36
|
-
|
37
|
-
message_collection.send(:generate_options!)
|
38
|
-
message_collection.to_hash[:too_long].should be_a String
|
25
|
+
messages = Judge::MessageCollection.new(user, :username, amv).to_hash
|
26
|
+
messages[:too_long].should eql "Username is too long (must be less than 10 characters)"
|
39
27
|
end
|
40
28
|
|
41
29
|
it "adds correct optional messages to messages hash when present (numericality)" do
|
42
30
|
amv = User.validators_on(:age).first
|
43
|
-
|
44
|
-
|
45
|
-
message_collection.send(:generate_options!)
|
46
|
-
message_collection.to_hash[:greater_than].should be_a String
|
31
|
+
messages = Judge::MessageCollection.new(user, :age, amv).to_hash
|
32
|
+
messages[:greater_than].should eql "Age must be greater than 13"
|
47
33
|
end
|
48
34
|
|
49
35
|
it "adds nothing to messages hash when optional messages not present" do
|
50
36
|
amv = User.validators_on(:name).first
|
51
|
-
|
52
|
-
|
53
|
-
|
37
|
+
messages = Judge::MessageCollection.new(user, :name, amv).to_hash
|
38
|
+
messages[:too_long].should be_nil
|
39
|
+
messages[:greater_than].should be_nil
|
54
40
|
end
|
55
41
|
end
|
56
42
|
|
57
|
-
describe "
|
43
|
+
describe "blank messages" do
|
58
44
|
it "adds blank message to messages hash if applicable" do
|
59
45
|
amv = User.validators_on(:username).first
|
60
|
-
|
61
|
-
|
62
|
-
message_collection.send(:generate_blank!)
|
63
|
-
message_collection.to_hash[:blank].should be_a String
|
46
|
+
messages = Judge::MessageCollection.new(user, :username, amv).to_hash
|
47
|
+
messages[:blank].should eql "Username must not be blank"
|
64
48
|
end
|
65
49
|
|
66
50
|
it "does not add blank message to messages hash if allow_blank is true" do
|
67
51
|
amv = User.validators_on(:country).first
|
68
|
-
|
69
|
-
|
70
|
-
message_collection.to_hash.should be_empty
|
52
|
+
messages = Judge::MessageCollection.new(user, :country, amv).to_hash
|
53
|
+
messages[:blank].should be_nil
|
71
54
|
end
|
72
55
|
end
|
73
56
|
|
74
|
-
describe "
|
57
|
+
describe "integer messages" do
|
75
58
|
it "adds not_an_integer message to messages hash if only_integer is true" do
|
76
59
|
amv = User.validators_on(:age).first
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
60
|
+
messages = Judge::MessageCollection.new(user, :age, amv).to_hash
|
61
|
+
messages[:not_an_integer].should eql "Age must be an integer"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "custom messages" do
|
66
|
+
it "adds custom messages to messages hash if declared inside EachValidator" do
|
67
|
+
amv = User.validators_on(:city).first
|
68
|
+
messages = Judge::MessageCollection.new(user, :city, amv).to_hash
|
69
|
+
messages[:not_valid_city].should eql "City must be an approved city"
|
81
70
|
end
|
82
71
|
end
|
83
72
|
|
data/spec/setup.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# setup
|
1
|
+
# setup ActiveRecord classes for tests
|
2
2
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
3
3
|
ActiveRecord::Schema.define(:version => 1) do
|
4
4
|
create_table :users do |t|
|
@@ -14,6 +14,7 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
14
14
|
t.integer :team_id
|
15
15
|
t.string :time_zone
|
16
16
|
t.integer :discipline_id
|
17
|
+
t.string :city
|
17
18
|
end
|
18
19
|
create_table :teams do |t|
|
19
20
|
t.string :name
|
@@ -46,6 +47,7 @@ class User < ActiveRecord::Base
|
|
46
47
|
validates :team_id, :presence => true
|
47
48
|
validates :time_zone, :presence => true
|
48
49
|
validates :discipline_id, :presence => true
|
50
|
+
validates :city, :city => true
|
49
51
|
end
|
50
52
|
|
51
53
|
class Team < ActiveRecord::Base; end
|
@@ -62,6 +64,9 @@ class Discipline < ActiveRecord::Base
|
|
62
64
|
belongs_to :user
|
63
65
|
end
|
64
66
|
|
67
|
+
# i18n locale file
|
68
|
+
I18n.load_path << File.expand_path("spec/support/locale/en.yml")
|
69
|
+
|
65
70
|
# hack to stop #url_for error
|
66
71
|
module ActionDispatch::Routing::PolymorphicRoutes
|
67
72
|
def polymorphic_path(record_or_hash_or_array, options = {})
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
models:
|
5
|
+
user:
|
6
|
+
attributes:
|
7
|
+
city:
|
8
|
+
not_valid_city: "%{attribute} must be an approved city"
|
9
|
+
errors:
|
10
|
+
attributes:
|
11
|
+
city:
|
12
|
+
not_valid_city: "This is never reached"
|
13
|
+
|
14
|
+
messages:
|
15
|
+
not_an_integer: "%{attribute} must be an integer"
|
16
|
+
blank: "%{attribute} must not be blank"
|
17
|
+
greater_than: "%{attribute} must be greater than %{count}"
|
18
|
+
too_long: "%{attribute} is too long (must be less than %{count} characters)"
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# setup fake ActiveRecord class for tests
|
2
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
3
|
+
ActiveRecord::Schema.define(:version => 1) do
|
4
|
+
create_table :users do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :username
|
7
|
+
t.string :country
|
8
|
+
t.integer :age
|
9
|
+
t.text :bio
|
10
|
+
t.string :password
|
11
|
+
t.boolean :accepted
|
12
|
+
t.text :gender
|
13
|
+
t.date :dob
|
14
|
+
t.integer :team_id
|
15
|
+
t.string :time_zone
|
16
|
+
t.integer :discipline_id
|
17
|
+
t.string :foo
|
18
|
+
end
|
19
|
+
create_table :teams do |t|
|
20
|
+
t.string :name
|
21
|
+
end
|
22
|
+
create_table :categories do |t|
|
23
|
+
t.string :name
|
24
|
+
end
|
25
|
+
create_table :sports do |t|
|
26
|
+
t.string :name
|
27
|
+
t.integer :category_id
|
28
|
+
end
|
29
|
+
create_table :disciplines do |t|
|
30
|
+
t.string :name
|
31
|
+
t.integer :sport_id
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class User < ActiveRecord::Base
|
36
|
+
belongs_to :team
|
37
|
+
|
38
|
+
validates :name, :presence => true
|
39
|
+
validates :username, :length => { :maximum => 10 }
|
40
|
+
validates :country, :format => { :with => /[A-Za-z]/, :allow_blank => true }
|
41
|
+
validates :age, :numericality => { :only_integer => true, :greater_than => 13 }
|
42
|
+
validates :bio, :presence => true
|
43
|
+
validates :password, :format => { :with => /.+/ }, :confirmation => true
|
44
|
+
validates :accepted, :acceptance => true
|
45
|
+
validates :gender, :inclusion => { :in => ["male", "female", "other", "withheld"] }
|
46
|
+
validates :dob, :presence => true
|
47
|
+
validates :team_id, :presence => true
|
48
|
+
validates :time_zone, :presence => true
|
49
|
+
validates :discipline_id, :presence => true
|
50
|
+
validates :foo, :foo => true
|
51
|
+
end
|
52
|
+
|
53
|
+
class Team < ActiveRecord::Base; end
|
54
|
+
|
55
|
+
class Category < ActiveRecord::Base
|
56
|
+
has_many :sports
|
57
|
+
end
|
58
|
+
class Sport < ActiveRecord::Base
|
59
|
+
belongs_to :category
|
60
|
+
has_many :disciplines
|
61
|
+
end
|
62
|
+
class Discipline < ActiveRecord::Base
|
63
|
+
belongs_to :sport
|
64
|
+
belongs_to :user
|
65
|
+
end
|
66
|
+
|
67
|
+
# hack to stop #url_for error
|
68
|
+
module ActionDispatch::Routing::PolymorphicRoutes
|
69
|
+
def polymorphic_path(record_or_hash_or_array, options = {})
|
70
|
+
""
|
71
|
+
end
|
72
|
+
end
|
@@ -4,9 +4,9 @@ require "action_view"
|
|
4
4
|
require "judge"
|
5
5
|
require "rspec"
|
6
6
|
require "factory_girl"
|
7
|
+
require "support/validators/city_validator"
|
7
8
|
require "setup"
|
8
|
-
|
9
|
-
require_relative "factories"
|
9
|
+
require "support/factories"
|
10
10
|
|
11
11
|
RSpec.configure do |config|
|
12
12
|
config.color_enabled = true
|
data/spec/validator_spec.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
-
require "spec_helper"
|
1
|
+
require "support/spec_helper"
|
2
2
|
|
3
3
|
describe Judge::Validator do
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
user = FactoryGirl.build(:user)
|
7
7
|
amv = User.validators_on(:name).first
|
8
|
-
@validator = Judge::Validator.new(
|
9
|
-
end
|
10
|
-
|
11
|
-
it "has an original validator in validator attr" do
|
12
|
-
@validator.active_model_validator.should be_a ActiveModel::Validations::PresenceValidator
|
8
|
+
@validator = Judge::Validator.new(user, :name, amv)
|
13
9
|
end
|
14
10
|
|
15
11
|
it "has correct kind attr" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: judge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jasmine
|
16
|
-
requirement: &
|
16
|
+
requirement: &2168506340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.1.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2168506340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &2168505620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '3.2'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2168505620
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &2168504460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,21 +43,21 @@ dependencies:
|
|
43
43
|
version: '2.8'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2168504460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: sqlite3
|
49
|
-
requirement: &
|
48
|
+
name: sqlite3
|
49
|
+
requirement: &2168503260 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.3.
|
54
|
+
version: 1.3.5
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2168503260
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: factory_girl
|
60
|
-
requirement: &
|
60
|
+
requirement: &2168501980 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '2.6'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2168501980
|
69
69
|
description: Validate Rails 3 forms on the client side, cleanly
|
70
70
|
email: joe@tribesports.com
|
71
71
|
executables: []
|
@@ -84,14 +84,16 @@ files:
|
|
84
84
|
- lib/generators/judge/templates/judge.js
|
85
85
|
- lib/generators/judge/templates/underscore.js
|
86
86
|
- lib/judge.rb
|
87
|
+
- lib/judge/each_validator.rb
|
87
88
|
- lib/judge/form_builder.rb
|
88
89
|
- lib/judge/html.rb
|
89
90
|
- lib/judge/message_collection.rb
|
91
|
+
- lib/judge/message_config.rb
|
90
92
|
- lib/judge/validator.rb
|
91
93
|
- lib/judge/validator_collection.rb
|
92
94
|
- lib/judge/version.rb
|
93
95
|
- lib/tasks/js.rake
|
94
|
-
- spec/
|
96
|
+
- spec/each_validator_spec.rb
|
95
97
|
- spec/form_builder_spec.rb
|
96
98
|
- spec/html_spec.rb
|
97
99
|
- spec/javascripts/JudgeSpec.js
|
@@ -107,7 +109,11 @@ files:
|
|
107
109
|
- spec/javascripts/support/runner.js
|
108
110
|
- spec/message_collection_spec.rb
|
109
111
|
- spec/setup.rb
|
110
|
-
- spec/
|
112
|
+
- spec/support/factories.rb
|
113
|
+
- spec/support/locale/en.yml
|
114
|
+
- spec/support/setup.rb
|
115
|
+
- spec/support/spec_helper.rb
|
116
|
+
- spec/support/validators/city_validator.rb
|
111
117
|
- spec/validator_collection_spec.rb
|
112
118
|
- spec/validator_spec.rb
|
113
119
|
homepage: http://github.com/joecorcoran/judge
|
@@ -124,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
130
|
version: '0'
|
125
131
|
segments:
|
126
132
|
- 0
|
127
|
-
hash: -
|
133
|
+
hash: -172077303514846172
|
128
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
135
|
none: false
|
130
136
|
requirements:
|
@@ -133,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
139
|
version: '0'
|
134
140
|
segments:
|
135
141
|
- 0
|
136
|
-
hash: -
|
142
|
+
hash: -172077303514846172
|
137
143
|
requirements: []
|
138
144
|
rubyforge_project:
|
139
145
|
rubygems_version: 1.8.15
|
@@ -141,7 +147,7 @@ signing_key:
|
|
141
147
|
specification_version: 3
|
142
148
|
summary: Simple client side ActiveModel::Validators
|
143
149
|
test_files:
|
144
|
-
- spec/
|
150
|
+
- spec/each_validator_spec.rb
|
145
151
|
- spec/form_builder_spec.rb
|
146
152
|
- spec/html_spec.rb
|
147
153
|
- spec/javascripts/JudgeSpec.js
|
@@ -157,6 +163,10 @@ test_files:
|
|
157
163
|
- spec/javascripts/support/runner.js
|
158
164
|
- spec/message_collection_spec.rb
|
159
165
|
- spec/setup.rb
|
160
|
-
- spec/
|
166
|
+
- spec/support/factories.rb
|
167
|
+
- spec/support/locale/en.yml
|
168
|
+
- spec/support/setup.rb
|
169
|
+
- spec/support/spec_helper.rb
|
170
|
+
- spec/support/validators/city_validator.rb
|
161
171
|
- spec/validator_collection_spec.rb
|
162
172
|
- spec/validator_spec.rb
|