ruby2html 1.4.0 → 1.5.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: e39b469662602b3df3e2444c58474a8c412a90d3556de30c5d404e41f4358eb8
4
- data.tar.gz: dbd03a556e2deebf9d795065de00768259c21dc76d9d248a1a6799c80faa5434
3
+ metadata.gz: b2bea9aba310afffa16b447b62ff3de51cfa14357520b687b048e58af727e766
4
+ data.tar.gz: f139b135af3c215ec2709b1b30fd8f8a7cd7dc941709dfcd5f5d1ef1d21fe63d
5
5
  SHA512:
6
- metadata.gz: edc9f77f24cdcc0cedd73f42750989abf6edf4df55ff40114d2543b2e895fa338caadbe9cea0e99f46a4b2f8c32ef42997e543a7e309ed8781181240e12d05e9
7
- data.tar.gz: dbc116c78d40ce02a5ce228993e8803ad3afd64d43aabc543a1aa4ec407c4fa93b5d1192d9268f832b6a86bbe313e5df2faa878f0e1ec951a1741c0d3dd8f792
6
+ metadata.gz: ef60077fcf16bf1e046368280d9a96222c412cbc1f8369350293cdf2149ff6d7cc3f1184c5a6c2acecf93ce2b10406f45bcb6000e70cfa3ba9fc2987e7d64e30
7
+ data.tar.gz: a71ef6f89836cf773cb4c7de7f9c01ec13081ba1a13cc35a569d2ef90436403ce7b4811862883c16b5002f137a993d88bc5144ee0b1e9f7204683324e0707235
data/.rubocop.yml CHANGED
@@ -2,6 +2,9 @@ inherit_gem:
2
2
  rubocop-rails_config:
3
3
  - config/rails.yml
4
4
 
5
+ AllCops:
6
+ TargetRubyVersion: 3.0
7
+
5
8
  Style/ClassAndModuleChildren:
6
9
  EnforcedStyle: nested
7
10
 
data/README.md CHANGED
@@ -34,12 +34,12 @@ div class: 'container' do
34
34
  h1 'Welcome to Ruby2html! 🎉', class: 'main-title', 'data-controller': 'welcome'
35
35
  link_to 'Home Sweet Home 🏠', root_path, class: 'btn btn-primary', 'data-turbo': false
36
36
 
37
- @items.each do |item|
38
- h2 class: 'item-title', id: "item-#{item[:id]}" do
39
- item[:title]
37
+ @products.each do |product|
38
+ h2 class: 'item-title', id: "product-#{product[:id]}" do
39
+ product.title
40
40
  end
41
41
  p class: 'item-description' do
42
- item[:description]
42
+ product.description
43
43
  end
44
44
  end
45
45
  end
@@ -49,7 +49,7 @@ plain '<div>Inline html</div>'.html_safe
49
49
  render partial: 'shared/navbar'
50
50
  ```
51
51
 
52
- ### (Optional) Nicely Format the HTML
52
+ ### (Optional) Nicely Format the HTML for source inspection
53
53
 
54
54
  File: `config/environments/development.rb` or `config/environments/test.rb`
55
55
  ```ruby
@@ -84,10 +84,10 @@ Replace your ERB with beautiful Ruby code:
84
84
 
85
85
  @items.each do |item|
86
86
  h2 class: 'item-title', id: "item-#{item[:id]}" do
87
- item[:title]
87
+ item.title
88
88
  end
89
89
  p class: 'item-description' do
90
- item[:description]
90
+ item.description
91
91
  end
92
92
  end
93
93
 
@@ -14,10 +14,13 @@
14
14
  h1 "ok"
15
15
  h1 "ok"
16
16
  div do
17
- link_to 'home', root_path
17
+ link_to 'home 1', root_path
18
+ end
19
+ link_to 'home 2', root_path
20
+
21
+ div do
22
+ link_to 'home 3', root_path
18
23
  end
19
- link_to 'home', root_path
20
- link_to 'home', root_path
21
24
 
22
25
  render partial: 'shared/navbar'
23
26
 
@@ -6,6 +6,11 @@ h1 'okddwadwa'
6
6
 
7
7
  div @value
8
8
 
9
+ form_with url: '/test' do |f|
10
+ f.text_field :name, placeholder: 'Name'
11
+ f.submit 'Submit'
12
+ end
13
+
9
14
  link_to 'Home', root_url
10
15
  render partial: 'shared/navbar'
11
16
  render partial: 'shared/footer'
@@ -9,7 +9,6 @@
9
9
 
10
10
  <%= yield :head %>
11
11
 
12
- <link rel="manifest" href="/manifest.json">
13
12
  <link rel="icon" href="/icon.png" type="image/png">
14
13
  <link rel="icon" href="/icon.svg" type="image/svg+xml">
15
14
  <link rel="apple-touch-icon" href="/icon.png">
data/config/routes.rb CHANGED
@@ -6,6 +6,7 @@ Rails.application.routes.draw do
6
6
  get '/benchmark/ruby', to: 'benchmark#ruby_2html'
7
7
 
8
8
  get '/rb_files', to: 'home#rb_files'
9
+ get 'form', to: 'home#form'
9
10
 
10
11
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
11
12
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'htmlbeautifier'
4
+
5
+ module Ruby2html
6
+ class HtmlBeautifierMiddleware
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ status, headers, body = @app.call(env)
13
+
14
+ if headers['Content-Type']&.include?('text/html')
15
+ new_body = []
16
+ body.each do |chunk|
17
+ new_body << HtmlBeautifier.beautify(chunk)
18
+ end
19
+ headers['Content-Length'] = new_body.map(&:bytesize).sum.to_s
20
+ body = new_body
21
+ end
22
+
23
+ [status, headers, body]
24
+ end
25
+ end
26
+ end
@@ -17,7 +17,7 @@ module Ruby2html
17
17
  #{source}
18
18
  end
19
19
  Thread.current[:__ruby2html_renderer__] = renderer
20
- renderer.render_from_rails(#{template.identifier.inspect})
20
+ renderer.__render_from_rails(#{template.identifier.inspect})
21
21
  ensure
22
22
  Thread.current[:__ruby2html_renderer__] = previous_renderer
23
23
  end
@@ -17,9 +17,10 @@ module Ruby2html
17
17
 
18
18
  VOID_ELEMENTS = %w[area base br col embed hr img input link meta param source track wbr].freeze
19
19
 
20
- COMMON_RAILS_METHOD_HELPERS = %w[content_tag link_to image_tag form_tag form_for form_with form_with_model button_to].freeze
20
+ COMMON_RAILS_METHOD_HELPERS = %w[link_to image_tag form_with button_to].freeze
21
21
 
22
22
  attr_reader :output
23
+ attr_accessor :current_output
23
24
 
24
25
  def initialize(context, &root)
25
26
  @context = context
@@ -28,14 +29,14 @@ module Ruby2html
28
29
  @current_output = @output
29
30
  end
30
31
 
31
- def render_from_rails(template_path)
32
+ def __render_from_rails(template_path)
32
33
  result = render
33
34
  return result unless annotate_rendered_view_with_filenames?
34
35
 
35
36
  template_path = template_path.sub("#{Rails.root}/", '')
36
37
 
37
38
  "<!-- BEGIN #{template_path} -->#{result}<!-- END #{template_path} -->".html_safe
38
- end
39
+ end if defined?(ActionView)
39
40
 
40
41
  def render(*args, **options, &block)
41
42
  set_instance_variables
@@ -45,9 +46,8 @@ module Ruby2html
45
46
  end
46
47
  instance_exec(&@root)
47
48
  result = @output.string
48
- if defined?(ActiveSupport)
49
- result = ActiveSupport::SafeBuffer.new(result)
50
- end
49
+
50
+ result = ActiveSupport::SafeBuffer.new(result) if defined?(ActiveSupport)
51
51
 
52
52
  result
53
53
  end
@@ -62,7 +62,7 @@ module Ruby2html
62
62
  HTML5_TAGS.include?(method_name) || super
63
63
  end
64
64
 
65
- def html!(name, *args, **options, &block)
65
+ def html!(name, *args, **options)
66
66
  content = args.first.is_a?(String) ? args.shift : nil
67
67
  attributes = options
68
68
 
@@ -121,8 +121,9 @@ module Ruby2html
121
121
  end
122
122
 
123
123
  COMMON_RAILS_METHOD_HELPERS.each do |method|
124
- define_method(method) do |*args, &block|
125
- plain @context.send(method, *args, &block)
124
+ define_method(method) do |*args, **options, &block|
125
+ constant = "Ruby2html::RailsComponents::#{method.to_s.camelize}".constantize
126
+ constant.new(self, @context, method, *args, **options).render(&block)
126
127
  end
127
128
  end if defined?(ActionView)
128
129
 
@@ -130,7 +131,7 @@ module Ruby2html
130
131
  return '' if attributes.empty?
131
132
 
132
133
  result = StringIO.new
133
- attributes.each do |k, v|
134
+ attributes.compact.each do |k, v|
134
135
  result << ' '
135
136
  result << k.to_s
136
137
  result << '="'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ruby2html
4
- VERSION = '1.4.0'
4
+ VERSION = '1.5.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sebi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-10 00:00:00.000000000 Z
11
+ date: 2024-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlbeautifier
@@ -96,6 +96,7 @@ files:
96
96
  - lib/assets/.keep
97
97
  - lib/gem/ruby2html.rb
98
98
  - lib/gem/ruby2html/component_helper.rb
99
+ - lib/gem/ruby2html/html_beautifier_middleware.rb
99
100
  - lib/gem/ruby2html/rails_helper.rb
100
101
  - lib/gem/ruby2html/railtie.rb
101
102
  - lib/gem/ruby2html/render.rb