ruby2html 1.3.3 → 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: bb194a11e2015f7caf7e2994f5db0c67fa9b8967c2e44906b3a036aba9eb1be6
4
- data.tar.gz: e60ff3a75bc735e3b084d0f3b91503f151564f3c9d82c9721e8dbc281d6c2283
3
+ metadata.gz: b2bea9aba310afffa16b447b62ff3de51cfa14357520b687b048e58af727e766
4
+ data.tar.gz: f139b135af3c215ec2709b1b30fd8f8a7cd7dc941709dfcd5f5d1ef1d21fe63d
5
5
  SHA512:
6
- metadata.gz: bea7e7d8965f80fdf3aed3f92ecbc49f14630da3e832dae868836cfdcf1f60f8a439e3a82c850586462fa68adb3a39dcc58d35821a7b9554e3df8e8115083a33
7
- data.tar.gz: ba619ce95c33e4d96579bc4f423b2554a75160d11102d9f55dee7632ad7eb63d3e20bd21c3aaee4402a861e9f2e5b8a20aa08c03e3086654dec71072d42ff0f7
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,6 +49,13 @@ plain '<div>Inline html</div>'.html_safe
49
49
  render partial: 'shared/navbar'
50
50
  ```
51
51
 
52
+ ### (Optional) Nicely Format the HTML for source inspection
53
+
54
+ File: `config/environments/development.rb` or `config/environments/test.rb`
55
+ ```ruby
56
+ config.middleware.use Ruby2html::HtmlBeautifierMiddleware
57
+ ```
58
+
52
59
  #### Or use your current .erb views
53
60
 
54
61
  ### In your ApplicationController
@@ -77,10 +84,10 @@ Replace your ERB with beautiful Ruby code:
77
84
 
78
85
  @items.each do |item|
79
86
  h2 class: 'item-title', id: "item-#{item[:id]}" do
80
- item[:title]
87
+ item.title
81
88
  end
82
89
  p class: 'item-description' do
83
- item[:description]
90
+ item.description
84
91
  end
85
92
  end
86
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
 
@@ -2,10 +2,15 @@
2
2
 
3
3
  h1 'RbFiles'
4
4
  h1 'ok'
5
- h1 'ok'
5
+ 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">
@@ -80,4 +80,6 @@ Rails.application.configure do
80
80
 
81
81
  # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
82
82
  # config.generators.apply_rubocop_autocorrect_after_generate!
83
+
84
+ config.middleware.use Ruby2html::HtmlBeautifierMiddleware
83
85
  end
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.3.3'
4
+ VERSION = '1.5.0'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
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
12
- dependencies: []
11
+ date: 2024-08-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: htmlbeautifier
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
13
27
  description: Ruby2HTML empowers developers to write view logic in pure Ruby, seamlessly
14
28
  converting it into clean, well-formatted HTML. Enhance your templating workflow,
15
29
  improve readability, and leverage the full power of Ruby in your views. Features
@@ -82,6 +96,7 @@ files:
82
96
  - lib/assets/.keep
83
97
  - lib/gem/ruby2html.rb
84
98
  - lib/gem/ruby2html/component_helper.rb
99
+ - lib/gem/ruby2html/html_beautifier_middleware.rb
85
100
  - lib/gem/ruby2html/rails_helper.rb
86
101
  - lib/gem/ruby2html/railtie.rb
87
102
  - lib/gem/ruby2html/render.rb