express_templates 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/core_extensions/proc.rb +1 -5
  3. data/lib/express_templates/compiler.rb +10 -9
  4. data/lib/express_templates/components.rb +1 -1
  5. data/lib/express_templates/components/capabilities/adoptable.rb +20 -0
  6. data/lib/express_templates/components/capabilities/building.rb +6 -0
  7. data/lib/express_templates/components/capabilities/parenting.rb +7 -2
  8. data/lib/express_templates/components/capabilities/templating.rb +1 -1
  9. data/lib/express_templates/components/for_each.rb +2 -0
  10. data/lib/express_templates/components/form_rails_support.rb +4 -1
  11. data/lib/express_templates/components/forms.rb +15 -0
  12. data/lib/express_templates/components/forms/basic_fields.rb +53 -0
  13. data/lib/express_templates/components/forms/checkbox.rb +37 -0
  14. data/lib/express_templates/components/forms/express_form.rb +66 -0
  15. data/lib/express_templates/components/forms/form_component.rb +60 -0
  16. data/lib/express_templates/components/forms/option_support.rb +43 -0
  17. data/lib/express_templates/components/forms/radio.rb +84 -0
  18. data/lib/express_templates/components/forms/select.rb +61 -0
  19. data/lib/express_templates/components/forms/submit.rb +26 -0
  20. data/lib/express_templates/components/null_wrap.rb +33 -1
  21. data/lib/express_templates/expander.rb +1 -0
  22. data/lib/express_templates/version.rb +1 -1
  23. data/test/components/container_test.rb +2 -0
  24. data/test/components/forms/basic_fields_test.rb +52 -0
  25. data/test/components/forms/checkbox_test.rb +44 -0
  26. data/test/components/forms/express_form_test.rb +120 -0
  27. data/test/components/forms/radio_test.rb +91 -0
  28. data/test/components/forms/select_test.rb +75 -0
  29. data/test/components/forms/submit_test.rb +12 -0
  30. data/test/components/iterating_test.rb +18 -0
  31. data/test/components/null_wrap_test.rb +28 -0
  32. data/test/components/table_for_test.rb +6 -6
  33. data/test/dummy/log/test.log +13758 -0
  34. data/test/markup/tag_test.rb +1 -1
  35. metadata +26 -5
  36. data/lib/express_templates/components/form_for.rb +0 -469
  37. data/test/components/form_for_test.rb +0 -246
@@ -1,246 +0,0 @@
1
- require 'test_helper'
2
- require 'ostruct'
3
-
4
- class FormForTest < ActiveSupport::TestCase
5
- class Context
6
- def initialize(resource)
7
- @resource = resource
8
- end
9
- end
10
-
11
- def resource
12
- OpenStruct.new(
13
- id: 1,
14
- name: 'Foo',
15
- body: 'Hello world',
16
- email: 'some@email.com',
17
- phone: '123123123',
18
- url: 'http://someurl.com',
19
- number: 123,
20
- dropdown: 'yes',
21
- gender: 'Male'
22
- )
23
- end
24
-
25
- def setup
26
- @example_compiled = -> {
27
- ExpressTemplates::Components::FormFor.render_in(self) {
28
- "<form action=\"/resources/#{@resource.id}\" method=\"post\" url=\"/posts\" id=\"post_form\">
29
- <div style=\"display:none\">
30
- "+%Q(#{utf8_enforcer_tag})+%Q(#{method_tag(:patch)})+%Q(#{token_tag})+"
31
- </div>
32
-
33
- <div class=\"\">
34
- "+%Q(#{label_tag("resource_name", "post title")})+%Q(#{text_field_tag("resource[name]", @resource.name, {})})+"
35
- </div>
36
-
37
- <div class=\"\">
38
- "+%Q(#{label_tag("resource_body", "Body")})+%Q(#{text_field_tag("resource[body]", @resource.body, class: "string")})+"
39
- </div>
40
-
41
- <div class=\"field input\">
42
- "+%Q(#{label_tag("resource_email", "Email")})+%Q(#{email_field_tag("resource[email]", @resource.email, {})})+"
43
- </div>
44
-
45
- <div class=\"\">
46
- "+%Q(#{label_tag("resource_mobile_phone", "Mobile Phone")})+%Q(#{phone_field_tag("resource[mobile_phone]", @resource.mobile_phone, {})})+"
47
- </div>
48
-
49
- <div class=\"\">
50
- "+%Q(#{label_tag("resource_url", "Url")})+%Q(#{url_field_tag("resource[url]", @resource.url, {})})+"
51
- </div>
52
-
53
- <div class=\"\">
54
- "+%Q(#{label_tag("resource_number", "Number")})+%Q(#{number_field_tag("resource[number]", @resource.number, {})})+"
55
- </div>
56
-
57
- <div class=\"\">"+%Q(#{submit_tag("Save it!", {})})+"</div>
58
- </form>
59
- "
60
- }
61
- }
62
- end
63
-
64
- def example_compiled_src
65
- # necessary because the #source method is not perfect yet
66
- # ideally we would have #source_body
67
- @example_compiled.source_body
68
- end
69
-
70
- def simple_form(resource)
71
- ctx = Context.new(resource)
72
- fragment = -> {
73
- form_for(:resource, method: :put, url: '/posts', html_options: {id: 'post_form'}) do |f|
74
- f.text_field :name, label: 'post title'
75
- f.text_field :body, class: 'string'
76
- f.email_field :email, wrapper_class: 'field input'
77
- f.phone_field :mobile_phone
78
- f.url_field :url
79
- f.number_field :number
80
- f.submit 'Save it!'
81
- end
82
- }
83
- return ctx, fragment
84
- end
85
-
86
- def select_form(resource)
87
- ctx = Context.new(resource)
88
- fragment = -> {
89
- form_for(:resource, method: :put) do |f|
90
- f.select :dropdown, ['yes', 'no'], selected: 'yes'
91
- f.select :dropdown, '{{ options_from_collection_for_select(@choices, "id", "name") }}'
92
- end
93
- }
94
- return ctx, fragment
95
- end
96
-
97
- def radio_form(resource)
98
- ctx = Context.new(resource)
99
- fragment = -> {
100
- form_for(:resource) do |f|
101
- f.radio :age, [[1, 'One'],[2, 'Two']], :first, :last
102
- f.radio :enable_something, :boolean
103
- end
104
- }
105
- return ctx, fragment
106
- end
107
-
108
- def checkbox_form(resource)
109
- ctx = Context.new(resource)
110
- fragment = -> {
111
- form_for(:resource, method: :put) do |f|
112
- f.checkbox :age, [[1, 'One'], [2, 'Two']], :first, :last
113
- end
114
- }
115
- return ctx, fragment
116
- end
117
-
118
- def advanced_form(resource)
119
- ctx = Context.new(resource)
120
- fragment = -> {
121
- form_for(:resource, method: :put, url: '/posts') do |f|
122
- f.text_field :name, label: 'post title'
123
- f.text_field :body, class: 'string'
124
- f.actions({submit: ['Save', {class: 'submit primary'}], cancel: ['Cancel it', class: 'cancel secondary']}, wrapper_class: 'form-group widget-buttons')
125
- end
126
- }
127
- return ctx, fragment
128
- end
129
-
130
- test "fields compiled source is legible and transparent" do
131
- ExpressTemplates::Markup::Tag.formatted do
132
- ctx, fragment = simple_form(resource)
133
- assert_equal example_compiled_src, ExpressTemplates.compile(&fragment)
134
- end
135
- end
136
-
137
- test 'advanced form can have additional actions' do
138
- @example_compiled = -> {
139
- ExpressTemplates::Components::FormFor.render_in(self) {
140
- "<form action=\"/resources/#{@resource.id}\" method=\"post\" url=\"/posts\">
141
- <div style=\"display:none\">
142
- "+%Q(#{utf8_enforcer_tag})+%Q(#{method_tag(:patch)})+%Q(#{token_tag})+"
143
- </div>
144
-
145
- <div class=\"\">
146
- "+%Q(#{label_tag("resource_name", "post title")})+%Q(#{text_field_tag("resource[name]", @resource.name, {})})+"
147
- </div>
148
-
149
- <div class=\"\">
150
- "+%Q(#{label_tag("resource_body", "Body")})+%Q(#{text_field_tag("resource[body]", @resource.body, class: "string")})+"
151
- </div>
152
-
153
- <div class=\"form-group widget-buttons\">
154
- "+%Q(#{submit_tag("Save", class: "submit primary")})+"
155
- <a href=\"#\" onclick=\"return false;\" class=\"cancel secondary\">Cancel it</a>
156
- </div>
157
- </form>
158
- "
159
- }
160
- }
161
- ExpressTemplates::Markup::Tag.formatted do
162
- ctx, fragment = advanced_form(resource)
163
- assert_equal example_compiled_src, ExpressTemplates.compile(&fragment)
164
- end
165
- end
166
-
167
- test "select compiled source is legible and transparent" do
168
- @example_compiled = -> {
169
- ExpressTemplates::Components::FormFor.render_in(self) {
170
- "<form action=\"/resources/#{@resource.id}\" method=\"post\">
171
- <div style=\"display:none\">
172
- "+%Q(#{utf8_enforcer_tag})+%Q(#{method_tag(:patch)})+%Q(#{token_tag})+"
173
- </div>
174
-
175
- <div class=\"\">
176
- "+%Q(#{label_tag("resource_dropdown", "Dropdown")})+%Q(#{select_tag("resource[dropdown]", '<option selected=selected>yes</option><option >no</option>'.html_safe, {})})+"
177
- </div>
178
-
179
- <div class=\"\">
180
- "+%Q(#{label_tag("resource_dropdown", "Dropdown")})+%Q(#{select_tag("resource[dropdown]", options_from_collection_for_select(@choices, "id", "name") , {})})+"
181
- </div>
182
- </form>
183
- "
184
- }
185
- }
186
- ExpressTemplates::Markup::Tag.formatted do
187
- ctx, fragment = select_form(resource)
188
- assert_equal example_compiled_src, ExpressTemplates.compile(&fragment)
189
- end
190
- end
191
-
192
- test "radio compiled source is legible and transparent" do
193
- @example_compiled = -> {
194
- ExpressTemplates::Components::FormFor.render_in(self) {
195
- "<form action=\"/resources\" method=\"post\">
196
- <div style=\"display:none\">
197
- "+%Q(#{utf8_enforcer_tag})+%Q(#{method_tag(:post)})+%Q(#{token_tag})+"
198
- </div>
199
-
200
- <div class=\"\">
201
- "+%Q(#{label_tag("resource_age", "Age")})+%Q(#{collection_radio_buttons(:resource, :age, [[1, "One"], [2, "Two"]], :first, :last, {}) do |b|
202
- b.label(class: 'radio') { b.radio_button + b.text }
203
- end})+"
204
- </div>
205
-
206
- <div class=\"\">
207
- "+%Q(#{label_tag("resource_enable_something", "Enable Something")})+%Q(#{collection_radio_buttons(:resource, :enable_something, [[true, "True"], [false, "False"]], :first, :last, {}) do |b|
208
- b.label(class: 'radio') { b.radio_button + b.text }
209
- end})+"
210
- </div>
211
- </form>
212
- "
213
- }
214
- }
215
-
216
- ExpressTemplates::Markup::Tag.formatted do
217
- ctx, fragment = radio_form(resource)
218
- assert_equal example_compiled_src, ExpressTemplates.compile(&fragment)
219
- end
220
- end
221
-
222
- test "checkbox compiled source is legible and transparent" do
223
- @example_compiled = -> {
224
- ExpressTemplates::Components::FormFor.render_in(self) {
225
- "<form action=\"/resources/#{@resource.id}\" method=\"post\">
226
- <div style=\"display:none\">
227
- "+%Q(#{utf8_enforcer_tag})+%Q(#{method_tag(:patch)})+%Q(#{token_tag})+"
228
- </div>
229
-
230
- <div class=\"\">
231
- "+%Q(#{label_tag("resource_age", "Age")})+%Q(#{collection_check_boxes(:resource, :age, [[1, "One"], [2, "Two"]], :first, :last, {}) do |b|
232
- b.label(class: 'checkbox') { b.check_box + b.text }
233
- end})+"
234
- </div>
235
- </form>
236
- "
237
- }
238
- }
239
-
240
- ExpressTemplates::Markup::Tag.formatted do
241
- ctx, fragment = checkbox_form(resource)
242
- assert_equal example_compiled_src, ExpressTemplates.compile(&fragment)
243
- end
244
-
245
- end
246
- end