phlex-rails 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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