dynamic_form 1.0.0 → 1.1.4
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/.gitignore +2 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +35 -35
- data/README.md +57 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/dynamic_form.gemspec +7 -6
- data/init.rb +1 -1
- data/lib/action_view/helpers/dynamic_form.rb +1 -1
- data/lib/action_view/locale/en.yml +8 -7
- data/lib/active_model/dynamic_errors.rb +47 -0
- data/lib/active_model/locale/en.yml +4 -0
- data/lib/dynamic_form.rb +1 -0
- data/test/dynamic_form_i18n_test.rb +6 -6
- data/test/dynamic_form_test.rb +15 -9
- metadata +13 -8
- data/README +0 -13
- data/dynamic-form.gemspec +0 -58
data/.gitignore
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
.bundle
|
1
|
+
.bundle
|
2
|
+
pkg
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,34 +2,34 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
abstract (1.0.0)
|
5
|
-
actionmailer (3.0.0
|
6
|
-
actionpack (= 3.0.0
|
5
|
+
actionmailer (3.0.0)
|
6
|
+
actionpack (= 3.0.0)
|
7
7
|
mail (~> 2.2.5)
|
8
|
-
actionpack (3.0.0
|
9
|
-
activemodel (= 3.0.0
|
10
|
-
activesupport (= 3.0.0
|
8
|
+
actionpack (3.0.0)
|
9
|
+
activemodel (= 3.0.0)
|
10
|
+
activesupport (= 3.0.0)
|
11
11
|
builder (~> 2.1.2)
|
12
12
|
erubis (~> 2.6.6)
|
13
13
|
i18n (~> 0.4.1)
|
14
14
|
rack (~> 1.2.1)
|
15
|
-
rack-mount (~> 0.6.
|
15
|
+
rack-mount (~> 0.6.12)
|
16
16
|
rack-test (~> 0.5.4)
|
17
|
-
tzinfo (~> 0.3.
|
18
|
-
activemodel (3.0.0
|
19
|
-
activesupport (= 3.0.0
|
17
|
+
tzinfo (~> 0.3.23)
|
18
|
+
activemodel (3.0.0)
|
19
|
+
activesupport (= 3.0.0)
|
20
20
|
builder (~> 2.1.2)
|
21
21
|
i18n (~> 0.4.1)
|
22
|
-
activerecord (3.0.0
|
23
|
-
activemodel (= 3.0.0
|
24
|
-
activesupport (= 3.0.0
|
25
|
-
arel (~> 0.
|
26
|
-
tzinfo (~> 0.3.
|
27
|
-
activeresource (3.0.0
|
28
|
-
activemodel (= 3.0.0
|
29
|
-
activesupport (= 3.0.0
|
30
|
-
activesupport (3.0.0
|
31
|
-
arel (0.
|
32
|
-
activesupport (
|
22
|
+
activerecord (3.0.0)
|
23
|
+
activemodel (= 3.0.0)
|
24
|
+
activesupport (= 3.0.0)
|
25
|
+
arel (~> 1.0.0)
|
26
|
+
tzinfo (~> 0.3.23)
|
27
|
+
activeresource (3.0.0)
|
28
|
+
activemodel (= 3.0.0)
|
29
|
+
activesupport (= 3.0.0)
|
30
|
+
activesupport (3.0.0)
|
31
|
+
arel (1.0.1)
|
32
|
+
activesupport (~> 3.0.0)
|
33
33
|
builder (2.1.2)
|
34
34
|
erubis (2.6.6)
|
35
35
|
abstract (>= 1.0.0)
|
@@ -43,32 +43,32 @@ GEM
|
|
43
43
|
rake
|
44
44
|
polyglot (0.3.1)
|
45
45
|
rack (1.2.1)
|
46
|
-
rack-mount (0.6.
|
46
|
+
rack-mount (0.6.13)
|
47
47
|
rack (>= 1.0.0)
|
48
48
|
rack-test (0.5.4)
|
49
49
|
rack (>= 1.0)
|
50
|
-
rails (3.0.0
|
51
|
-
actionmailer (= 3.0.0
|
52
|
-
actionpack (= 3.0.0
|
53
|
-
activerecord (= 3.0.0
|
54
|
-
activeresource (= 3.0.0
|
55
|
-
activesupport (= 3.0.0
|
56
|
-
bundler (
|
57
|
-
railties (= 3.0.0
|
58
|
-
railties (3.0.0
|
59
|
-
actionpack (= 3.0.0
|
60
|
-
activesupport (= 3.0.0
|
61
|
-
rake (>= 0.8.
|
50
|
+
rails (3.0.0)
|
51
|
+
actionmailer (= 3.0.0)
|
52
|
+
actionpack (= 3.0.0)
|
53
|
+
activerecord (= 3.0.0)
|
54
|
+
activeresource (= 3.0.0)
|
55
|
+
activesupport (= 3.0.0)
|
56
|
+
bundler (~> 1.0.0)
|
57
|
+
railties (= 3.0.0)
|
58
|
+
railties (3.0.0)
|
59
|
+
actionpack (= 3.0.0)
|
60
|
+
activesupport (= 3.0.0)
|
61
|
+
rake (>= 0.8.4)
|
62
62
|
thor (~> 0.14.0)
|
63
63
|
rake (0.8.7)
|
64
64
|
thor (0.14.0)
|
65
65
|
treetop (1.4.8)
|
66
66
|
polyglot (>= 0.3.1)
|
67
|
-
tzinfo (0.3.
|
67
|
+
tzinfo (0.3.23)
|
68
68
|
|
69
69
|
PLATFORMS
|
70
70
|
ruby
|
71
71
|
|
72
72
|
DEPENDENCIES
|
73
73
|
mocha
|
74
|
-
rails (= 3.0.0
|
74
|
+
rails (= 3.0.0)
|
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
DynamicForm
|
2
|
+
===========
|
3
|
+
|
4
|
+
DynamicForm holds a few helpers method to help you deal with your Rails3 models, they are:
|
5
|
+
|
6
|
+
* `input(record, method, options = {})`
|
7
|
+
* `form(record, options = {})`
|
8
|
+
* `error_message_on(object, method, options={})`
|
9
|
+
* `error_messages_for(record, options={})`
|
10
|
+
|
11
|
+
It also adds `f.error_messages` and `f.error_messages_on` to your form builders.
|
12
|
+
|
13
|
+
Read `/lib/action_view/helpers/dynamic_form.rb` for details of each method.
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
DynamicErrors
|
18
|
+
=============
|
19
|
+
|
20
|
+
DynamicForm also includes DynamicErrors, which is a port of the custom-err-messages plugin,
|
21
|
+
but built to work with Rails3. It gives you the option to not have your custom validation
|
22
|
+
error message prefixed with the attribute name. Ordinarily, if you have, say:
|
23
|
+
|
24
|
+
validates_acceptance_of :accepted_terms, :message => 'Please accept the terms of service'
|
25
|
+
|
26
|
+
You'll get the following error message:
|
27
|
+
|
28
|
+
Accepted terms Please accept the terms of service
|
29
|
+
|
30
|
+
This plugin allows you to omit the attribute name for specific messages. All you have to do
|
31
|
+
is begin the message with a '^' character. Example:
|
32
|
+
|
33
|
+
validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'
|
34
|
+
|
35
|
+
Nigel Ramsay added the ability to specify a proc to generate the message.
|
36
|
+
|
37
|
+
validates_presence_of :assessment_answer_option_id,
|
38
|
+
:message => Proc.new { |aa| "#{aa.label} (#{aa.group_label}) is required" }
|
39
|
+
|
40
|
+
which gives an error message like: Rate (Accuracy) is required
|
41
|
+
|
42
|
+
---
|
43
|
+
|
44
|
+
Installation
|
45
|
+
------------
|
46
|
+
|
47
|
+
DynamicForm can be installed as a gem in your `Gemfile`:
|
48
|
+
|
49
|
+
gem 'dynamic_form'
|
50
|
+
|
51
|
+
or as a plugin by running this command:
|
52
|
+
|
53
|
+
rails plugin install git://github.com/joelmoss/dynamic_form.git
|
54
|
+
|
55
|
+
---
|
56
|
+
|
57
|
+
Copyright (c) 2010 David Heinemeier Hansson, released under the MIT license
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "dynamic_form"
|
8
8
|
gem.summary = %Q{DynamicForm holds a few helper methods to help you deal with your Rails3 models}
|
9
|
-
gem.description = %Q{DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for}
|
9
|
+
gem.description = %Q{DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for. It also brings in the functionality of the custom-err-messages plugin, which provides more flexibility over your model error messages.}
|
10
10
|
gem.email = "joel@developwithstyle.com"
|
11
11
|
gem.homepage = "http://codaset.com/joelmoss/dynamic-form"
|
12
12
|
gem.authors = ["Joel Moss"]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.4
|
data/dynamic_form.gemspec
CHANGED
@@ -5,29 +5,30 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dynamic_form}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joel Moss"]
|
12
|
-
s.date = %q{
|
13
|
-
s.description = %q{DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for}
|
12
|
+
s.date = %q{2011-04-08}
|
13
|
+
s.description = %q{DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for. It also brings in the functionality of the custom-err-messages plugin, which provides more flexibility over your model error messages.}
|
14
14
|
s.email = %q{joel@developwithstyle.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
|
-
"README"
|
16
|
+
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
19
|
".gitignore",
|
20
20
|
"Gemfile",
|
21
21
|
"Gemfile.lock",
|
22
22
|
"MIT-LICENSE",
|
23
|
-
"README",
|
23
|
+
"README.md",
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
|
-
"dynamic-form.gemspec",
|
27
26
|
"dynamic_form.gemspec",
|
28
27
|
"init.rb",
|
29
28
|
"lib/action_view/helpers/dynamic_form.rb",
|
30
29
|
"lib/action_view/locale/en.yml",
|
30
|
+
"lib/active_model/dynamic_errors.rb",
|
31
|
+
"lib/active_model/locale/en.yml",
|
31
32
|
"lib/dynamic_form.rb",
|
32
33
|
"test/dynamic_form_i18n_test.rb",
|
33
34
|
"test/dynamic_form_test.rb",
|
data/init.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require 'dynamic_form'
|
1
|
+
require 'dynamic_form'
|
@@ -212,7 +212,7 @@ module ActionView
|
|
212
212
|
end
|
213
213
|
options[:object_name] ||= params.first
|
214
214
|
|
215
|
-
I18n.with_options :locale => options[:locale], :scope => [:errors, :template] do |locale|
|
215
|
+
I18n.with_options :locale => options[:locale], :scope => [:activerecord, :errors, :template] do |locale|
|
216
216
|
header_message = if options.include?(:header_message)
|
217
217
|
options[:header_message]
|
218
218
|
else
|
@@ -1,8 +1,9 @@
|
|
1
1
|
en:
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
template:
|
5
|
+
header:
|
6
|
+
one: "1 error prohibited this %{model} from being saved"
|
7
|
+
other: "%{count} errors prohibited this %{model} from being saved"
|
8
|
+
# The variable :count is also available
|
9
|
+
body: "There were problems with the following fields:"
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module ActiveModel
|
2
|
+
class Errors
|
3
|
+
# Redefine the ActiveModel::Errors::full_messages method:
|
4
|
+
# Returns all the full error messages in an array. 'Base' messages are handled as usual.
|
5
|
+
# Non-base messages are prefixed with the attribute name as usual UNLESS
|
6
|
+
# (1) they begin with '^' in which case the attribute name is omitted.
|
7
|
+
# E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service'
|
8
|
+
# (2) the message is a proc, in which case the proc is invoked on the model object.
|
9
|
+
# E.g. validates_presence_of :assessment_answer_option_id,
|
10
|
+
# :message => Proc.new { |aa| "#{aa.label} (#{aa.group_label}) is required" }
|
11
|
+
# which gives an error message like:
|
12
|
+
# Rate (Accuracy) is required
|
13
|
+
def full_messages
|
14
|
+
full_messages = []
|
15
|
+
|
16
|
+
each do |attribute, messages|
|
17
|
+
messages = Array.wrap(messages)
|
18
|
+
next if messages.empty?
|
19
|
+
|
20
|
+
if attribute == :base
|
21
|
+
messages.each {|m| full_messages << m }
|
22
|
+
else
|
23
|
+
attr_name = attribute.to_s.gsub('.', '_').humanize
|
24
|
+
attr_name = @base.class.human_attribute_name(attribute, :default => attr_name)
|
25
|
+
options = { :default => "%{attribute} %{message}", :attribute => attr_name }
|
26
|
+
|
27
|
+
messages.each do |m|
|
28
|
+
if m =~ /^\^/
|
29
|
+
options[:default] = "%{message}"
|
30
|
+
full_messages << I18n.t(:"errors.dynamic_format", options.merge(:message => m[1..-1]))
|
31
|
+
elsif m.is_a? Proc
|
32
|
+
options[:default] = "%{message}"
|
33
|
+
full_messages << I18n.t(:"errors.dynamic_format", options.merge(:message => m.call(@base)))
|
34
|
+
else
|
35
|
+
full_messages << I18n.t(:"errors.format", options.merge(:message => m))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
full_messages
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
require 'active_support/i18n'
|
47
|
+
I18n.load_path << File.dirname(__FILE__) + '/locale/en.yml'
|
data/lib/dynamic_form.rb
CHANGED
@@ -16,27 +16,27 @@ class DynamicFormI18nTest < Test::Unit::TestCase
|
|
16
16
|
|
17
17
|
stubs(:content_tag).returns 'content_tag'
|
18
18
|
|
19
|
-
I18n.stubs(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').returns "1 error prohibited this from being saved"
|
20
|
-
I18n.stubs(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).returns 'There were problems with the following fields:'
|
19
|
+
I18n.stubs(:t).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').returns "1 error prohibited this from being saved"
|
20
|
+
I18n.stubs(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).returns 'There were problems with the following fields:'
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_error_messages_for_given_a_header_option_it_does_not_translate_header_message
|
24
|
-
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').never
|
24
|
+
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').never
|
25
25
|
error_messages_for(:object => @object, :header_message => 'header message', :locale => 'en')
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_error_messages_for_given_no_header_option_it_translates_header_message
|
29
|
-
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').returns 'header message'
|
29
|
+
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:activerecord, :errors, :template], :count => 1, :model => '').returns 'header message'
|
30
30
|
error_messages_for(:object => @object, :locale => 'en')
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_error_messages_for_given_a_message_option_it_does_not_translate_message
|
34
|
-
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).never
|
34
|
+
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).never
|
35
35
|
error_messages_for(:object => @object, :message => 'message', :locale => 'en')
|
36
36
|
end
|
37
37
|
|
38
38
|
def test_error_messages_for_given_no_message_option_it_translates_message
|
39
|
-
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).returns 'There were problems with the following fields:'
|
39
|
+
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:activerecord, :errors, :template]).returns 'There were problems with the following fields:'
|
40
40
|
error_messages_for(:object => @object, :locale => 'en')
|
41
41
|
end
|
42
42
|
end
|
data/test/dynamic_form_test.rb
CHANGED
@@ -166,7 +166,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
166
166
|
|
167
167
|
def test_form_with_string
|
168
168
|
assert_dom_equal(
|
169
|
-
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
169
|
+
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><p><label for="post_title">Title</label><br /><input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /></p>\n<p><label for="post_body">Body</label><br /><div class="field_with_errors"><textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea></div></p><input name="commit" type="submit" value="Create" /></form>),
|
170
170
|
form("post")
|
171
171
|
)
|
172
172
|
|
@@ -179,7 +179,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
179
179
|
end
|
180
180
|
|
181
181
|
assert_dom_equal(
|
182
|
-
%(<form accept-charset="UTF-8" action="update/1" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
182
|
+
%(<form accept-charset="UTF-8" action="update/1" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><input id="post_id" name="post[id]" type="hidden" value="1" /><p><label for="post_title">Title</label><br /><input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /></p>\n<p><label for="post_body">Body</label><br /><div class="field_with_errors"><textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea></div></p><input name="commit" type="submit" value="Update" /></form>),
|
183
183
|
form("post")
|
184
184
|
)
|
185
185
|
end
|
@@ -189,14 +189,14 @@ class DynamicFormTest < ActionView::TestCase
|
|
189
189
|
@request_forgery_protection_token = 'authenticity_token'
|
190
190
|
@form_authenticity_token = '123'
|
191
191
|
assert_dom_equal(
|
192
|
-
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
192
|
+
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input type='hidden' name='authenticity_token' value='123' /></div><p><label for="post_title">Title</label><br /><input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /></p>\n<p><label for="post_body">Body</label><br /><div class="field_with_errors"><textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea></div></p><input name="commit" type="submit" value="Create" /></form>),
|
193
193
|
form("post")
|
194
194
|
)
|
195
195
|
end
|
196
196
|
|
197
197
|
def test_form_with_method_option
|
198
198
|
assert_dom_equal(
|
199
|
-
%(<form accept-charset="UTF-8" action="create" method="get"><div style="margin:0;padding:0;display:inline"><input name="
|
199
|
+
%(<form accept-charset="UTF-8" action="create" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><p><label for="post_title">Title</label><br /><input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /></p>\n<p><label for="post_body">Body</label><br /><div class="field_with_errors"><textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea></div></p><input name="commit" type="submit" value="Create" /></form>),
|
200
200
|
form("post", :method=>'get')
|
201
201
|
)
|
202
202
|
end
|
@@ -214,7 +214,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
214
214
|
end
|
215
215
|
|
216
216
|
assert_dom_equal(
|
217
|
-
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
217
|
+
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><p><label for="post_written_on">Written on</label><br /><select id="post_written_on_1i" name="post[written_on(1i)]">\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n</select>\n<select id="post_written_on_2i" name="post[written_on(2i)]">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select id="post_written_on_3i" name="post[written_on(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n</p><input name="commit" type="submit" value="Create" /></form>),
|
218
218
|
form("post")
|
219
219
|
)
|
220
220
|
end
|
@@ -226,7 +226,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
226
226
|
@post.written_on = Time.gm(2004, 6, 15, 16, 30)
|
227
227
|
|
228
228
|
assert_dom_equal(
|
229
|
-
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
229
|
+
%(<form accept-charset="UTF-8" action="create" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><p><label for="post_written_on">Written on</label><br /><select id="post_written_on_1i" name="post[written_on(1i)]">\n<option value="1999">1999</option>\n<option value="2000">2000</option>\n<option value="2001">2001</option>\n<option value="2002">2002</option>\n<option value="2003">2003</option>\n<option value="2004" selected="selected">2004</option>\n<option value="2005">2005</option>\n<option value="2006">2006</option>\n<option value="2007">2007</option>\n<option value="2008">2008</option>\n<option value="2009">2009</option>\n</select>\n<select id="post_written_on_2i" name="post[written_on(2i)]">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6" selected="selected">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n</select>\n<select id="post_written_on_3i" name="post[written_on(3i)]">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15" selected="selected">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n</select>\n — <select id="post_written_on_4i" name="post[written_on(4i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n</select>\n : <select id="post_written_on_5i" name="post[written_on(5i)]">\n<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30" selected="selected">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n</select>\n</p><input name="commit" type="submit" value="Create" /></form>),
|
230
230
|
form("post")
|
231
231
|
)
|
232
232
|
end
|
@@ -332,7 +332,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
332
332
|
|
333
333
|
def test_form_with_string_multipart
|
334
334
|
assert_dom_equal(
|
335
|
-
%(<form accept-charset="UTF-8" action="create" enctype="multipart/form-data" method="post"><div style="margin:0;padding:0;display:inline"><input name="
|
335
|
+
%(<form accept-charset="UTF-8" action="create" enctype="multipart/form-data" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div><p><label for="post_title">Title</label><br /><input id="post_title" name="post[title]" size="30" type="text" value="Hello World" /></p>\n<p><label for="post_body">Body</label><br /><div class="field_with_errors"><textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea></div></p><input name="commit" type="submit" value="Create" /></form>),
|
336
336
|
form("post", :multipart => true)
|
337
337
|
)
|
338
338
|
end
|
@@ -344,7 +344,7 @@ class DynamicFormTest < ActionView::TestCase
|
|
344
344
|
end
|
345
345
|
|
346
346
|
expected = %(<form accept-charset="UTF-8" class="post_new" method="post" action="" id="post_new">) +
|
347
|
-
%(<div style="margin:0;padding:0;display:inline"><input name="
|
347
|
+
%(<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>) +
|
348
348
|
%(<div class="formError">can't be empty</div>) +
|
349
349
|
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
350
350
|
%(</form>)
|
@@ -362,11 +362,17 @@ class DynamicFormTest < ActionView::TestCase
|
|
362
362
|
end
|
363
363
|
|
364
364
|
expected = %(<form accept-charset="UTF-8" class="post_new" method="post" action="" id="post_new">) +
|
365
|
-
%(<div style="margin:0;padding:0;display:inline"><input name="
|
365
|
+
%(<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>) +
|
366
366
|
%(<div class="formError">can't be empty</div>) +
|
367
367
|
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
368
368
|
%(</form>)
|
369
369
|
|
370
370
|
assert_dom_equal expected, output_buffer
|
371
371
|
end
|
372
|
+
|
373
|
+
def test_error_messages_without_prefixed_attribute_name
|
374
|
+
error = error_messages_for(@post)
|
375
|
+
assert_dom_equal %(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>),
|
376
|
+
error
|
377
|
+
end
|
372
378
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_form
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
8
|
+
- 1
|
9
|
+
- 4
|
10
|
+
version: 1.1.4
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Joel Moss
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
+
date: 2011-04-08 00:00:00 +01:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,32 +26,34 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
version: "0"
|
31
33
|
type: :development
|
32
34
|
version_requirements: *id001
|
33
|
-
description: DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for
|
35
|
+
description: DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for. It also brings in the functionality of the custom-err-messages plugin, which provides more flexibility over your model error messages.
|
34
36
|
email: joel@developwithstyle.com
|
35
37
|
executables: []
|
36
38
|
|
37
39
|
extensions: []
|
38
40
|
|
39
41
|
extra_rdoc_files:
|
40
|
-
- README
|
42
|
+
- README.md
|
41
43
|
files:
|
42
44
|
- .gitignore
|
43
45
|
- Gemfile
|
44
46
|
- Gemfile.lock
|
45
47
|
- MIT-LICENSE
|
46
|
-
- README
|
48
|
+
- README.md
|
47
49
|
- Rakefile
|
48
50
|
- VERSION
|
49
|
-
- dynamic-form.gemspec
|
50
51
|
- dynamic_form.gemspec
|
51
52
|
- init.rb
|
52
53
|
- lib/action_view/helpers/dynamic_form.rb
|
53
54
|
- lib/action_view/locale/en.yml
|
55
|
+
- lib/active_model/dynamic_errors.rb
|
56
|
+
- lib/active_model/locale/en.yml
|
54
57
|
- lib/dynamic_form.rb
|
55
58
|
- test/dynamic_form_i18n_test.rb
|
56
59
|
- test/dynamic_form_test.rb
|
@@ -69,6 +72,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
72
|
requirements:
|
70
73
|
- - ">="
|
71
74
|
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
72
76
|
segments:
|
73
77
|
- 0
|
74
78
|
version: "0"
|
@@ -77,6 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
81
|
requirements:
|
78
82
|
- - ">="
|
79
83
|
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
80
85
|
segments:
|
81
86
|
- 0
|
82
87
|
version: "0"
|
data/README
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
DynamicForm
|
2
|
-
===========
|
3
|
-
|
4
|
-
DynamicForm holds a few helpers method to help you deal with your models, they are:
|
5
|
-
|
6
|
-
* input(record, method, options = {})
|
7
|
-
* form(record, options = {})
|
8
|
-
* error_message_on(object, method, options={})
|
9
|
-
* error_messages_for(record, options={})
|
10
|
-
|
11
|
-
It also adds f.error_messages and f.error_messages_on to your form builders.
|
12
|
-
|
13
|
-
Copyright (c) 2010 David Heinemeier Hansson, released under the MIT license
|
data/dynamic-form.gemspec
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{dynamic-form}
|
8
|
-
s.version = "1.0.0"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Joel Moss"]
|
12
|
-
s.date = %q{2010-08-09}
|
13
|
-
s.description = %q{DynamicForm holds a few helper methods to help you deal with your Rails3 models. It includes the stripped out methods from Rails 2; error_message_on and error_messages_for}
|
14
|
-
s.email = %q{joel@developwithstyle.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".gitignore",
|
20
|
-
"Gemfile",
|
21
|
-
"Gemfile.lock",
|
22
|
-
"MIT-LICENSE",
|
23
|
-
"README",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"dynamic-form.gemspec",
|
27
|
-
"init.rb",
|
28
|
-
"lib/action_view/helpers/dynamic_form.rb",
|
29
|
-
"lib/action_view/locale/en.yml",
|
30
|
-
"test/dynamic_form_i18n_test.rb",
|
31
|
-
"test/dynamic_form_test.rb",
|
32
|
-
"test/test_helper.rb"
|
33
|
-
]
|
34
|
-
s.homepage = %q{http://codaset.com/joelmoss/dynamic-form}
|
35
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
36
|
-
s.require_paths = ["lib"]
|
37
|
-
s.rubygems_version = %q{1.3.7}
|
38
|
-
s.summary = %q{DynamicForm holds a few helper methods to help you deal with your Rails3 models}
|
39
|
-
s.test_files = [
|
40
|
-
"test/dynamic_form_i18n_test.rb",
|
41
|
-
"test/dynamic_form_test.rb",
|
42
|
-
"test/test_helper.rb"
|
43
|
-
]
|
44
|
-
|
45
|
-
if s.respond_to? :specification_version then
|
46
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
-
s.specification_version = 3
|
48
|
-
|
49
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
-
s.add_development_dependency(%q<mocha>, [">= 0"])
|
51
|
-
else
|
52
|
-
s.add_dependency(%q<mocha>, [">= 0"])
|
53
|
-
end
|
54
|
-
else
|
55
|
-
s.add_dependency(%q<mocha>, [">= 0"])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|