phlex-rails 0.3.1 → 0.4.0

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: d79356655cf4e2bc12cd4cdfcca54c1c5e5a22b1ec9990216bb0a447b0049f4e
4
- data.tar.gz: f3649f01f6cb2184a0171fbda687e4bc84293a5bfacfbea6177d187603dece4a
3
+ metadata.gz: 1c05b7f36804eb576eb2c017a8566e6e15e9dfdc96a80bffe566d6fe1bf90edf
4
+ data.tar.gz: 901dbd435636eb4823cacfef7b42b0281165ad7f4cae0553a070d8592270637b
5
5
  SHA512:
6
- metadata.gz: 3839e661932161404c5442f6a26d8395e8caeef8148b7ae77f4b302fac017271c18836e9bbe2624e7443714793a0669871997fd69b46adf8c0be48b969338ef3
7
- data.tar.gz: 3ca6bc3e0b688591d4fb40e7918fbfd5d6d887ac076bdee1af58c0f4d3343e22f84a61d4d0e5b2390ce23eaedbb7f4dda51394e4b12c23e1536a12e5a822dcb7
6
+ metadata.gz: 58dba0d9f85f66d2b0b8d9a72f211aa685e150bb62646330dcfce230d36fec088f4dd1b81125a23104bf2cfee9d80d1d01e23c240406478df0c15289e3189033
7
+ data.tar.gz: 1ca4bed35a09f31065fb08cf1905942a2f5e6ac468b7a66d5589666957a50361af6269efa2eaf20259fd861efac92884edb2455a111ca83076aa606af1e6f83e
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
5
 
6
6
  gemspec
7
7
 
8
- gem "phlex", github: "joeldrapper/phlex"
8
+ gem "phlex", github: "joeldrapper/phlex", branch: "main"
9
9
  gem "sus"
10
10
  gem "combustion"
11
11
  gem "rubocop"
data/config/sus.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "phlex/rails"
4
+
5
+ Zeitwerk::Loader.eager_load_all
@@ -0,0 +1,14 @@
1
+ <%= render Views::Blog.new do |v| %>
2
+
3
+ hidden
4
+
5
+ <% v.with_post do %><%= link_to "First Post", "/posts/1" %><% end %>
6
+
7
+ content
8
+
9
+ <% v.with_header do %><%= link_to "My blog", "/" %><% end %>
10
+
11
+ here
12
+
13
+ <% v.with_post do %><%= link_to "Last Post", "/posts/2" %><% end %>
14
+ <% end %>
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Views
4
+ class Blog < ApplicationView
5
+ def initialize
6
+ @posts = []
7
+ end
8
+
9
+ def template(&block)
10
+ capture(&block)
11
+
12
+ h3(class: "font-bold") { @header }
13
+
14
+ @posts.each do |post|
15
+ article(class: "drop-shadow p-5 rounded") { post }
16
+ end
17
+ end
18
+
19
+ def with_header(&block)
20
+ @header = capture(&block)
21
+ end
22
+
23
+ def with_post(&block)
24
+ @posts << capture(&block)
25
+ end
26
+ end
27
+ end
@@ -92,6 +92,30 @@ module Phlex
92
92
  end
93
93
  end
94
94
 
95
+ module ImageTag
96
+ def image_tag(*args)
97
+ if (output = @_view_context.image_tag(*args))
98
+ @_target << output
99
+ end
100
+ end
101
+ end
102
+
103
+ module AudioTag
104
+ def audio_tag(*args)
105
+ if (output = @_view_context.audio_tag(*args))
106
+ @_target << output
107
+ end
108
+ end
109
+ end
110
+
111
+ module VideoTag
112
+ def video_tag(*args)
113
+ if (output = @_view_context.video_tag(*args))
114
+ @_target << output
115
+ end
116
+ end
117
+ end
118
+
95
119
  module PreloadLinkTag
96
120
  def preload_link_tag(*args)
97
121
  if (output = @_view_context.preload_link_tag(*args))
@@ -19,7 +19,7 @@ module Phlex
19
19
  def render_in(view_context, &block)
20
20
  if block_given?
21
21
  call(view_context: view_context) do |*args|
22
- view_context.with_output_buffer(OutputBuffer.new(@_target)) do
22
+ view_context.with_output_buffer(self) do
23
23
  original_length = @_target.length
24
24
  output = yield(*args)
25
25
  unchanged = (original_length == @_target.length)
@@ -37,6 +37,34 @@ module Phlex
37
37
  call(view_context: view_context).html_safe
38
38
  end
39
39
  end
40
+
41
+ def safe_append=(value)
42
+ return unless value
43
+
44
+ @_target << case value
45
+ when String then value
46
+ when Symbol then value.name
47
+ else value.to_s
48
+ end
49
+ end
50
+
51
+ def append=(value)
52
+ return unless value
53
+
54
+ if value.html_safe?
55
+ self.safe_append = value
56
+ else
57
+ @_target << case value
58
+ when String then ERB::Util.html_escape(value)
59
+ when Symbol then ERB::Util.html_escape(value.name)
60
+ else ERB::Util.html_escape(value.to_s)
61
+ end
62
+ end
63
+ end
64
+
65
+ def capture
66
+ super.html_safe
67
+ end
40
68
  end
41
69
  end
42
70
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Phlex
4
4
  module Rails
5
- VERSION = "0.3.1"
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  end
data/lib/phlex/rails.rb CHANGED
@@ -4,8 +4,9 @@ require "phlex"
4
4
  require "phlex/rails/engine"
5
5
 
6
6
  module Phlex::Rails
7
- Loader = Zeitwerk::Loader.for_gem(warn_on_extra_files: false).tap do |loader|
7
+ Loader = Zeitwerk::Loader.new.tap do |loader|
8
8
  loader.push_dir("#{__dir__}/rails", namespace: Phlex::Rails)
9
+ loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
9
10
  loader.setup
10
11
  end
11
12
 
@@ -5,7 +5,7 @@ require "phlex/testing/view_helper"
5
5
  module Phlex::Testing
6
6
  module Rails
7
7
  module ViewHelper
8
- include Phlex::Testing::ViewHelper
8
+ include ::Phlex::Testing::ViewHelper
9
9
 
10
10
  def view_context
11
11
  controller.view_context
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.3.1
4
+ version: 0.4.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: 2022-11-25 00:00:00.000000000 Z
11
+ date: 2022-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phlex
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.rc1
19
+ version: '1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '2'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 1.0.0.rc1
29
+ version: '1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2'
@@ -80,6 +80,7 @@ files:
80
80
  - LICENSE.txt
81
81
  - README.md
82
82
  - SECURITY.md
83
+ - config/sus.rb
83
84
  - fixtures/dummy/app/assets/config/manifest.js
84
85
  - fixtures/dummy/app/components/comment_component.html.erb
85
86
  - fixtures/dummy/app/components/comment_component.rb
@@ -88,9 +89,11 @@ files:
88
89
  - fixtures/dummy/app/controllers/articles_controller.rb
89
90
  - fixtures/dummy/app/controllers/comments_controller.rb
90
91
  - fixtures/dummy/app/views/application_view.rb
92
+ - fixtures/dummy/app/views/articles/blog.html.erb
91
93
  - fixtures/dummy/app/views/articles/form.rb
92
94
  - fixtures/dummy/app/views/articles/index.html.erb
93
95
  - fixtures/dummy/app/views/articles/new.html.erb
96
+ - fixtures/dummy/app/views/blog.rb
94
97
  - fixtures/dummy/app/views/card.rb
95
98
  - fixtures/dummy/app/views/comments/comment.rb
96
99
  - fixtures/dummy/app/views/comments/index.html.erb
@@ -135,10 +138,9 @@ files:
135
138
  - lib/phlex/rails/form.rb
136
139
  - lib/phlex/rails/helpers.rb
137
140
  - lib/phlex/rails/layout.rb
138
- - lib/phlex/rails/output_buffer.rb
139
141
  - lib/phlex/rails/renderable.rb
140
142
  - lib/phlex/rails/version.rb
141
- - lib/phlex/testing/rails.rb
143
+ - lib/phlex/testing/rails/view_helper.rb
142
144
  - lib/tasks/phlex_tasks.rake
143
145
  - phlex_logo.png
144
146
  homepage: https://www.phlex.fun
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cgi"
4
-
5
- module Phlex
6
- module Rails
7
- class OutputBuffer < SimpleDelegator
8
- def safe_append=(value)
9
- return unless value
10
-
11
- self << case value
12
- when String then value
13
- when Symbol then value.name
14
- else value.to_s
15
- end
16
- end
17
-
18
- def append=(value)
19
- return unless value
20
-
21
- if value.html_safe?
22
- self.safe_append = value
23
- else
24
- self << case value
25
- when String then CGI.escape_html(value)
26
- when Symbol then CGI.escape_html(value.name)
27
- else CGI.escape_html(value.to_s)
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end