erb_form 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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