phlex-rails 2.0.0.rc2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -6
- data/lib/generators/phlex/component/component_generator.rb +7 -3
- data/lib/generators/phlex/install/install_generator.rb +5 -36
- data/lib/generators/phlex/view/view_generator.rb +6 -2
- data/lib/phlex/rails/buffered.rb +9 -12
- data/lib/phlex/rails/buffered_checkbox_builder.rb +0 -4
- data/lib/phlex/rails/buffered_form_builder.rb +0 -64
- data/lib/phlex/rails/buffered_label_builder.rb +0 -3
- data/lib/phlex/rails/buffered_radio_button_builder.rb +0 -4
- data/lib/phlex/rails/csv.rb +4 -6
- data/lib/phlex/rails/helper_macros.rb +7 -8
- data/lib/phlex/rails/helpers/asset_url.rb +0 -1
- data/lib/phlex/rails/helpers/audio_path.rb +3 -0
- data/lib/phlex/rails/helpers/audio_tag.rb +1 -0
- data/lib/phlex/rails/helpers/audio_url.rb +1 -0
- data/lib/phlex/rails/helpers/auto_discovery_link_tag.rb +1 -0
- data/lib/phlex/rails/helpers/build_tag_values.rb +1 -0
- data/lib/phlex/rails/helpers/button_tag.rb +1 -0
- data/lib/phlex/rails/helpers/button_to.rb +1 -0
- data/lib/phlex/rails/helpers/check_box.rb +1 -0
- data/lib/phlex/rails/helpers/check_box_tag.rb +1 -0
- data/lib/phlex/rails/helpers/class_names.rb +1 -0
- data/lib/phlex/rails/helpers/collection_check_boxes.rb +1 -0
- data/lib/phlex/rails/helpers/collection_radio_buttons.rb +1 -0
- data/lib/phlex/rails/helpers/collection_select.rb +1 -0
- data/lib/phlex/rails/helpers/color_field.rb +1 -0
- data/lib/phlex/rails/helpers/color_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/compute_asset_extname.rb +1 -0
- data/lib/phlex/rails/helpers/compute_asset_host.rb +1 -0
- data/lib/phlex/rails/helpers/compute_asset_path.rb +1 -0
- data/lib/phlex/rails/helpers/content_for.rb +4 -2
- data/lib/phlex/rails/helpers/content_tag.rb +1 -0
- data/lib/phlex/rails/helpers/controller_name.rb +1 -0
- data/lib/phlex/rails/helpers/controller_path.rb +1 -0
- data/lib/phlex/rails/helpers/csp_meta_tag.rb +1 -0
- data/lib/phlex/rails/helpers/csrf_meta_tags.rb +1 -0
- data/lib/phlex/rails/helpers/current_cycle.rb +1 -0
- data/lib/phlex/rails/helpers/current_page.rb +1 -0
- data/lib/phlex/rails/helpers/cycle.rb +1 -0
- data/lib/phlex/rails/helpers/date_field.rb +1 -0
- data/lib/phlex/rails/helpers/date_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/date_select.rb +1 -0
- data/lib/phlex/rails/helpers/datetime_field.rb +1 -0
- data/lib/phlex/rails/helpers/datetime_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/datetime_local_field.rb +1 -0
- data/lib/phlex/rails/helpers/datetime_local_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/datetime_select.rb +1 -0
- data/lib/phlex/rails/helpers/debug.rb +1 -0
- data/lib/phlex/rails/helpers/default_url_options.rb +1 -0
- data/lib/phlex/rails/helpers/distance_of_time_in_words.rb +1 -0
- data/lib/phlex/rails/helpers/distance_of_time_in_words_to_now.rb +1 -0
- data/lib/phlex/rails/helpers/dom_class.rb +1 -0
- data/lib/phlex/rails/helpers/dom_id.rb +1 -0
- data/lib/phlex/rails/helpers/email_field.rb +1 -0
- data/lib/phlex/rails/helpers/email_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/error_message.rb +1 -0
- data/lib/phlex/rails/helpers/error_wrapping.rb +1 -0
- data/lib/phlex/rails/helpers/escape_once.rb +1 -0
- data/lib/phlex/rails/helpers/excerpt.rb +1 -0
- data/lib/phlex/rails/helpers/favicon_link_tag.rb +1 -0
- data/lib/phlex/rails/helpers/field_id.rb +1 -0
- data/lib/phlex/rails/helpers/field_name.rb +1 -0
- data/lib/phlex/rails/helpers/field_set_tag.rb +1 -0
- data/lib/phlex/rails/helpers/fields.rb +1 -0
- data/lib/phlex/rails/helpers/fields_for.rb +1 -0
- data/lib/phlex/rails/helpers/file_field.rb +1 -0
- data/lib/phlex/rails/helpers/file_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/flash.rb +1 -0
- data/lib/phlex/rails/helpers/font_path.rb +1 -0
- data/lib/phlex/rails/helpers/font_url.rb +1 -0
- data/lib/phlex/rails/helpers/form_authenticity_token.rb +8 -0
- data/lib/phlex/rails/helpers/form_for.rb +1 -0
- data/lib/phlex/rails/helpers/form_tag.rb +1 -0
- data/lib/phlex/rails/helpers/form_with.rb +1 -0
- data/lib/phlex/rails/helpers/grouped_collection_select.rb +1 -0
- data/lib/phlex/rails/helpers/grouped_options_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/hidden_field.rb +1 -0
- data/lib/phlex/rails/helpers/hidden_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/highlight.rb +1 -0
- data/lib/phlex/rails/helpers/image_path.rb +1 -0
- data/lib/phlex/rails/helpers/image_submit_tag.rb +1 -0
- data/lib/phlex/rails/helpers/image_tag.rb +1 -0
- data/lib/phlex/rails/helpers/image_url.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_import_module_tag.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_importmap_tags.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_include_tag.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_path.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_tag.rb +1 -0
- data/lib/phlex/rails/helpers/javascript_url.rb +1 -0
- data/lib/phlex/rails/helpers/l.rb +1 -0
- data/lib/phlex/rails/helpers/label.rb +1 -0
- data/lib/phlex/rails/helpers/label_tag.rb +3 -0
- data/lib/phlex/rails/helpers/link_to.rb +1 -0
- data/lib/phlex/rails/helpers/link_to_if.rb +1 -0
- data/lib/phlex/rails/helpers/link_to_unless.rb +1 -0
- data/lib/phlex/rails/helpers/link_to_unless_current.rb +1 -0
- data/lib/phlex/rails/helpers/localize.rb +1 -0
- data/lib/phlex/rails/helpers/mail_to.rb +1 -0
- data/lib/phlex/rails/helpers/month_field.rb +1 -0
- data/lib/phlex/rails/helpers/month_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/notice.rb +1 -0
- data/lib/phlex/rails/helpers/number_field.rb +1 -0
- data/lib/phlex/rails/helpers/number_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/number_to_currency.rb +1 -0
- data/lib/phlex/rails/helpers/number_to_human.rb +1 -0
- data/lib/phlex/rails/helpers/number_to_human_size.rb +1 -0
- data/lib/phlex/rails/helpers/number_to_percentage.rb +1 -0
- data/lib/phlex/rails/helpers/number_to_phone.rb +1 -0
- data/lib/phlex/rails/helpers/number_with_delimiter.rb +1 -0
- data/lib/phlex/rails/helpers/number_with_precision.rb +1 -0
- data/lib/phlex/rails/helpers/object.rb +1 -0
- data/lib/phlex/rails/helpers/option_groups_from_collection_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/options_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/options_from_collection_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/password_field.rb +1 -0
- data/lib/phlex/rails/helpers/password_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_asset.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_audio.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_font.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_image.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_javascript.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_stylesheet.rb +1 -0
- data/lib/phlex/rails/helpers/path_to_video.rb +1 -0
- data/lib/phlex/rails/helpers/phone_field.rb +1 -0
- data/lib/phlex/rails/helpers/phone_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/phone_to.rb +1 -0
- data/lib/phlex/rails/helpers/pluralize.rb +1 -0
- data/lib/phlex/rails/helpers/preload_link_tag.rb +1 -0
- data/lib/phlex/rails/helpers/provide.rb +1 -0
- data/lib/phlex/rails/helpers/public_compute_asset_path.rb +1 -0
- data/lib/phlex/rails/helpers/radio_button.rb +1 -0
- data/lib/phlex/rails/helpers/radio_button_tag.rb +1 -0
- data/lib/phlex/rails/helpers/range_field.rb +1 -0
- data/lib/phlex/rails/helpers/range_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/request.rb +1 -0
- data/lib/phlex/rails/helpers/reset_cycle.rb +1 -0
- data/lib/phlex/rails/helpers/rich_text_area.rb +1 -0
- data/lib/phlex/rails/helpers/sanitize.rb +1 -0
- data/lib/phlex/rails/helpers/sanitize_css.rb +1 -0
- data/lib/phlex/rails/helpers/search_field.rb +1 -0
- data/lib/phlex/rails/helpers/search_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/select.rb +1 -0
- data/lib/phlex/rails/helpers/select_date.rb +1 -0
- data/lib/phlex/rails/helpers/select_datetime.rb +1 -0
- data/lib/phlex/rails/helpers/select_day.rb +1 -0
- data/lib/phlex/rails/helpers/select_hour.rb +1 -0
- data/lib/phlex/rails/helpers/select_minute.rb +1 -0
- data/lib/phlex/rails/helpers/select_month.rb +1 -0
- data/lib/phlex/rails/helpers/select_second.rb +1 -0
- data/lib/phlex/rails/helpers/select_tag.rb +1 -0
- data/lib/phlex/rails/helpers/select_time.rb +1 -0
- data/lib/phlex/rails/helpers/select_year.rb +1 -0
- data/lib/phlex/rails/helpers/simple_format.rb +1 -0
- data/lib/phlex/rails/helpers/sms_to.rb +1 -0
- data/lib/phlex/rails/helpers/strip_links.rb +1 -0
- data/lib/phlex/rails/helpers/strip_tags.rb +1 -0
- data/lib/phlex/rails/helpers/stylesheet_link_tag.rb +1 -0
- data/lib/phlex/rails/helpers/stylesheet_path.rb +1 -0
- data/lib/phlex/rails/helpers/stylesheet_url.rb +1 -0
- data/lib/phlex/rails/helpers/submit_tag.rb +1 -0
- data/lib/phlex/rails/helpers/tag.rb +3 -3
- data/lib/phlex/rails/helpers/telephone_field.rb +1 -0
- data/lib/phlex/rails/helpers/telephone_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/text_area.rb +1 -0
- data/lib/phlex/rails/helpers/text_area_tag.rb +1 -0
- data/lib/phlex/rails/helpers/text_field.rb +1 -0
- data/lib/phlex/rails/helpers/text_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/time_ago_in_words.rb +1 -0
- data/lib/phlex/rails/helpers/time_field.rb +1 -0
- data/lib/phlex/rails/helpers/time_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/time_select.rb +1 -0
- data/lib/phlex/rails/helpers/time_tag.rb +1 -0
- data/lib/phlex/rails/helpers/time_zone_options_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/time_zone_select.rb +1 -0
- data/lib/phlex/rails/helpers/token_list.rb +1 -0
- data/lib/phlex/rails/helpers/translate.rb +3 -1
- data/lib/phlex/rails/helpers/truncate.rb +2 -7
- data/lib/phlex/rails/helpers/turbo_frame_tag.rb +1 -0
- data/lib/phlex/rails/helpers/turbo_include_tags.rb +1 -0
- data/lib/phlex/rails/helpers/turbo_refresh_method_tag.rb +1 -0
- data/lib/phlex/rails/helpers/turbo_refresh_scroll_tag.rb +1 -0
- data/lib/phlex/rails/helpers/turbo_refreshes_with.rb +1 -0
- data/lib/phlex/rails/helpers/turbo_stream.rb +3 -2
- data/lib/phlex/rails/helpers/turbo_stream_from.rb +1 -0
- data/lib/phlex/rails/helpers/url_field.rb +1 -0
- data/lib/phlex/rails/helpers/url_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/url_for.rb +1 -0
- data/lib/phlex/rails/helpers/url_options.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_asset.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_audio.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_font.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_image.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_javascript.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_stylesheet.rb +1 -0
- data/lib/phlex/rails/helpers/url_to_video.rb +1 -0
- data/lib/phlex/rails/helpers/utf8_enforcer_tag.rb +1 -0
- data/lib/phlex/rails/helpers/video_path.rb +1 -0
- data/lib/phlex/rails/helpers/video_tag.rb +1 -0
- data/lib/phlex/rails/helpers/video_url.rb +1 -0
- data/lib/phlex/rails/helpers/week_field.rb +1 -0
- data/lib/phlex/rails/helpers/week_field_tag.rb +1 -0
- data/lib/phlex/rails/helpers/weekday_options_for_select.rb +1 -0
- data/lib/phlex/rails/helpers/weekday_select.rb +1 -0
- data/lib/phlex/rails/helpers/word_wrap.rb +1 -0
- data/lib/phlex/rails/helpers.rb +1 -0
- data/lib/phlex/rails/html.rb +7 -4
- data/lib/phlex/rails/layout.rb +5 -5
- data/lib/phlex/rails/sgml.rb +113 -72
- data/lib/phlex/rails/streaming.rb +2 -3
- data/lib/phlex/rails/svg.rb +12 -0
- data/lib/phlex/rails/unbuffered.rb +1 -2
- data/lib/phlex/rails/version.rb +1 -1
- data/lib/phlex/rails.rb +16 -14
- metadata +12 -11
- data/lib/phlex/rails/helper_finder.rb +0 -13
- data/lib/phlex/rails/testing.rb +0 -18
@@ -3,5 +3,6 @@
|
|
3
3
|
module Phlex::Rails::Helpers::WeekdayOptionsForSelect
|
4
4
|
extend Phlex::Rails::HelperMacros
|
5
5
|
|
6
|
+
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-weekday_options_for_select)
|
6
7
|
register_output_helper def weekday_options_for_select(...) = nil
|
7
8
|
end
|
data/lib/phlex/rails/helpers.rb
CHANGED
@@ -63,6 +63,7 @@ module Phlex::Rails::Helpers
|
|
63
63
|
autoload :Flash, "phlex/rails/helpers/flash"
|
64
64
|
autoload :FontPath, "phlex/rails/helpers/font_path"
|
65
65
|
autoload :FontURL, "phlex/rails/helpers/font_url"
|
66
|
+
autoload :FormAuthenticityToken, "phlex/rails/helpers/form_authenticity_token"
|
66
67
|
autoload :FormFor, "phlex/rails/helpers/form_for"
|
67
68
|
autoload :FormTag, "phlex/rails/helpers/form_tag"
|
68
69
|
autoload :FormWith, "phlex/rails/helpers/form_with"
|
data/lib/phlex/rails/html.rb
CHANGED
data/lib/phlex/rails/layout.rb
CHANGED
@@ -16,7 +16,6 @@ module Phlex::Rails
|
|
16
16
|
include Helpers::TurboRefreshScrollTag
|
17
17
|
include Helpers::TurboRefreshesWith
|
18
18
|
|
19
|
-
# @api private
|
20
19
|
module Interface
|
21
20
|
def render(view_context, _locals, &)
|
22
21
|
new.render(view_context, &)
|
@@ -37,19 +36,20 @@ module Phlex::Rails
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
def self.included(
|
41
|
-
unless
|
39
|
+
def self.included(base)
|
40
|
+
unless base < Phlex::HTML
|
42
41
|
raise Phlex::ArgumentError.new("👋 #{name} should only be included into Phlex::HTML classes.")
|
43
42
|
end
|
44
43
|
|
45
|
-
|
44
|
+
base.extend(Interface)
|
45
|
+
super
|
46
46
|
end
|
47
47
|
|
48
48
|
def render(view_context = nil, *args, **kwargs, &block)
|
49
49
|
if @_state
|
50
50
|
super
|
51
51
|
else
|
52
|
-
call(view_context
|
52
|
+
call(context: { rails_view_context: view_context }) do |yielded|
|
53
53
|
case yielded
|
54
54
|
when Symbol
|
55
55
|
output = view_context.view_flow.get(yielded)
|
data/lib/phlex/rails/sgml.rb
CHANGED
@@ -1,92 +1,133 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module Phlex
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
end
|
3
|
+
module Phlex::Rails::SGML
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
base.extend Phlex::Rails::HelperMacros
|
7
|
+
super
|
8
|
+
end
|
11
9
|
|
12
|
-
|
13
|
-
|
10
|
+
module ClassMethods
|
11
|
+
def render_in(...)
|
12
|
+
new.render_in(...)
|
13
|
+
end
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
Phlex::Rails::Partial.new(*, **) { capture(&block) }
|
18
|
-
else
|
19
|
-
Phlex::Rails::Partial.new(*, **)
|
20
|
-
end
|
21
|
-
end
|
16
|
+
def method_missing(name, *args, **kwargs, &block)
|
17
|
+
return super unless view_context.respond_to?(name)
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
19
|
+
const_name = name.to_s.gsub("?", "")
|
20
|
+
module_name = Phlex::Rails::Helpers.constants.find { |mod| mod.to_s.underscore.gsub("domid", "dom_id") == const_name }
|
21
|
+
return super unless module_name
|
27
22
|
|
28
|
-
|
29
|
-
|
30
|
-
else
|
31
|
-
view_context
|
32
|
-
end
|
33
|
-
end
|
23
|
+
raise NoMethodError.new("Try including `Phlex::Rails::Helpers::#{module_name}` in #{self.class.name}.")
|
24
|
+
end
|
34
25
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
return super if renderable < Phlex::SGML
|
43
|
-
when Enumerable
|
44
|
-
return super unless ActiveRecord::Relation === renderable
|
45
|
-
when nil
|
46
|
-
return super if kwargs.length == 0
|
47
|
-
end
|
26
|
+
def partial(*, **, &block)
|
27
|
+
if block
|
28
|
+
Phlex::Rails::Partial.new(*, **) { capture(&block) }
|
29
|
+
else
|
30
|
+
Phlex::Rails::Partial.new(*, **)
|
31
|
+
end
|
32
|
+
end
|
48
33
|
|
49
|
-
|
34
|
+
def helpers
|
35
|
+
warn <<~MESSAGE
|
36
|
+
The `helpers` method is deprecated and will be removed in the next
|
37
|
+
minor version of phlex-rails.
|
50
38
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
capture(Phlex::Rails::Buffered.new(yielded_args[0], view: self), &block)
|
55
|
-
else
|
56
|
-
capture(*yielded_args, &block)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
else
|
60
|
-
@_state.view_context.render(*args, **kwargs)
|
61
|
-
end
|
39
|
+
If you absolutely need to access the underlying Rails view context,
|
40
|
+
you can do that via the `view_context` method, though this is
|
41
|
+
not recommended.
|
62
42
|
|
63
|
-
|
64
|
-
|
43
|
+
It is much safer to use one of the built-in helper adapters or to
|
44
|
+
register your own adapter via `register_output_helper` or
|
45
|
+
`register_value_helper`.
|
65
46
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
47
|
+
See https://beta.phlex.fun/rails/helpers.html
|
48
|
+
MESSAGE
|
49
|
+
|
50
|
+
view_context
|
51
|
+
end
|
52
|
+
|
53
|
+
def view_context
|
54
|
+
context[:rails_view_context] || (
|
55
|
+
raise Phlex::Rails::HelpersCalledBeforeRenderError.new(
|
56
|
+
"Do not use rails helpers until after the view has been rendered."
|
57
|
+
)
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
# If we’re rendered from view_component, we need to capture on the view_component context.
|
62
|
+
def capture_context
|
63
|
+
context[:view_component_context] || view_context
|
64
|
+
end
|
65
|
+
|
66
|
+
def render(renderable = nil, &block)
|
67
|
+
case renderable
|
68
|
+
when Phlex::SGML, Proc, Method, String
|
69
|
+
return super
|
70
|
+
when Class
|
71
|
+
return super if renderable < Phlex::SGML
|
72
|
+
when Enumerable
|
73
|
+
return super unless ActiveRecord::Relation === renderable
|
74
|
+
when nil
|
75
|
+
return super
|
76
|
+
end
|
77
|
+
|
78
|
+
if renderable.respond_to?(:render_in) || renderable.respond_to?(:to_partial_path)
|
79
|
+
output = if block
|
80
|
+
view_context.render(renderable) do |*yielded_args|
|
81
|
+
if yielded_args.length == 1 && defined?(ViewComponent::Base) && ViewComponent::Base === yielded_args[0]
|
82
|
+
capture(Phlex::Rails::Buffered.new(yielded_args[0], component: self), &block)
|
76
83
|
else
|
77
|
-
|
84
|
+
capture(*yielded_args, &block)
|
78
85
|
end
|
79
86
|
end
|
87
|
+
else
|
88
|
+
view_context.render(renderable)
|
89
|
+
end
|
80
90
|
|
81
|
-
|
82
|
-
|
83
|
-
|
91
|
+
raw(output)
|
92
|
+
else
|
93
|
+
super
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def render_in(view_context, &erb)
|
98
|
+
case view_context
|
99
|
+
when defined?(ViewComponent::Base) && ViewComponent::Base
|
100
|
+
context = {
|
101
|
+
rails_view_context: view_context.helpers,
|
102
|
+
view_component_context: view_context,
|
103
|
+
}
|
104
|
+
else
|
105
|
+
context = { rails_view_context: view_context }
|
106
|
+
end
|
84
107
|
|
85
|
-
|
86
|
-
|
87
|
-
|
108
|
+
if erb
|
109
|
+
call(context:) { |*args|
|
110
|
+
if args.length == 1 && Phlex::SGML === args[0] && !erb.source_location&.[](0)&.end_with?(".rb")
|
111
|
+
unbuffered = Phlex::Rails::Unbuffered.new(args[0])
|
112
|
+
raw(view_context.capture(unbuffered, &erb))
|
113
|
+
else
|
114
|
+
raw(view_context.capture(*args, &erb))
|
88
115
|
end
|
89
|
-
|
116
|
+
}.html_safe
|
117
|
+
else
|
118
|
+
call(context:).html_safe
|
90
119
|
end
|
91
120
|
end
|
121
|
+
|
122
|
+
def set_original_view_context(view_context)
|
123
|
+
# no-op (see https://github.com/ViewComponent/view_component/issues/2207)
|
124
|
+
end
|
125
|
+
|
126
|
+
def capture(...)
|
127
|
+
super&.html_safe
|
128
|
+
end
|
129
|
+
|
130
|
+
def enable_cache_reloading?
|
131
|
+
Rails.env.development?
|
132
|
+
end
|
92
133
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# @api private
|
4
3
|
module Phlex::Rails::Streaming
|
5
4
|
include ActionController::Live
|
6
5
|
|
@@ -32,7 +31,7 @@ module Phlex::Rails::Streaming
|
|
32
31
|
headers["Content-Disposition"] = "attachment; filename=\"#{filename || view.filename}\""
|
33
32
|
|
34
33
|
self.response_body = Enumerator.new do |buffer|
|
35
|
-
view.call(buffer, view_context
|
34
|
+
view.call(buffer, context: { rails_view_context: view_context })
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
@@ -47,7 +46,7 @@ module Phlex::Rails::Streaming
|
|
47
46
|
end
|
48
47
|
|
49
48
|
self.response_body = Enumerator.new do |buffer|
|
50
|
-
view.call(buffer, view_context
|
49
|
+
view.call(buffer, context: { rails_view_context: view_context })
|
51
50
|
rescue => e
|
52
51
|
raise(e) if Rails.env.test?
|
53
52
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# @api private
|
4
3
|
class Phlex::Rails::Unbuffered
|
5
4
|
def initialize(component)
|
6
5
|
@component = component
|
@@ -26,7 +25,7 @@ class Phlex::Rails::Unbuffered
|
|
26
25
|
if erb
|
27
26
|
component.public_send(method_name, *, **) do |*a, **kw|
|
28
27
|
component.raw(
|
29
|
-
component.
|
28
|
+
component.capture_context.capture(
|
30
29
|
*a,
|
31
30
|
**kw,
|
32
31
|
&erb
|
data/lib/phlex/rails/version.rb
CHANGED
data/lib/phlex/rails.rb
CHANGED
@@ -4,33 +4,35 @@ require "phlex"
|
|
4
4
|
|
5
5
|
module Phlex
|
6
6
|
module Rails
|
7
|
+
class HelpersCalledBeforeRenderError < StandardError; end
|
8
|
+
|
7
9
|
autoload :Buffered, "phlex/rails/buffered"
|
10
|
+
autoload :Unbuffered, "phlex/rails/unbuffered"
|
11
|
+
|
8
12
|
autoload :BufferedCheckboxBuilder, "phlex/rails/buffered_checkbox_builder"
|
9
13
|
autoload :BufferedFormBuilder, "phlex/rails/buffered_form_builder"
|
10
14
|
autoload :BufferedLabelBuilder, "phlex/rails/buffered_label_builder"
|
11
15
|
autoload :BufferedRadioButtonBuilder, "phlex/rails/buffered_radio_button_builder"
|
12
|
-
|
16
|
+
|
17
|
+
autoload :SGML, "phlex/rails/sgml"
|
13
18
|
autoload :HTML, "phlex/rails/html"
|
14
|
-
autoload :
|
15
|
-
|
19
|
+
autoload :SVG, "phlex/rails/svg"
|
20
|
+
|
21
|
+
autoload :CSV, "phlex/rails/csv"
|
22
|
+
|
16
23
|
autoload :Helpers, "phlex/rails/helpers"
|
24
|
+
autoload :HelperMacros, "phlex/rails/helper_macros"
|
25
|
+
|
17
26
|
autoload :Layout, "phlex/rails/layout"
|
18
27
|
autoload :Partial, "phlex/rails/partial"
|
19
|
-
autoload :SGML, "phlex/rails/sgml"
|
20
28
|
autoload :Streaming, "phlex/rails/streaming"
|
21
|
-
autoload :Unbuffered, "phlex/rails/unbuffered"
|
22
29
|
end
|
23
30
|
|
24
|
-
CSV.
|
25
|
-
CSV.
|
26
|
-
|
27
|
-
SGML.extend Phlex::Rails::SGML::ClassMethods
|
28
|
-
SGML.extend Phlex::Rails::HelperMacros
|
29
|
-
SGML.prepend Phlex::Rails::SGML::Overrides
|
30
|
-
SGML.include Phlex::Rails::HelperFinder
|
31
|
+
CSV.include(Phlex::Rails::CSV)
|
32
|
+
CSV.extend(Phlex::Rails::HelperMacros)
|
31
33
|
|
32
|
-
HTML.
|
33
|
-
|
34
|
+
HTML.include(Phlex::Rails::HTML)
|
35
|
+
SVG.include(Phlex::Rails::SVG)
|
34
36
|
|
35
37
|
ActiveSupport::SafeBuffer.include(Phlex::SGML::SafeObject)
|
36
38
|
end
|
metadata
CHANGED
@@ -1,29 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlex-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Drapper
|
8
|
+
- Will Cosgrove
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
12
|
+
date: 2025-02-14 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: phlex
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
|
-
- -
|
18
|
+
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.0
|
20
|
+
version: 2.0.0
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
|
-
- -
|
25
|
+
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.0.0
|
27
|
+
version: 2.0.0
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: railties
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,7 +45,7 @@ dependencies:
|
|
44
45
|
- - "<"
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '9'
|
47
|
-
description:
|
48
|
+
description: Object-oriented views in pure Ruby.
|
48
49
|
email:
|
49
50
|
- joel@drapper.me
|
50
51
|
executables: []
|
@@ -72,7 +73,6 @@ files:
|
|
72
73
|
- lib/phlex/rails/buffered_label_builder.rb
|
73
74
|
- lib/phlex/rails/buffered_radio_button_builder.rb
|
74
75
|
- lib/phlex/rails/csv.rb
|
75
|
-
- lib/phlex/rails/helper_finder.rb
|
76
76
|
- lib/phlex/rails/helper_macros.rb
|
77
77
|
- lib/phlex/rails/helpers.rb
|
78
78
|
- lib/phlex/rails/helpers/action_cable_meta_tag.rb
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/phlex/rails/helpers/flash.rb
|
138
138
|
- lib/phlex/rails/helpers/font_path.rb
|
139
139
|
- lib/phlex/rails/helpers/font_url.rb
|
140
|
+
- lib/phlex/rails/helpers/form_authenticity_token.rb
|
140
141
|
- lib/phlex/rails/helpers/form_for.rb
|
141
142
|
- lib/phlex/rails/helpers/form_tag.rb
|
142
143
|
- lib/phlex/rails/helpers/form_with.rb
|
@@ -278,7 +279,7 @@ files:
|
|
278
279
|
- lib/phlex/rails/partial.rb
|
279
280
|
- lib/phlex/rails/sgml.rb
|
280
281
|
- lib/phlex/rails/streaming.rb
|
281
|
-
- lib/phlex/rails/
|
282
|
+
- lib/phlex/rails/svg.rb
|
282
283
|
- lib/phlex/rails/unbuffered.rb
|
283
284
|
- lib/phlex/rails/version.rb
|
284
285
|
homepage: https://www.phlex.fun
|
@@ -287,7 +288,7 @@ licenses:
|
|
287
288
|
metadata:
|
288
289
|
homepage_uri: https://www.phlex.fun
|
289
290
|
source_code_uri: https://github.com/phlex-ruby/phlex-rails
|
290
|
-
changelog_uri: https://github.com/phlex-ruby/phlex-rails/
|
291
|
+
changelog_uri: https://github.com/phlex-ruby/phlex-rails/releases
|
291
292
|
funding_uri: https://github.com/sponsors/joeldrapper
|
292
293
|
rubygems_mfa_required: 'true'
|
293
294
|
post_install_message:
|
@@ -298,7 +299,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
298
299
|
requirements:
|
299
300
|
- - ">="
|
300
301
|
- !ruby/object:Gem::Version
|
301
|
-
version: 3.
|
302
|
+
version: '3.2'
|
302
303
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
303
304
|
requirements:
|
304
305
|
- - ">="
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlex::Rails::HelperFinder
|
4
|
-
def method_missing(name, *args, **kwargs, &block)
|
5
|
-
return super unless helpers.respond_to?(name)
|
6
|
-
|
7
|
-
const_name = name.to_s.gsub("?", "")
|
8
|
-
module_name = Phlex::Rails::Helpers.constants.find { |mod| mod.to_s.underscore.gsub("domid", "dom_id") == const_name }
|
9
|
-
return super unless module_name
|
10
|
-
|
11
|
-
raise NoMethodError.new("Try including `Phlex::Rails::Helpers::#{module_name}` in #{self.class.name}.")
|
12
|
-
end
|
13
|
-
end
|
data/lib/phlex/rails/testing.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "phlex/rails"
|
4
|
-
require "phlex/testing"
|
5
|
-
|
6
|
-
module Phlex::Testing::RailsContext
|
7
|
-
def view_context
|
8
|
-
controller.view_context
|
9
|
-
end
|
10
|
-
|
11
|
-
def controller
|
12
|
-
@controller ||= ActionView::TestCase::TestController.new
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
Phlex::Testing::SGML.prepend(
|
17
|
-
Phlex::Testing::RailsContext,
|
18
|
-
)
|