trusty-cms 4.1.6 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +114 -107
  3. data/INSTALL.md +2 -0
  4. data/app/controllers/admin/pages_controller.rb +1 -1
  5. data/app/controllers/admin/preferences_controller.rb +1 -1
  6. data/app/controllers/admin/resource_controller.rb +1 -1
  7. data/app/controllers/admin/users_controller.rb +1 -1
  8. data/config/environments/development.rb +2 -0
  9. data/lib/generators/extension/USAGE +30 -0
  10. data/lib/generators/extension/extension_generator.rb +97 -0
  11. data/lib/generators/extension/templates/README.md +6 -0
  12. data/lib/generators/extension/templates/RSpecRakefile +109 -0
  13. data/lib/generators/extension/templates/Rakefile +25 -0
  14. data/lib/generators/extension/templates/cucumber.yml +1 -0
  15. data/lib/generators/extension/templates/cucumber_env.rb +11 -0
  16. data/lib/generators/extension/templates/cucumber_paths.rb +22 -0
  17. data/lib/generators/extension/templates/en.yml +3 -0
  18. data/lib/generators/extension/templates/extension.rb +21 -0
  19. data/lib/generators/extension/templates/functional_test.rb +15 -0
  20. data/lib/generators/extension/templates/gemspec.rb +29 -0
  21. data/lib/generators/extension/templates/lib.rb +8 -0
  22. data/lib/generators/extension/templates/migration.rb +9 -0
  23. data/lib/generators/extension/templates/radiant_config.rb +3 -0
  24. data/lib/generators/extension/templates/routes.rb +5 -0
  25. data/lib/generators/extension/templates/spec.opts +6 -0
  26. data/lib/generators/extension/templates/spec_helper.rb +42 -0
  27. data/lib/generators/extension/templates/tasks.rake +47 -0
  28. data/lib/generators/extension/templates/test_helper.rb +26 -0
  29. data/lib/generators/extension_controller/USAGE +36 -0
  30. data/lib/generators/extension_controller/extension_controller_generator.rb +84 -0
  31. data/lib/generators/extension_controller/templates/controller.rb +10 -0
  32. data/lib/generators/extension_controller/templates/controller_spec.rb +23 -0
  33. data/lib/generators/extension_controller/templates/functional_test.rb +11 -0
  34. data/lib/generators/extension_controller/templates/helper.rb +2 -0
  35. data/lib/generators/extension_controller/templates/helper_spec.rb +11 -0
  36. data/lib/generators/extension_controller/templates/helper_test.rb +4 -0
  37. data/lib/generators/extension_controller/templates/view.html.erb +2 -0
  38. data/lib/generators/extension_controller/templates/view_spec.rb +12 -0
  39. data/lib/generators/extension_mailer/USAGE +17 -0
  40. data/lib/generators/extension_mailer/extension_mailer_generator.rb +68 -0
  41. data/lib/generators/extension_mailer/templates/fixture.erb +3 -0
  42. data/lib/generators/extension_mailer/templates/mailer.rb +15 -0
  43. data/lib/generators/extension_mailer/templates/unit_test.rb +21 -0
  44. data/lib/generators/extension_mailer/templates/view.erb +3 -0
  45. data/lib/generators/extension_migration/USAGE +34 -0
  46. data/lib/generators/extension_migration/extension_migration_generator.rb +25 -0
  47. data/lib/generators/extension_migration/templates/migration.rb +11 -0
  48. data/lib/generators/extension_model/USAGE +35 -0
  49. data/lib/generators/extension_model/extension_model_generator.rb +68 -0
  50. data/lib/generators/extension_model/templates/fixtures.yml +19 -0
  51. data/lib/generators/extension_model/templates/migration.rb +16 -0
  52. data/lib/generators/extension_model/templates/model.rb +2 -0
  53. data/lib/generators/extension_model/templates/model_spec.rb +11 -0
  54. data/lib/generators/extension_model/templates/unit_test.rb +8 -0
  55. data/lib/generators/generator_base_extension.rb +18 -0
  56. data/lib/generators/instance/instance_generator.rb +148 -0
  57. data/lib/generators/instance/templates/databases/db2.yml +40 -0
  58. data/lib/generators/instance/templates/databases/mysql.yml +47 -0
  59. data/lib/generators/instance/templates/databases/postgresql.yml +44 -0
  60. data/lib/generators/instance/templates/databases/sqlite3.yml +16 -0
  61. data/lib/generators/instance/templates/databases/sqlserver.yml +21 -0
  62. data/lib/generators/instance/templates/instance_boot.rb +122 -0
  63. data/lib/generators/instance/templates/instance_config.ru +2 -0
  64. data/lib/generators/instance/templates/instance_environment.rb +93 -0
  65. data/lib/generators/instance/templates/instance_gemfile +78 -0
  66. data/lib/generators/instance/templates/instance_generate +6 -0
  67. data/lib/generators/instance/templates/instance_radiant_config.rb +16 -0
  68. data/lib/generators/instance/templates/instance_rakefile +3 -0
  69. data/lib/generators/instance/templates/instance_routes.rb +1 -0
  70. data/lib/generators/language_extension/USAGE +27 -0
  71. data/lib/generators/language_extension/language_extension_generator.rb +71 -0
  72. data/lib/generators/language_extension/templates/README +3 -0
  73. data/lib/generators/language_extension/templates/RSpecRakefile +123 -0
  74. data/lib/generators/language_extension/templates/Rakefile +25 -0
  75. data/lib/generators/language_extension/templates/available_tags.yml +553 -0
  76. data/lib/generators/language_extension/templates/cucumber.yml +1 -0
  77. data/lib/generators/language_extension/templates/cucumber_env.rb +16 -0
  78. data/lib/generators/language_extension/templates/cucumber_paths.rb +14 -0
  79. data/lib/generators/language_extension/templates/extension.rb +12 -0
  80. data/lib/generators/language_extension/templates/functional_test.rb +15 -0
  81. data/lib/generators/language_extension/templates/gemspec.rb +24 -0
  82. data/lib/generators/language_extension/templates/lang.yml +181 -0
  83. data/lib/generators/language_extension/templates/lib.rb +8 -0
  84. data/lib/generators/language_extension/templates/spec.opts +6 -0
  85. data/lib/generators/language_extension/templates/spec_helper.rb +36 -0
  86. data/lib/generators/language_extension/templates/tasks.rake +28 -0
  87. data/lib/generators/language_extension/templates/test_helper.rb +26 -0
  88. data/lib/generators/trusty_cms/USAGE +8 -0
  89. data/lib/generators/trusty_cms/templates/Rakefile.erb +7 -0
  90. data/lib/generators/trusty_cms/templates/application.rb.erb +149 -0
  91. data/lib/generators/trusty_cms/templates/boot.rb.erb +9 -0
  92. data/lib/generators/trusty_cms/templates/config.ru.erb +4 -0
  93. data/lib/generators/trusty_cms/templates/database.yml.erb +28 -0
  94. data/lib/generators/trusty_cms/templates/environment.rb.erb +5 -0
  95. data/lib/generators/trusty_cms/templates/environments/development.rb.erb +24 -0
  96. data/lib/generators/trusty_cms/templates/environments/production.rb.erb +26 -0
  97. data/lib/generators/trusty_cms/templates/environments/test.rb.erb +35 -0
  98. data/lib/generators/trusty_cms/templates/initializers/secret_token.rb.erb +13 -0
  99. data/lib/generators/trusty_cms/templates/initializers/session_store.rb.erb +8 -0
  100. data/lib/generators/trusty_cms/templates/initializers/trusty_cms_config.rb.erb +16 -0
  101. data/lib/generators/trusty_cms/templates/preinitializer.rb.erb +18 -0
  102. data/lib/generators/trusty_cms/templates/routes.rb.erb +0 -0
  103. data/lib/generators/trusty_cms/trusty_cms_generator.rb +32 -0
  104. data/lib/trusty_cms.rb +1 -1
  105. data/lib/trusty_cms/setup.rb +8 -8
  106. data/trusty_cms.gemspec +4 -4
  107. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/base.rb +195 -0
  108. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/check_box.rb +65 -0
  109. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/checkable.rb +18 -0
  110. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/collection_check_boxes.rb +35 -0
  111. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/collection_helpers.rb +118 -0
  112. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/collection_radio_buttons.rb +30 -0
  113. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/collection_select.rb +30 -0
  114. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/color_field.rb +26 -0
  115. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/date_field.rb +14 -0
  116. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/date_select.rb +73 -0
  117. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/datetime_field.rb +31 -0
  118. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/datetime_local_field.rb +20 -0
  119. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/datetime_select.rb +10 -0
  120. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/email_field.rb +10 -0
  121. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/file_field.rb +10 -0
  122. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/grouped_collection_select.rb +31 -0
  123. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/hidden_field.rb +10 -0
  124. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/label.rb +80 -0
  125. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/month_field.rb +14 -0
  126. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/number_field.rb +20 -0
  127. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/password_field.rb +14 -0
  128. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/placeholderable.rb +24 -0
  129. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/radio_button.rb +32 -0
  130. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/range_field.rb +10 -0
  131. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/search_field.rb +27 -0
  132. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/select.rb +42 -0
  133. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/tel_field.rb +10 -0
  134. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/text_area.rb +24 -0
  135. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/text_field.rb +33 -0
  136. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/time_field.rb +14 -0
  137. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/time_select.rb +10 -0
  138. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/time_zone_select.rb +22 -0
  139. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/translator.rb +39 -0
  140. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/url_field.rb +10 -0
  141. data/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.3.4/lib/action_view/helpers/tags/week_field.rb +14 -0
  142. data/yarn.lock +3 -3
  143. metadata +296 -71
  144. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/core.js +0 -126
  145. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/failsafe/index.js +0 -4
  146. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/failsafe/map.js +0 -56
  147. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/failsafe/seq.js +0 -43
  148. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/failsafe/string.js +0 -28
  149. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/index.js +0 -36
  150. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/json.js +0 -76
  151. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/options.js +0 -23
  152. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/binary.js +0 -87
  153. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/index.js +0 -157
  154. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/omap.js +0 -142
  155. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/pairs.js +0 -81
  156. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/set.js +0 -114
  157. data/spec/spec/dummy/node_modules/yaml/browser/dist/tags/yaml-1.1/timestamp.js +0 -97
  158. data/spec/spec/dummy/node_modules/yaml/dist/tags/core.js +0 -114
  159. data/spec/spec/dummy/node_modules/yaml/dist/tags/failsafe/index.js +0 -17
  160. data/spec/spec/dummy/node_modules/yaml/dist/tags/failsafe/map.js +0 -37
  161. data/spec/spec/dummy/node_modules/yaml/dist/tags/failsafe/seq.js +0 -34
  162. data/spec/spec/dummy/node_modules/yaml/dist/tags/failsafe/string.js +0 -40
  163. data/spec/spec/dummy/node_modules/yaml/dist/tags/index.js +0 -62
  164. data/spec/spec/dummy/node_modules/yaml/dist/tags/json.js +0 -60
  165. data/spec/spec/dummy/node_modules/yaml/dist/tags/options.js +0 -35
  166. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/binary.js +0 -97
  167. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/index.js +0 -131
  168. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/omap.js +0 -105
  169. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/pairs.js +0 -80
  170. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/set.js +0 -91
  171. data/spec/spec/dummy/node_modules/yaml/dist/tags/yaml-1.1/timestamp.js +0 -93
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_view/helpers/tags/checkable"
4
+
5
+ module ActionView
6
+ module Helpers
7
+ module Tags # :nodoc:
8
+ class CheckBox < Base #:nodoc:
9
+ include Checkable
10
+
11
+ def initialize(object_name, method_name, template_object, checked_value, unchecked_value, options)
12
+ @checked_value = checked_value
13
+ @unchecked_value = unchecked_value
14
+ super(object_name, method_name, template_object, options)
15
+ end
16
+
17
+ def render
18
+ options = @options.stringify_keys
19
+ options["type"] = "checkbox"
20
+ options["value"] = @checked_value
21
+ options["checked"] = "checked" if input_checked?(options)
22
+
23
+ if options["multiple"]
24
+ add_default_name_and_id_for_value(@checked_value, options)
25
+ options.delete("multiple")
26
+ else
27
+ add_default_name_and_id(options)
28
+ end
29
+
30
+ include_hidden = options.delete("include_hidden") { true }
31
+ checkbox = tag("input", options)
32
+
33
+ if include_hidden
34
+ hidden = hidden_field_for_checkbox(options)
35
+ hidden + checkbox
36
+ else
37
+ checkbox
38
+ end
39
+ end
40
+
41
+ private
42
+ def checked?(value)
43
+ case value
44
+ when TrueClass, FalseClass
45
+ value == !!@checked_value
46
+ when NilClass
47
+ false
48
+ when String
49
+ value == @checked_value
50
+ else
51
+ if value.respond_to?(:include?)
52
+ value.include?(@checked_value)
53
+ else
54
+ value.to_i == @checked_value.to_i
55
+ end
56
+ end
57
+ end
58
+
59
+ def hidden_field_for_checkbox(options)
60
+ @unchecked_value ? tag("input", options.slice("name", "disabled", "form").merge!("type" => "hidden", "value" => @unchecked_value)) : "".html_safe
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ module Checkable # :nodoc:
7
+ def input_checked?(options)
8
+ if options.has_key?("checked")
9
+ checked = options.delete "checked"
10
+ checked == true || checked == "checked"
11
+ else
12
+ checked?(value)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_view/helpers/tags/collection_helpers"
4
+
5
+ module ActionView
6
+ module Helpers
7
+ module Tags # :nodoc:
8
+ class CollectionCheckBoxes < Base # :nodoc:
9
+ include CollectionHelpers
10
+
11
+ class CheckBoxBuilder < Builder # :nodoc:
12
+ def check_box(extra_html_options = {})
13
+ html_options = extra_html_options.merge(@input_html_options)
14
+ html_options[:multiple] = true
15
+ html_options[:skip_default_ids] = false
16
+ @template_object.check_box(@object_name, @method_name, html_options, @value, nil)
17
+ end
18
+ end
19
+
20
+ def render(&block)
21
+ render_collection_for(CheckBoxBuilder, &block)
22
+ end
23
+
24
+ private
25
+ def render_component(builder)
26
+ builder.check_box + builder.label
27
+ end
28
+
29
+ def hidden_field_name
30
+ "#{super}[]"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ module CollectionHelpers # :nodoc:
7
+ class Builder # :nodoc:
8
+ attr_reader :object, :text, :value
9
+
10
+ def initialize(template_object, object_name, method_name, object,
11
+ sanitized_attribute_name, text, value, input_html_options)
12
+ @template_object = template_object
13
+ @object_name = object_name
14
+ @method_name = method_name
15
+ @object = object
16
+ @sanitized_attribute_name = sanitized_attribute_name
17
+ @text = text
18
+ @value = value
19
+ @input_html_options = input_html_options
20
+ end
21
+
22
+ def label(label_html_options = {}, &block)
23
+ html_options = @input_html_options.slice(:index, :namespace).merge(label_html_options)
24
+ html_options[:for] ||= @input_html_options[:id] if @input_html_options[:id]
25
+
26
+ @template_object.label(@object_name, @sanitized_attribute_name, @text, html_options, &block)
27
+ end
28
+ end
29
+
30
+ def initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)
31
+ @collection = collection
32
+ @value_method = value_method
33
+ @text_method = text_method
34
+ @html_options = html_options
35
+
36
+ super(object_name, method_name, template_object, options)
37
+ end
38
+
39
+ private
40
+ def instantiate_builder(builder_class, item, value, text, html_options)
41
+ builder_class.new(@template_object, @object_name, @method_name, item,
42
+ sanitize_attribute_name(value), text, value, html_options)
43
+ end
44
+
45
+ # Generate default options for collection helpers, such as :checked and
46
+ # :disabled.
47
+ def default_html_options_for_collection(item, value)
48
+ html_options = @html_options.dup
49
+
50
+ [:checked, :selected, :disabled, :readonly].each do |option|
51
+ current_value = @options[option]
52
+ next if current_value.nil?
53
+
54
+ accept = if current_value.respond_to?(:call)
55
+ current_value.call(item)
56
+ else
57
+ Array(current_value).map(&:to_s).include?(value.to_s)
58
+ end
59
+
60
+ if accept
61
+ html_options[option] = true
62
+ elsif option == :checked
63
+ html_options[option] = false
64
+ end
65
+ end
66
+
67
+ html_options[:object] = @object
68
+ html_options
69
+ end
70
+
71
+ def sanitize_attribute_name(value)
72
+ "#{sanitized_method_name}_#{sanitized_value(value)}"
73
+ end
74
+
75
+ def render_collection
76
+ @collection.map do |item|
77
+ value = value_for_collection(item, @value_method)
78
+ text = value_for_collection(item, @text_method)
79
+ default_html_options = default_html_options_for_collection(item, value)
80
+ additional_html_options = option_html_attributes(item)
81
+
82
+ yield item, value, text, default_html_options.merge(additional_html_options)
83
+ end.join.html_safe
84
+ end
85
+
86
+ def render_collection_for(builder_class, &block)
87
+ options = @options.stringify_keys
88
+ rendered_collection = render_collection do |item, value, text, default_html_options|
89
+ builder = instantiate_builder(builder_class, item, value, text, default_html_options)
90
+
91
+ if block_given?
92
+ @template_object.capture(builder, &block)
93
+ else
94
+ render_component(builder)
95
+ end
96
+ end
97
+
98
+ # Prepend a hidden field to make sure something will be sent back to the
99
+ # server if all radio buttons are unchecked.
100
+ if options.fetch("include_hidden", true)
101
+ hidden_field + rendered_collection
102
+ else
103
+ rendered_collection
104
+ end
105
+ end
106
+
107
+ def hidden_field
108
+ hidden_name = @html_options[:name] || hidden_field_name
109
+ @template_object.hidden_field_tag(hidden_name, "", id: nil)
110
+ end
111
+
112
+ def hidden_field_name
113
+ "#{tag_name(false, @options[:index])}"
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_view/helpers/tags/collection_helpers"
4
+
5
+ module ActionView
6
+ module Helpers
7
+ module Tags # :nodoc:
8
+ class CollectionRadioButtons < Base # :nodoc:
9
+ include CollectionHelpers
10
+
11
+ class RadioButtonBuilder < Builder # :nodoc:
12
+ def radio_button(extra_html_options = {})
13
+ html_options = extra_html_options.merge(@input_html_options)
14
+ html_options[:skip_default_ids] = false
15
+ @template_object.radio_button(@object_name, @method_name, @value, html_options)
16
+ end
17
+ end
18
+
19
+ def render(&block)
20
+ render_collection_for(RadioButtonBuilder, &block)
21
+ end
22
+
23
+ private
24
+ def render_component(builder)
25
+ builder.radio_button + builder.label
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ class CollectionSelect < Base #:nodoc:
7
+ def initialize(object_name, method_name, template_object, collection, value_method, text_method, options, html_options)
8
+ @collection = collection
9
+ @value_method = value_method
10
+ @text_method = text_method
11
+ @html_options = html_options
12
+
13
+ super(object_name, method_name, template_object, options)
14
+ end
15
+
16
+ def render
17
+ option_tags_options = {
18
+ selected: @options.fetch(:selected) { value },
19
+ disabled: @options[:disabled]
20
+ }
21
+
22
+ select_content_tag(
23
+ options_from_collection_for_select(@collection, @value_method, @text_method, option_tags_options),
24
+ @options, @html_options
25
+ )
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ class ColorField < TextField # :nodoc:
7
+ def render
8
+ options = @options.stringify_keys
9
+ options["value"] ||= validate_color_string(value)
10
+ @options = options
11
+ super
12
+ end
13
+
14
+ private
15
+ def validate_color_string(string)
16
+ regex = /#[0-9a-fA-F]{6}/
17
+ if regex.match?(string)
18
+ string.downcase
19
+ else
20
+ "#000000"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ class DateField < DatetimeField # :nodoc:
7
+ private
8
+ def format_date(value)
9
+ value.try(:strftime, "%Y-%m-%d")
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/time/calculations"
4
+
5
+ module ActionView
6
+ module Helpers
7
+ module Tags # :nodoc:
8
+ class DateSelect < Base # :nodoc:
9
+ def initialize(object_name, method_name, template_object, options, html_options)
10
+ @html_options = html_options
11
+
12
+ super(object_name, method_name, template_object, options)
13
+ end
14
+
15
+ def render
16
+ error_wrapping(datetime_selector(@options, @html_options).send("select_#{select_type}").html_safe)
17
+ end
18
+
19
+ class << self
20
+ def select_type
21
+ @select_type ||= name.split("::").last.sub("Select", "").downcase
22
+ end
23
+ end
24
+
25
+ private
26
+ def select_type
27
+ self.class.select_type
28
+ end
29
+
30
+ def datetime_selector(options, html_options)
31
+ datetime = options.fetch(:selected) { value || default_datetime(options) }
32
+ @auto_index ||= nil
33
+
34
+ options = options.dup
35
+ options[:field_name] = @method_name
36
+ options[:include_position] = true
37
+ options[:prefix] ||= @object_name
38
+ options[:index] = @auto_index if @auto_index && !options.has_key?(:index)
39
+
40
+ DateTimeSelector.new(datetime, options, html_options)
41
+ end
42
+
43
+ def default_datetime(options)
44
+ return if options[:include_blank] || options[:prompt]
45
+
46
+ case options[:default]
47
+ when nil
48
+ Time.current
49
+ when Date, Time
50
+ options[:default]
51
+ else
52
+ default = options[:default].dup
53
+
54
+ # Rename :minute and :second to :min and :sec
55
+ default[:min] ||= default[:minute]
56
+ default[:sec] ||= default[:second]
57
+
58
+ time = Time.current
59
+
60
+ [:year, :month, :day, :hour, :min, :sec].each do |key|
61
+ default[key] ||= time.send(key)
62
+ end
63
+
64
+ Time.utc(
65
+ default[:year], default[:month], default[:day],
66
+ default[:hour], default[:min], default[:sec]
67
+ )
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module Tags # :nodoc:
6
+ class DatetimeField < TextField # :nodoc:
7
+ def render
8
+ options = @options.stringify_keys
9
+ options["value"] ||= format_date(value)
10
+ options["min"] = format_date(datetime_value(options["min"]))
11
+ options["max"] = format_date(datetime_value(options["max"]))
12
+ @options = options
13
+ super
14
+ end
15
+
16
+ private
17
+ def format_date(value)
18
+ raise NotImplementedError
19
+ end
20
+
21
+ def datetime_value(value)
22
+ if value.is_a? String
23
+ DateTime.parse(value) rescue nil
24
+ else
25
+ value
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end