erb_form 0.1.1 → 0.1.2

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.
@@ -4,15 +4,17 @@ module ErbForm
4
4
  raise ErbForm::DoubleRenderError.new(clean_backtrace(caller)), nil, clean_backtrace(caller) if recursing?
5
5
  @prevent_recursion = true
6
6
  @field_layout = options.delete(:layout)
7
- return render_field(field_template_path(attribute_name), attribute_name, options)
7
+ render_field(attribute_name, options)
8
8
  rescue ActionView::MissingTemplate => e
9
9
  raise ErbForm::MissingTemplate.new(field_layouts(attribute_name)), nil, clean_backtrace(e.backtrace)
10
10
  end
11
11
 
12
12
  private
13
13
 
14
- def recursing?
15
- !!@prevent_recursion
14
+ def clean_backtrace(backtrace)
15
+ unless backtrace[0].scan(__FILE__).size > 0
16
+ backtrace = backtrace.collect { |line| line.scan(__FILE__).size > 0 ? nil : line }.compact!
17
+ end
16
18
  end
17
19
 
18
20
  def field_layouts(attribute_name)
@@ -30,19 +32,6 @@ module ErbForm
30
32
  }
31
33
  end
32
34
 
33
- def render_field(field_template_path, attribute_name, options)
34
- output = template.render(:file => '/' + (field_template_path || 'a_non_existant_file_to_force_a_missing_template_error'), :locals => {
35
- :form => self,
36
- :attribute_name => attribute_name,
37
- :error_options => simplify_options(:error, options),
38
- :hint_options => simplify_options(:hint, options),
39
- :input_options => simplify_options(:input, options),
40
- :label_options => simplify_options(:label, options)
41
- })
42
- @prevent_recursion = false
43
- output
44
- end
45
-
46
35
  def field_template_path(attribute_name)
47
36
  field_layouts(attribute_name).detect { |template_file|
48
37
  template.view_paths.exists?(template_file, '', false, {
@@ -53,15 +42,41 @@ module ErbForm
53
42
  }
54
43
  end
55
44
 
56
- def clean_backtrace(backtrace)
57
- unless backtrace[0].scan(__FILE__).size > 0
58
- backtrace = backtrace.collect { |line| line.scan(__FILE__).size > 0 ? nil : line }.compact!
59
- end
45
+ def field_template_file(attribute_name)
46
+ '/' + (field_template_path(attribute_name) || 'a_non_existant_file_to_force_a_missing_template_error')
47
+ end
48
+
49
+ def locals(attribute_name, options)
50
+ options.except(:form, :attribute_name, :error, :hint, :input, :label).tap { |o|
51
+ o[:form] = self
52
+ o[:attribute_name] = attribute_name
53
+ o[:error_options] = simplify_options(:error, options)
54
+ o[:hint_options] = simplify_options(:hint, options)
55
+ o[:input_options] = simplify_options(:input, options)
56
+ o[:label_options] = simplify_options(:label, options)
57
+ }
58
+ end
59
+
60
+ def recursing?
61
+ !!@prevent_recursion
62
+ end
63
+
64
+ def render_field(attribute_name, options)
65
+ output = template.render(:file => field_template_file(attribute_name), :locals => locals(attribute_name, options))
66
+ @prevent_recursion = false
67
+ output
60
68
  end
61
69
 
62
70
  def simplify_options(key, options = {})
63
- newkey = key == :error ? :error_prefix : key
64
- options[key].is_a?(Hash) ? options[key] : { newkey => (options[key]) }
71
+ newkey = case key
72
+ when :error
73
+ :error_prefix
74
+ when :input
75
+ :input_html
76
+ else
77
+ key
78
+ end
79
+ options[key].is_a?(Hash) && newkey == key ? options[key] : { newkey => (options[key]) }
65
80
  end
66
81
  end
67
82
 
@@ -1,3 +1,3 @@
1
1
  module ErbForm
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -2,7 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.0.9'
4
4
  gem 'sqlite3'
5
- gem 'erb_form', '0.1.1', :path => '../..'
5
+ gem 'erb_form', :path => '../..'
6
6
  gem 'simple_form', :git => 'git://github.com/plataformatec/simple_form'
7
7
 
8
8
  group :development , :test do
@@ -0,0 +1,3 @@
1
+ <div class="extra_options_field">
2
+ <%= custom %>
3
+ </div>
@@ -0,0 +1,8 @@
1
+ <%= form_for(@blog) do |f| %>
2
+ <fieldset>
3
+ <%= f.field :name, {
4
+ :layout => 'extra_options',
5
+ :custom => 'My extra options as locals' }
6
+ %>
7
+ </fieldset>
8
+ <% end %>
@@ -4,7 +4,7 @@
4
4
  :layout => 'simple_form',
5
5
  :error => 'My custom error',
6
6
  :hint => 'My custom hint',
7
- :input => 'My custom input',
7
+ :input => {:size => 5},
8
8
  :label => 'My custom label' }
9
9
  %>
10
10
  </fieldset>
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe "blogs/render_field_with_extra_options" do
4
+ before(:each) do
5
+ assign(:blog, stub_model(Blog,
6
+ :name => "",
7
+ ).as_new_record)
8
+ end
9
+
10
+ describe "when there are extra options" do
11
+ it "finds the correct layout file" do
12
+ render
13
+ rendered.should have_selector "div", :class => "extra_options_field"
14
+ end
15
+
16
+ it "passes them thru as locals" do
17
+ render
18
+ rendered.should contain "My extra options as locals"
19
+ end
20
+ end
21
+ end
@@ -25,6 +25,7 @@ describe "blogs/render_simple_form_with_options" do
25
25
  render
26
26
  rendered.should have_selector "input", :class => "string required"
27
27
  rendered.should have_selector "input", :placeholder => "type your name here (in english)"
28
+ rendered.should have_selector "input", :size => '5'
28
29
  end
29
30
 
30
31
  it "renders the hint" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erb_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: simple_form
16
- requirement: &2153822240 !ruby/object:Gem::Requirement
16
+ requirement: &2156007040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 2.0.0.rc
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153822240
24
+ version_requirements: *2156007040
25
25
  description: Wrap form helper methods in re-usable erb templates.
26
26
  email:
27
27
  - 23inhouse@gmail.com
@@ -47,14 +47,16 @@ files:
47
47
  - spec/test_app/app/models/blog.rb
48
48
  - spec/test_app/app/views/blogs/double_render_error.html.erb
49
49
  - spec/test_app/app/views/blogs/double_render_field.html.erb
50
+ - spec/test_app/app/views/blogs/extra_options_field.html
50
51
  - spec/test_app/app/views/blogs/find_defaults.html.erb
51
52
  - spec/test_app/app/views/blogs/find_layouts.html.erb
52
53
  - spec/test_app/app/views/blogs/legacy_field.html.erb
53
54
  - spec/test_app/app/views/blogs/missing_attribute_template_error.html.erb
54
55
  - spec/test_app/app/views/blogs/missing_layout_template_error.html.erb
55
56
  - spec/test_app/app/views/blogs/name_field.html.erb
57
+ - spec/test_app/app/views/blogs/render_field_with_extra_options.html.erb
56
58
  - spec/test_app/app/views/blogs/render_multiple_layouts.html.erb
57
- - spec/test_app/app/views/blogs/render_simple_form_with_options.html
59
+ - spec/test_app/app/views/blogs/render_simple_form_with_options.html.erb
58
60
  - spec/test_app/app/views/blogs/render_with_simple_form.html.erb
59
61
  - spec/test_app/app/views/blogs/simple_form_field.html.erb
60
62
  - spec/test_app/app/views/forms/default/field.html.erb
@@ -88,8 +90,9 @@ files:
88
90
  - spec/test_app/spec/views/blogs/find_layouts.html.erb_spec.rb
89
91
  - spec/test_app/spec/views/blogs/missing_attribute_template_error.html.erb_spec.rb
90
92
  - spec/test_app/spec/views/blogs/missing_layout_template_error.html.erb_spec.rb
93
+ - spec/test_app/spec/views/blogs/render_field_with_extra_options.html.erb_spec.rb
91
94
  - spec/test_app/spec/views/blogs/render_multiple_layouts.html.erb_spec.rb
92
- - spec/test_app/spec/views/blogs/render_simple_form_with_options.html.erb_spec
95
+ - spec/test_app/spec/views/blogs/render_simple_form_with_options.html.erb_spec.rb
93
96
  - spec/test_app/spec/views/blogs/render_with_simple_form.html.erb_spec.rb
94
97
  homepage: ''
95
98
  licenses: []
@@ -127,14 +130,16 @@ test_files:
127
130
  - spec/test_app/app/models/blog.rb
128
131
  - spec/test_app/app/views/blogs/double_render_error.html.erb
129
132
  - spec/test_app/app/views/blogs/double_render_field.html.erb
133
+ - spec/test_app/app/views/blogs/extra_options_field.html
130
134
  - spec/test_app/app/views/blogs/find_defaults.html.erb
131
135
  - spec/test_app/app/views/blogs/find_layouts.html.erb
132
136
  - spec/test_app/app/views/blogs/legacy_field.html.erb
133
137
  - spec/test_app/app/views/blogs/missing_attribute_template_error.html.erb
134
138
  - spec/test_app/app/views/blogs/missing_layout_template_error.html.erb
135
139
  - spec/test_app/app/views/blogs/name_field.html.erb
140
+ - spec/test_app/app/views/blogs/render_field_with_extra_options.html.erb
136
141
  - spec/test_app/app/views/blogs/render_multiple_layouts.html.erb
137
- - spec/test_app/app/views/blogs/render_simple_form_with_options.html
142
+ - spec/test_app/app/views/blogs/render_simple_form_with_options.html.erb
138
143
  - spec/test_app/app/views/blogs/render_with_simple_form.html.erb
139
144
  - spec/test_app/app/views/blogs/simple_form_field.html.erb
140
145
  - spec/test_app/app/views/forms/default/field.html.erb
@@ -168,6 +173,7 @@ test_files:
168
173
  - spec/test_app/spec/views/blogs/find_layouts.html.erb_spec.rb
169
174
  - spec/test_app/spec/views/blogs/missing_attribute_template_error.html.erb_spec.rb
170
175
  - spec/test_app/spec/views/blogs/missing_layout_template_error.html.erb_spec.rb
176
+ - spec/test_app/spec/views/blogs/render_field_with_extra_options.html.erb_spec.rb
171
177
  - spec/test_app/spec/views/blogs/render_multiple_layouts.html.erb_spec.rb
172
- - spec/test_app/spec/views/blogs/render_simple_form_with_options.html.erb_spec
178
+ - spec/test_app/spec/views/blogs/render_simple_form_with_options.html.erb_spec.rb
173
179
  - spec/test_app/spec/views/blogs/render_with_simple_form.html.erb_spec.rb