express_admin 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/express_admin.js +2 -0
  3. data/app/assets/javascripts/express_admin/admin.js +2 -0
  4. data/app/assets/stylesheets/express_admin.css +0 -5
  5. data/app/assets/stylesheets/express_admin/components/_definition.sass +8 -0
  6. data/app/assets/stylesheets/express_admin/components/_pane.sass +2 -2
  7. data/app/assets/stylesheets/express_admin/components/_sub_menu.sass +2 -2
  8. data/app/assets/stylesheets/express_admin/components/_widget_box.sass +4 -4
  9. data/app/assets/stylesheets/express_admin/globals/_foundation_overrides.sass +2 -1
  10. data/app/assets/stylesheets/express_admin/globals/_mixins.sass +0 -2
  11. data/app/assets/stylesheets/express_admin/plugins/_select2.sass +475 -68
  12. data/app/assets/stylesheets/express_admin/plugins/_tinymce.sass +2 -0
  13. data/app/assets/stylesheets/express_admin/screen.sass +6 -1
  14. data/app/assets/stylesheets/express_admin/sections/_header.sass +1 -0
  15. data/app/assets/stylesheets/express_admin/sections/_main_content.sass +6 -2
  16. data/app/assets/stylesheets/express_admin/sections/_main_region.sass +10 -7
  17. data/app/assets/stylesheets/express_admin/sections/_page_body.sass +6 -3
  18. data/app/assets/stylesheets/express_admin/sections/_page_sidebar.sass +6 -2
  19. data/app/assets/stylesheets/express_admin/sections/_sidebar_region.sass +4 -3
  20. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -1
  21. data/app/assets/stylesheets/express_admin/shared/_forms.sass +14 -2
  22. data/app/assets/stylesheets/express_admin/shared/_trees.sass +7 -3
  23. data/app/assets/stylesheets/ionicons/{ionicons.css.sass → ionicons.sass} +0 -0
  24. data/app/components/express_admin/addon_sidebar_component.rb +23 -34
  25. data/app/components/express_admin/definition_list.rb +38 -0
  26. data/app/components/express_admin/definition_table.rb +51 -0
  27. data/app/components/express_admin/flash_message_component.rb +5 -11
  28. data/app/components/express_admin/layout_component.rb +2 -9
  29. data/app/components/express_admin/main_region.rb +4 -4
  30. data/app/components/express_admin/mega_menu_component.rb +40 -34
  31. data/app/components/express_admin/page_header_component.rb +8 -18
  32. data/app/components/express_admin/pane.rb +13 -10
  33. data/app/components/express_admin/setting_form.rb +23 -20
  34. data/app/components/express_admin/sidebar_region.rb +6 -4
  35. data/app/components/express_admin/smart_form.rb +21 -18
  36. data/app/components/express_admin/smart_table.rb +44 -40
  37. data/app/components/express_admin/widget_box.rb +8 -8
  38. data/app/helpers/express_admin/admin_helper.rb +1 -1
  39. data/app/views/devise/sessions/new.html.et +63 -0
  40. data/app/views/layouts/express_admin/admin.html.et +8 -9
  41. data/app/views/shared/express_admin/_navigation_bar.html.et +6 -5
  42. data/config/tinymce.yml +29 -0
  43. data/lib/core_extensions/string_promptify.rb +9 -0
  44. data/lib/express_admin.rb +1 -0
  45. data/lib/express_admin/engine.rb +11 -9
  46. data/lib/express_admin/version.rb +1 -1
  47. data/lib/generators/express_admin/install/install_generator.rb +7 -0
  48. data/lib/generators/express_admin/install/templates/views/devise/sessions/new.html.et +1 -0
  49. data/test/dummy/app/views/demo/sign_in.html.et +6 -6
  50. data/test/dummy/db/test.sqlite3 +0 -0
  51. data/test/dummy/log/test.log +11361 -0
  52. data/test/dummy/test/components/smart_form_test.rb +57 -34
  53. data/test/dummy/test/components/smart_table_test.rb +35 -35
  54. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
  55. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +1 -0
  56. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
  57. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
  58. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +1 -0
  59. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
  60. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +1 -0
  61. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
  62. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
  64. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +1 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
  66. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
  73. data/test/fixtures/categories.yml +8 -0
  74. data/test/test_helper.rb +34 -0
  75. data/vendor/gems/express_templates/CHANGELOG.md +12 -0
  76. data/vendor/gems/express_templates/Gemfile.lock +4 -1
  77. data/vendor/gems/express_templates/README.md +22 -41
  78. data/vendor/gems/express_templates/express_templates.gemspec +1 -0
  79. data/vendor/gems/express_templates/lib/arbre/patches.rb +50 -0
  80. data/vendor/gems/express_templates/lib/core_extensions/proc.rb +1 -0
  81. data/vendor/gems/express_templates/lib/express_templates.rb +2 -3
  82. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +2 -7
  83. data/vendor/gems/express_templates/lib/express_templates/components.rb +1 -9
  84. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +33 -37
  85. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +30 -18
  86. data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +41 -0
  87. data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +5 -6
  88. data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -1
  89. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +3 -6
  90. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +1 -1
  91. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +15 -25
  92. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +20 -11
  93. data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +2 -2
  94. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +7 -8
  95. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +61 -37
  96. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +2 -8
  97. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +7 -6
  98. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +26 -42
  99. data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
  100. data/vendor/gems/express_templates/test/components/base_test.rb +17 -15
  101. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +3 -3
  102. data/vendor/gems/express_templates/test/components/configurable_test.rb +27 -21
  103. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +57 -17
  104. data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +16 -22
  105. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +23 -76
  106. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +31 -27
  107. data/vendor/gems/express_templates/test/components/forms/select_test.rb +46 -71
  108. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +10 -5
  109. data/vendor/gems/express_templates/test/components/tree_for_test.rb +24 -52
  110. data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +4 -3
  111. data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +1 -1
  112. data/vendor/gems/express_templates/test/dummy/log/test.log +4296 -0
  113. data/vendor/gems/express_templates/test/express_templates_test.rb +5 -1
  114. data/vendor/gems/express_templates/test/handler_test.rb +19 -17
  115. data/vendor/gems/express_templates/test/performance_test.rb +11 -7
  116. data/vendor/gems/express_templates/test/test_helper.rb +162 -1
  117. metadata +58 -47
  118. data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +0 -66
  119. data/vendor/gems/express_templates/diagrams/diagram.graffle +0 -2404
  120. data/vendor/gems/express_templates/diagrams/diagram_express_templates.png +0 -0
  121. data/vendor/gems/express_templates/diagrams/diagram_haml_erb.png +0 -0
  122. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/adoptable.rb +0 -20
  123. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/building.rb +0 -14
  124. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/conditionality.rb +0 -54
  125. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/configurable.rb +0 -90
  126. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/iterating.rb +0 -75
  127. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/parenting.rb +0 -72
  128. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/rendering.rb +0 -30
  129. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/templating.rb +0 -198
  130. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/wrapping.rb +0 -84
  131. data/vendor/gems/express_templates/lib/express_templates/components/column.rb +0 -13
  132. data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -7
  133. data/vendor/gems/express_templates/lib/express_templates/components/content_for.rb +0 -42
  134. data/vendor/gems/express_templates/lib/express_templates/components/for_each.rb +0 -30
  135. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_support.rb +0 -13
  136. data/vendor/gems/express_templates/lib/express_templates/components/null_wrap.rb +0 -41
  137. data/vendor/gems/express_templates/lib/express_templates/components/row.rb +0 -28
  138. data/vendor/gems/express_templates/lib/express_templates/components/table_for.rb +0 -163
  139. data/vendor/gems/express_templates/lib/express_templates/components/unless_block.rb +0 -40
  140. data/vendor/gems/express_templates/lib/express_templates/expander.rb +0 -140
  141. data/vendor/gems/express_templates/lib/express_templates/macro.rb +0 -45
  142. data/vendor/gems/express_templates/lib/express_templates/markup.rb +0 -9
  143. data/vendor/gems/express_templates/lib/express_templates/markup/html_tag.rb +0 -62
  144. data/vendor/gems/express_templates/lib/express_templates/markup/tag.rb +0 -150
  145. data/vendor/gems/express_templates/lib/express_templates/markup/wrapper.rb +0 -94
  146. data/vendor/gems/express_templates/lib/express_templates/markup/yielder.rb +0 -21
  147. data/vendor/gems/express_templates/test/components/column_test.rb +0 -11
  148. data/vendor/gems/express_templates/test/components/conditionality_test.rb +0 -37
  149. data/vendor/gems/express_templates/test/components/container_test.rb +0 -66
  150. data/vendor/gems/express_templates/test/components/content_for_test.rb +0 -60
  151. data/vendor/gems/express_templates/test/components/iterating_test.rb +0 -127
  152. data/vendor/gems/express_templates/test/components/null_wrap_test.rb +0 -28
  153. data/vendor/gems/express_templates/test/components/row_test.rb +0 -16
  154. data/vendor/gems/express_templates/test/components/table_for_test.rb +0 -211
  155. data/vendor/gems/express_templates/test/expander_stack_test.rb +0 -41
  156. data/vendor/gems/express_templates/test/expander_test.rb +0 -99
  157. data/vendor/gems/express_templates/test/markup/tag_test.rb +0 -149
  158. data/vendor/gems/express_templates/test/markup/wrapper_test.rb +0 -42
  159. data/vendor/gems/express_templates/test/markup/yielder_test.rb +0 -9
@@ -6,7 +6,7 @@ module AdminModule
6
6
  class SmartThing
7
7
  include ExpressTemplates::Components::Capabilities::Resourceful
8
8
 
9
- attr_accessor :virtual_path
9
+ attr_accessor :virtual_path, :config
10
10
 
11
11
  def initialize(virtual_path, config = {})
12
12
  @virtual_path = virtual_path
@@ -14,8 +14,8 @@ module AdminModule
14
14
  @args = [self]
15
15
  end
16
16
 
17
- def template
18
- self
17
+ def template_virtual_path
18
+ @virtual_path
19
19
  end
20
20
  end
21
21
  end
@@ -4,40 +4,46 @@ class ConfigurableTest < ActiveSupport::TestCase
4
4
 
5
5
  ETC = ExpressTemplates::Components
6
6
 
7
- class ConfigurableComponent < ETC::Base
8
- include ETC::Capabilities::Configurable
9
- emits -> {
10
- div.bar(my[:id])
11
- }
12
- end
13
-
14
- test "a configurable component accepts an id argument" do
15
- assert :foo, ConfigurableComponent.new(:foo).my[:id]
7
+ class ConfigurableComponent < ETC::Configurable
8
+ def markup
9
+ div(id: my[:id], class: 'bar')
10
+ end
16
11
  end
17
12
 
18
13
  test "renders id argument as dom id" do
19
- compiled_src = ConfigurableComponent.new(:foo).compile
20
- assert '<div id="foo" class="bar" />', compiled_src
14
+ compiled_src = ExpressTemplates.render(self) { configurable_component(:foo) }
15
+ assert_equal "<div id=\"foo\" class=\"bar\"></div>\n", compiled_src
21
16
  end
22
17
 
23
- class ConfigurableContainerComponent < ETC::Base
24
- include ETC::Capabilities::Configurable
25
- include ETC::Capabilities::Parenting
18
+ class ConfigurableContainerComponent < ETC::Configurable
26
19
 
27
20
  # make sure a helper can take arguments
28
- helper(:name) {|name| name.to_s }
21
+ # helper(:name) {|name| name.to_s }
22
+ def name(name)
23
+ name.to_s
24
+ end
29
25
 
30
- emits -> {
31
- div(my[:id]) {
26
+ def markup &block
27
+ div(id: my[:id]) {
32
28
  h1 { name(my[:id]) }
33
- _yield
29
+ yield(block) if block
34
30
  }
35
- }
31
+ end
32
+ end
33
+
34
+ def assigns
35
+ {}
36
36
  end
37
37
 
38
38
  test "a configurable component may have also be a container" do
39
- html = ExpressTemplates.render { configurable_container_component(:foo) { p "bar" }}
40
- assert_equal '<div id="foo"><h1>foo</h1><p>bar</p></div>', html
39
+ html = ExpressTemplates.render(self) { configurable_container_component(:foo) { |c| para 'bar'} }
40
+ expected = <<-HTML
41
+ <div id=\"foo\">
42
+ <h1>foo</h1>
43
+ <p>bar</p>
44
+ </div>
45
+ HTML
46
+ assert_equal "<div id=\"foo\">\n <h1>foo</h1>\n <p>bar</p>\n</div>\n", html
41
47
  end
42
48
 
43
49
  end
@@ -6,47 +6,87 @@ class BasicFieldsTest < ActiveSupport::TestCase
6
6
  datetime_local number range
7
7
  search telephone time url week)
8
8
 
9
- test "text requires parent" do
10
- fragment = -> {
11
- text :name
12
- }
13
- assert_raises(RuntimeError) {
14
- ExpressTemplates.compile(&fragment)
15
- }
9
+ def assigns
10
+ {resource: resource}
11
+ end
12
+
13
+ def field_type_map
14
+ Hash[BASIC_FIELDS.map {|f| [f, f]}].merge(
15
+ {'phone' => 'tel',
16
+ 'telephone' => 'tel',
17
+ 'datetime_local' => 'datetime-local' })
18
+ end
19
+
20
+ def label_html
21
+ '<label for="foo_bar">Bar</label>'
16
22
  end
17
23
 
18
24
  test "all fields work" do
19
25
  BASIC_FIELDS.each do |type|
20
- fragment = -> {
26
+ fragment = -> (ctx) {
21
27
  express_form(:foo) {
22
28
  send(type, :bar)
23
29
  }
24
30
  }
25
- assert_match '#{label_tag("foo_bar", "Bar")', ExpressTemplates.compile(&fragment)
26
- assert_match "#{type}_field(:foo, :bar)", ExpressTemplates.compile(&fragment)
31
+ html = arbre(&fragment)
32
+ assert_match label_html, html
33
+ assert_match(/input.*type="#{field_type_map[type]}"/, html)
34
+ # assert_match "#{type}_field(:foo, :bar, {})", arbre(&fragment)
35
+ end
36
+ end
37
+
38
+ test "passing html options to fields work" do
39
+ options = {class: 'form-field'}
40
+ BASIC_FIELDS.each do |type|
41
+ html = arbre {
42
+ express_form(:foo) {
43
+ send(type, :bar, options)
44
+ }
45
+ }
46
+ assert_match label_html, html
47
+ assert_match /input.*type="#{field_type_map[type]}"/, html
48
+ assert_match /input.*class="form-field"/, html
27
49
  end
28
50
  end
29
51
 
30
52
  test "textarea uses rails text_area helper" do
31
- fragment = -> {
53
+ html = arbre {
32
54
  express_form(:foo) {
33
55
  textarea :bar
34
56
  }
35
57
  }
36
- assert_match '#{label_tag("foo_bar", "Bar")', ExpressTemplates.compile(&fragment)
37
- assert_match "text_area(:foo, :bar)", ExpressTemplates.compile(&fragment)
58
+ assert_match label_html, html
59
+ assert_match /<textarea name="foo\[bar\]" id="foo_bar"><\/textarea>/, html.gsub("\n", '')
38
60
  end
39
61
 
62
+ test "textarea passes additional html options to rails helper" do
63
+ html = arbre {
64
+ express_form(:foo) {
65
+ textarea :bar, rows: 5, class: 'tinymce form-field'
66
+ }
67
+ }
68
+ assert_match label_html, html
69
+ assert_match /<textarea rows="5" class="tinymce form-field" name="foo\[bar\]" id="foo_bar"><\/textarea>/, html.gsub("\n", '')
70
+ end
40
71
 
41
72
  test "hidden uses rails hidden_tag helper" do
42
- fragment = -> {
73
+ html = arbre {
43
74
  express_form(:foo) {
44
75
  hidden :bar
45
76
  }
46
77
  }
47
- assert_no_match '#{label_tag("foo_bar", "Bar")', ExpressTemplates.compile(&fragment)
48
- assert_match "hidden_field(:foo, :bar)", ExpressTemplates.compile(&fragment)
78
+ assert_no_match label_html, html
79
+ assert_match '<input type="hidden"', html
49
80
  end
50
81
 
51
- end
82
+ test "hidden field passes additional html options to rails helper" do
83
+ html = arbre {
84
+ express_form(:foo) {
85
+ hidden :bar, class: 'hidden form-field', value: 'ninja'
86
+ }
87
+ }
88
+ assert_no_match label_html, html
89
+ assert_match /<input class="hidden form-field" value="ninja" type="hidden" name="foo\[bar\]" id="foo_bar"/, html
90
+ end
52
91
 
92
+ end
@@ -1,43 +1,37 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class CheckboxTest < ActiveSupport::TestCase
4
-
5
- test "Checkbox requires a parent form" do
6
- fragment = -> {
7
- checkbox :permission_granted
8
- }
9
- assert_raises(RuntimeError) {
10
- ExpressTemplates.compile(&fragment)
11
- }
4
+ def assigns
5
+ {resource: resource}
12
6
  end
13
7
 
14
8
  test "checkbox places the label before the input" do
15
- fragment = -> {
9
+ html = arbre {
16
10
  express_form(:account) {
17
11
  checkbox :eula
18
12
  }
19
13
  }
20
- compiled = ExpressTemplates.compile(&fragment)
21
- label_helper = '#{label_tag("account_eula", "Eula")}'
22
- field_helper = '#{check_box(:account, :eula, {}, "1", "0")}'
23
- assert_match label_helper, compiled
24
- assert_match field_helper, compiled
25
- label_idx = compiled.index(label_helper)
26
- field_idx = compiled.index(field_helper)
14
+ label = '<label for="account_eula"'
15
+ field = 'input type="checkbox" value="1" name="account\[eula\]"'
16
+ assert_match /#{label}/, html
17
+ assert_match /#{field}/, html
18
+ label_idx = html.index(label)
19
+ field_idx = html.index(field.gsub('\\', ''))
27
20
  assert (field_idx > label_idx), "label must come first"
28
21
  end
29
22
 
30
23
  test "checkbox respects label_after: true " do
31
- fragment = -> {
24
+ html = arbre {
32
25
  express_form(:account) {
33
26
  checkbox :eula, label_after: true
34
27
  }
35
28
  }
36
- compiled = ExpressTemplates.compile(&fragment)
37
- label_helper = '#{label_tag("account_eula", "Eula")}'
38
- field_helper = '#{check_box(:account, :eula, {}, "1", "0")}'
39
- label_idx = compiled.index(label_helper)
40
- field_idx = compiled.index(field_helper)
29
+ label = '<label for="account_eula"'
30
+ field = 'input type="checkbox" value="1" name="account\[eula\]"'
31
+ assert_match /#{label}/, html
32
+ assert_match /#{field}/, html
33
+ label_idx = html.index(label)
34
+ field_idx = html.index(field.gsub('\\', ''))
41
35
  assert (field_idx < label_idx), "label must come after when label_after: true"
42
36
  end
43
37
 
@@ -1,108 +1,55 @@
1
1
  require 'test_helper'
2
2
  require 'ostruct'
3
3
 
4
- class ExpressFormTest < ActiveSupport::TestCase
5
- class Context
6
- def initialize(resource)
7
- @resource = resource
8
- end
4
+ class Foo
5
+ def self.columns ; [] ; end
9
6
  end
10
7
 
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
- )
8
+ class ExpressFormTest < ActiveSupport::TestCase
9
+
10
+ def assigns
11
+ {resource: resource}
23
12
  end
24
13
 
25
- def simplest_form(resource)
26
- ctx = Context.new(resource)
27
- fragment = -> {
14
+ def simplest_form
15
+ arbre {
28
16
  express_form(:resource) {
29
17
  submit value: 'Save it!'
30
18
  }
31
19
  }
32
- return ctx, fragment
33
- end
34
-
35
- def express_form
36
- "ExpressTemplates::Components::Forms::ExpressForm".constantize
37
- end
38
-
39
- test "express_form component exists" do
40
- assert express_form
41
- end
42
-
43
- def compile_simplest_form
44
- ctx, fragment = simplest_form(resource)
45
- ExpressTemplates.compile(&fragment)
46
20
  end
47
21
 
48
22
  test "simplest form renders" do
49
- assert compile_simplest_form
23
+ assert simplest_form
50
24
  end
51
25
 
52
26
  test "simplest form contains form tag" do
53
- assert_match "<form", compile_simplest_form
54
- end
55
-
56
- test "simplest form contains rails form helpers" do
57
- compiled_src = compile_simplest_form
58
- assert_match "utf8_enforcer_tag", compiled_src
59
- assert_match "method_tag(", compiled_src
60
- assert_match "token_tag", compiled_src
61
- end
62
-
63
- test "simplest_form contains submit" do
64
- assert_match 'submit_tag', compile_simplest_form
27
+ assert_match "<form", simplest_form
65
28
  end
66
29
 
67
- test "simplest_form adopts children (submit has reference to parent)" do
68
- ctx, fragment = simplest_form(resource)
69
- expanded_nodes = ExpressTemplates::Expander.new(nil).expand(fragment.source_body)
70
- assert_instance_of ExpressTemplates::Components::Forms::ExpressForm,
71
- expanded_nodes.first.children.last.parent
30
+ test "express_form contents are inside the form" do
31
+ assert_match /<form.*submit.*\/form>/, simplest_form.gsub("\n",'')
72
32
  end
73
33
 
74
- test "#form_action uses url helpers" do
75
- assert_equal "{{@foo.try(:persisted?) ? foo_path(@foo) : foos_path}}", express_form.new(:foo).form_action
34
+ test "simplest form contains rails form helpers" do
35
+ compiled_src = simplest_form
36
+ assert_match "input name=\"utf8\" type=\"hidden\"", compiled_src
37
+ assert_match "input type=\"hidden\" name=\"_method\"", compiled_src
38
+ assert_match "name=\"authenticity_token\" value=\"AUTH_TOKEN\"", compiled_src
39
+ assert_match /<form.*authenticity_token.*\/form>/, compiled_src.gsub("\n",'')
76
40
  end
77
41
 
78
- test "#form_action uses correct path helper for update/patch" do
79
- assert_equal "{{@foo.try(:persisted?) ? foo_path(@foo) : foos_path}}", express_form.new(:foo, method: :put).form_action
42
+ test "simplest_form contains submit" do
43
+ assert_match '<input type="submit" name="commit" value="Save" />', simplest_form
80
44
  end
81
45
 
82
46
  test "simplest_form uses form_action for the action" do
83
- form_open_tag = compile_simplest_form.match(/<form[^>]*>/)[0]
84
- assert_match 'action=\"#{@resource.try(:persisted?) ? resource_path(@resource) : resources_path}\"', form_open_tag
47
+ form_open_tag = simplest_form.match(/<form[^>]*>/)[0]
48
+ assert_match 'action="/resources"', form_open_tag
85
49
  end
86
50
 
87
51
  test "express_form default method is POST" do
88
- form_open_tag = compile_simplest_form.match(/<form[^>]*>/)[0]
89
- assert_match 'method=\"POST\"', form_open_tag
52
+ assert_match 'method="POST"', simplest_form
90
53
  end
91
54
 
92
- test "express_form accepts :resource_name for removing namespace" do
93
- fragment = -> {
94
- express_form(:admin_foo, resource_name: 'foo') {
95
- submit "Save!"
96
- }
97
- }
98
- expanded_nodes = ExpressTemplates::Expander.new(nil).expand(fragment.source_body)
99
- assert_equal 'foo', expanded_nodes.first.resource_name
100
- end
101
-
102
- # test "express_form has a namespace option with nil default" do
103
- # form = ExpressTemplates::Components::Forms::ExpressForm
104
- # assert_nil form.new(:person).namespace
105
- # assert_equal 'express_engine', form.new(:person, namespace: 'express_engine').namespace
106
- # end
107
-
108
55
  end
@@ -2,17 +2,20 @@ require 'test_helper'
2
2
 
3
3
  class RadioTest < ActiveSupport::TestCase
4
4
 
5
+ def assigns
6
+ {resource: resource}
7
+ end
8
+
5
9
  test "radio requires a parent component" do
6
- fragment = -> {
7
- radio :preferred_email_format, ['HTML', 'Text']
8
- }
9
10
  assert_raises(RuntimeError) {
10
- ExpressTemplates.compile(&fragment)
11
+ html = arbre {
12
+ radio :preferred_email_format, ['HTML', 'Text']
13
+ }
11
14
  }
12
15
  end
13
16
 
14
17
  def radio_with_array_options
15
- fragment = -> {
18
+ html = arbre {
16
19
  express_form(:person) {
17
20
  radio :preferred_email_format, ['HTML', 'Text']
18
21
  }
@@ -20,18 +23,17 @@ class RadioTest < ActiveSupport::TestCase
20
23
  end
21
24
 
22
25
  test "radio has correct label field name and text" do
23
- assert_match '#{label_tag("person_preferred_email_format", "Preferred Email Format")}',
24
- ExpressTemplates.compile(&radio_with_array_options)
26
+ assert_match /<label for="person_preferred_email_format"/,
27
+ radio_with_array_options
25
28
  end
26
29
 
27
30
  test "radio options present with class 'radio'" do
28
- compiled = ExpressTemplates.compile(&radio_with_array_options)
29
- assert_match 'radio_button(:person, :preferred_email_format, "Text", class: "radio"', compiled
30
- assert_match '_format, "HTML", class: "radio"', compiled
31
+ assert_match /<input.*class="radio"/,
32
+ radio_with_array_options
31
33
  end
32
34
 
33
35
  def radio_with_hash_options
34
- fragment = -> {
36
+ html = arbre {
35
37
  express_form(:person) {
36
38
  radio :subscribed, {1 => 'Yes', 0 => 'No'}, wrapper_class: 'my-wrapper'
37
39
  }
@@ -39,34 +41,36 @@ class RadioTest < ActiveSupport::TestCase
39
41
  end
40
42
 
41
43
  test "radio options may be specified with a hash" do
42
- compiled = ExpressTemplates.compile(&radio_with_hash_options)
43
- assert_match '<label class=\"my-wrapper\">', compiled
44
- assert_match 'radio_button(:person, :subscribed, 0, class: "radio"', compiled
45
- assert_match 'radio_button(:person, :subscribed, 1, class: "radio"', compiled
44
+ compiled = radio_with_hash_options
45
+ assert_match '<label class="my-wrapper">', compiled
46
+ assert_match 'input class="radio" type="radio" value="0" name="person[subscribed]" id="person_subscribed_0" />No', compiled
47
+ assert_match 'input class="radio" type="radio" value="1" name="person[subscribed]" id="person_subscribed_1" />Yes', compiled
46
48
  end
47
49
 
48
50
  test "radio throws error if given improper options" do
49
- fragment = -> {
50
- express_form(:person) {
51
- radio :subscribed, "Garbage options"
52
- }
53
- }
54
51
  assert_raises(RuntimeError) {
55
- ExpressTemplates.compile(&fragment)
52
+ html = arbre {
53
+ express_form(:person) {
54
+ radio :subscribed, "Garbage options"
55
+ }
56
+ }
56
57
  }
57
58
  end
58
59
 
59
60
  def radio_with_options_omitted
60
- fragment = -> {
61
+ html = arbre {
61
62
  express_form(:employee) {
62
63
  radio :department_id
63
64
  }
64
65
  }
65
66
  end
66
67
 
67
- class ::Department
68
- def self.columns
69
- [OpenStruct.new(name: 'id'), OpenStruct.new(name: 'name')]
68
+ class ::Department < ::Gender
69
+ def self.order(*)
70
+ all
71
+ end
72
+ def self.all
73
+ return [new(1, 'Accounting'), new(2, 'Marketing')]
70
74
  end
71
75
  end
72
76
  class ::Employee
@@ -84,8 +88,8 @@ class RadioTest < ActiveSupport::TestCase
84
88
  end
85
89
 
86
90
  test "radio options from collection when options omitted" do
87
- assert_match 'collection_radio_buttons(:employee, :department_id, Department.all.select(:id, :name).order(:name), :id, :name, {}, {}',
88
- ExpressTemplates.compile(&radio_with_options_omitted)
91
+ assert_match /input type="radio" value="1" name="employee\[department_id\]" id="employee_department_id_1"/,
92
+ radio_with_options_omitted
89
93
  end
90
94
 
91
95
  # test "radio supports html options"