client_side_validations 3.0.5 → 3.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/client_side_validations.gemspec +3 -5
- data/lib/client_side_validations/action_view/form_builder.rb +1 -1
- data/lib/client_side_validations/action_view/form_helper.rb +1 -1
- data/lib/client_side_validations/action_view.rb +4 -3
- data/lib/client_side_validations/active_model.rb +1 -2
- data/lib/client_side_validations/engine.rb +6 -0
- data/lib/client_side_validations/files.rb +8 -0
- data/lib/client_side_validations/formtastic.rb +3 -3
- data/lib/client_side_validations/middleware.rb +3 -7
- data/lib/client_side_validations/version.rb +1 -1
- data/lib/client_side_validations.rb +8 -5
- data/lib/generators/client_side_validations/copy_asset_generator.rb +23 -0
- data/lib/generators/client_side_validations/install_generator.rb +18 -6
- data/lib/generators/templates/client_side_validations/README.rails.3.0 +6 -0
- data/lib/generators/templates/client_side_validations/README.rails.3.1 +7 -0
- data/lib/generators/templates/{client_side_validations.rb → client_side_validations/initializer.rb} +1 -1
- data/test/action_view/cases/helper.rb +29 -13
- data/test/action_view/cases/test_helpers.rb +1 -1
- data/test/action_view/cases/test_legacy_helpers.rb +1 -1
- data/test/active_record/cases/test_middleware.rb +18 -18
- data/test/base_helper.rb +2 -0
- data/test/core_ext/cases/test_core_ext.rb +1 -0
- data/test/formtastic/cases/helper.rb +5 -0
- data/test/formtastic/cases/test_form_builder.rb +3 -3
- data/test/formtastic/cases/test_form_helper.rb +3 -4
- data/test/generators/cases/test_generators.rb +31 -0
- data/test/javascript/public/test/form_builders/validateFormtastic.js +1 -1
- data/test/javascript/server.rb +2 -2
- data/test/javascript/views/layout.erb +1 -1
- data/test/middleware/cases/helper.rb +3 -0
- data/test/mongo_mapper/cases/test_middleware.rb +7 -7
- data/test/mongoid/cases/test_middleware.rb +7 -7
- data/test/simple_form/cases/helper.rb +3 -0
- data/test/simple_form/cases/test_form_helper.rb +2 -0
- data/test/test_loader.rb +6 -0
- data/{javascript → vendor/assets/javascripts}/rails.validations.js +6 -6
- metadata +43 -48
- data/lib/generators/templates/README +0 -7
- data/test/generators/cases/test_install_generator.rb +0 -15
|
@@ -12,21 +12,19 @@ Gem::Specification.new do |s|
|
|
|
12
12
|
s.summary = %q{Client Side Validations}
|
|
13
13
|
s.description = %q{Client Side Validations}
|
|
14
14
|
|
|
15
|
-
s.files = `git ls-files -- {lib/*,
|
|
15
|
+
s.files = `git ls-files -- {lib/*,vendor/*,*.gemspec}`.split("\n")
|
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
18
18
|
s.require_paths = ["lib"]
|
|
19
19
|
|
|
20
|
-
s.
|
|
21
|
-
|
|
22
|
-
s.add_development_dependency 'rails', '~> 3.0.0'
|
|
20
|
+
s.add_development_dependency 'rails', '3.1.0.rc4'
|
|
23
21
|
s.add_development_dependency 'sqlite3'
|
|
24
22
|
s.add_development_dependency 'bson_ext'
|
|
25
23
|
s.add_development_dependency 'mongoid', '~> 2.0.0'
|
|
26
24
|
s.add_development_dependency 'mongo_mapper','~>0.9.0'
|
|
27
25
|
s.add_development_dependency 'mocha'
|
|
28
26
|
s.add_development_dependency 'simple_form'
|
|
29
|
-
s.add_development_dependency 'formtastic'
|
|
27
|
+
s.add_development_dependency 'formtastic', '~> 2.0.0.rc3'
|
|
30
28
|
|
|
31
29
|
# For QUnit testing
|
|
32
30
|
s.add_development_dependency 'sinatra', '~> 1.0'
|
|
@@ -2,7 +2,7 @@ module ClientSideValidations::ActionView::Helpers
|
|
|
2
2
|
module FormBuilder
|
|
3
3
|
|
|
4
4
|
def self.included(base)
|
|
5
|
-
(base.field_helpers - %w(apply_form_for_options! label check_box radio_button fields_for hidden_field)).each do |selector|
|
|
5
|
+
(base.field_helpers.map(&:to_s) - %w(apply_form_for_options! label check_box radio_button fields_for hidden_field)).each do |selector|
|
|
6
6
|
base.class_eval <<-RUBY_EVAL
|
|
7
7
|
def #{selector}_with_client_side_validations(method, options = {})
|
|
8
8
|
apply_client_side_validators(method, options)
|
|
@@ -3,9 +3,10 @@ module ClientSideValidations::ActionView
|
|
|
3
3
|
end
|
|
4
4
|
end
|
|
5
5
|
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
6
|
+
require 'client_side_validations/core_ext'
|
|
7
|
+
require 'client_side_validations/action_view/form_helper'
|
|
8
|
+
require 'client_side_validations/action_view/form_tag_helper'
|
|
9
|
+
require 'client_side_validations/action_view/form_builder'
|
|
9
10
|
|
|
10
11
|
ActionView::Base.send(:include, ClientSideValidations::ActionView::Helpers::FormHelper)
|
|
11
12
|
ActionView::Base.send(:include, ClientSideValidations::ActionView::Helpers::FormTagHelper)
|
|
@@ -5,8 +5,7 @@ module ClientSideValidations::ActiveModel
|
|
|
5
5
|
|
|
6
6
|
def client_side_hash(model, attribute)
|
|
7
7
|
options = self.options.dup
|
|
8
|
-
{ :message => model.errors.generate_message(attribute, message_type, options) }.
|
|
9
|
-
merge(options.except(*::ActiveModel::Errors::CALLBACKS_OPTIONS - [:allow_blank, :if, :unless]))
|
|
8
|
+
{ :message => model.errors.generate_message(attribute, message_type, options) }.merge(options.except(*::ActiveModel::Errors::CALLBACKS_OPTIONS - [:allow_blank, :if, :unless]))
|
|
10
9
|
end
|
|
11
10
|
|
|
12
11
|
private
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# This is only used by dependant libraries that need to find the files
|
|
2
|
+
|
|
3
|
+
module ClientSideValidations
|
|
4
|
+
module Files
|
|
5
|
+
Initializer = File.expand_path(File.dirname(__FILE__) + '/../generators/templates/client_side_validations/initializer.rb')
|
|
6
|
+
Javascript = File.expand_path(File.dirname(__FILE__) + '/../../vendor/assets/javascripts/rails.validations.js')
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module ClientSideValidations
|
|
2
2
|
module Formtastic
|
|
3
|
-
module
|
|
3
|
+
module FormBuilder
|
|
4
4
|
|
|
5
5
|
def self.included(base)
|
|
6
6
|
base.class_eval do
|
|
7
7
|
def self.client_side_form_settings(options, form_helper)
|
|
8
8
|
{
|
|
9
9
|
:type => self.to_s,
|
|
10
|
-
:inline_error_class => ::Formtastic::
|
|
10
|
+
:inline_error_class => ::Formtastic::FormBuilder.default_inline_error_class
|
|
11
11
|
}
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -17,5 +17,5 @@ module ClientSideValidations
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
Formtastic::
|
|
20
|
+
Formtastic::FormBuilder.send(:include, ClientSideValidations::Formtastic::FormBuilder)
|
|
21
21
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
|
+
require 'client_side_validations/core_ext'
|
|
4
|
+
|
|
3
5
|
module ClientSideValidations
|
|
4
6
|
|
|
5
7
|
module Middleware
|
|
6
|
-
|
|
7
8
|
class Validators
|
|
8
9
|
def initialize(app)
|
|
9
10
|
@app = app
|
|
@@ -11,7 +12,7 @@ module ClientSideValidations
|
|
|
11
12
|
|
|
12
13
|
def call(env)
|
|
13
14
|
case env['PATH_INFO']
|
|
14
|
-
when %r{\/validators\/(\w+)
|
|
15
|
+
when %r{\/validators\/(\w+)}
|
|
15
16
|
"::ClientSideValidations::Middleware::#{$1.camelize}".constantize.new(env).response
|
|
16
17
|
else
|
|
17
18
|
@app.call(env)
|
|
@@ -74,11 +75,6 @@ module ClientSideValidations
|
|
|
74
75
|
parent_key = (request.params.keys - IGNORE_PARAMS).first
|
|
75
76
|
end
|
|
76
77
|
end
|
|
77
|
-
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
class Engine < ::Rails::Engine
|
|
81
|
-
config.app_middleware.use ClientSideValidations::Middleware::Validators
|
|
82
78
|
end
|
|
83
79
|
|
|
84
80
|
end
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
module ClientSideValidations
|
|
2
2
|
end
|
|
3
3
|
|
|
4
|
-
require 'client_side_validations/active_model'
|
|
4
|
+
require 'client_side_validations/active_model' if defined?(::ActiveModel)
|
|
5
5
|
require 'client_side_validations/active_record' if defined?(::ActiveRecord)
|
|
6
|
-
require 'client_side_validations/mongoid'
|
|
7
|
-
require 'client_side_validations/mongo_mapper'
|
|
8
|
-
require 'client_side_validations/action_view'
|
|
9
|
-
|
|
6
|
+
require 'client_side_validations/mongoid' if defined?(::Mongoid)
|
|
7
|
+
require 'client_side_validations/mongo_mapper' if defined?(::MongoMapper)
|
|
8
|
+
require 'client_side_validations/action_view' if defined?(::ActionView)
|
|
9
|
+
if defined?(::Rails)
|
|
10
|
+
require 'client_side_validations/middleware'
|
|
11
|
+
require 'client_side_validations/engine'
|
|
12
|
+
end
|
|
10
13
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module ClientSideValidations
|
|
2
|
+
module Generators
|
|
3
|
+
class CopyAssetGenerator < Rails::Generators::Base
|
|
4
|
+
source_root File.expand_path('../../../../vendor/assets/javascripts', __FILE__)
|
|
5
|
+
if Rails.version >= '3.1'
|
|
6
|
+
desc 'Creates a ClientSideValidations initializer and copies rails.validations.js to app/assets/javascripts.'
|
|
7
|
+
else
|
|
8
|
+
desc 'Creates a ClientSideValidations initializer and copies rails.validations.js to public/javascripts.'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def copy_javascript_asset
|
|
12
|
+
if Rails.version >= '3.1'
|
|
13
|
+
destination = 'app/assets/javascripts'
|
|
14
|
+
else
|
|
15
|
+
destination = 'public/javascripts'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
copy_file 'rails.validations.js', "#{destination}/rails.validations.js"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
module ClientSideValidations
|
|
2
2
|
module Generators
|
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
|
4
|
-
source_root File.expand_path('../../templates', __FILE__)
|
|
4
|
+
source_root File.expand_path('../../templates/client_side_validations', __FILE__)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
if Rails.version >= '3.1'
|
|
7
|
+
desc 'Creates a ClientSideValidations initializer.'
|
|
8
|
+
else
|
|
9
|
+
desc 'Creates a ClientSideValidations initializer and copies rails.validations.js to public/javascripts.'
|
|
10
|
+
end
|
|
7
11
|
|
|
8
12
|
def copy_initializer
|
|
9
|
-
copy_file '
|
|
13
|
+
copy_file 'initializer.rb', 'config/initializers/client_side_validations.rb'
|
|
10
14
|
end
|
|
11
15
|
|
|
12
|
-
def
|
|
13
|
-
|
|
16
|
+
def copy_javascript_asset
|
|
17
|
+
if Rails.version >= '3.0'
|
|
18
|
+
if Rails.version < '3.1'
|
|
19
|
+
copy_file '../../../../vendor/assets/javascripts/rails.validations.js', 'public/javascripts/rails.validations.js'
|
|
20
|
+
end
|
|
21
|
+
end
|
|
14
22
|
end
|
|
15
23
|
|
|
16
24
|
def show_readme
|
|
17
|
-
|
|
25
|
+
if Rails.version >= '3.1'
|
|
26
|
+
readme 'README.rails.3.1' if behavior == :invoke
|
|
27
|
+
else
|
|
28
|
+
readme 'README.rails.3.0' if behavior == :invoke
|
|
29
|
+
end
|
|
18
30
|
end
|
|
19
31
|
end
|
|
20
32
|
end
|
data/lib/generators/templates/{client_side_validations.rb → client_side_validations/initializer.rb}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# ClientSideValidations Initializer
|
|
2
2
|
|
|
3
3
|
require 'client_side_validations/simple_form' if defined?(::SimpleForm)
|
|
4
|
-
require 'client_side_validations/formtastic'
|
|
4
|
+
require 'client_side_validations/formtastic' if defined?(::Formtastic)
|
|
5
5
|
|
|
6
6
|
# Uncomment the following block if you want each input field to have the validation messages attached.
|
|
7
7
|
# ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
require 'base_helper'
|
|
2
2
|
require 'action_view'
|
|
3
|
-
require '
|
|
4
|
-
require 'action_view/template/handlers/erb'
|
|
3
|
+
require 'action_view/template'
|
|
5
4
|
require 'action_view/models'
|
|
5
|
+
require 'client_side_validations/action_view'
|
|
6
|
+
|
|
7
|
+
module ActionController
|
|
8
|
+
class Base
|
|
9
|
+
include ActionDispatch::Routing::RouteSet.new.url_helpers
|
|
10
|
+
end
|
|
11
|
+
end
|
|
6
12
|
|
|
7
13
|
module ActionViewTestSetup
|
|
8
14
|
include ::ClientSideValidations::ActionView::Helpers::FormHelper
|
|
@@ -12,6 +18,19 @@ module ActionViewTestSetup
|
|
|
12
18
|
@output_buffer = super
|
|
13
19
|
end
|
|
14
20
|
|
|
21
|
+
Routes = ActionDispatch::Routing::RouteSet.new
|
|
22
|
+
Routes.draw do
|
|
23
|
+
resources :posts do
|
|
24
|
+
resources :comments
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def _routes
|
|
29
|
+
Routes
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
include Routes.url_helpers
|
|
33
|
+
|
|
15
34
|
def setup
|
|
16
35
|
super
|
|
17
36
|
|
|
@@ -68,15 +87,10 @@ module ActionViewTestSetup
|
|
|
68
87
|
@post.secret = 1
|
|
69
88
|
@post.written_on = Date.new(2004, 6, 15)
|
|
70
89
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def url_for(object)
|
|
75
|
-
@url_for_options = object
|
|
76
|
-
if object.is_a?(Hash)
|
|
77
|
-
"http://www.example.com"
|
|
90
|
+
if defined?(ActionView::OutputFlow)
|
|
91
|
+
@view_flow = ActionView::OutputFlow.new
|
|
78
92
|
else
|
|
79
|
-
|
|
93
|
+
@_content_for = Hash.new { |h,k| h[k] = ActiveSupport::SafeBuffer.new }
|
|
80
94
|
end
|
|
81
95
|
end
|
|
82
96
|
|
|
@@ -87,11 +101,12 @@ module ActionViewTestSetup
|
|
|
87
101
|
txt << %{</div>}
|
|
88
102
|
end
|
|
89
103
|
|
|
90
|
-
def form_text(action = "http://www.example.com", id = nil, html_class = nil, remote = nil, validators = nil)
|
|
104
|
+
def form_text(action = "http://www.example.com", id = nil, html_class = nil, remote = nil, validators = nil, file = nil)
|
|
91
105
|
txt = %{<form accept-charset="UTF-8" action="#{action}"}
|
|
92
106
|
txt << %{ data-remote="true"} if remote
|
|
93
107
|
txt << %{ class="#{html_class}"} if html_class
|
|
94
108
|
txt << %{ data-validate="true"} if validators
|
|
109
|
+
txt << %{ enctype="multipart/form-data"} if file
|
|
95
110
|
txt << %{ id="#{id}"} if id
|
|
96
111
|
txt << %{ method="post"}
|
|
97
112
|
txt << %{ novalidate="novalidate"} if validators
|
|
@@ -102,12 +117,12 @@ module ActionViewTestSetup
|
|
|
102
117
|
contents = block_given? ? yield : ""
|
|
103
118
|
|
|
104
119
|
if options.is_a?(Hash)
|
|
105
|
-
method, remote, validators = options.values_at(:method, :remote, :validators)
|
|
120
|
+
method, remote, validators, file = options.values_at(:method, :remote, :validators, :file)
|
|
106
121
|
else
|
|
107
122
|
method = options
|
|
108
123
|
end
|
|
109
124
|
|
|
110
|
-
html = form_text(action, id, html_class, remote, validators) + snowman(method) + (contents || "") + "</form>"
|
|
125
|
+
html = form_text(action, id, html_class, remote, validators, file) + snowman(method) + (contents || "") + "</form>"
|
|
111
126
|
|
|
112
127
|
if options.is_a?(Hash) && options[:validators]
|
|
113
128
|
build_script_tag(html, id, options[:validators])
|
|
@@ -158,3 +173,4 @@ module ActionViewTestSetup
|
|
|
158
173
|
end
|
|
159
174
|
|
|
160
175
|
end
|
|
176
|
+
|
|
@@ -44,7 +44,7 @@ class ClientSideValidations::ActionViewHelpersTest < ActionView::TestCase
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
validators = {'post[cost]' => {:presence => {:message => "can't be blank"}}}
|
|
47
|
-
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => "put", :validators => validators) do
|
|
47
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => "put", :validators => validators, :file => true) do
|
|
48
48
|
%{<input data-validate="true" id="post_cost" name="post[cost]" type="file" />}
|
|
49
49
|
end
|
|
50
50
|
assert_equal expected, output_buffer
|
|
@@ -30,7 +30,7 @@ class ClientSideValidations::LegacyActionViewHelpersTest < ActionView::TestCase
|
|
|
30
30
|
concat f.file_field(:cost)
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
expected = whole_form("/posts/123", "edit_post_123", "edit_post",
|
|
33
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => :put, :file => true) do
|
|
34
34
|
%{<input id="post_cost" name="post[cost]" type="file" />}
|
|
35
35
|
end
|
|
36
36
|
assert_equal expected, output_buffer
|
|
@@ -30,7 +30,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
30
30
|
|
|
31
31
|
def test_uniqueness_when_resource_exists
|
|
32
32
|
User.create(:email => 'user@test.com')
|
|
33
|
-
get '/validators/uniqueness
|
|
33
|
+
get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
|
|
34
34
|
|
|
35
35
|
assert_equal 'false', last_response.body
|
|
36
36
|
assert last_response.ok?
|
|
@@ -38,14 +38,14 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
38
38
|
|
|
39
39
|
def test_uniqueness_when_resource_exists_and_param_order_is_backwards
|
|
40
40
|
User.create(:email => 'user@test.com')
|
|
41
|
-
get '/validators/uniqueness
|
|
41
|
+
get '/validators/uniqueness', { 'case_sensitive' => true, 'user[email]' => 'user@test.com' }
|
|
42
42
|
|
|
43
43
|
assert_equal 'false', last_response.body
|
|
44
44
|
assert last_response.ok?
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def test_uniqueness_when_resource_does_not_exist
|
|
48
|
-
get '/validators/uniqueness
|
|
48
|
+
get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
|
|
49
49
|
|
|
50
50
|
assert_equal 'true', last_response.body
|
|
51
51
|
assert last_response.not_found?
|
|
@@ -53,7 +53,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
53
53
|
|
|
54
54
|
def test_uniqueness_when_id_is_given
|
|
55
55
|
user = User.create(:email => 'user@test.com')
|
|
56
|
-
get '/validators/uniqueness
|
|
56
|
+
get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'id' => user.id, 'case_sensitive' => true }
|
|
57
57
|
|
|
58
58
|
assert_equal 'true', last_response.body
|
|
59
59
|
assert last_response.not_found?
|
|
@@ -73,13 +73,13 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
73
73
|
result = User.where(sql_without_binary)
|
|
74
74
|
User.expects(:where).with(relation).returns(result)
|
|
75
75
|
|
|
76
|
-
get '/validators/uniqueness
|
|
76
|
+
get '/validators/uniqueness', { 'user[email]' => user.email, 'case_sensitive' => true, 'id' => user.id}
|
|
77
77
|
assert_equal 'true', last_response.body
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def test_uniqueness_when_scope_is_given
|
|
81
81
|
User.create(:email => 'user@test.com', :age => 25)
|
|
82
|
-
get '/validators/uniqueness
|
|
82
|
+
get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30 }, 'case_sensitive' => true }
|
|
83
83
|
|
|
84
84
|
assert_equal 'true', last_response.body
|
|
85
85
|
assert last_response.not_found?
|
|
@@ -87,7 +87,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
87
87
|
|
|
88
88
|
def test_uniqueness_when_multiple_scopes_are_given
|
|
89
89
|
User.create(:email => 'user@test.com', :age => 30, :name => 'Brian')
|
|
90
|
-
get '/validators/uniqueness
|
|
90
|
+
get '/validators/uniqueness', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30, 'name' => 'Robert' }, 'case_sensitive' => true }
|
|
91
91
|
|
|
92
92
|
assert_equal 'true', last_response.body
|
|
93
93
|
assert last_response.not_found?
|
|
@@ -95,7 +95,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
95
95
|
|
|
96
96
|
def test_uniqueness_when_case_insensitive
|
|
97
97
|
User.create(:name => 'Brian')
|
|
98
|
-
get '/validators/uniqueness
|
|
98
|
+
get '/validators/uniqueness', { 'user[name]' => 'BRIAN', 'case_sensitive' => false }
|
|
99
99
|
|
|
100
100
|
assert_equal 'false', last_response.body
|
|
101
101
|
assert last_response.ok?
|
|
@@ -103,7 +103,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
103
103
|
|
|
104
104
|
def test_uniqueness_when_attribute_passes_as_an_integer
|
|
105
105
|
User.create(:name => 123)
|
|
106
|
-
get '/validators/uniqueness
|
|
106
|
+
get '/validators/uniqueness', { 'user[name]' => 123, 'case_sensitive' => true }
|
|
107
107
|
|
|
108
108
|
assert_equal 'false', last_response.body
|
|
109
109
|
assert last_response.ok?
|
|
@@ -111,7 +111,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
111
111
|
|
|
112
112
|
def test_uniqueness_when_attribute_passes_as_an_integer
|
|
113
113
|
User.create(:name => 123)
|
|
114
|
-
get '/validators/uniqueness
|
|
114
|
+
get '/validators/uniqueness', { 'user[name]' => 123, 'case_sensitive' => true }
|
|
115
115
|
|
|
116
116
|
assert_equal 'false', last_response.body
|
|
117
117
|
assert last_response.ok?
|
|
@@ -120,14 +120,14 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
120
120
|
def test_uniqueness_with_columns_which_are_sql_keywords
|
|
121
121
|
Guid.validates_uniqueness_of :key
|
|
122
122
|
assert_nothing_raised do
|
|
123
|
-
get '/validators/uniqueness
|
|
123
|
+
get '/validators/uniqueness', { 'guid[key]' => 'test', 'case_sensitive' => true }
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
def test_uniqueness_with_limit
|
|
128
128
|
# User.title is limited to 5 characters
|
|
129
129
|
User.create(:title => "abcde")
|
|
130
|
-
get '/validators/uniqueness
|
|
130
|
+
get '/validators/uniqueness', { 'user[title]' => 'abcdefgh', 'case_sensitive' => true }
|
|
131
131
|
|
|
132
132
|
assert_equal 'false', last_response.body
|
|
133
133
|
assert last_response.ok?
|
|
@@ -137,7 +137,7 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
137
137
|
with_kcode('UTF8') do
|
|
138
138
|
# User.title is limited to 5 characters
|
|
139
139
|
User.create(:title => "一二三四五")
|
|
140
|
-
get '/validators/uniqueness
|
|
140
|
+
get '/validators/uniqueness', { 'user[title]' => '一二三四五六七八', 'case_sensitive' => true }
|
|
141
141
|
|
|
142
142
|
assert_equal 'false', last_response.body
|
|
143
143
|
assert last_response.ok?
|
|
@@ -145,28 +145,28 @@ class ClientSideValidationsActiveRecordMiddlewareTest < Test::Unit::TestCase
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
def test_validate_straight_inheritance_uniqueness
|
|
148
|
-
get '/validators/uniqueness
|
|
148
|
+
get '/validators/uniqueness', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
|
|
149
149
|
assert_equal 'true', last_response.body
|
|
150
150
|
assert last_response.not_found?
|
|
151
151
|
|
|
152
152
|
IneptWizard.create(:name => 'Rincewind')
|
|
153
|
-
get '/validators/uniqueness
|
|
153
|
+
get '/validators/uniqueness', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
|
|
154
154
|
assert_equal 'false', last_response.body
|
|
155
155
|
assert last_response.ok?
|
|
156
156
|
|
|
157
|
-
get '/validators/uniqueness
|
|
157
|
+
get '/validators/uniqueness', { 'conjurer[name]' => 'Rincewind', 'case_sensitive' => true }
|
|
158
158
|
assert_equal 'false', last_response.body
|
|
159
159
|
assert last_response.ok?
|
|
160
160
|
|
|
161
161
|
Conjurer.create(:name => 'The Amazing Bonko')
|
|
162
|
-
get '/validators/uniqueness
|
|
162
|
+
get '/validators/uniqueness', { 'thaumaturgist[name]' => 'The Amazing Bonko', 'case_sensitive' => true }
|
|
163
163
|
assert_equal 'false', last_response.body
|
|
164
164
|
assert last_response.ok?
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
def test_uniqueness_when_resource_is_a_nested_module
|
|
168
168
|
ActiveRecordTestModule::User2.create(:email => 'user@test.com')
|
|
169
|
-
get '/validators/uniqueness
|
|
169
|
+
get '/validators/uniqueness', { 'active_record_test_module/user2[email]' => 'user@test.com', 'case_sensitive' => true }
|
|
170
170
|
|
|
171
171
|
assert_equal 'false', last_response.body
|
|
172
172
|
assert last_response.ok?
|
data/test/base_helper.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
require 'formtastic/cases/helper'
|
|
2
2
|
|
|
3
|
-
class ClientSideValidations::Formtastic::
|
|
3
|
+
class ClientSideValidations::Formtastic::FormBuilderTest < Test::Unit::TestCase
|
|
4
4
|
def test_client_side_form_js_hash
|
|
5
5
|
expected = {
|
|
6
|
-
:type => 'Formtastic::
|
|
6
|
+
:type => 'Formtastic::FormBuilder',
|
|
7
7
|
:inline_error_class => 'inline-errors'
|
|
8
8
|
}
|
|
9
|
-
assert_equal expected, Formtastic::
|
|
9
|
+
assert_equal expected, Formtastic::FormBuilder.client_side_form_settings(nil, nil)
|
|
10
10
|
end
|
|
11
11
|
end
|
|
@@ -3,7 +3,7 @@ require 'formtastic/cases/helper'
|
|
|
3
3
|
|
|
4
4
|
class ClientSideValidations::Formtastic::FormHelperTest < ActionView::TestCase
|
|
5
5
|
include ActionViewTestSetup
|
|
6
|
-
include Formtastic::
|
|
6
|
+
include Formtastic::Helpers::FormHelper
|
|
7
7
|
|
|
8
8
|
def client_side_form_settings_helper
|
|
9
9
|
""
|
|
@@ -14,9 +14,8 @@ class ClientSideValidations::Formtastic::FormHelperTest < ActionView::TestCase
|
|
|
14
14
|
concat f.input(:cost)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
expected = %{<form accept-charset="UTF-8" action="/posts/123" class="formtastic post" data-validate="true" id="edit_post_123" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /></div><li class="string required" id="post_cost_input"><label for="post_cost">Cost<abbr title="required">*</abbr></label><input data-validate="true" id="post_cost" name="post[cost]" type="text"
|
|
17
|
+
expected = %{<form accept-charset="UTF-8" action="/posts/123" class="formtastic post" data-validate="true" id="edit_post_123" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /></div><li class="string input required stringish" id="post_cost_input"><label class=\" label\" for="post_cost">Cost<abbr title="required">*</abbr></label><input data-validate="true" id="post_cost" name="post[cost]" required=\"required\" type="text" />\n\n</li></form><script>window['edit_post_123'] = {"type":"Formtastic::FormBuilder","inline_error_class":"inline-errors","validators":{"post[cost]":{"presence":{"message":"can't be blank"}}}};</script>}
|
|
18
18
|
assert_equal expected, output_buffer, "\n\n *** If you're running Ruby 1.8 and this test fails is is most likely due to 1.8's lack of insertion order persistence with Hashes ***\n"
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
end
|
|
22
|
-
|
|
21
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'rails/generators/test_case'
|
|
2
|
+
require 'generators/client_side_validations/install_generator'
|
|
3
|
+
require 'generators/client_side_validations/copy_asset_generator'
|
|
4
|
+
|
|
5
|
+
class InstallGeneratorTest < Rails::Generators::TestCase
|
|
6
|
+
tests ClientSideValidations::Generators::InstallGenerator
|
|
7
|
+
destination File.expand_path('../../tmp', __FILE__)
|
|
8
|
+
setup :prepare_destination
|
|
9
|
+
|
|
10
|
+
test 'Assert all files are properly created' do
|
|
11
|
+
run_generator
|
|
12
|
+
assert_file 'config/initializers/client_side_validations.rb'
|
|
13
|
+
assert_file 'public/javascripts/rails.validations.js' if Rails.version > '3.0' && Rails.version < '3.1'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class CopyAssetGeneratorTest < Rails::Generators::TestCase
|
|
18
|
+
tests ClientSideValidations::Generators::CopyAssetGenerator
|
|
19
|
+
destination File.expand_path('../../tmp', __FILE__)
|
|
20
|
+
setup :prepare_destination
|
|
21
|
+
|
|
22
|
+
test 'Assert file is properly created' do
|
|
23
|
+
run_generator
|
|
24
|
+
if Rails.version >= '3.1'
|
|
25
|
+
assert_file 'app/assets/javascripts/rails.validations.js'
|
|
26
|
+
else
|
|
27
|
+
assert_file 'public/javascripts/rails.validations.js'
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module('Validate Formtastic', {
|
|
2
2
|
setup: function() {
|
|
3
3
|
window['new_user'] = {
|
|
4
|
-
type: 'Formtastic::
|
|
4
|
+
type: 'Formtastic::FormBuilder',
|
|
5
5
|
inline_error_class: 'inline-errors',
|
|
6
6
|
validators: {
|
|
7
7
|
"user[name]":{"presence":{"message": "must be present"}, "format":{"message":"is invalid","with":/\d+/}}
|
data/test/javascript/server.rb
CHANGED
|
@@ -2,7 +2,7 @@ require 'sinatra'
|
|
|
2
2
|
require 'json'
|
|
3
3
|
require 'ruby-debug'
|
|
4
4
|
|
|
5
|
-
use Rack::Static, :urls => ['/
|
|
5
|
+
use Rack::Static, :urls => ['/vendor/assets/javascripts'], :root => File.expand_path('../..', settings.root)
|
|
6
6
|
|
|
7
7
|
helpers do
|
|
8
8
|
def jquery_link version
|
|
@@ -43,7 +43,7 @@ get '/' do
|
|
|
43
43
|
erb :index
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
get '/validators/uniqueness
|
|
46
|
+
get '/validators/uniqueness' do
|
|
47
47
|
content_type 'application/json'
|
|
48
48
|
|
|
49
49
|
if user = params[:user2]
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require 'base_helper'
|
|
2
|
+
require 'action_controller'
|
|
3
|
+
require 'action_controller/railtie'
|
|
2
4
|
require 'rails'
|
|
3
5
|
|
|
4
6
|
# Pulled from railties/test/abstract_unit in Rails 3.1
|
|
@@ -11,5 +13,6 @@ module TestApp
|
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
require 'client_side_validations/middleware'
|
|
16
|
+
require 'client_side_validations/engine'
|
|
14
17
|
|
|
15
18
|
TestApp::Application.initialize!
|
|
@@ -21,14 +21,14 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
21
21
|
|
|
22
22
|
def test_uniqueness_when_resource_exists
|
|
23
23
|
Magazine.create(:author_email => 'magazine@test.com')
|
|
24
|
-
get '/validators/uniqueness
|
|
24
|
+
get '/validators/uniqueness', { 'magazine[author_email]' => 'magazine@test.com' }
|
|
25
25
|
|
|
26
26
|
assert_equal 'false', last_response.body
|
|
27
27
|
assert last_response.ok?
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def test_uniqueness_when_resource_does_not_exist
|
|
31
|
-
get '/validators/uniqueness
|
|
31
|
+
get '/validators/uniqueness', { 'magazine[author_email]' => 'magazine@test.com' }
|
|
32
32
|
|
|
33
33
|
assert_equal 'true', last_response.body
|
|
34
34
|
assert last_response.not_found?
|
|
@@ -36,7 +36,7 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
36
36
|
|
|
37
37
|
def test_uniqueness_when_id_is_given
|
|
38
38
|
magazine = Magazine.create(:author_email => 'magazine@test.com')
|
|
39
|
-
get '/validators/uniqueness
|
|
39
|
+
get '/validators/uniqueness', { 'magazine[author_email]' => 'magazine@test.com', 'id' => magazine.id }
|
|
40
40
|
|
|
41
41
|
assert_equal 'true', last_response.body
|
|
42
42
|
assert last_response.not_found?
|
|
@@ -44,7 +44,7 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
44
44
|
|
|
45
45
|
def test_uniqueness_when_scope_is_given
|
|
46
46
|
Magazine.create(:author_email => 'magazine@test.com', :age => 25)
|
|
47
|
-
get '/validators/uniqueness
|
|
47
|
+
get '/validators/uniqueness', { 'magazine[author_email]' => 'magazine@test.com', 'scope' => { 'age' => 30 } }
|
|
48
48
|
|
|
49
49
|
assert_equal 'true', last_response.body
|
|
50
50
|
assert last_response.not_found?
|
|
@@ -52,7 +52,7 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
52
52
|
|
|
53
53
|
def test_uniqueness_when_multiple_scopes_are_given
|
|
54
54
|
Magazine.create(:author_email => 'magazine@test.com', :age => 30, :author_name => 'Brian')
|
|
55
|
-
get '/validators/uniqueness
|
|
55
|
+
get '/validators/uniqueness', { 'magazine[author_email]' => 'magazine@test.com', 'scope' => { 'age' => 30, 'author_name' => 'Robert' } }
|
|
56
56
|
|
|
57
57
|
assert_equal 'true', last_response.body
|
|
58
58
|
assert last_response.not_found?
|
|
@@ -60,7 +60,7 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
60
60
|
|
|
61
61
|
def test_uniqueness_when_case_insensitive
|
|
62
62
|
Magazine.create(:author_name => 'Brian')
|
|
63
|
-
get '/validators/uniqueness
|
|
63
|
+
get '/validators/uniqueness', { 'magazine[author_name]' => 'BRIAN', 'case_sensitive' => false }
|
|
64
64
|
|
|
65
65
|
assert_equal 'false', last_response.body
|
|
66
66
|
assert last_response.ok?
|
|
@@ -68,7 +68,7 @@ class ClientSideValidationsMongoMapperMiddlewareTest < Test::Unit::TestCase
|
|
|
68
68
|
|
|
69
69
|
def test_uniqueness_when_resource_exists
|
|
70
70
|
MongoMapperTestModule::Magazine2.create(:author_email => 'magazine@test.com')
|
|
71
|
-
get '/validators/uniqueness
|
|
71
|
+
get '/validators/uniqueness', { 'mongo_mapper_test_module/magazine2[author_email]' => 'magazine@test.com' }
|
|
72
72
|
|
|
73
73
|
assert_equal 'false', last_response.body
|
|
74
74
|
assert last_response.ok?
|
|
@@ -21,14 +21,14 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
21
21
|
|
|
22
22
|
def test_uniqueness_when_resource_exists
|
|
23
23
|
Book.create(:author_email => 'book@test.com')
|
|
24
|
-
get '/validators/uniqueness
|
|
24
|
+
get '/validators/uniqueness', { 'book[author_email]' => 'book@test.com' }
|
|
25
25
|
|
|
26
26
|
assert_equal 'false', last_response.body
|
|
27
27
|
assert last_response.ok?
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def test_uniqueness_when_resource_does_not_exist
|
|
31
|
-
get '/validators/uniqueness
|
|
31
|
+
get '/validators/uniqueness', { 'book[author_email]' => 'book@test.com' }
|
|
32
32
|
|
|
33
33
|
assert_equal 'true', last_response.body
|
|
34
34
|
assert last_response.not_found?
|
|
@@ -36,7 +36,7 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
36
36
|
|
|
37
37
|
def test_uniqueness_when_id_is_given
|
|
38
38
|
book = Book.create(:author_email => 'book@test.com')
|
|
39
|
-
get '/validators/uniqueness
|
|
39
|
+
get '/validators/uniqueness', { 'book[author_email]' => 'book@test.com', 'id' => book.id }
|
|
40
40
|
|
|
41
41
|
assert_equal 'true', last_response.body
|
|
42
42
|
assert last_response.not_found?
|
|
@@ -44,7 +44,7 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
44
44
|
|
|
45
45
|
def test_uniqueness_when_scope_is_given
|
|
46
46
|
Book.create(:author_email => 'book@test.com', :age => 25)
|
|
47
|
-
get '/validators/uniqueness
|
|
47
|
+
get '/validators/uniqueness', { 'book[author_email]' => 'book@test.com', 'scope' => { 'age' => 30 } }
|
|
48
48
|
|
|
49
49
|
assert_equal 'true', last_response.body
|
|
50
50
|
assert last_response.not_found?
|
|
@@ -52,7 +52,7 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
52
52
|
|
|
53
53
|
def test_uniqueness_when_multiple_scopes_are_given
|
|
54
54
|
Book.create(:author_email => 'book@test.com', :age => 30, :author_name => 'Brian')
|
|
55
|
-
get '/validators/uniqueness
|
|
55
|
+
get '/validators/uniqueness', { 'book[author_email]' => 'book@test.com', 'scope' => { 'age' => 30, 'author_name' => 'Robert' } }
|
|
56
56
|
|
|
57
57
|
assert_equal 'true', last_response.body
|
|
58
58
|
assert last_response.not_found?
|
|
@@ -60,7 +60,7 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
60
60
|
|
|
61
61
|
def test_uniqueness_when_case_insensitive
|
|
62
62
|
Book.create(:author_name => 'Brian')
|
|
63
|
-
get '/validators/uniqueness
|
|
63
|
+
get '/validators/uniqueness', { 'book[author_name]' => 'BRIAN', 'case_sensitive' => false }
|
|
64
64
|
|
|
65
65
|
assert_equal 'false', last_response.body
|
|
66
66
|
assert last_response.ok?
|
|
@@ -68,7 +68,7 @@ class ClientSideValidationsMongoidMiddlewareTest < Test::Unit::TestCase
|
|
|
68
68
|
|
|
69
69
|
def test_uniqueness_when_resource_is_a_nested_module
|
|
70
70
|
MongoidTestModule::Book2.create(:author_email => 'book@test.com')
|
|
71
|
-
get '/validators/uniqueness
|
|
71
|
+
get '/validators/uniqueness', { 'mongoid_test_module/book2[author_email]' => 'book@test.com' }
|
|
72
72
|
|
|
73
73
|
assert_equal 'false', last_response.body
|
|
74
74
|
assert last_response.ok?
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'action_view/cases/helper'
|
|
2
|
+
require 'middleware/cases/helper'
|
|
2
3
|
require 'simple_form/cases/helper'
|
|
3
4
|
|
|
4
5
|
class ClientSideValidations::SimpleForm::FormHelperTest < ActionView::TestCase
|
|
@@ -10,6 +11,7 @@ class ClientSideValidations::SimpleForm::FormHelperTest < ActionView::TestCase
|
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def test_simple_form_for
|
|
14
|
+
ActionView::TestCase::TestController.any_instance.stubs(:action_name).returns('edit')
|
|
13
15
|
simple_form_for(@post, :validate => true) do |f|
|
|
14
16
|
concat f.input(:cost)
|
|
15
17
|
end
|
data/test/test_loader.rb
ADDED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Rails 3 Client Side Validations - v3.0
|
|
2
|
+
* Rails 3 Client Side Validations - v3.1.0
|
|
3
3
|
* https://github.com/bcardarlela/client_side_validations
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2011 Brian Cardarella
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
.bind('form:validate:pass', function(eventData) { clientSideValidations.callbacks.form.pass( form, eventData); })
|
|
25
25
|
|
|
26
26
|
// Set up the events for each validatable form element
|
|
27
|
-
.find('[data-validate]:input')
|
|
27
|
+
.find('[data-validate]:input:not(:radio)')
|
|
28
28
|
.live('focusout', function() { $(this).isValid(settings.validators); })
|
|
29
29
|
.live('change', function() { $(this).data('changed', true); })
|
|
30
30
|
// Callbacks
|
|
@@ -300,7 +300,7 @@ var clientSideValidations = {
|
|
|
300
300
|
data[name] = element.val();
|
|
301
301
|
|
|
302
302
|
if (jQuery.ajax({
|
|
303
|
-
url: '/validators/uniqueness
|
|
303
|
+
url: '/validators/uniqueness',
|
|
304
304
|
data: data,
|
|
305
305
|
async: false
|
|
306
306
|
}).status == 200) {
|
|
@@ -312,7 +312,7 @@ var clientSideValidations = {
|
|
|
312
312
|
formBuilders: {
|
|
313
313
|
'ActionView::Helpers::FormBuilder': {
|
|
314
314
|
add: function(element, settings, message) {
|
|
315
|
-
if (element.data('valid') !== false) {
|
|
315
|
+
if (element.data('valid') !== false && jQuery('label.message[for="' + element.attr('id') + '"]')[0] == undefined) {
|
|
316
316
|
var inputErrorField = jQuery(settings.input_tag),
|
|
317
317
|
labelErrorField = jQuery(settings.label_tag),
|
|
318
318
|
label = jQuery('label[for="' + element.attr('id') + '"]:not(.message)');
|
|
@@ -360,7 +360,7 @@ var clientSideValidations = {
|
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
},
|
|
363
|
-
'Formtastic::
|
|
363
|
+
'Formtastic::FormBuilder': {
|
|
364
364
|
add: function(element, settings, message) {
|
|
365
365
|
if (element.data('valid') !== false) {
|
|
366
366
|
var wrapper = element.closest('li');
|
|
@@ -401,4 +401,4 @@ var clientSideValidations = {
|
|
|
401
401
|
pass: function(form, eventData) { }
|
|
402
402
|
}
|
|
403
403
|
}
|
|
404
|
-
}
|
|
404
|
+
};
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: client_side_validations
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 3.0
|
|
5
|
+
version: 3.1.0
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Brian Cardarella
|
|
@@ -10,33 +10,33 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2011-06-
|
|
13
|
+
date: 2011-06-20 00:00:00 -04:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
|
-
name:
|
|
17
|
+
name: rails
|
|
18
18
|
prerelease: false
|
|
19
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
20
20
|
none: false
|
|
21
21
|
requirements:
|
|
22
|
-
- - "
|
|
22
|
+
- - "="
|
|
23
23
|
- !ruby/object:Gem::Version
|
|
24
|
-
version:
|
|
25
|
-
type: :
|
|
24
|
+
version: 3.1.0.rc4
|
|
25
|
+
type: :development
|
|
26
26
|
version_requirements: *id001
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: sqlite3
|
|
29
29
|
prerelease: false
|
|
30
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
31
31
|
none: false
|
|
32
32
|
requirements:
|
|
33
|
-
- -
|
|
33
|
+
- - ">="
|
|
34
34
|
- !ruby/object:Gem::Version
|
|
35
|
-
version:
|
|
35
|
+
version: "0"
|
|
36
36
|
type: :development
|
|
37
37
|
version_requirements: *id002
|
|
38
38
|
- !ruby/object:Gem::Dependency
|
|
39
|
-
name:
|
|
39
|
+
name: bson_ext
|
|
40
40
|
prerelease: false
|
|
41
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
42
42
|
none: false
|
|
@@ -47,40 +47,40 @@ dependencies:
|
|
|
47
47
|
type: :development
|
|
48
48
|
version_requirements: *id003
|
|
49
49
|
- !ruby/object:Gem::Dependency
|
|
50
|
-
name:
|
|
50
|
+
name: mongoid
|
|
51
51
|
prerelease: false
|
|
52
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
|
53
53
|
none: false
|
|
54
54
|
requirements:
|
|
55
|
-
- -
|
|
55
|
+
- - ~>
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
|
-
version:
|
|
57
|
+
version: 2.0.0
|
|
58
58
|
type: :development
|
|
59
59
|
version_requirements: *id004
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
|
-
name:
|
|
61
|
+
name: mongo_mapper
|
|
62
62
|
prerelease: false
|
|
63
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
|
64
64
|
none: false
|
|
65
65
|
requirements:
|
|
66
66
|
- - ~>
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
68
|
+
version: 0.9.0
|
|
69
69
|
type: :development
|
|
70
70
|
version_requirements: *id005
|
|
71
71
|
- !ruby/object:Gem::Dependency
|
|
72
|
-
name:
|
|
72
|
+
name: mocha
|
|
73
73
|
prerelease: false
|
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
|
75
75
|
none: false
|
|
76
76
|
requirements:
|
|
77
|
-
- -
|
|
77
|
+
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: 0
|
|
79
|
+
version: "0"
|
|
80
80
|
type: :development
|
|
81
81
|
version_requirements: *id006
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
name:
|
|
83
|
+
name: simple_form
|
|
84
84
|
prerelease: false
|
|
85
85
|
requirement: &id007 !ruby/object:Gem::Requirement
|
|
86
86
|
none: false
|
|
@@ -91,40 +91,40 @@ dependencies:
|
|
|
91
91
|
type: :development
|
|
92
92
|
version_requirements: *id007
|
|
93
93
|
- !ruby/object:Gem::Dependency
|
|
94
|
-
name:
|
|
94
|
+
name: formtastic
|
|
95
95
|
prerelease: false
|
|
96
96
|
requirement: &id008 !ruby/object:Gem::Requirement
|
|
97
97
|
none: false
|
|
98
98
|
requirements:
|
|
99
|
-
- -
|
|
99
|
+
- - ~>
|
|
100
100
|
- !ruby/object:Gem::Version
|
|
101
|
-
version:
|
|
101
|
+
version: 2.0.0.rc3
|
|
102
102
|
type: :development
|
|
103
103
|
version_requirements: *id008
|
|
104
104
|
- !ruby/object:Gem::Dependency
|
|
105
|
-
name:
|
|
105
|
+
name: sinatra
|
|
106
106
|
prerelease: false
|
|
107
107
|
requirement: &id009 !ruby/object:Gem::Requirement
|
|
108
108
|
none: false
|
|
109
109
|
requirements:
|
|
110
|
-
- -
|
|
110
|
+
- - ~>
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: "0"
|
|
112
|
+
version: "1.0"
|
|
113
113
|
type: :development
|
|
114
114
|
version_requirements: *id009
|
|
115
115
|
- !ruby/object:Gem::Dependency
|
|
116
|
-
name:
|
|
116
|
+
name: shotgun
|
|
117
117
|
prerelease: false
|
|
118
118
|
requirement: &id010 !ruby/object:Gem::Requirement
|
|
119
119
|
none: false
|
|
120
120
|
requirements:
|
|
121
|
-
- -
|
|
121
|
+
- - ">="
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: "
|
|
123
|
+
version: "0"
|
|
124
124
|
type: :development
|
|
125
125
|
version_requirements: *id010
|
|
126
126
|
- !ruby/object:Gem::Dependency
|
|
127
|
-
name:
|
|
127
|
+
name: thin
|
|
128
128
|
prerelease: false
|
|
129
129
|
requirement: &id011 !ruby/object:Gem::Requirement
|
|
130
130
|
none: false
|
|
@@ -135,7 +135,7 @@ dependencies:
|
|
|
135
135
|
type: :development
|
|
136
136
|
version_requirements: *id011
|
|
137
137
|
- !ruby/object:Gem::Dependency
|
|
138
|
-
name:
|
|
138
|
+
name: json
|
|
139
139
|
prerelease: false
|
|
140
140
|
requirement: &id012 !ruby/object:Gem::Requirement
|
|
141
141
|
none: false
|
|
@@ -146,7 +146,7 @@ dependencies:
|
|
|
146
146
|
type: :development
|
|
147
147
|
version_requirements: *id012
|
|
148
148
|
- !ruby/object:Gem::Dependency
|
|
149
|
-
name:
|
|
149
|
+
name: ruby-debug19
|
|
150
150
|
prerelease: false
|
|
151
151
|
requirement: &id013 !ruby/object:Gem::Requirement
|
|
152
152
|
none: false
|
|
@@ -156,17 +156,6 @@ dependencies:
|
|
|
156
156
|
version: "0"
|
|
157
157
|
type: :development
|
|
158
158
|
version_requirements: *id013
|
|
159
|
-
- !ruby/object:Gem::Dependency
|
|
160
|
-
name: ruby-debug19
|
|
161
|
-
prerelease: false
|
|
162
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
|
163
|
-
none: false
|
|
164
|
-
requirements:
|
|
165
|
-
- - ">="
|
|
166
|
-
- !ruby/object:Gem::Version
|
|
167
|
-
version: "0"
|
|
168
|
-
type: :development
|
|
169
|
-
version_requirements: *id014
|
|
170
159
|
description: Client Side Validations
|
|
171
160
|
email:
|
|
172
161
|
- bcardarella@gmail.com
|
|
@@ -178,7 +167,6 @@ extra_rdoc_files: []
|
|
|
178
167
|
|
|
179
168
|
files:
|
|
180
169
|
- client_side_validations.gemspec
|
|
181
|
-
- javascript/rails.validations.js
|
|
182
170
|
- lib/client_side_validations.rb
|
|
183
171
|
- lib/client_side_validations/action_view.rb
|
|
184
172
|
- lib/client_side_validations/action_view/form_builder.rb
|
|
@@ -198,6 +186,8 @@ files:
|
|
|
198
186
|
- lib/client_side_validations/core_ext.rb
|
|
199
187
|
- lib/client_side_validations/core_ext/range.rb
|
|
200
188
|
- lib/client_side_validations/core_ext/regexp.rb
|
|
189
|
+
- lib/client_side_validations/engine.rb
|
|
190
|
+
- lib/client_side_validations/files.rb
|
|
201
191
|
- lib/client_side_validations/formtastic.rb
|
|
202
192
|
- lib/client_side_validations/middleware.rb
|
|
203
193
|
- lib/client_side_validations/mongo_mapper.rb
|
|
@@ -208,9 +198,12 @@ files:
|
|
|
208
198
|
- lib/client_side_validations/mongoid/uniqueness.rb
|
|
209
199
|
- lib/client_side_validations/simple_form.rb
|
|
210
200
|
- lib/client_side_validations/version.rb
|
|
201
|
+
- lib/generators/client_side_validations/copy_asset_generator.rb
|
|
211
202
|
- lib/generators/client_side_validations/install_generator.rb
|
|
212
|
-
- lib/generators/templates/README
|
|
213
|
-
- lib/generators/templates/client_side_validations.
|
|
203
|
+
- lib/generators/templates/client_side_validations/README.rails.3.0
|
|
204
|
+
- lib/generators/templates/client_side_validations/README.rails.3.1
|
|
205
|
+
- lib/generators/templates/client_side_validations/initializer.rb
|
|
206
|
+
- vendor/assets/javascripts/rails.validations.js
|
|
214
207
|
- test/action_view/cases/helper.rb
|
|
215
208
|
- test/action_view/cases/test_helpers.rb
|
|
216
209
|
- test/action_view/cases/test_legacy_helpers.rb
|
|
@@ -240,7 +233,7 @@ files:
|
|
|
240
233
|
- test/formtastic/cases/helper.rb
|
|
241
234
|
- test/formtastic/cases/test_form_builder.rb
|
|
242
235
|
- test/formtastic/cases/test_form_helper.rb
|
|
243
|
-
- test/generators/cases/
|
|
236
|
+
- test/generators/cases/test_generators.rb
|
|
244
237
|
- test/javascript/config.ru
|
|
245
238
|
- test/javascript/public/test/callbacks/elementAfter.js
|
|
246
239
|
- test/javascript/public/test/callbacks/elementBefore.js
|
|
@@ -286,6 +279,7 @@ files:
|
|
|
286
279
|
- test/simple_form/cases/helper.rb
|
|
287
280
|
- test/simple_form/cases/test_form_builder.rb
|
|
288
281
|
- test/simple_form/cases/test_form_helper.rb
|
|
282
|
+
- test/test_loader.rb
|
|
289
283
|
has_rdoc: true
|
|
290
284
|
homepage: https://github.com/bcardarella/client_side_validations
|
|
291
285
|
licenses: []
|
|
@@ -310,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
310
304
|
requirements: []
|
|
311
305
|
|
|
312
306
|
rubyforge_project:
|
|
313
|
-
rubygems_version: 1.3
|
|
307
|
+
rubygems_version: 1.5.3
|
|
314
308
|
signing_key:
|
|
315
309
|
specification_version: 3
|
|
316
310
|
summary: Client Side Validations
|
|
@@ -344,7 +338,7 @@ test_files:
|
|
|
344
338
|
- test/formtastic/cases/helper.rb
|
|
345
339
|
- test/formtastic/cases/test_form_builder.rb
|
|
346
340
|
- test/formtastic/cases/test_form_helper.rb
|
|
347
|
-
- test/generators/cases/
|
|
341
|
+
- test/generators/cases/test_generators.rb
|
|
348
342
|
- test/javascript/config.ru
|
|
349
343
|
- test/javascript/public/test/callbacks/elementAfter.js
|
|
350
344
|
- test/javascript/public/test/callbacks/elementBefore.js
|
|
@@ -390,3 +384,4 @@ test_files:
|
|
|
390
384
|
- test/simple_form/cases/helper.rb
|
|
391
385
|
- test/simple_form/cases/test_form_builder.rb
|
|
392
386
|
- test/simple_form/cases/test_form_helper.rb
|
|
387
|
+
- test/test_loader.rb
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require 'rails/generators/test_case'
|
|
2
|
-
require 'generators/client_side_validations/install_generator'
|
|
3
|
-
|
|
4
|
-
class InstallGeneratorTest < Rails::Generators::TestCase
|
|
5
|
-
tests ClientSideValidations::Generators::InstallGenerator
|
|
6
|
-
destination File.expand_path('../../tmp', __FILE__)
|
|
7
|
-
setup :prepare_destination
|
|
8
|
-
|
|
9
|
-
test 'Assert all files are properly created' do
|
|
10
|
-
run_generator
|
|
11
|
-
assert_file 'config/initializers/client_side_validations.rb'
|
|
12
|
-
assert_file 'public/javascripts/rails.validations.js'
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|