phlex-rails 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99afebaac03dab652e1ebfa7b1037d2fa650ac46af545ac97a96c2ff1fcf36d9
4
- data.tar.gz: a2fddfa82b2f9cdb3fcc4ee9c2e7f97e6925ee9a47ffe8eec3b5b40c1f81f127
3
+ metadata.gz: 3ad416c2e7183889248c117bc3b62834d28e5a05b152c4dc68a872eb7afe8cfc
4
+ data.tar.gz: 447e809016fd6108c002b1c220911e8053bc85df885a92aef12f471304e49678
5
5
  SHA512:
6
- metadata.gz: aa23e9efa3d071729eec9e6589971b5ade4644f13d98402b94f398cc045e9b6293c55069f605b7647b5b08ba05b9a44f3a7236530b0c8f3ddd618305cdc1f501
7
- data.tar.gz: 5715fed7d4983d3411bde34ebc35f35a3c99f1314efa348f547c945a557b26dfd6b682dd34e3098c634a34150ff9454e434c2bf041f2c45634493d4f90e76830
6
+ metadata.gz: 815e12b7055db5d322e3a060b00faa3fb727cb2f337eb3a8881c3c2a9f46d075ccacb613772fe90fce70c1dec521be872d1bf49b2632f104d84d154ffbec69d1
7
+ data.tar.gz: bb9912efb00c12e2d8fa13aa414e62af1b011e44a1b29984c0bcdea462bdd7095d0c0cc69fb1ce9f3f9923fb0dd522ae2de1eaedcffbbdfeecb3f31e2d2374e6
@@ -13,14 +13,28 @@ module Phlex::Rails::SGML
13
13
  end
14
14
  end
15
15
 
16
- def method_missing(name, *args, **kwargs, &block)
17
- return super unless view_context.respond_to?(name)
16
+ def method_missing(name, ...)
17
+ super
18
+ rescue NoMethodError => e
19
+ if rendering? && view_context.respond_to?(name)
20
+ const_name = name.to_s.gsub("?", "")
18
21
 
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
22
+ module_name = Phlex::Rails::Helpers.constants.find do |mod|
23
+ mod.name.underscore.gsub("domid", "dom_id") == const_name
24
+ end
22
25
 
23
- raise NoMethodError.new("Try including `Phlex::Rails::Helpers::#{module_name}` in #{self.class.name}.")
26
+ # If we're missing a helper module, raise a NoMethodError with a helpful message,
27
+ # otherwise re-raise the original error.
28
+ if module_name
29
+ raise NoMethodError.new(<<~MESSAGE)
30
+ Try including `Phlex::Rails::Helpers::#{module_name}` in #{self.class.name}.
31
+ MESSAGE
32
+ else
33
+ raise e
34
+ end
35
+ else
36
+ raise e
37
+ end
24
38
  end
25
39
 
26
40
  def partial(*, **, &block)
@@ -51,11 +65,13 @@ module Phlex::Rails::SGML
51
65
  end
52
66
 
53
67
  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
- )
68
+ if rendering?
69
+ context[:rails_view_context]
70
+ else
71
+ raise Phlex::Rails::HelpersCalledBeforeRenderError.new(<<~MESSAGE)
72
+ You can’t use Rails view helpers until after the component has started rendering.
73
+ MESSAGE
74
+ end
59
75
  end
60
76
 
61
77
  # If we’re rendered from view_component, we need to capture on the view_component context.
@@ -105,8 +121,12 @@ module Phlex::Rails::SGML
105
121
  context = { rails_view_context: view_context }
106
122
  end
107
123
 
124
+ fragments = if (request = context[:rails_view_context].request) && (fragment_header = request.headers["X-Fragments"])
125
+ fragment_header.split(",").map(&:strip).presence
126
+ end
127
+
108
128
  if erb
109
- call(context:) { |*args|
129
+ call(context:, fragments:) { |*args|
110
130
  if args.length == 1 && Phlex::SGML === args[0] && !erb.source_location&.[](0)&.end_with?(".rb")
111
131
  unbuffered = Phlex::Rails::Unbuffered.new(args[0])
112
132
  raw(view_context.capture(unbuffered, &erb))
@@ -115,7 +135,7 @@ module Phlex::Rails::SGML
115
135
  end
116
136
  }.html_safe
117
137
  else
118
- call(context:).html_safe
138
+ call(context:, fragments:).html_safe
119
139
  end
120
140
  end
121
141
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Phlex
4
4
  module Rails
5
- VERSION = "2.0.0"
5
+ VERSION = "2.0.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-02-14 00:00:00.000000000 Z
12
+ date: 2025-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: phlex
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 2.0.0
20
+ version: 2.0.2
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 2.0.0
27
+ version: 2.0.2
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: railties
30
30
  requirement: !ruby/object:Gem::Requirement