client_side_validations 3.1.5 → 3.2.0.beta.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.
Files changed (105) hide show
  1. data/client_side_validations.gemspec +1 -9
  2. data/lib/client_side_validations.rb +6 -2
  3. data/lib/client_side_validations/action_view/form_builder.rb +4 -2
  4. data/lib/client_side_validations/action_view/form_helper.rb +15 -7
  5. data/lib/client_side_validations/active_model.rb +5 -2
  6. data/lib/client_side_validations/active_record.rb +2 -1
  7. data/lib/client_side_validations/active_record/middleware.rb +15 -2
  8. data/lib/client_side_validations/active_record/uniqueness.rb +0 -1
  9. data/lib/client_side_validations/core_ext/regexp.rb +1 -1
  10. data/lib/client_side_validations/middleware.rb +40 -16
  11. data/lib/client_side_validations/version.rb +1 -1
  12. data/lib/generators/templates/client_side_validations/initializer.rb +0 -3
  13. data/vendor/assets/javascripts/rails.validations.js +135 -170
  14. metadata +22 -329
  15. data/lib/client_side_validations/formtastic.rb +0 -21
  16. data/lib/client_side_validations/mongo_mapper.rb +0 -9
  17. data/lib/client_side_validations/mongo_mapper/middleware.rb +0 -20
  18. data/lib/client_side_validations/mongo_mapper/uniqueness.rb +0 -29
  19. data/lib/client_side_validations/mongoid.rb +0 -9
  20. data/lib/client_side_validations/mongoid/format.rb +0 -10
  21. data/lib/client_side_validations/mongoid/length.rb +0 -24
  22. data/lib/client_side_validations/mongoid/middleware.rb +0 -20
  23. data/lib/client_side_validations/mongoid/presence.rb +0 -10
  24. data/lib/client_side_validations/mongoid/uniqueness.rb +0 -29
  25. data/lib/client_side_validations/simple_form.rb +0 -24
  26. data/lib/generators/templates/client_side_validations/README.rails.3.0 +0 -6
  27. data/test/action_view/cases/helper.rb +0 -176
  28. data/test/action_view/cases/test_helpers.rb +0 -635
  29. data/test/action_view/cases/test_legacy_helpers.rb +0 -217
  30. data/test/action_view/models.rb +0 -3
  31. data/test/action_view/models/comment.rb +0 -35
  32. data/test/action_view/models/post.rb +0 -35
  33. data/test/active_model/cases/helper.rb +0 -4
  34. data/test/active_model/cases/test_acceptance_validator.rb +0 -16
  35. data/test/active_model/cases/test_base.rb +0 -11
  36. data/test/active_model/cases/test_confirmation_validator.rb +0 -16
  37. data/test/active_model/cases/test_exclusion_validator.rb +0 -20
  38. data/test/active_model/cases/test_format_validator.rb +0 -21
  39. data/test/active_model/cases/test_inclusion_validator.rb +0 -21
  40. data/test/active_model/cases/test_length_validator.rb +0 -61
  41. data/test/active_model/cases/test_numericality_validator.rb +0 -46
  42. data/test/active_model/cases/test_presence_validator.rb +0 -16
  43. data/test/active_model/cases/test_validations.rb +0 -175
  44. data/test/active_model/models/person.rb +0 -17
  45. data/test/active_record/cases/helper.rb +0 -12
  46. data/test/active_record/cases/test_base.rb +0 -11
  47. data/test/active_record/cases/test_middleware.rb +0 -175
  48. data/test/active_record/cases/test_uniqueness_validator.rb +0 -56
  49. data/test/active_record/models/guid.rb +0 -7
  50. data/test/active_record/models/user.rb +0 -14
  51. data/test/base_helper.rb +0 -21
  52. data/test/core_ext/cases/test_core_ext.rb +0 -46
  53. data/test/formtastic/cases/helper.rb +0 -7
  54. data/test/formtastic/cases/test_form_builder.rb +0 -11
  55. data/test/formtastic/cases/test_form_helper.rb +0 -21
  56. data/test/generators/cases/test_generators.rb +0 -70
  57. data/test/javascript/config.ru +0 -3
  58. data/test/javascript/public/test/callbacks/elementAfter.js +0 -54
  59. data/test/javascript/public/test/callbacks/elementBefore.js +0 -54
  60. data/test/javascript/public/test/callbacks/elementFail.js +0 -70
  61. data/test/javascript/public/test/callbacks/elementPass.js +0 -70
  62. data/test/javascript/public/test/callbacks/formAfter.js +0 -45
  63. data/test/javascript/public/test/callbacks/formBefore.js +0 -45
  64. data/test/javascript/public/test/callbacks/formFail.js +0 -51
  65. data/test/javascript/public/test/callbacks/formPass.js +0 -50
  66. data/test/javascript/public/test/form_builders/validateForm.js +0 -66
  67. data/test/javascript/public/test/form_builders/validateFormtastic.js +0 -54
  68. data/test/javascript/public/test/form_builders/validateNestedForm.js +0 -66
  69. data/test/javascript/public/test/form_builders/validateSimpleForm.js +0 -57
  70. data/test/javascript/public/test/settings.js +0 -15
  71. data/test/javascript/public/test/validateElement.js +0 -179
  72. data/test/javascript/public/test/validators/acceptance.js +0 -42
  73. data/test/javascript/public/test/validators/confirmation.js +0 -25
  74. data/test/javascript/public/test/validators/exclusion.js +0 -41
  75. data/test/javascript/public/test/validators/format.js +0 -27
  76. data/test/javascript/public/test/validators/inclusion.js +0 -42
  77. data/test/javascript/public/test/validators/length.js +0 -76
  78. data/test/javascript/public/test/validators/numericality.js +0 -158
  79. data/test/javascript/public/test/validators/presence.js +0 -21
  80. data/test/javascript/public/test/validators/uniqueness.js +0 -107
  81. data/test/javascript/public/vendor/jquery.metadata.js +0 -122
  82. data/test/javascript/public/vendor/qunit.css +0 -196
  83. data/test/javascript/public/vendor/qunit.js +0 -1374
  84. data/test/javascript/server.rb +0 -84
  85. data/test/javascript/views/index.erb +0 -20
  86. data/test/javascript/views/layout.erb +0 -21
  87. data/test/middleware/cases/helper.rb +0 -7
  88. data/test/middleware/cases/test_middleware.rb +0 -8
  89. data/test/mongo_mapper/cases/helper.rb +0 -9
  90. data/test/mongo_mapper/cases/test_base.rb +0 -15
  91. data/test/mongo_mapper/cases/test_middleware.rb +0 -77
  92. data/test/mongo_mapper/cases/test_uniqueness_validator.rb +0 -55
  93. data/test/mongo_mapper/models/magazine.rb +0 -11
  94. data/test/mongoid/cases/helper.rb +0 -12
  95. data/test/mongoid/cases/test_base.rb +0 -15
  96. data/test/mongoid/cases/test_format_validator.rb +0 -21
  97. data/test/mongoid/cases/test_length_validator.rb +0 -60
  98. data/test/mongoid/cases/test_middleware.rb +0 -77
  99. data/test/mongoid/cases/test_presence_validator.rb +0 -16
  100. data/test/mongoid/cases/test_uniqueness_validator.rb +0 -54
  101. data/test/mongoid/models/book.rb +0 -12
  102. data/test/simple_form/cases/helper.rb +0 -5
  103. data/test/simple_form/cases/test_form_builder.rb +0 -14
  104. data/test/simple_form/cases/test_form_helper.rb +0 -24
  105. data/test/test_loader.rb +0 -6
@@ -1,46 +0,0 @@
1
- require 'active_model/cases/test_base'
2
-
3
- class ActiveModel::NumericalityValidatorTest < ClientSideValidations::ActiveModelTestBase
4
-
5
- def test_numericality_client_side_hash
6
- expected_hash = { :messages => { :numericality => "is not a number" } }
7
- assert_equal expected_hash, NumericalityValidator.new(:attributes => [:age]).client_side_hash(@person, :age)
8
- end
9
-
10
- def test_numericality_client_side_hash_with_custom_message
11
- expected_hash = { :messages => { :numericality => "bad number" } }
12
- assert_equal expected_hash, NumericalityValidator.new(:attributes => [:age], :message => "bad number").client_side_hash(@person, :age)
13
- end
14
-
15
- def test_numericality_client_side_hash_with_options
16
- expected_hash = {
17
- :messages => {
18
- :numericality => "is not a number",
19
- :only_integer => "must be an integer",
20
- :greater_than => "must be greater than 10",
21
- :greater_than_or_equal_to => "must be greater than or equal to 10",
22
- :equal_to => "must be equal to 10",
23
- :less_than => "must be less than 10",
24
- :less_than_or_equal_to => "must be less than or equal to 10",
25
- :odd => "must be odd",
26
- :even => "must be even"
27
- },
28
- :only_integer => true,
29
- :greater_than => 10,
30
- :greater_than_or_equal_to => 10,
31
- :equal_to => 10,
32
- :less_than => 10,
33
- :less_than_or_equal_to => 10,
34
- :odd => true,
35
- :even => true
36
- }
37
- test_hash = NumericalityValidator.new(:attributes => [:age],
38
- :only_integer => true, :greater_than => 10, :greater_than_or_equal_to => 10,
39
- :equal_to => 10, :less_than => 10, :less_than_or_equal_to => 10,
40
- :odd => true, :even => true).client_side_hash(@person, :age)
41
-
42
- assert_equal expected_hash, test_hash
43
- end
44
-
45
- end
46
-
@@ -1,16 +0,0 @@
1
- require 'active_model/cases/test_base'
2
-
3
- class ActiveModel::PresenceValidatorTest < ClientSideValidations::ActiveModelTestBase
4
-
5
- def test_presence_client_side_hash
6
- expected_hash = { :message => "can't be blank" }
7
- assert_equal expected_hash, PresenceValidator.new(:attributes => [:name]).client_side_hash(@person, :age)
8
- end
9
-
10
- def test_presence_client_side_hash_with_custom_message
11
- expected_hash = { :message => "is required" }
12
- assert_equal expected_hash, PresenceValidator.new(:attributes => [:name], :message => "is required").client_side_hash(@person, :age)
13
- end
14
-
15
- end
16
-
@@ -1,175 +0,0 @@
1
- require 'active_model/cases/test_base'
2
-
3
- class ActiveModel::ValidationsTest < ClientSideValidations::ActiveModelTestBase
4
-
5
- class Person
6
- include ::ActiveModel::Validations
7
- attr_accessor :first_name, :last_name, :age, :weight
8
-
9
- def self.name
10
- "Person"
11
- end
12
-
13
- def new_record?
14
- true
15
- end
16
- end
17
-
18
- def new_person
19
- person = Class.new(Person)
20
- yield(person)
21
- person.new
22
- end
23
-
24
- def test_validations_to_client_side_hash
25
- person = new_person do |p|
26
- p.validates_presence_of :first_name
27
- end
28
- expected_hash = {
29
- :first_name => {
30
- :presence => {
31
- :message => "can't be blank"
32
- }
33
- }
34
- }
35
- assert_equal expected_hash, person.client_side_validation_hash
36
- end
37
-
38
- def test_validations_to_client_side_hash_with_validations_allow_blank
39
- person = new_person do |p|
40
- p.validates_length_of :first_name, :is => 10, :allow_blank => true
41
- p.validates_format_of :first_name, :with => //, :allow_blank => true
42
- end
43
- expected_hash = {
44
- :first_name => {
45
- :length => {
46
- :messages => { :is => 'is the wrong length (should be 10 characters)'},
47
- :is => 10,
48
- :allow_blank => true
49
- },
50
- :format => {
51
- :message => 'is invalid',
52
- :with => //,
53
- :allow_blank => true
54
- }
55
- }
56
- }
57
- assert_equal expected_hash, person.client_side_validation_hash
58
- end
59
-
60
- def test_validations_to_client_side_hash_with_validations_on_create
61
- person = new_person do |p|
62
- p.validates_length_of :first_name, :is => 10, :on => :create
63
- p.validates_length_of :last_name, :is => 10, :on => :update
64
- p.validates_format_of :first_name, :with => //, :on => :update
65
- p.validates_format_of :last_name, :with => //, :on => :create
66
- p.validates_numericality_of :age, :on => :create
67
- p.validates_numericality_of :weight, :on => :update
68
- p.class_eval do
69
- def new_record?
70
- true
71
- end
72
- end
73
- end
74
- expected_hash = {
75
- :first_name => {
76
- :length => {
77
- :messages => { :is => 'is the wrong length (should be 10 characters)'},
78
- :is => 10,
79
- },
80
- },
81
- :last_name => {
82
- :format => {
83
- :message => 'is invalid',
84
- :with => //,
85
- }
86
- },
87
- :age => {
88
- :numericality => {
89
- :messages => { :numericality => 'is not a number' },
90
- }
91
- }
92
- }
93
- assert_equal expected_hash, person.client_side_validation_hash
94
- end
95
-
96
- def test_validations_to_client_side_hash_with_validations_on_update
97
- person = new_person do |p|
98
- p.validates_length_of :first_name, :is => 10, :on => :update
99
- p.validates_length_of :last_name, :is => 10, :on => :create
100
- p.validates_format_of :first_name, :with => //, :on => :create
101
- p.validates_format_of :last_name, :with => //, :on => :update
102
- p.validates_numericality_of :age, :on => :update
103
- p.validates_numericality_of :weight, :on => :create
104
- p.class_eval do
105
- def new_record?
106
- false
107
- end
108
- end
109
- end
110
- expected_hash = {
111
- :first_name => {
112
- :length => {
113
- :messages => { :is => 'is the wrong length (should be 10 characters)'},
114
- :is => 10,
115
- },
116
- },
117
- :last_name => {
118
- :format => {
119
- :message => 'is invalid',
120
- :with => //,
121
- }
122
- },
123
- :age => {
124
- :numericality => {
125
- :messages => { :numericality => 'is not a number' },
126
- }
127
- }
128
- }
129
- assert_equal expected_hash, person.client_side_validation_hash
130
- end
131
-
132
- def test_validates_with_should_be_ignored
133
- person = new_person do |p|
134
- p.validates_with PersonValidator
135
- end
136
-
137
- expected_hash = {}
138
- assert_equal expected_hash, person.client_side_validation_hash
139
- end
140
-
141
- def test_generic_block_validators_should_be_ignored
142
- person = new_person do |p|
143
- p.validates_each(:first_name) do |record, attr, value|
144
- record.errors.add(:first_name, "failed")
145
- end
146
- end
147
-
148
- expected_hash = {}
149
- assert_equal expected_hash, person.client_side_validation_hash
150
- end
151
-
152
- def test_conditionals_persist_on_validator
153
- person = new_person do |p|
154
- p.validates :first_name, :presence => { :if => :can_validate? }
155
- p.validates :last_name, :presence => { :unless => :cannot_validate? }
156
- end
157
-
158
- expected_hash = {
159
- :first_name => {
160
- :presence => {
161
- :message => "can't be blank",
162
- :if => :can_validate?
163
- }
164
- },
165
- :last_name => {
166
- :presence => {
167
- :message => "can't be blank",
168
- :unless => :cannot_validate?
169
- }
170
- }
171
- }
172
- assert_equal expected_hash, person.client_side_validation_hash
173
- end
174
- end
175
-
@@ -1,17 +0,0 @@
1
- class PersonValidator < ActiveModel::Validator
2
- def validate(record)
3
- end
4
- end
5
-
6
- class Person
7
- include ActiveModel::Validations
8
-
9
- attr_accessor :first_name, :last_name, :email, :age
10
-
11
- validates_presence_of :first_name
12
- validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
13
-
14
- def new_record?
15
- true
16
- end
17
- end
@@ -1,12 +0,0 @@
1
- require 'base_helper'
2
- require 'active_record'
3
- require 'client_side_validations/active_record'
4
-
5
- # Connection must be establised before anything else
6
- ActiveRecord::Base.establish_connection(
7
- :adapter => defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3',
8
- :database => ':memory:'
9
- )
10
-
11
- require 'active_record/models/user'
12
- require 'active_record/models/guid'
@@ -1,11 +0,0 @@
1
- require 'active_record/cases/helper'
2
-
3
- class ClientSideValidations::ActiveRecordTestBase < ActiveRecord::TestCase
4
- include ActiveRecord::Validations
5
-
6
- def setup
7
- @user = User.new
8
- end
9
-
10
- end
11
-
@@ -1,175 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'middleware/cases/helper'
4
- require 'active_record/cases/helper'
5
-
6
- class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
7
- include Rack::Test::Methods
8
-
9
- def teardown
10
- User.delete_all
11
- end
12
-
13
- def with_kcode(kcode)
14
- if RUBY_VERSION < '1.9'
15
- orig_kcode, $KCODE = $KCODE, kcode
16
- begin
17
- yield
18
- ensure
19
- $KCODE = orig_kcode
20
- end
21
- else
22
- yield
23
- end
24
- end
25
-
26
- def app
27
- app = Proc.new { |env| [200, {}, ['success']] }
28
- ClientSideValidations::Middleware::Validators.new(app)
29
- end
30
-
31
- def test_uniqueness_when_resource_exists
32
- User.create(:email => 'user@test.com')
33
- get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
34
-
35
- assert_equal 'false', last_response.body
36
- assert last_response.ok?
37
- end
38
-
39
- def test_uniqueness_when_resource_exists_and_param_order_is_backwards
40
- User.create(:email => 'user@test.com')
41
- get '/validators/uniqueness', { 'case_sensitive' => true, 'user[email]' => 'user@test.com' }
42
-
43
- assert_equal 'false', last_response.body
44
- assert last_response.ok?
45
- end
46
-
47
- def test_uniqueness_when_resource_does_not_exist
48
- get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
49
-
50
- assert_equal 'true', last_response.body
51
- assert last_response.not_found?
52
- end
53
-
54
- def test_uniqueness_when_id_is_given
55
- user = User.create(:email => 'user@test.com')
56
- get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'id' => user.id, 'case_sensitive' => true }
57
-
58
- assert_equal 'true', last_response.body
59
- assert last_response.not_found?
60
- end
61
-
62
- def test_mysql_adapter_uniqueness_when_id_is_given
63
- user = User.create(:email => 'user@test.com')
64
- ActiveRecord::ConnectionAdapters::SQLite3Adapter.
65
- any_instance.expects(:instance_variable_get).
66
- with("@config").
67
- returns({:adapter => "mysql"})
68
-
69
- sql_without_binary = "#{User.arel_table["email"].eq(user.email).to_sql} AND #{User.arel_table.primary_key.not_eq(user.id).to_sql}"
70
- relation = Arel::Nodes::SqlLiteral.new("BINARY #{sql_without_binary}")
71
-
72
- #NOTE: Stubs User#where because SQLite3 don't know BINARY
73
- result = User.where(sql_without_binary)
74
- User.expects(:where).with(relation).returns(result)
75
-
76
- get '/validators/uniqueness', { 'user[email]' => user.email, 'case_sensitive' => true, 'id' => user.id}
77
- assert_equal 'true', last_response.body
78
- end
79
-
80
- def test_uniqueness_when_scope_is_given
81
- User.create(:email => 'user@test.com', :age => 25)
82
- get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30 }, 'case_sensitive' => true }
83
-
84
- assert_equal 'true', last_response.body
85
- assert last_response.not_found?
86
- end
87
-
88
- def test_uniqueness_when_multiple_scopes_are_given
89
- User.create(:email => 'user@test.com', :age => 30, :name => 'Brian')
90
- get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30, 'name' => 'Robert' }, 'case_sensitive' => true }
91
-
92
- assert_equal 'true', last_response.body
93
- assert last_response.not_found?
94
- end
95
-
96
- def test_uniqueness_when_case_insensitive
97
- User.create(:name => 'Brian')
98
- get '/validators/uniqueness', { 'user[name]' => 'BRIAN', 'case_sensitive' => false }
99
-
100
- assert_equal 'false', last_response.body
101
- assert last_response.ok?
102
- end
103
-
104
- def test_uniqueness_when_attribute_passes_as_an_integer
105
- User.create(:name => 123)
106
- get '/validators/uniqueness', { 'user[name]' => 123, 'case_sensitive' => true }
107
-
108
- assert_equal 'false', last_response.body
109
- assert last_response.ok?
110
- end
111
-
112
- def test_uniqueness_when_attribute_passes_as_an_integer
113
- User.create(:name => 123)
114
- get '/validators/uniqueness', { 'user[name]' => 123, 'case_sensitive' => true }
115
-
116
- assert_equal 'false', last_response.body
117
- assert last_response.ok?
118
- end
119
-
120
- def test_uniqueness_with_columns_which_are_sql_keywords
121
- Guid.validates_uniqueness_of :key
122
- assert_nothing_raised do
123
- get '/validators/uniqueness', { 'guid[key]' => 'test', 'case_sensitive' => true }
124
- end
125
- end
126
-
127
- def test_uniqueness_with_limit
128
- # User.title is limited to 5 characters
129
- User.create(:title => "abcde")
130
- get '/validators/uniqueness', { 'user[title]' => 'abcdefgh', 'case_sensitive' => true }
131
-
132
- assert_equal 'false', last_response.body
133
- assert last_response.ok?
134
- end
135
-
136
- def test_uniqueness_with_limit_and_utf8
137
- with_kcode('UTF8') do
138
- # User.title is limited to 5 characters
139
- User.create(:title => "一二三四五")
140
- get '/validators/uniqueness', { 'user[title]' => '一二三四五六七八', 'case_sensitive' => true }
141
-
142
- assert_equal 'false', last_response.body
143
- assert last_response.ok?
144
- end
145
- end
146
-
147
- def test_validate_straight_inheritance_uniqueness
148
- get '/validators/uniqueness', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
149
- assert_equal 'true', last_response.body
150
- assert last_response.not_found?
151
-
152
- IneptWizard.create(:name => 'Rincewind')
153
- get '/validators/uniqueness', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
154
- assert_equal 'false', last_response.body
155
- assert last_response.ok?
156
-
157
- get '/validators/uniqueness', { 'conjurer[name]' => 'Rincewind', 'case_sensitive' => true }
158
- assert_equal 'false', last_response.body
159
- assert last_response.ok?
160
-
161
- Conjurer.create(:name => 'The Amazing Bonko')
162
- get '/validators/uniqueness', { 'thaumaturgist[name]' => 'The Amazing Bonko', 'case_sensitive' => true }
163
- assert_equal 'false', last_response.body
164
- assert last_response.ok?
165
- end
166
-
167
- def test_uniqueness_when_resource_is_a_nested_module
168
- ActiveRecordTestModule::User2.create(:email => 'user@test.com')
169
- get '/validators/uniqueness', { 'active_record_test_module/user2[email]' => 'user@test.com', 'case_sensitive' => true }
170
-
171
- assert_equal 'false', last_response.body
172
- assert last_response.ok?
173
- end
174
- end
175
-