phlex-rails 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlex
4
+ module Rails
5
+ module HTML
6
+ module AppendMethodAddedWarning
7
+ def method_added(name)
8
+ if name == :append || name == :safe_append
9
+ raise Phlex::NameError, "You shouldn't redefine the #{name} method as it's required for safe HTML output."
10
+ end
11
+
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlex
4
+ module Rails
5
+ module HTML
6
+ module ClassMethods
7
+ def render_in(...)
8
+ new.render_in(...)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Phlex
4
+ module Rails
5
+ module HTML
6
+ module Overrides
7
+ def helpers
8
+ if defined?(ViewComponent::Base) && @_view_context.is_a?(ViewComponent::Base)
9
+ @_view_context.helpers
10
+ else
11
+ @_view_context
12
+ end
13
+ end
14
+
15
+ def render(renderable, *args, **kwargs, &block)
16
+ return super if renderable.is_a?(Phlex::HTML)
17
+ return super if renderable.is_a?(Class) && renderable < Phlex::HTML
18
+
19
+ @_target << @_view_context.render(renderable, *args, **kwargs, &block)
20
+
21
+ nil
22
+ end
23
+
24
+ def render_in(view_context, &block)
25
+ if block_given?
26
+ call(view_context: view_context) do |*args|
27
+ view_context.with_output_buffer(self) do
28
+ original_length = @_target.length
29
+
30
+ if args.length == 1 && Phlex::HTML === args[0]
31
+ output = yield(
32
+ args[0].unbuffered
33
+ )
34
+ else
35
+ output = yield(*args)
36
+ end
37
+
38
+ unchanged = (original_length == @_target.length)
39
+
40
+ if unchanged
41
+ if output.is_a?(ActiveSupport::SafeBuffer)
42
+ unsafe_raw(output)
43
+ else
44
+ text(output)
45
+ end
46
+ end
47
+ end
48
+
49
+ nil
50
+ end.html_safe
51
+ else
52
+ call(view_context: view_context).html_safe
53
+ end
54
+ end
55
+
56
+ def safe_append=(value)
57
+ return unless value
58
+
59
+ @_target << case value
60
+ when String then value
61
+ when Symbol then value.name
62
+ else value.to_s
63
+ end
64
+ end
65
+
66
+ def append=(value)
67
+ case value
68
+ when ActiveSupport::SafeBuffer
69
+ @_target << value
70
+ else
71
+ @_target << case value
72
+ when String then ERB::Util.html_escape(value)
73
+ when Symbol then ERB::Util.html_escape(value.name)
74
+ else ERB::Util.html_escape(value.to_s)
75
+ end
76
+ end
77
+ end
78
+
79
+ def capture
80
+ super&.html_safe
81
+ end
82
+
83
+ # Trick ViewComponent into thinking we're a ViewComponent to fix rendering output
84
+ def set_original_view_context(view_context)
85
+ end
86
+
87
+ private def yield_content(&block)
88
+ return unless block
89
+
90
+ case block.binding.receiver
91
+ when Phlex::HTML
92
+ super
93
+ else
94
+ @_view_context.with_output_buffer(self) { super }
95
+ end
96
+ end
97
+
98
+ private def yield_content_with_args(*args, &block)
99
+ return unless block
100
+
101
+ case block.binding.receiver
102
+ when Phlex::HTML
103
+ super
104
+ else
105
+ @_view_context.with_output_buffer(self) { super }
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -1,17 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Phlex
4
- module Rails
5
- module Layout
6
- include Helpers::CSPMetaTag
7
- include Helpers::CSRFMetaTags
8
- include Helpers::FaviconLinkTag
9
- include Helpers::PreloadLinkTag
10
- include Helpers::StylesheetLinkTag
11
- include Helpers::ActionCableMetaTag
12
- include Helpers::JavaScriptIncludeTag
13
- include Helpers::JavaScriptImportmapTags
14
- include Helpers::JavaScriptImportModuleTag
15
- end
3
+ module Phlex::Rails
4
+ module Layout
5
+ include Helpers::CSPMetaTag
6
+ include Helpers::CSRFMetaTags
7
+ include Helpers::FaviconLinkTag
8
+ include Helpers::PreloadLinkTag
9
+ include Helpers::StyleSheetLinkTag
10
+ include Helpers::ActionCableMetaTag
11
+ include Helpers::AutoDiscoveryLinkTag
12
+ include Helpers::JavaScriptIncludeTag
13
+ include Helpers::JavaScriptImportMapTags
14
+ include Helpers::JavaScriptImportModuleTag
16
15
  end
17
16
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Phlex
4
4
  module Rails
5
- VERSION = "0.5.0"
5
+ VERSION = "0.6.0"
6
6
  end
7
7
  end
data/lib/phlex/rails.rb CHANGED
@@ -7,19 +7,12 @@ module Phlex::Rails
7
7
  Loader = Zeitwerk::Loader.new.tap do |loader|
8
8
  loader.push_dir("#{__dir__}/rails", namespace: Phlex::Rails)
9
9
  loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
10
+ loader.inflector.inflect("html" => "HTML")
10
11
  loader.setup
11
12
  end
12
13
 
13
- module AppendMethodAddedWarning
14
- def method_added(name)
15
- if name == :append || name == :safe_append
16
- raise Phlex::NameError, "You shouldn't redefine the #{name} method as it's required for safe HTML output."
17
- end
14
+ Phlex::HTML.prepend(Phlex::Rails::HTML::Overrides)
18
15
 
19
- super
20
- end
21
- end
22
-
23
- Phlex::HTML.prepend(Phlex::Rails::Renderable)
24
- Phlex::HTML.extend(Phlex::Rails::AppendMethodAddedWarning)
16
+ Phlex::HTML.extend(Phlex::Rails::HTML::ClassMethods)
17
+ Phlex::HTML.extend(Phlex::Rails::HTML::AppendMethodAddedWarning)
25
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlex-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-30 00:00:00.000000000 Z
11
+ date: 2023-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phlex
@@ -73,6 +73,7 @@ extra_rdoc_files: []
73
73
  files:
74
74
  - ".editorconfig"
75
75
  - ".rubocop.yml"
76
+ - ".ruby-version"
76
77
  - Appraisals
77
78
  - CODE_OF_CONDUCT.md
78
79
  - CONTRIBUTING.md
@@ -101,11 +102,21 @@ files:
101
102
  - lib/install/phlex.rb
102
103
  - lib/phlex-rails.rb
103
104
  - lib/phlex/rails.rb
105
+ - lib/phlex/rails/buffered.rb
106
+ - lib/phlex/rails/buffered_checkbox_builder.rb
107
+ - lib/phlex/rails/buffered_form_builder.rb
108
+ - lib/phlex/rails/buffered_label_builder.rb
109
+ - lib/phlex/rails/buffered_radio_button_builder.rb
104
110
  - lib/phlex/rails/engine.rb
105
111
  - lib/phlex/rails/form.rb
112
+ - lib/phlex/rails/helper_macros.rb
106
113
  - lib/phlex/rails/helpers.rb
114
+ - lib/phlex/rails/helpers/routes.rb
115
+ - lib/phlex/rails/helpers/tag.rb
116
+ - lib/phlex/rails/html/append_method_added_warning.rb
117
+ - lib/phlex/rails/html/class_methods.rb
118
+ - lib/phlex/rails/html/overrides.rb
107
119
  - lib/phlex/rails/layout.rb
108
- - lib/phlex/rails/renderable.rb
109
120
  - lib/phlex/rails/version.rb
110
121
  - lib/phlex/testing/rails/view_helper.rb
111
122
  - lib/tasks/phlex_tasks.rake
@@ -134,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
145
  - !ruby/object:Gem::Version
135
146
  version: '0'
136
147
  requirements: []
137
- rubygems_version: 3.4.3
148
+ rubygems_version: 3.4.6
138
149
  signing_key:
139
150
  specification_version: 4
140
151
  summary: A Phlex adapter for Rails
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Phlex
4
- module Rails
5
- module Renderable
6
- def helpers
7
- @_view_context
8
- end
9
-
10
- def render(renderable, *args, **kwargs, &block)
11
- return super if renderable.is_a?(Phlex::HTML)
12
- return super if renderable.is_a?(Class) && renderable < Phlex::HTML
13
-
14
- @_target << @_view_context.render(renderable, *args, **kwargs, &block)
15
-
16
- nil
17
- end
18
-
19
- def render_in(view_context, &block)
20
- if block_given?
21
- call(view_context: view_context) do |*args|
22
- view_context.with_output_buffer(self) do
23
- original_length = @_target.length
24
-
25
- if args.length == 1 && Phlex::HTML === args[0]
26
- output = yield(
27
- args[0].unbuffered
28
- )
29
- else
30
- output = yield(*args)
31
- end
32
-
33
- unchanged = (original_length == @_target.length)
34
-
35
- if unchanged
36
- if output.is_a?(ActiveSupport::SafeBuffer)
37
- unsafe_raw(output)
38
- else
39
- text(output)
40
- end
41
- end
42
- end
43
-
44
- nil
45
- end.html_safe
46
- else
47
- call(view_context: view_context).html_safe
48
- end
49
- end
50
-
51
- def safe_append=(value)
52
- return unless value
53
-
54
- @_target << case value
55
- when String then value
56
- when Symbol then value.name
57
- else value.to_s
58
- end
59
- end
60
-
61
- def append=(value)
62
- return unless value
63
-
64
- if value.html_safe?
65
- self.safe_append = value
66
- else
67
- @_target << case value
68
- when String then ERB::Util.html_escape(value)
69
- when Symbol then ERB::Util.html_escape(value.name)
70
- else ERB::Util.html_escape(value.to_s)
71
- end
72
- end
73
- end
74
-
75
- def capture
76
- super&.html_safe
77
- end
78
-
79
- # Trick ViewComponent into thinking we're a ViewComponent to fix rendering output
80
- def set_original_view_context(view_context)
81
- end
82
-
83
- private def yield_content(&block)
84
- return unless block
85
-
86
- case block.binding.receiver
87
- when Phlex::HTML
88
- super
89
- else
90
- @_view_context.with_output_buffer(self) { super }
91
- end
92
- end
93
-
94
- private def yield_content_with_args(*args, &block)
95
- return unless block
96
-
97
- case block.binding.receiver
98
- when Phlex::HTML
99
- super
100
- else
101
- @_view_context.with_output_buffer(self) { super }
102
- end
103
- end
104
- end
105
- end
106
- end