phlex-rails 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +4 -6
  3. data/Gemfile +2 -4
  4. data/lib/generators/phlex/component/USAGE +1 -1
  5. data/lib/generators/phlex/component/templates/component.rb.erb +1 -1
  6. data/lib/generators/phlex/install/install_generator.rb +1 -2
  7. data/lib/generators/phlex/install/templates/application_layout.rb +1 -1
  8. data/lib/generators/phlex/view/templates/view.rb.erb +1 -1
  9. data/lib/phlex/rails/csv.rb +16 -0
  10. data/lib/phlex/rails/fragment_finder.rb +28 -0
  11. data/lib/phlex/rails/helper_macros.rb +11 -31
  12. data/lib/phlex/rails/helpers/action_cable_meta_tag.rb +11 -0
  13. data/lib/phlex/rails/helpers/action_name.rb +10 -0
  14. data/lib/phlex/rails/helpers/asset_path.rb +15 -0
  15. data/lib/phlex/rails/helpers/asset_url.rb +8 -0
  16. data/lib/phlex/rails/helpers/audio_path.rb +8 -0
  17. data/lib/phlex/rails/helpers/audio_tag.rb +9 -0
  18. data/lib/phlex/rails/helpers/audio_url.rb +8 -0
  19. data/lib/phlex/rails/helpers/auto_discovery_link_tag.rb +9 -0
  20. data/lib/phlex/rails/helpers/build_tag_values.rb +8 -0
  21. data/lib/phlex/rails/helpers/button_tag.rb +9 -0
  22. data/lib/phlex/rails/helpers/button_to.rb +9 -0
  23. data/lib/phlex/rails/helpers/check_box.rb +9 -0
  24. data/lib/phlex/rails/helpers/check_box_tag.rb +9 -0
  25. data/lib/phlex/rails/helpers/class_names.rb +8 -0
  26. data/lib/phlex/rails/helpers/collection_check_boxes.rb +10 -0
  27. data/lib/phlex/rails/helpers/collection_radio_buttons.rb +10 -0
  28. data/lib/phlex/rails/helpers/collection_select.rb +9 -0
  29. data/lib/phlex/rails/helpers/color_field.rb +9 -0
  30. data/lib/phlex/rails/helpers/color_field_tag.rb +9 -0
  31. data/lib/phlex/rails/helpers/compute_asset_extname.rb +8 -0
  32. data/lib/phlex/rails/helpers/compute_asset_host.rb +8 -0
  33. data/lib/phlex/rails/helpers/compute_asset_path.rb +8 -0
  34. data/lib/phlex/rails/helpers/content_for.rb +11 -0
  35. data/lib/phlex/rails/helpers/content_tag.rb +9 -0
  36. data/lib/phlex/rails/helpers/controller_name.rb +8 -0
  37. data/lib/phlex/rails/helpers/controller_path.rb +8 -0
  38. data/lib/phlex/rails/helpers/csp_meta_tag.rb +9 -0
  39. data/lib/phlex/rails/helpers/csrf_meta_tags.rb +9 -0
  40. data/lib/phlex/rails/helpers/current_cycle.rb +8 -0
  41. data/lib/phlex/rails/helpers/current_page.rb +8 -0
  42. data/lib/phlex/rails/helpers/cycle.rb +8 -0
  43. data/lib/phlex/rails/helpers/date_field.rb +9 -0
  44. data/lib/phlex/rails/helpers/date_field_tag.rb +9 -0
  45. data/lib/phlex/rails/helpers/date_select.rb +9 -0
  46. data/lib/phlex/rails/helpers/datetime_field.rb +9 -0
  47. data/lib/phlex/rails/helpers/datetime_field_tag.rb +9 -0
  48. data/lib/phlex/rails/helpers/datetime_local_field.rb +9 -0
  49. data/lib/phlex/rails/helpers/datetime_local_field_tag.rb +9 -0
  50. data/lib/phlex/rails/helpers/datetime_select.rb +9 -0
  51. data/lib/phlex/rails/helpers/debug.rb +9 -0
  52. data/lib/phlex/rails/helpers/default_url_options.rb +8 -0
  53. data/lib/phlex/rails/helpers/distance_of_time_in_words.rb +8 -0
  54. data/lib/phlex/rails/helpers/distance_of_time_in_words_to_now.rb +8 -0
  55. data/lib/phlex/rails/helpers/dom_class.rb +8 -0
  56. data/lib/phlex/rails/helpers/dom_id.rb +8 -0
  57. data/lib/phlex/rails/helpers/email_field.rb +9 -0
  58. data/lib/phlex/rails/helpers/email_field_tag.rb +9 -0
  59. data/lib/phlex/rails/helpers/error_message.rb +8 -0
  60. data/lib/phlex/rails/helpers/error_wrapping.rb +9 -0
  61. data/lib/phlex/rails/helpers/escape_once.rb +8 -0
  62. data/lib/phlex/rails/helpers/excerpt.rb +8 -0
  63. data/lib/phlex/rails/helpers/favicon_link_tag.rb +9 -0
  64. data/lib/phlex/rails/helpers/field_id.rb +8 -0
  65. data/lib/phlex/rails/helpers/field_name.rb +8 -0
  66. data/lib/phlex/rails/helpers/field_set_tag.rb +9 -0
  67. data/lib/phlex/rails/helpers/fields.rb +10 -0
  68. data/lib/phlex/rails/helpers/fields_for.rb +10 -0
  69. data/lib/phlex/rails/helpers/file_field.rb +9 -0
  70. data/lib/phlex/rails/helpers/file_field_tag.rb +9 -0
  71. data/lib/phlex/rails/helpers/flash.rb +8 -0
  72. data/lib/phlex/rails/helpers/font_path.rb +8 -0
  73. data/lib/phlex/rails/helpers/font_url.rb +8 -0
  74. data/lib/phlex/rails/helpers/form_for.rb +10 -0
  75. data/lib/phlex/rails/helpers/form_tag.rb +9 -0
  76. data/lib/phlex/rails/helpers/form_with.rb +10 -0
  77. data/lib/phlex/rails/helpers/grouped_collection_select.rb +9 -0
  78. data/lib/phlex/rails/helpers/grouped_options_for_select.rb +9 -0
  79. data/lib/phlex/rails/helpers/hidden_field.rb +9 -0
  80. data/lib/phlex/rails/helpers/hidden_field_tag.rb +9 -0
  81. data/lib/phlex/rails/helpers/highlight.rb +9 -0
  82. data/lib/phlex/rails/helpers/image_path.rb +8 -0
  83. data/lib/phlex/rails/helpers/image_submit_tag.rb +9 -0
  84. data/lib/phlex/rails/helpers/image_tag.rb +9 -0
  85. data/lib/phlex/rails/helpers/image_url.rb +8 -0
  86. data/lib/phlex/rails/helpers/javascript_import_module_tag.rb +9 -0
  87. data/lib/phlex/rails/helpers/javascript_importmap_tags.rb +9 -0
  88. data/lib/phlex/rails/helpers/javascript_include_tag.rb +9 -0
  89. data/lib/phlex/rails/helpers/javascript_path.rb +8 -0
  90. data/lib/phlex/rails/helpers/javascript_tag.rb +9 -0
  91. data/lib/phlex/rails/helpers/javascript_url.rb +8 -0
  92. data/lib/phlex/rails/helpers/l.rb +8 -0
  93. data/lib/phlex/rails/helpers/label.rb +8 -0
  94. data/lib/phlex/rails/helpers/label_tag.rb +9 -0
  95. data/lib/phlex/rails/helpers/link_to.rb +9 -0
  96. data/lib/phlex/rails/helpers/link_to_if.rb +9 -0
  97. data/lib/phlex/rails/helpers/link_to_unless.rb +9 -0
  98. data/lib/phlex/rails/helpers/link_to_unless_current.rb +9 -0
  99. data/lib/phlex/rails/helpers/localize.rb +8 -0
  100. data/lib/phlex/rails/helpers/mail_to.rb +9 -0
  101. data/lib/phlex/rails/helpers/month_field.rb +9 -0
  102. data/lib/phlex/rails/helpers/month_field_tag.rb +9 -0
  103. data/lib/phlex/rails/helpers/number_field.rb +9 -0
  104. data/lib/phlex/rails/helpers/number_field_tag.rb +9 -0
  105. data/lib/phlex/rails/helpers/number_to_currency.rb +8 -0
  106. data/lib/phlex/rails/helpers/number_to_human.rb +8 -0
  107. data/lib/phlex/rails/helpers/number_to_human_size.rb +8 -0
  108. data/lib/phlex/rails/helpers/number_to_percentage.rb +8 -0
  109. data/lib/phlex/rails/helpers/number_to_phone.rb +8 -0
  110. data/lib/phlex/rails/helpers/number_with_delimiter.rb +8 -0
  111. data/lib/phlex/rails/helpers/number_with_precision.rb +8 -0
  112. data/lib/phlex/rails/helpers/object.rb +8 -0
  113. data/lib/phlex/rails/helpers/option_groups_from_collection_for_select.rb +9 -0
  114. data/lib/phlex/rails/helpers/options_for_select.rb +9 -0
  115. data/lib/phlex/rails/helpers/options_from_collection_for_select.rb +9 -0
  116. data/lib/phlex/rails/helpers/password_field.rb +9 -0
  117. data/lib/phlex/rails/helpers/password_field_tag.rb +9 -0
  118. data/lib/phlex/rails/helpers/path_to_asset.rb +8 -0
  119. data/lib/phlex/rails/helpers/path_to_audio.rb +8 -0
  120. data/lib/phlex/rails/helpers/path_to_font.rb +8 -0
  121. data/lib/phlex/rails/helpers/path_to_image.rb +8 -0
  122. data/lib/phlex/rails/helpers/path_to_javascript.rb +8 -0
  123. data/lib/phlex/rails/helpers/path_to_stylesheet.rb +8 -0
  124. data/lib/phlex/rails/helpers/path_to_video.rb +8 -0
  125. data/lib/phlex/rails/helpers/phone_field.rb +9 -0
  126. data/lib/phlex/rails/helpers/phone_field_tag.rb +9 -0
  127. data/lib/phlex/rails/helpers/phone_to.rb +9 -0
  128. data/lib/phlex/rails/helpers/pluralize.rb +9 -0
  129. data/lib/phlex/rails/helpers/preload_link_tag.rb +9 -0
  130. data/lib/phlex/rails/helpers/provide.rb +8 -0
  131. data/lib/phlex/rails/helpers/public_compute_asset_path.rb +8 -0
  132. data/lib/phlex/rails/helpers/radio_button.rb +9 -0
  133. data/lib/phlex/rails/helpers/radio_button_tag.rb +9 -0
  134. data/lib/phlex/rails/helpers/range_field.rb +9 -0
  135. data/lib/phlex/rails/helpers/range_field_tag.rb +9 -0
  136. data/lib/phlex/rails/helpers/request.rb +8 -0
  137. data/lib/phlex/rails/helpers/reset_cycle.rb +8 -0
  138. data/lib/phlex/rails/helpers/rich_text_area.rb +9 -0
  139. data/lib/phlex/rails/helpers/sanitize.rb +8 -0
  140. data/lib/phlex/rails/helpers/sanitize_css.rb +8 -0
  141. data/lib/phlex/rails/helpers/search_field.rb +9 -0
  142. data/lib/phlex/rails/helpers/search_field_tag.rb +9 -0
  143. data/lib/phlex/rails/helpers/select.rb +9 -0
  144. data/lib/phlex/rails/helpers/select_date.rb +9 -0
  145. data/lib/phlex/rails/helpers/select_datetime.rb +9 -0
  146. data/lib/phlex/rails/helpers/select_day.rb +9 -0
  147. data/lib/phlex/rails/helpers/select_hour.rb +9 -0
  148. data/lib/phlex/rails/helpers/select_minute.rb +9 -0
  149. data/lib/phlex/rails/helpers/select_month.rb +9 -0
  150. data/lib/phlex/rails/helpers/select_second.rb +9 -0
  151. data/lib/phlex/rails/helpers/select_tag.rb +9 -0
  152. data/lib/phlex/rails/helpers/select_time.rb +9 -0
  153. data/lib/phlex/rails/helpers/select_year.rb +9 -0
  154. data/lib/phlex/rails/helpers/simple_format.rb +9 -0
  155. data/lib/phlex/rails/helpers/sms_to.rb +9 -0
  156. data/lib/phlex/rails/helpers/strip_links.rb +8 -0
  157. data/lib/phlex/rails/helpers/strip_tags.rb +8 -0
  158. data/lib/phlex/rails/helpers/stylesheet_link_tag.rb +9 -0
  159. data/lib/phlex/rails/helpers/stylesheet_path.rb +8 -0
  160. data/lib/phlex/rails/helpers/stylesheet_url.rb +8 -0
  161. data/lib/phlex/rails/helpers/submit_tag.rb +9 -0
  162. data/lib/phlex/rails/helpers/t.rb +3 -0
  163. data/lib/phlex/rails/helpers/telephone_field.rb +9 -0
  164. data/lib/phlex/rails/helpers/telephone_field_tag.rb +9 -0
  165. data/lib/phlex/rails/helpers/text_area.rb +9 -0
  166. data/lib/phlex/rails/helpers/text_area_tag.rb +9 -0
  167. data/lib/phlex/rails/helpers/text_field.rb +9 -0
  168. data/lib/phlex/rails/helpers/text_field_tag.rb +9 -0
  169. data/lib/phlex/rails/helpers/time_ago_in_words.rb +8 -0
  170. data/lib/phlex/rails/helpers/time_field.rb +9 -0
  171. data/lib/phlex/rails/helpers/time_field_tag.rb +9 -0
  172. data/lib/phlex/rails/helpers/time_select.rb +9 -0
  173. data/lib/phlex/rails/helpers/time_tag.rb +9 -0
  174. data/lib/phlex/rails/helpers/time_zone_options_for_select.rb +9 -0
  175. data/lib/phlex/rails/helpers/time_zone_select.rb +9 -0
  176. data/lib/phlex/rails/helpers/token_list.rb +8 -0
  177. data/lib/phlex/rails/helpers/translate.rb +25 -0
  178. data/lib/phlex/rails/helpers/truncate.rb +8 -0
  179. data/lib/phlex/rails/helpers/turbo_frame_tag.rb +8 -0
  180. data/lib/phlex/rails/helpers/turbo_include_tags.rb +8 -0
  181. data/lib/phlex/rails/helpers/turbo_refresh_method_tag.rb +8 -0
  182. data/lib/phlex/rails/helpers/turbo_refresh_scroll_tag.rb +8 -0
  183. data/lib/phlex/rails/helpers/turbo_refreshes_with.rb +9 -0
  184. data/lib/phlex/rails/helpers/turbo_stream_from.rb +8 -0
  185. data/lib/phlex/rails/helpers/url_field.rb +9 -0
  186. data/lib/phlex/rails/helpers/url_field_tag.rb +9 -0
  187. data/lib/phlex/rails/helpers/url_for.rb +8 -0
  188. data/lib/phlex/rails/helpers/url_options.rb +8 -0
  189. data/lib/phlex/rails/helpers/url_to_asset.rb +8 -0
  190. data/lib/phlex/rails/helpers/url_to_audio.rb +8 -0
  191. data/lib/phlex/rails/helpers/url_to_font.rb +8 -0
  192. data/lib/phlex/rails/helpers/url_to_image.rb +8 -0
  193. data/lib/phlex/rails/helpers/url_to_javascript.rb +8 -0
  194. data/lib/phlex/rails/helpers/url_to_stylesheet.rb +8 -0
  195. data/lib/phlex/rails/helpers/url_to_video.rb +8 -0
  196. data/lib/phlex/rails/helpers/utf8_enforcer_tag.rb +9 -0
  197. data/lib/phlex/rails/helpers/video_path.rb +8 -0
  198. data/lib/phlex/rails/helpers/video_tag.rb +9 -0
  199. data/lib/phlex/rails/helpers/video_url.rb +8 -0
  200. data/lib/phlex/rails/helpers/week_field.rb +9 -0
  201. data/lib/phlex/rails/helpers/week_field_tag.rb +9 -0
  202. data/lib/phlex/rails/helpers/weekday_options_for_select.rb +9 -0
  203. data/lib/phlex/rails/helpers/weekday_select.rb +9 -0
  204. data/lib/phlex/rails/helpers/with_output_buffer.rb +9 -0
  205. data/lib/phlex/rails/helpers/word_wrap.rb +8 -0
  206. data/lib/phlex/rails/helpers.rb +243 -1458
  207. data/lib/phlex/rails/html/method_missing.rb +13 -0
  208. data/lib/phlex/rails/html.rb +11 -0
  209. data/lib/phlex/rails/layout.rb +33 -22
  210. data/lib/phlex/rails/{sgml/overrides.rb → sgml.rb} +26 -15
  211. data/lib/phlex/rails/streaming.rb +95 -7
  212. data/lib/phlex/rails/version.rb +1 -1
  213. data/lib/phlex/rails.rb +25 -22
  214. metadata +204 -31
  215. data/CONTRIBUTING.md +0 -23
  216. data/lib/generators/phlex/controller/USAGE +0 -10
  217. data/lib/generators/phlex/controller/controller_generator.rb +0 -74
  218. data/lib/generators/phlex/controller/templates/controller.rb.erb +0 -14
  219. data/lib/generators/phlex/controller/templates/view.rb.erb +0 -9
  220. data/lib/generators/rspec/view/templates/view_spec.rb.erb +0 -10
  221. data/lib/generators/rspec/view/view_generator.rb +0 -14
  222. data/lib/generators/test_unit/templates/view_test.rb.erb +0 -15
  223. data/lib/generators/test_unit/view_generator.rb +0 -12
  224. data/lib/phlex/rails/html/format.rb +0 -8
  225. data/lib/phlex/rails/sgml/class_methods.rb +0 -13
data/CONTRIBUTING.md DELETED
@@ -1,23 +0,0 @@
1
- # Contributing to Phlex
2
-
3
- ## Priorities
4
-
5
- We’re trying to provide the best possible developer experience for the people using Phlex in their apps and the best possible performance for the users of those apps.
6
-
7
- Phlex is incredibly complex and requires a lot of meta-programming but when you use it, it feels simple. Phlex views feel like plain old Ruby objects. You just subclass and define a couple of methods. That’s it. That’s how it should be.
8
-
9
- ## Setup
10
-
11
- - Install dependencies `bundle install`
12
- - Run the tests `bundle exec sus`
13
- - Run Rubocop and auto-correct `bundle exec rubocop -A`
14
-
15
- ## Tests
16
-
17
- We use the **[Sus](https://github.com/ioquatix/sus)** testing framework. It feels a bit like RSpec with a few small differences. There’s no documentation for Sus at the moment, but you should be able to pick up the basics from reading other tests or looking at the implementation in the Sus repo.
18
-
19
- You can run all the tests with `bundle exec sus`.
20
-
21
- ## Documentation
22
-
23
- Documentation is deployed when it’s merged into the `latest` branch with a release. But you can build and preview the docs locally by running `bin/docs`.
@@ -1,10 +0,0 @@
1
- Description:
2
- Generates a Rails controller with Phlex views for the supplied actions
3
-
4
- Example:
5
- rails generate phlex:controller Articles index show
6
-
7
- This will create:
8
- app/controllers/articles_controller.rb
9
- app/views/articles/index_view.rb
10
- app/views/articles/show_view.rb
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Phlex::Generators
4
- class ControllerGenerator < ::Rails::Generators::NamedBase # :nodoc:
5
- source_root File.expand_path("templates", __dir__)
6
-
7
- check_class_collision suffix: "Controller"
8
-
9
- argument :actions,
10
- type: :array,
11
- default: [],
12
- banner: "action action"
13
-
14
- class_option :skip_routes,
15
- type: :boolean,
16
- desc: "Don't add routes to config/routes.rb."
17
-
18
- class_option :parent,
19
- type: :string,
20
- default: "ApplicationController",
21
- desc: "The parent class for the generated controller"
22
-
23
- def create_controllers
24
- template "controller.rb.erb", File.join(
25
- "app/controllers", class_path, "#{file_name}_controller.rb"
26
- )
27
- end
28
-
29
- def copy_views
30
- actions.each do |action|
31
- @action = action
32
- @path = File.join(
33
- "app/views", class_path, file_name, "#{action}_view.rb"
34
- )
35
-
36
- template "view.rb.erb", @path
37
- end
38
- end
39
-
40
- def add_routes
41
- return if options[:skip_routes]
42
-
43
- routing_code = "resources :#{file_name}"
44
-
45
- if actions.any?
46
- routing_code << ", only: [#{actions.map { ":#{_1}" }.join(', ')}]"
47
- end
48
-
49
- route routing_code, namespace: regular_class_path
50
- end
51
-
52
- hook_for :test_framework, as: :controller do |generator|
53
- invoke generator, [remove_possible_suffix(name), actions]
54
- end
55
-
56
- private
57
-
58
- def parent_class_name
59
- options[:parent]
60
- end
61
-
62
- def file_name
63
- remove_possible_suffix(super)
64
- end
65
-
66
- def name
67
- remove_possible_suffix(super)
68
- end
69
-
70
- def remove_possible_suffix(name)
71
- name.sub(/_?controller$/i, "")
72
- end
73
- end
74
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- <% module_namespacing do -%>
4
- class <%= class_name %>Controller < <%= parent_class_name.classify %>
5
- layout -> { ApplicationLayout }
6
-
7
- <% actions.each do |action| -%>
8
- def <%= action %>
9
- render <%= class_name %>::<%= action.camelize %>View.new
10
- end
11
- <%= "\n" unless action == actions.last -%>
12
- <% end -%>
13
- end
14
- <% end -%>
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- <% module_namespacing do -%>
4
- class <%= class_name %>::<%= @action.classify %>View < ApplicationView
5
- def template
6
- h1 { "<%= class_name %> <%= @action %>" }
7
- p { "Find me in <%= @path %>" }
8
- end
9
- end<% end %>
@@ -1,10 +0,0 @@
1
- require "rails_helper"
2
-
3
- RSpec.describe Views::<%= class_name %>, type: :view do
4
- pending "renders without problem" do
5
- result = render(described_class.new)
6
-
7
- expect(result.css("h1").text).to eq "<%= class_name %>"
8
- expect(result.css("p").text).to eq "Find me in <%= @path %>"
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rspec
4
- module Generators
5
- class ViewGenerator < ::Rails::Generators::NamedBase
6
- source_root File.expand_path("templates", __dir__)
7
-
8
- def create_view
9
- @path = File.join("app/views", class_path, "#{file_name}.rb")
10
- template "view_spec.rb.erb", File.join("spec/views", class_path, "#{file_name}_spec.rb")
11
- end
12
- end
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- require "test_helper"
2
- require "phlex/testing/rails"
3
- require "phlex/testing/nokogiri"
4
-
5
- class Views::<%= class_name %>Test < ActionView::TestCase
6
- include Phlex::Testing::Rails::ViewHelper
7
- include Phlex::Testing::Nokogiri::FragmentHelper
8
-
9
- test "should render without problems" do
10
- result = render(Views::<%= class_name %>.new)
11
-
12
- assert_equal result.css("h1").first.text, "<%= class_name %>"
13
- assert_equal result.css("p").first.text, "Find me in <%= @path %>"
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module TestUnit
4
- class ViewGenerator < ::Rails::Generators::NamedBase
5
- source_root File.expand_path("templates", __dir__)
6
-
7
- def create_view
8
- @path = File.join("app/views", class_path, "#{file_name}.rb")
9
- template "view_test.rb.erb", File.join("test/views", class_path, "#{file_name}_test.rb")
10
- end
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # @api private
4
- module Phlex::Rails::HTML::Format
5
- def format
6
- :html
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Phlex
4
- module Rails
5
- module SGML
6
- module ClassMethods
7
- def render_in(...)
8
- new.render_in(...)
9
- end
10
- end
11
- end
12
- end
13
- end