client_side_validations 3.0.10 → 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.
Files changed (35) hide show
  1. data/client_side_validations.gemspec +2 -2
  2. data/lib/client_side_validations/action_view.rb +4 -3
  3. data/lib/client_side_validations/active_model.rb +1 -2
  4. data/lib/client_side_validations/engine.rb +6 -0
  5. data/lib/client_side_validations/files.rb +8 -0
  6. data/lib/client_side_validations/formtastic.rb +3 -3
  7. data/lib/client_side_validations/middleware.rb +3 -7
  8. data/lib/client_side_validations/version.rb +1 -1
  9. data/lib/client_side_validations.rb +8 -5
  10. data/lib/generators/client_side_validations/copy_asset_generator.rb +23 -0
  11. data/lib/generators/client_side_validations/install_generator.rb +18 -6
  12. data/lib/generators/templates/client_side_validations/README.rails.3.0 +6 -0
  13. data/lib/generators/templates/client_side_validations/README.rails.3.1 +7 -0
  14. data/lib/generators/templates/{client_side_validations.rb → client_side_validations/initializer.rb} +1 -1
  15. data/test/action_view/cases/helper.rb +29 -13
  16. data/test/action_view/cases/test_helpers.rb +1 -1
  17. data/test/action_view/cases/test_legacy_helpers.rb +1 -1
  18. data/test/active_record/cases/test_middleware.rb +18 -18
  19. data/test/core_ext/cases/test_core_ext.rb +1 -0
  20. data/test/formtastic/cases/helper.rb +5 -0
  21. data/test/formtastic/cases/test_form_builder.rb +3 -3
  22. data/test/formtastic/cases/test_form_helper.rb +3 -4
  23. data/test/generators/cases/test_generators.rb +31 -0
  24. data/test/javascript/public/test/form_builders/validateFormtastic.js +1 -1
  25. data/test/javascript/server.rb +1 -1
  26. data/test/middleware/cases/helper.rb +3 -0
  27. data/test/mongo_mapper/cases/test_middleware.rb +7 -7
  28. data/test/mongoid/cases/test_middleware.rb +7 -7
  29. data/test/simple_form/cases/helper.rb +3 -0
  30. data/test/simple_form/cases/test_form_helper.rb +2 -0
  31. data/test/test_loader.rb +6 -0
  32. data/vendor/assets/javascripts/rails.validations.js +4 -4
  33. metadata +15 -9
  34. data/lib/generators/templates/README +0 -7
  35. data/test/generators/cases/test_install_generator.rb +0 -15
@@ -17,14 +17,14 @@ Gem::Specification.new do |s|
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.add_development_dependency 'rails', '~> 3.0.0'
20
+ s.add_development_dependency 'rails', '3.1.0.rc4'
21
21
  s.add_development_dependency 'sqlite3'
22
22
  s.add_development_dependency 'bson_ext'
23
23
  s.add_development_dependency 'mongoid', '~> 2.0.0'
24
24
  s.add_development_dependency 'mongo_mapper','~>0.9.0'
25
25
  s.add_development_dependency 'mocha'
26
26
  s.add_development_dependency 'simple_form'
27
- s.add_development_dependency 'formtastic'
27
+ s.add_development_dependency 'formtastic', '~> 2.0.0.rc3'
28
28
 
29
29
  # For QUnit testing
30
30
  s.add_development_dependency 'sinatra', '~> 1.0'
@@ -3,9 +3,10 @@ module ClientSideValidations::ActionView
3
3
  end
4
4
  end
5
5
 
6
- require "client_side_validations/action_view/form_helper"
7
- require "client_side_validations/action_view/form_tag_helper"
8
- require "client_side_validations/action_view/form_builder"
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,6 @@
1
+ module ClientSideValidations
2
+ class Engine < ::Rails::Engine
3
+ config.app_middleware.use ClientSideValidations::Middleware::Validators
4
+ end
5
+ end
6
+
@@ -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 SemanticFormBuilder
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::SemanticFormBuilder.default_inline_error_class
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::SemanticFormBuilder.send(:include, ClientSideValidations::Formtastic::SemanticFormBuilder)
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+)\.json}
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,3 +1,3 @@
1
1
  module ClientSideValidations
2
- VERSION = '3.0.10'
2
+ VERSION = '3.1.0'
3
3
  end
@@ -1,10 +1,13 @@
1
1
  module ClientSideValidations
2
2
  end
3
3
 
4
- require 'client_side_validations/active_model' if defined?(::ActiveModel)
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' if defined?(::Mongoid)
7
- require 'client_side_validations/mongo_mapper' if defined?(::MongoMapper)
8
- require 'client_side_validations/action_view'
9
- require 'client_side_validations/middleware' if defined?(::Rails)
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
- desc 'Creates a ClientSideValidations initializer and copies client-side-validations.js to public/javascripts.'
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 'client_side_validations.rb', 'config/initializers/client_side_validations.rb'
13
+ copy_file 'initializer.rb', 'config/initializers/client_side_validations.rb'
10
14
  end
11
15
 
12
- def copy_locale
13
- copy_file '../../../vendor/assets/javascripts/rails.validations.js', 'public/javascripts/rails.validations.js'
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
- readme 'README' if behavior == :invoke
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
@@ -0,0 +1,6 @@
1
+ *********************
2
+ ClientSideValidations
3
+ *********************
4
+
5
+ Client Side Validations only works with jQuery.
6
+ You'll need to include jQuery in your layout file before you include 'rails.validations.js'
@@ -0,0 +1,7 @@
1
+ *********************
2
+ ClientSideValidations
3
+ *********************
4
+
5
+ In your app/assets/javascripts/application.js file add the following:
6
+
7
+ //= require rails.validations
@@ -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' if defined?(::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 'client_side_validations/action_view'
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
- @_content_for = Hash.new { |h,k| h[k] = ActiveSupport::SafeBuffer.new }
72
- end
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
- super
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", "put") do
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.json', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
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.json', { 'case_sensitive' => true, 'user[email]' => 'user@test.com' }
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.json', { 'user[email]' => 'user@test.com', 'case_sensitive' => true }
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.json', { 'user[email]' => 'user@test.com', 'id' => user.id, 'case_sensitive' => true }
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.json', { 'user[email]' => user.email, 'case_sensitive' => true, 'id' => user.id}
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.json', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30 }, 'case_sensitive' => true }
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.json', { 'user[email]' => 'user@test.com', 'scope' => { 'age' => 30, 'name' => 'Robert' }, 'case_sensitive' => true }
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.json', { 'user[name]' => 'BRIAN', 'case_sensitive' => false }
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.json', { 'user[name]' => 123, 'case_sensitive' => true }
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.json', { 'user[name]' => 123, 'case_sensitive' => true }
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.json', { 'guid[key]' => 'test', 'case_sensitive' => true }
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.json', { 'user[title]' => 'abcdefgh', 'case_sensitive' => true }
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.json', { 'user[title]' => '一二三四五六七八', 'case_sensitive' => true }
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.json', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
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.json', { 'inept_wizard[name]' => 'Rincewind', 'case_sensitive' => true }
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.json', { 'conjurer[name]' => 'Rincewind', 'case_sensitive' => true }
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.json', { 'thaumaturgist[name]' => 'The Amazing Bonko', 'case_sensitive' => true }
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.json', { 'active_record_test_module/user2[email]' => 'user@test.com', 'case_sensitive' => true }
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?
@@ -1,3 +1,4 @@
1
+ require 'base_helper'
1
2
  require 'client_side_validations/core_ext'
2
3
 
3
4
  class CoreExtTest < Test::Unit::TestCase
@@ -1,2 +1,7 @@
1
+ # encoding: utf-8
2
+ require 'active_support'
3
+ require 'formtastic/railtie' if defined?(::Rails)
4
+ require 'formtastic/engine' if defined?(::Rails)
1
5
  require 'formtastic'
2
6
  require 'client_side_validations/formtastic'
7
+
@@ -1,11 +1,11 @@
1
1
  require 'formtastic/cases/helper'
2
2
 
3
- class ClientSideValidations::Formtastic::SemanticFormBuilderTest < Test::Unit::TestCase
3
+ class ClientSideValidations::Formtastic::FormBuilderTest < Test::Unit::TestCase
4
4
  def test_client_side_form_js_hash
5
5
  expected = {
6
- :type => 'Formtastic::SemanticFormBuilder',
6
+ :type => 'Formtastic::FormBuilder',
7
7
  :inline_error_class => 'inline-errors'
8
8
  }
9
- assert_equal expected, Formtastic::SemanticFormBuilder.client_side_form_settings(nil, nil)
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::SemanticFormHelper
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="&#x2713;" /><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" /></li></form><script>window['edit_post_123'] = {"type":"Formtastic::SemanticFormBuilder","inline_error_class":"inline-errors","validators":{"post[cost]":{"presence":{"message":"can't be blank"}}}};</script>}
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="&#x2713;" /><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::SemanticFormBuilder',
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+/}}
@@ -43,7 +43,7 @@ get '/' do
43
43
  erb :index
44
44
  end
45
45
 
46
- get '/validators/uniqueness.json' do
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.json', { 'magazine[author_email]' => 'magazine@test.com' }
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.json', { 'magazine[author_email]' => 'magazine@test.com' }
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.json', { 'magazine[author_email]' => 'magazine@test.com', 'id' => magazine.id }
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.json', { 'magazine[author_email]' => 'magazine@test.com', 'scope' => { 'age' => 30 } }
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.json', { 'magazine[author_email]' => 'magazine@test.com', 'scope' => { 'age' => 30, 'author_name' => 'Robert' } }
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.json', { 'magazine[author_name]' => 'BRIAN', 'case_sensitive' => false }
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.json', { 'mongo_mapper_test_module/magazine2[author_email]' => 'magazine@test.com' }
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.json', { 'book[author_email]' => 'book@test.com' }
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.json', { 'book[author_email]' => 'book@test.com' }
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.json', { 'book[author_email]' => 'book@test.com', 'id' => book.id }
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.json', { 'book[author_email]' => 'book@test.com', 'scope' => { 'age' => 30 } }
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.json', { 'book[author_email]' => 'book@test.com', 'scope' => { 'age' => 30, 'author_name' => 'Robert' } }
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.json', { 'book[author_name]' => 'BRIAN', 'case_sensitive' => false }
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.json', { 'mongoid_test_module/book2[author_email]' => 'book@test.com' }
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,2 +1,5 @@
1
+ require 'action_view'
2
+ require 'action_controller/railtie'
3
+ require 'rails'
1
4
  require 'simple_form'
2
5
  require 'client_side_validations/simple_form'
@@ -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
@@ -0,0 +1,6 @@
1
+ # Sanity check to make sure the entire library loads OK
2
+
3
+ require 'base_helper'
4
+ require 'client_side_validations'
5
+ require 'client_side_validations/files'
6
+ require 'client_side_validations/version'
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Rails 3 Client Side Validations - v3.0.10
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
@@ -300,7 +300,7 @@ var clientSideValidations = {
300
300
  data[name] = element.val();
301
301
 
302
302
  if (jQuery.ajax({
303
- url: '/validators/uniqueness.json',
303
+ url: '/validators/uniqueness',
304
304
  data: data,
305
305
  async: false
306
306
  }).status == 200) {
@@ -360,7 +360,7 @@ var clientSideValidations = {
360
360
  }
361
361
 
362
362
  },
363
- 'Formtastic::SemanticFormBuilder': {
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.10
5
+ version: 3.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brian Cardarella
@@ -19,9 +19,9 @@ dependencies:
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: 3.0.0
24
+ version: 3.1.0.rc4
25
25
  type: :development
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
@@ -96,9 +96,9 @@ dependencies:
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: "0"
101
+ version: 2.0.0.rc3
102
102
  type: :development
103
103
  version_requirements: *id008
104
104
  - !ruby/object:Gem::Dependency
@@ -186,6 +186,8 @@ files:
186
186
  - lib/client_side_validations/core_ext.rb
187
187
  - lib/client_side_validations/core_ext/range.rb
188
188
  - lib/client_side_validations/core_ext/regexp.rb
189
+ - lib/client_side_validations/engine.rb
190
+ - lib/client_side_validations/files.rb
189
191
  - lib/client_side_validations/formtastic.rb
190
192
  - lib/client_side_validations/middleware.rb
191
193
  - lib/client_side_validations/mongo_mapper.rb
@@ -196,9 +198,11 @@ files:
196
198
  - lib/client_side_validations/mongoid/uniqueness.rb
197
199
  - lib/client_side_validations/simple_form.rb
198
200
  - lib/client_side_validations/version.rb
201
+ - lib/generators/client_side_validations/copy_asset_generator.rb
199
202
  - lib/generators/client_side_validations/install_generator.rb
200
- - lib/generators/templates/README
201
- - lib/generators/templates/client_side_validations.rb
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
202
206
  - vendor/assets/javascripts/rails.validations.js
203
207
  - test/action_view/cases/helper.rb
204
208
  - test/action_view/cases/test_helpers.rb
@@ -229,7 +233,7 @@ files:
229
233
  - test/formtastic/cases/helper.rb
230
234
  - test/formtastic/cases/test_form_builder.rb
231
235
  - test/formtastic/cases/test_form_helper.rb
232
- - test/generators/cases/test_install_generator.rb
236
+ - test/generators/cases/test_generators.rb
233
237
  - test/javascript/config.ru
234
238
  - test/javascript/public/test/callbacks/elementAfter.js
235
239
  - test/javascript/public/test/callbacks/elementBefore.js
@@ -275,6 +279,7 @@ files:
275
279
  - test/simple_form/cases/helper.rb
276
280
  - test/simple_form/cases/test_form_builder.rb
277
281
  - test/simple_form/cases/test_form_helper.rb
282
+ - test/test_loader.rb
278
283
  has_rdoc: true
279
284
  homepage: https://github.com/bcardarella/client_side_validations
280
285
  licenses: []
@@ -333,7 +338,7 @@ test_files:
333
338
  - test/formtastic/cases/helper.rb
334
339
  - test/formtastic/cases/test_form_builder.rb
335
340
  - test/formtastic/cases/test_form_helper.rb
336
- - test/generators/cases/test_install_generator.rb
341
+ - test/generators/cases/test_generators.rb
337
342
  - test/javascript/config.ru
338
343
  - test/javascript/public/test/callbacks/elementAfter.js
339
344
  - test/javascript/public/test/callbacks/elementBefore.js
@@ -379,3 +384,4 @@ test_files:
379
384
  - test/simple_form/cases/helper.rb
380
385
  - test/simple_form/cases/test_form_builder.rb
381
386
  - test/simple_form/cases/test_form_helper.rb
387
+ - test/test_loader.rb
@@ -1,7 +0,0 @@
1
- **************************************
2
- Client Side Validations
3
-
4
- Currently Client Side Validations only
5
- works with jQuery. You'll need to require
6
- jQuery in your layout file before you
7
- require 'rails.validations.js'
@@ -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
-