drogus-merb-sexy-forms 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/TODO +4 -0
- data/lib/merb-sexy-forms.rb +2 -2
- data/lib/merb-sexy-forms/builder.rb +123 -45
- data/lib/merb-sexy-forms/form.rb +23 -1
- data/spec/fixture/app/controllers/sexy_form_for.rb +2 -0
- data/spec/fixture/app/models/first_generic_fake_model.rb +58 -0
- data/spec/fixture/app/views/sexy_form_for_specs/additional_options.html.erb +6 -0
- data/spec/fixture/app/views/sexy_form_for_specs/append_attributes.html.erb +7 -0
- data/spec/fixture/app/views/sexy_form_for_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/sexy_form_for_specs/before_after_field.html.erb +6 -0
- data/spec/fixture/app/views/sexy_form_for_specs/blocks.html.erb +23 -0
- data/spec/fixture/app/views/sexy_form_for_specs/label_choice_class.html.erb +4 -0
- data/spec/fixture/app/views/sexy_form_for_specs/with_labels.html.erb +3 -0
- data/spec/fixture/app/views/sexy_form_specs/additional_options.html.erb +3 -0
- data/spec/fixture/app/views/sexy_form_specs/append_attributes.html.erb +3 -0
- data/spec/fixture/app/views/sexy_form_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/sexy_form_specs/before_after_field.html.erb +6 -0
- data/spec/fixture/app/views/sexy_form_specs/blocks.html.erb +23 -0
- data/spec/merb_test.log +93 -0
- data/spec/sexy_form_for_spec.rb +80 -0
- data/spec/sexy_form_spec.rb +79 -0
- metadata +21 -4
- data/spec/merb-sexy-forms-form_spec.rb +0 -29
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ require "spec/rake/spectask"
|
|
10
10
|
require 'lib/merb-sexy-forms/merbtasks.rb'
|
11
11
|
|
12
12
|
GEM_NAME = "merb-sexy-forms"
|
13
|
-
GEM_VERSION = "0.0.
|
13
|
+
GEM_VERSION = "0.0.4"
|
14
14
|
AUTHOR = "Piotr Sarnacki"
|
15
15
|
EMAIL = "drogus@gmail.com"
|
16
16
|
HOMEPAGE = ""
|
@@ -28,7 +28,7 @@ spec = Gem::Specification.new do |s|
|
|
28
28
|
s.author = AUTHOR
|
29
29
|
s.email = EMAIL
|
30
30
|
s.homepage = HOMEPAGE
|
31
|
-
s.add_dependency('merb', '>= 1.0.
|
31
|
+
s.add_dependency('merb', '>= 1.0.7.1')
|
32
32
|
s.require_path = 'lib'
|
33
33
|
s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec,assets}/**/*")
|
34
34
|
|
data/TODO
CHANGED
data/lib/merb-sexy-forms.rb
CHANGED
@@ -3,7 +3,7 @@ if defined?(Merb::Plugins)
|
|
3
3
|
|
4
4
|
# Merb gives you a Merb::Plugins.config hash...feel free to put your stuff in your piece of it
|
5
5
|
Merb::Plugins.config[:merb_sexy_forms] = {
|
6
|
-
:
|
6
|
+
:container_tag => "li"
|
7
7
|
}
|
8
8
|
|
9
9
|
Merb::BootLoader.before_app_loads do
|
@@ -17,4 +17,4 @@ if defined?(Merb::Plugins)
|
|
17
17
|
end
|
18
18
|
|
19
19
|
Merb::Plugins.add_rakefiles "merb-sexy-forms/merbtasks"
|
20
|
-
end
|
20
|
+
end
|
@@ -2,98 +2,108 @@ module Merb::Helpers::SexyForm
|
|
2
2
|
module Builder
|
3
3
|
class Base < Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
|
4
4
|
def form(attrs = {}, &blk)
|
5
|
-
ul_options = attrs.delete(:ul)
|
6
5
|
add_css_class(attrs, "sexy")
|
7
6
|
super(attrs) do
|
8
7
|
captured = @origin.capture(&blk)
|
9
|
-
|
8
|
+
add_main_container(captured, attrs)
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
first = attrs.delete(:first)
|
18
|
-
method = attrs.delete(:method)
|
19
|
-
|
20
|
-
if first && (attrs[:id] || method)
|
21
|
-
if method
|
22
|
-
id = method ? "#{@name}_#{method}" : attrs[:id]
|
23
|
-
end
|
24
|
-
label_id = "#{id}_#{first[:value]}"
|
25
|
-
else
|
26
|
-
label_id = attrs[:id]
|
27
|
-
end
|
28
|
-
|
29
|
-
label = attrs.delete(:label)
|
30
|
-
if label && !label.is_a?(Hash)
|
31
|
-
label = {:label => {:title => label}}
|
32
|
-
end
|
33
|
-
if label.is_a?(Hash)
|
34
|
-
label[:label].merge!({:class => "main", :for => label_id})
|
35
|
-
end
|
36
|
-
label = label(label)
|
37
|
-
|
38
|
-
if container == false
|
39
|
-
content = label + content
|
12
|
+
def add_main_container(content, attrs)
|
13
|
+
ul_options = attrs.delete(:ul)
|
14
|
+
if Merb::Plugins.config[:merb_sexy_forms][:container_tag] == "li"
|
15
|
+
tag(:ul, content, ul_options)
|
40
16
|
else
|
41
|
-
content = label + tag(:div, content, container)
|
42
|
-
end
|
43
|
-
|
44
|
-
if li == false
|
45
17
|
content
|
46
|
-
else
|
47
|
-
li = li || {}
|
48
|
-
li.merge!(:id => "#{attrs[:id]}_container") if attrs[:id] and li[:id].blank?
|
49
|
-
tag(:li, content, li)
|
50
18
|
end
|
51
19
|
end
|
52
20
|
|
21
|
+
def wrap_with_container(attrs = {}, content = "")
|
22
|
+
content = add_html_to_field(content, attrs)
|
23
|
+
content = add_field_wrapper(content, attrs)
|
24
|
+
content = add_main_label(content, attrs)
|
25
|
+
content = add_container(content, attrs)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
53
29
|
%w(text password file).each do |kind|
|
54
30
|
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
55
|
-
def unbound_#{kind}_field(attrs = {})
|
31
|
+
def unbound_#{kind}_field(attrs = {}, &blk)
|
32
|
+
yield(attrs) if block_given?
|
56
33
|
label = attrs.delete(:label)
|
57
34
|
wrap_with_container(attrs.merge(:label => label), super(clean_args!(attrs)))
|
58
35
|
end
|
36
|
+
|
37
|
+
def bound_#{kind}_field(method, attrs = {}, &blk)
|
38
|
+
yield(attrs) if block_given?
|
39
|
+
super
|
40
|
+
end
|
59
41
|
RUBY
|
60
42
|
end
|
61
43
|
|
62
44
|
def unbound_check_box(attrs = {})
|
45
|
+
yield(attrs) if block_given?
|
63
46
|
update_label_options(attrs, "radio")
|
64
47
|
wrap_with_container(attrs.merge(:label => nil),
|
65
48
|
super(clean_args!(attrs)))
|
66
49
|
end
|
67
50
|
|
51
|
+
def bound_check_box(method, attrs = {}, &blk)
|
52
|
+
yield(attrs) if block_given?
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
68
56
|
def unbound_radio_button(attrs = {})
|
57
|
+
yield(attrs) if block_given?
|
69
58
|
update_label_options(attrs, "radio")
|
70
59
|
wrap_with_container(attrs.merge(:label => nil),
|
71
60
|
super(clean_args!(attrs)))
|
72
61
|
end
|
73
62
|
|
63
|
+
def bound_radio_button(method, attrs = {}, &blk)
|
64
|
+
yield(attrs) if block_given?
|
65
|
+
super
|
66
|
+
end
|
67
|
+
|
74
68
|
def bound_radio_group(method, arr, global_attrs = {})
|
69
|
+
yield(attrs) if block_given?
|
75
70
|
first = arr.first
|
76
71
|
wrap_with_container(global_attrs.merge(:first => first, :method => method), super(method, arr))
|
77
72
|
end
|
78
73
|
|
79
74
|
def unbound_radio_group(arr, global_attrs = {})
|
75
|
+
yield(attrs) if block_given?
|
80
76
|
wrap_with_container(global_attrs, super(arr))
|
81
77
|
end
|
82
78
|
|
83
79
|
def unbound_select(attrs = {})
|
80
|
+
yield(attrs) if block_given?
|
84
81
|
wrap_with_container(attrs, super(clean_args!(attrs)))
|
85
82
|
end
|
86
83
|
|
84
|
+
def bound_select(method, attrs = {}, &blk)
|
85
|
+
yield(attrs) if block_given?
|
86
|
+
super
|
87
|
+
end
|
88
|
+
|
87
89
|
def unbound_text_area(contents, attrs = {})
|
90
|
+
yield(attrs) if block_given?
|
88
91
|
label = attrs.delete(:label)
|
89
92
|
wrap_with_container(attrs.merge(:label => label), super(clean_args!(attrs)))
|
90
93
|
end
|
91
94
|
|
95
|
+
def bound_text_area(method, attrs = {}, &blk)
|
96
|
+
yield(attrs) if block_given?
|
97
|
+
super
|
98
|
+
end
|
99
|
+
|
92
100
|
def button(contents, attrs = {})
|
101
|
+
yield(attrs) if block_given?
|
93
102
|
wrap_with_container(attrs, super(contents, clean_args!(attrs)))
|
94
103
|
end
|
95
104
|
|
96
105
|
def submit(value, attrs = {})
|
106
|
+
yield(attrs) if block_given?
|
97
107
|
wrap_with_container(attrs, super(value, clean_args!(attrs)))
|
98
108
|
end
|
99
109
|
|
@@ -110,8 +120,10 @@ module Merb::Helpers::SexyForm
|
|
110
120
|
|
111
121
|
def clean_args!(attrs)
|
112
122
|
new_attrs = attrs.dup
|
113
|
-
new_attrs.delete(:
|
123
|
+
new_attrs.delete(:wrapper)
|
114
124
|
new_attrs.delete(:container)
|
125
|
+
new_attrs.delete(:before)
|
126
|
+
new_attrs.delete(:after)
|
115
127
|
new_attrs
|
116
128
|
end
|
117
129
|
|
@@ -123,15 +135,81 @@ module Merb::Helpers::SexyForm
|
|
123
135
|
end
|
124
136
|
|
125
137
|
def process_form_attrs(attrs)
|
126
|
-
attrs[:id] = "#{@name}" unless attrs[:id] || @
|
138
|
+
attrs[:id] = "#{@name}" unless attrs[:id] || @obj.nil?
|
127
139
|
|
128
|
-
if
|
129
|
-
|
130
|
-
|
131
|
-
|
140
|
+
if @obj
|
141
|
+
if (@obj.respond_to?(:new_record?) && !@obj.new_record?) || (@obj.respond_to?(:new?) && !@obj.new?)
|
142
|
+
add_css_class(attrs, "edit")
|
143
|
+
else
|
144
|
+
add_css_class(attrs, "new")
|
145
|
+
end
|
132
146
|
end
|
133
147
|
super(attrs)
|
134
148
|
end
|
149
|
+
|
150
|
+
def add_main_label(content, attrs)
|
151
|
+
first = attrs.delete(:first)
|
152
|
+
method = attrs.delete(:method)
|
153
|
+
|
154
|
+
if first && (attrs[:id] || method)
|
155
|
+
if method && @obj
|
156
|
+
id = method ? "#{@name}_#{method}" : attrs[:id]
|
157
|
+
end
|
158
|
+
label_for = "#{id}_#{first[:value]}"
|
159
|
+
else
|
160
|
+
label_for = attrs[:id]
|
161
|
+
end
|
162
|
+
|
163
|
+
label = attrs.delete(:label)
|
164
|
+
|
165
|
+
if label && !label.is_a?(Hash)
|
166
|
+
label = {:label => {:title => label}}
|
167
|
+
end
|
168
|
+
|
169
|
+
if label.is_a?(Hash)
|
170
|
+
label = label[:label]
|
171
|
+
label.merge!({:class => "main", :for => label_for})
|
172
|
+
end
|
173
|
+
|
174
|
+
label = label(label)
|
175
|
+
|
176
|
+
label + content
|
177
|
+
end
|
178
|
+
|
179
|
+
def add_container(content, attrs)
|
180
|
+
container = attrs.delete(:container)
|
181
|
+
|
182
|
+
if container == false
|
183
|
+
content
|
184
|
+
else
|
185
|
+
container = container || {}
|
186
|
+
container.merge!(:id => "#{attrs[:id]}_container") if attrs[:id] and container[:id].blank?
|
187
|
+
container_tag = Merb::Plugins.config[:merb_sexy_forms][:container_tag]
|
188
|
+
tag(container_tag, content, container)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def add_field_wrapper(content, attrs)
|
193
|
+
wrapper = attrs.delete(:wrapper)
|
194
|
+
if wrapper == false
|
195
|
+
content
|
196
|
+
else
|
197
|
+
tag(:div, content, wrapper)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def add_html_to_field(content, attrs)
|
202
|
+
before = attrs.delete(:before)
|
203
|
+
after = attrs.delete(:after)
|
204
|
+
|
205
|
+
if before
|
206
|
+
content = before + content
|
207
|
+
end
|
208
|
+
if after
|
209
|
+
content = content + after
|
210
|
+
end
|
211
|
+
content
|
212
|
+
end
|
135
213
|
end
|
136
214
|
end
|
137
|
-
end
|
215
|
+
end
|
data/lib/merb-sexy-forms/form.rb
CHANGED
@@ -17,4 +17,26 @@ module Merb::Helpers::Form
|
|
17
17
|
form_contexts.pop
|
18
18
|
ret
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
|
+
# monkey patching - need to do something about it
|
22
|
+
%w(text_field password_field hidden_field file_field
|
23
|
+
text_area select check_box radio_button radio_group).each do |kind|
|
24
|
+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
25
|
+
def #{kind}(*args, &blk)
|
26
|
+
if bound?(*args)
|
27
|
+
current_form_context.bound_#{kind}(*args, &blk)
|
28
|
+
else
|
29
|
+
current_form_context.unbound_#{kind}(*args, &blk)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
RUBY
|
33
|
+
end
|
34
|
+
|
35
|
+
def submit(contents, attrs = {}, &blk)
|
36
|
+
current_form_context.submit(contents, attrs, &blk)
|
37
|
+
end
|
38
|
+
|
39
|
+
def button(contents, attrs = {}, &blk)
|
40
|
+
current_form_context.button(contents, attrs, &blk)
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class FakeModel
|
2
|
+
|
3
|
+
attr_accessor :vin, :make, :model
|
4
|
+
|
5
|
+
def self.columns
|
6
|
+
[FakeColumn.new(:foo, :string),
|
7
|
+
FakeColumn.new(:foobad, :string),
|
8
|
+
FakeColumn.new(:desc, :string),
|
9
|
+
FakeColumn.new(:bar, :integer),
|
10
|
+
FakeColumn.new(:barbad, :integer),
|
11
|
+
FakeColumn.new(:baz, :boolean),
|
12
|
+
FakeColumn.new(:bazbad, :boolean),
|
13
|
+
FakeColumn.new(:bat, :boolean),
|
14
|
+
FakeColumn.new(:batbad, :boolean),
|
15
|
+
FakeColumn.new(:foobar, :string)
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid?
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
def new_record?
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def errors
|
28
|
+
FakeErrors.new(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
def foo
|
32
|
+
"foowee"
|
33
|
+
end
|
34
|
+
alias_method :foobad, :foo
|
35
|
+
|
36
|
+
def bar
|
37
|
+
7
|
38
|
+
end
|
39
|
+
alias_method :barbad, :bar
|
40
|
+
|
41
|
+
def baz
|
42
|
+
true
|
43
|
+
end
|
44
|
+
alias_method :bazbad, :baz
|
45
|
+
|
46
|
+
def bat
|
47
|
+
false
|
48
|
+
end
|
49
|
+
alias_method :batbad, :bat
|
50
|
+
|
51
|
+
def nothing
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
'fake_model'
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= sexy_form_for(@obj, :ul => {:class => "ul_class"}) do %>
|
2
|
+
<%= text_field :foo do |c| %>
|
3
|
+
<% c[:class] = "text_class" %>
|
4
|
+
<% end =%>
|
5
|
+
<%= text_area :foo do |c| %>
|
6
|
+
<% c[:class] = "textarea_class" %>
|
7
|
+
<% end =%>
|
8
|
+
<%= check_box :baz do |c|%>
|
9
|
+
<% c[:class] = "checkbox_class" %>
|
10
|
+
<% end =%>
|
11
|
+
<%= radio_button :bat do |c|%>
|
12
|
+
<% c[:class] = "radio_class" %>
|
13
|
+
<% end =%>
|
14
|
+
<%= select :bar do |c|%>
|
15
|
+
<% c[:class] = "select_class" %>
|
16
|
+
<% end =%>
|
17
|
+
<%= button "contents" do |c| %>
|
18
|
+
<% c[:class] = "button_class" %>
|
19
|
+
<% end =%>
|
20
|
+
<%= submit "contents" do |c| %>
|
21
|
+
<% c[:class] = "submit_class" %>
|
22
|
+
<% end =%>
|
23
|
+
<% end =%>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= sexy_form(:ul => {:class => "ul_class"}) do %>
|
2
|
+
<%= text_field do |c|%>
|
3
|
+
<% c[:class] = "text_class" %>
|
4
|
+
<% end =%>
|
5
|
+
<%= text_area "content" do |c|%>
|
6
|
+
<% c[:class] = "textarea_class" %>
|
7
|
+
<% end =%>
|
8
|
+
<%= check_box do |c|%>
|
9
|
+
<% c[:class] = "checkbox_class" %>
|
10
|
+
<% end =%>
|
11
|
+
<%= radio_button do |c|%>
|
12
|
+
<% c[:class] = "radio_class" %>
|
13
|
+
<% end =%>
|
14
|
+
<%= select do |c|%>
|
15
|
+
<% c[:class] = "select_class" %>
|
16
|
+
<% end =%>
|
17
|
+
<%= button "contents" do |c| %>
|
18
|
+
<% c[:class] = "button_class" %>
|
19
|
+
<% end =%>
|
20
|
+
<%= submit "contents" do |c| %>
|
21
|
+
<% c[:class] = "submit_class" %>
|
22
|
+
<% end =%>
|
23
|
+
<% end =%>
|
data/spec/merb_test.log
CHANGED
@@ -1 +1,94 @@
|
|
1
1
|
Sat, 20 Dec 2008 13:41:20 GMT ~ info ~ Logfile created
|
2
|
+
~ Could not load ./spec/fixture/app/views/sexy_form_for.rb:
|
3
|
+
|
4
|
+
uninitialized constant SpecController - (NameError)
|
5
|
+
|
6
|
+
./spec/fixture/app/views/sexy_form_for.rb:1
|
7
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
|
8
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
|
9
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:863:in `load_file'
|
10
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1018:in `load_classes_with_requirements'
|
11
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `each'
|
12
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `load_classes_with_requirements'
|
13
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:903:in `load_classes'
|
14
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:641:in `run'
|
15
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
16
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
17
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:639:in `run'
|
18
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:99:in `run'
|
19
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:172:in `bootup'
|
20
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:42:in `start'
|
21
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:170:in `start'
|
22
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:183:in `start_environment'
|
23
|
+
./spec/spec_helper.rb:18
|
24
|
+
./spec/sexy_form_for_spec.rb:1:in `require'
|
25
|
+
./spec/sexy_form_for_spec.rb:1
|
26
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load'
|
27
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load_files'
|
28
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `each'
|
29
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `load_files'
|
30
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/options.rb:98:in `run_examples'
|
31
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/command_line.rb:10:in `run'
|
32
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/bin/spec:4
|
33
|
+
~ Could not load ./spec/fixture/app/views/sexy_form_for.rb:
|
34
|
+
|
35
|
+
uninitialized constant SpecController - (NameError)
|
36
|
+
|
37
|
+
./spec/fixture/app/views/sexy_form_for.rb:1
|
38
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
|
39
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
|
40
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:863:in `load_file'
|
41
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1018:in `load_classes_with_requirements'
|
42
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `each'
|
43
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `load_classes_with_requirements'
|
44
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:903:in `load_classes'
|
45
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:641:in `run'
|
46
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
47
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
48
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:639:in `run'
|
49
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:99:in `run'
|
50
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:172:in `bootup'
|
51
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:42:in `start'
|
52
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:170:in `start'
|
53
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:183:in `start_environment'
|
54
|
+
./spec/spec_helper.rb:18
|
55
|
+
./spec/sexy_form_for_spec.rb:1:in `require'
|
56
|
+
./spec/sexy_form_for_spec.rb:1
|
57
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load'
|
58
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load_files'
|
59
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `each'
|
60
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `load_files'
|
61
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/options.rb:98:in `run_examples'
|
62
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/command_line.rb:10:in `run'
|
63
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/bin/spec:4
|
64
|
+
~ Could not load ./spec/fixture/app/views/sexy_form_for.rb:
|
65
|
+
|
66
|
+
uninitialized constant SpecController - (NameError)
|
67
|
+
|
68
|
+
./spec/fixture/app/views/sexy_form_for.rb:1
|
69
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
|
70
|
+
/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
|
71
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:863:in `load_file'
|
72
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1018:in `load_classes_with_requirements'
|
73
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `each'
|
74
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:1015:in `load_classes_with_requirements'
|
75
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:903:in `load_classes'
|
76
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:641:in `run'
|
77
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
78
|
+
/usr/lib/ruby/gems/1.8/gems/extlib-0.9.9/lib/extlib/dictionary.rb:268:in `each'
|
79
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:639:in `run'
|
80
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/bootloader.rb:99:in `run'
|
81
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:172:in `bootup'
|
82
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core/server.rb:42:in `start'
|
83
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:170:in `start'
|
84
|
+
/usr/lib/ruby/gems/1.8/gems/merb-core-1.0.6.1/lib/merb-core.rb:183:in `start_environment'
|
85
|
+
./spec/spec_helper.rb:18
|
86
|
+
./spec/sexy_form_for_spec.rb:1:in `require'
|
87
|
+
./spec/sexy_form_for_spec.rb:1
|
88
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load'
|
89
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:14:in `load_files'
|
90
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `each'
|
91
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/example_group_runner.rb:13:in `load_files'
|
92
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/options.rb:98:in `run_examples'
|
93
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/lib/spec/runner/command_line.rb:10:in `run'
|
94
|
+
/usr/lib/ruby/gems/1.8/gems/rspec-1.1.11/bin/spec:4
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "sexy_form_for" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@c = SexyFormForSpecs.new(Merb::Request.new({}))
|
7
|
+
@c.instance_variable_set(:@obj, FakeModel.new)
|
8
|
+
@container = Merb::Plugins.config[:merb_sexy_forms][:container_tag]
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allow to pass block to any field and set hash contents inside" do
|
12
|
+
ret = @c.render(:blocks)
|
13
|
+
ret.should have_selector("form input[type=text].text_class")
|
14
|
+
ret.should have_selector("form input[type=submit].submit_class")
|
15
|
+
ret.should have_selector("form button.button_class")
|
16
|
+
ret.should have_selector("form input[type=radio].radio_class")
|
17
|
+
ret.should have_selector("form input[type=checkbox].checkbox_class")
|
18
|
+
ret.should have_selector("form select.select_class")
|
19
|
+
ret.should have_selector("form textarea.textarea_class")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should insert some html after and before field" do
|
23
|
+
ret = @c.render(:before_after_field)
|
24
|
+
ret.should have_selector("form span.before")
|
25
|
+
ret.should have_selector("form span.after")
|
26
|
+
|
27
|
+
ret.should_not have_selector("*[after], *[before]")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should append attributes to field" do
|
31
|
+
ret = @c.render(:append_attributes)
|
32
|
+
ret.should have_selector("form input#id.class")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not add options attrs" do
|
36
|
+
ret = @c.render(:additional_options)
|
37
|
+
ret.should_not have_selector("*[container], *[ul], *[wrapper]")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should add containers" do
|
41
|
+
ret = @c.render(:basic)
|
42
|
+
ret.should have_selector("form #{@container} > label")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should add ul if container tag is li" do
|
46
|
+
Merb::Plugins.config[:merb_sexy_forms][:container_tag] = "li"
|
47
|
+
ret = @c.render(:basic)
|
48
|
+
ret.should have_selector("form > ul")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should'nt add ul if container tag is not li" do
|
52
|
+
Merb::Plugins.config[:merb_sexy_forms][:container_tag] = "div"
|
53
|
+
ret = @c.render(:basic)
|
54
|
+
ret.should_not have_selector("form > ul")
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should add labels with field nested in container" do
|
58
|
+
ret = @c.render(:with_labels)
|
59
|
+
ret.should have_selector("form #{@container} > label")
|
60
|
+
ret.should have_selector("form #{@container} > div > input")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should add 'choice' class to labels for checkboxes or radio buttons" do
|
64
|
+
ret = @c.render(:label_choice_class)
|
65
|
+
ret.should have_selector("form div label[for=checkbox].choice")
|
66
|
+
ret.should have_selector("form div label[for=radio].choice")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should not add 'choice' class to main labels with checkboxes or radio buttons" do
|
70
|
+
ret = @c.render(:label_choice_class)
|
71
|
+
ret.should_not have_selector("form label.choice.main")
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should generate main labels if label option is provided" do
|
75
|
+
ret = @c.render(:basic)
|
76
|
+
ret.should have_selector("label.main[for=fake_model_foo]")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "sexy_form" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@c = SexyFormSpecs.new(Merb::Request.new({}))
|
7
|
+
@container = Merb::Plugins.config[:merb_sexy_forms][:container_tag]
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should allow to pass block to any field and set hash contents inside" do
|
11
|
+
ret = @c.render(:blocks)
|
12
|
+
ret.should have_selector("form input[type=text].text_class")
|
13
|
+
ret.should have_selector("form input[type=submit].submit_class")
|
14
|
+
ret.should have_selector("form button.button_class")
|
15
|
+
ret.should have_selector("form input[type=radio].radio_class")
|
16
|
+
ret.should have_selector("form input[type=checkbox].checkbox_class")
|
17
|
+
ret.should have_selector("form select.select_class")
|
18
|
+
ret.should have_selector("form textarea.textarea_class")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should insert some html after and before field" do
|
22
|
+
ret = @c.render(:before_after_field)
|
23
|
+
ret.should have_selector("form span.before")
|
24
|
+
ret.should have_selector("form span.after")
|
25
|
+
|
26
|
+
ret.should_not have_selector("*[after], *[before]")
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should append attributes to field" do
|
30
|
+
ret = @c.render(:append_attributes)
|
31
|
+
ret.should have_selector("form input#id.class")
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not add options attrs" do
|
35
|
+
ret = @c.render(:additional_options)
|
36
|
+
ret.should_not have_selector("*[container], *[ul], *[wrapper]")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should add containers" do
|
40
|
+
ret = @c.render(:basic)
|
41
|
+
ret.should have_selector("form #{@container} > label")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should add ul if container tag is li" do
|
45
|
+
Merb::Plugins.config[:merb_sexy_forms][:container_tag] = "li"
|
46
|
+
ret = @c.render(:basic)
|
47
|
+
ret.should have_selector("form > ul")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should'nt add ul if container tag is not li" do
|
51
|
+
Merb::Plugins.config[:merb_sexy_forms][:container_tag] = "div"
|
52
|
+
ret = @c.render(:basic)
|
53
|
+
ret.should_not have_selector("form > ul")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should add labels with field nested in container" do
|
57
|
+
ret = @c.render(:with_labels)
|
58
|
+
ret.should have_selector("form #{@container} > label")
|
59
|
+
ret.should have_selector("form #{@container} > div > input")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should add 'choice' class to labels for checkboxes or radio buttons" do
|
63
|
+
ret = @c.render(:label_choice_class)
|
64
|
+
ret.should have_selector("form div label[for=checkbox].choice")
|
65
|
+
ret.should have_selector("form div label[for=radio].choice")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should not add 'choice' class to main labels with checkboxes or radio buttons" do
|
69
|
+
ret = @c.render(:label_choice_class)
|
70
|
+
ret.should_not have_selector("form label.choice.main")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should generate main labels if label option is provided" do
|
74
|
+
ret = @c.render(:basic)
|
75
|
+
ret.should have_selector("label.main")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drogus-merb-sexy-forms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Sarnacki
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-07 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.0.
|
22
|
+
version: 1.0.7.1
|
23
23
|
version:
|
24
24
|
description: Merb plugin that provides extended builder for forms
|
25
25
|
email: drogus@gmail.com
|
@@ -45,12 +45,28 @@ files:
|
|
45
45
|
- spec/fixture/app
|
46
46
|
- spec/fixture/app/controllers
|
47
47
|
- spec/fixture/app/controllers/application.rb
|
48
|
+
- spec/fixture/app/controllers/sexy_form_for.rb
|
48
49
|
- spec/fixture/app/controllers/sexy_form.rb
|
49
50
|
- spec/fixture/app/controllers/specs_controller.rb
|
50
51
|
- spec/fixture/app/views
|
51
52
|
- spec/fixture/app/views/sexy_form_specs
|
52
53
|
- spec/fixture/app/views/sexy_form_specs/label_choice_class.html.erb
|
54
|
+
- spec/fixture/app/views/sexy_form_specs/additional_options.html.erb
|
53
55
|
- spec/fixture/app/views/sexy_form_specs/with_labels.html.erb
|
56
|
+
- spec/fixture/app/views/sexy_form_specs/before_after_field.html.erb
|
57
|
+
- spec/fixture/app/views/sexy_form_specs/append_attributes.html.erb
|
58
|
+
- spec/fixture/app/views/sexy_form_specs/blocks.html.erb
|
59
|
+
- spec/fixture/app/views/sexy_form_specs/basic.html.erb
|
60
|
+
- spec/fixture/app/views/sexy_form_for_specs
|
61
|
+
- spec/fixture/app/views/sexy_form_for_specs/label_choice_class.html.erb
|
62
|
+
- spec/fixture/app/views/sexy_form_for_specs/additional_options.html.erb
|
63
|
+
- spec/fixture/app/views/sexy_form_for_specs/with_labels.html.erb
|
64
|
+
- spec/fixture/app/views/sexy_form_for_specs/before_after_field.html.erb
|
65
|
+
- spec/fixture/app/views/sexy_form_for_specs/append_attributes.html.erb
|
66
|
+
- spec/fixture/app/views/sexy_form_for_specs/blocks.html.erb
|
67
|
+
- spec/fixture/app/views/sexy_form_for_specs/basic.html.erb
|
68
|
+
- spec/fixture/app/models
|
69
|
+
- spec/fixture/app/models/first_generic_fake_model.rb
|
54
70
|
- spec/fixture/config
|
55
71
|
- spec/fixture/config/init.rb.rb
|
56
72
|
- spec/fixture/config/environments
|
@@ -60,9 +76,10 @@ files:
|
|
60
76
|
- spec/fixture/config/rack.rb
|
61
77
|
- spec/fixture/config/router.rb
|
62
78
|
- spec/merb_test.log
|
79
|
+
- spec/sexy_form_for_spec.rb
|
63
80
|
- spec/spec_helper.rb
|
64
81
|
- spec/merb-sexy-forms_spec.rb
|
65
|
-
- spec/
|
82
|
+
- spec/sexy_form_spec.rb
|
66
83
|
- spec/merb.main.pid
|
67
84
|
- assets/stylesheets
|
68
85
|
- assets/stylesheets/sexy_forms.css
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
-
|
3
|
-
Merb::Plugins.config[:helpers] = {
|
4
|
-
:default_builder => Merb::Helpers::Form::Builder::FormWithErrors
|
5
|
-
}
|
6
|
-
|
7
|
-
describe "form" do
|
8
|
-
|
9
|
-
before :each do
|
10
|
-
@c = SexyFormSpecs.new(Merb::Request.new({}))
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should add labels with field nested in container" do
|
14
|
-
ret = @c.render(:with_labels)
|
15
|
-
ret.should have_selector("form ul li label")
|
16
|
-
ret.should have_selector("form ul li div input")
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should add 'choice' class to labels for checkboxes or radio buttons" do
|
20
|
-
ret = @c.render(:label_choice_class)
|
21
|
-
ret.should have_selector("form div label[for=checkbox].choice")
|
22
|
-
ret.should have_selector("form div label[for=radio].choice")
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should not add 'choice' class to main labels" do
|
26
|
-
ret = @c.render(:label_choice_class)
|
27
|
-
ret.should_not have_selector("form label.choice.main")
|
28
|
-
end
|
29
|
-
end
|