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.
- data/lib/erb_form/builder.rb +37 -22
- data/lib/erb_form/version.rb +1 -1
- data/spec/test_app/Gemfile +1 -1
- data/spec/test_app/app/views/blogs/extra_options_field.html +3 -0
- data/spec/test_app/app/views/blogs/render_field_with_extra_options.html.erb +8 -0
- data/spec/test_app/app/views/blogs/{render_simple_form_with_options.html → render_simple_form_with_options.html.erb} +1 -1
- data/spec/test_app/spec/views/blogs/render_field_with_extra_options.html.erb_spec.rb +21 -0
- data/spec/test_app/spec/views/blogs/{render_simple_form_with_options.html.erb_spec → render_simple_form_with_options.html.erb_spec.rb} +1 -0
- metadata +13 -7
data/lib/erb_form/builder.rb
CHANGED
@@ -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
|
-
|
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
|
15
|
-
|
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
|
57
|
-
|
58
|
-
|
59
|
-
|
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 =
|
64
|
-
|
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
|
|
data/lib/erb_form/version.rb
CHANGED
data/spec/test_app/Gemfile
CHANGED
@@ -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.
|
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: &
|
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: *
|
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
|