dynamic_form 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
- .bundle
1
+ .bundle
2
+ pkg
@@ -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://codaset.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.0.0
1
+ 1.1.1
@@ -5,29 +5,30 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dynamic_form}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.1"
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
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}
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",
@@ -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'
@@ -0,0 +1,4 @@
1
+ en:
2
+ errors:
3
+ # The default format to use in full dynamic error messages.
4
+ dynamic_format: "%{message}"
@@ -1,3 +1,4 @@
1
+ require "active_model/dynamic_errors"
1
2
  require 'action_view/helpers/dynamic_form'
2
3
 
3
4
  class ActionView::Base
@@ -369,4 +369,10 @@ class DynamicFormTest < ActionView::TestCase
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
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 0
8
- - 0
9
- version: 1.0.0
7
+ - 1
8
+ - 1
9
+ version: 1.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joel Moss
@@ -30,27 +30,28 @@ dependencies:
30
30
  version: "0"
31
31
  type: :development
32
32
  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
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. It also brings in the functionality of the custom-err-messages plugin, which provides more flexibility over your model error messages.
34
34
  email: joel@developwithstyle.com
35
35
  executables: []
36
36
 
37
37
  extensions: []
38
38
 
39
39
  extra_rdoc_files:
40
- - README
40
+ - README.md
41
41
  files:
42
42
  - .gitignore
43
43
  - Gemfile
44
44
  - Gemfile.lock
45
45
  - MIT-LICENSE
46
- - README
46
+ - README.md
47
47
  - Rakefile
48
48
  - VERSION
49
- - dynamic-form.gemspec
50
49
  - dynamic_form.gemspec
51
50
  - init.rb
52
51
  - lib/action_view/helpers/dynamic_form.rb
53
52
  - lib/action_view/locale/en.yml
53
+ - lib/active_model/dynamic_errors.rb
54
+ - lib/active_model/locale/en.yml
54
55
  - lib/dynamic_form.rb
55
56
  - test/dynamic_form_i18n_test.rb
56
57
  - test/dynamic_form_test.rb
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
@@ -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
-