ruby2html 1.5.0 → 1.5.1

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: b2bea9aba310afffa16b447b62ff3de51cfa14357520b687b048e58af727e766
4
- data.tar.gz: f139b135af3c215ec2709b1b30fd8f8a7cd7dc941709dfcd5f5d1ef1d21fe63d
3
+ metadata.gz: f23a95af48405360717b40b2da95c55592066f6ac054e95bc07974d90fefd205
4
+ data.tar.gz: a2ee6ccafaeb77d085ee8227b51315ebed73a5a1a46eef7eb885f8b1a1b88ed6
5
5
  SHA512:
6
- metadata.gz: ef60077fcf16bf1e046368280d9a96222c412cbc1f8369350293cdf2149ff6d7cc3f1184c5a6c2acecf93ce2b10406f45bcb6000e70cfa3ba9fc2987e7d64e30
7
- data.tar.gz: a71ef6f89836cf773cb4c7de7f9c01ec13081ba1a13cc35a569d2ef90436403ce7b4811862883c16b5002f137a993d88bc5144ee0b1e9f7204683324e0707235
6
+ metadata.gz: a09d5f0288ca174e8348620f62b1ac11331fb53f34ea9790f16b81c27fae218aa4c22076512c5716b41b1c4ddc3376f77d5f593ac8359f65be71c9a002fcd280
7
+ data.tar.gz: 64e555a4b2cb1f4470f00a967b310cd7a23cdc79bdf2b2650af5ee044aef1049bd37677e771e6d65f84f6e15234c9cd39fadf45af3086481e30a83c9d3b7b8a4
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ div do
4
+ h1 'form'
5
+
6
+ form_with url: '/form', method: 'post' do |f|
7
+ f.label :name
8
+ f.text_field :name
9
+ f.submit 'submit'
10
+ end
11
+
12
+ link_to 'Home', root_path
13
+ # button_to 'home', '/'
14
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruby2html
4
+ module RailsComponents
5
+ class BaseComponent
6
+ def initialize(render, context, method, *args, **options)
7
+ @render = render
8
+ @context = context
9
+ @method = method
10
+ @args = args
11
+ @options = options
12
+ end
13
+
14
+ def render(&block)
15
+ raise NotImplementedError
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruby2html
4
+ module RailsComponents
5
+ class ButtonTo < BaseComponent
6
+ def render(&block)
7
+ @render.plain(@context.button_to(*@args, **@options, &block))
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruby2html
4
+ module RailsComponents
5
+ class FormWith < BaseComponent
6
+ include ActionView::Helpers::FormHelper
7
+ def render(&block)
8
+ model = @options[:model]
9
+ scope = @options[:scope]
10
+ url = @options[:url]
11
+ method = @options[:method]
12
+ local = @options[:local]
13
+
14
+ form_options = @options.except(:model, :scope, :url, :method, :local)
15
+ form_options[:action] = determine_url(model, url)
16
+ form_options[:method] = determine_method(model, method)
17
+ form_options['data-remote'] = 'true' unless local
18
+ @model = model
19
+ @scope = determine_scope(model, scope)
20
+
21
+ @render.form(**form_options) do
22
+ authenticity_token_tag
23
+ utf8_enforcer_tag
24
+ block.call(self)
25
+ end
26
+ end
27
+
28
+ def label(method, text = nil, options = {})
29
+ @render.label(**options.merge(for: field_id(method))) do
30
+ text || method.to_s.humanize
31
+ end
32
+ end
33
+
34
+ def text_field(method, options = {})
35
+ @render.input(**options.merge(type: 'text', name: field_name(method), id: field_id(method), value: object_value_for(method)))
36
+ end
37
+
38
+ def hidden_field(method, options = {})
39
+ @render.input(**options.merge(type: 'hidden', name: field_name(method), id: field_id(method), value: object_value_for(method)))
40
+ end
41
+
42
+ def password_field(method, options = {})
43
+ @render.input(**options.merge(type: 'password', name: field_name(method), id: field_id(method)))
44
+ end
45
+
46
+ def file_field(method, options = {})
47
+ @render.input(**options.merge(type: 'file', name: field_name(method), id: field_id(method)))
48
+ end
49
+
50
+ def submit(value = nil, options = {})
51
+ @render.input(**options.merge(type: 'submit', value: value || submit_default_value))
52
+ end
53
+
54
+ private
55
+ def determine_url(model, url)
56
+ return url if url
57
+ return polymorphic_path(model) if model && model.respond_to?(:persisted?)
58
+ nil
59
+ end
60
+
61
+ def determine_method(model, method)
62
+ return method if method
63
+ return 'post' unless model
64
+ model.respond_to?(:persisted?) && model.persisted? ? 'patch' : 'post'
65
+ end
66
+
67
+ def determine_scope(model, scope)
68
+ return scope if scope
69
+ model.model_name.param_key if model.respond_to?(:model_name)
70
+ end
71
+
72
+ def authenticity_token_tag
73
+ @render.input(type: 'hidden', name: 'authenticity_token', value: @context.session[:_csrf_token])
74
+ end
75
+
76
+ def utf8_enforcer_tag
77
+ @render.input(type: 'hidden', name: 'utf8', value: '✓')
78
+ end
79
+
80
+ def field_name(method)
81
+ @scope ? "#{@scope}[#{method}]" : method.to_s
82
+ end
83
+
84
+ def field_id(method)
85
+ @scope ? "#{@scope}_#{method}" : method.to_s
86
+ end
87
+
88
+ def object_value_for(method)
89
+ @model&.public_send(method) if @model
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruby2html
4
+ module RailsComponents
5
+ class ImageTag < BaseComponent
6
+ def render(&block)
7
+ @render.plain(@context.image_tag(*@args, **@options, &block))
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ruby2html
4
+ module RailsComponents
5
+ class LinkTo < BaseComponent
6
+ def render(&block)
7
+ @render.plain(@context.button_to(*@args, **@options, &block))
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ruby2html
4
- VERSION = '1.5.0'
4
+ VERSION = '1.5.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sebi
@@ -63,6 +63,7 @@ files:
63
63
  - app/models/concerns/.keep
64
64
  - app/views/benchmark/normal_html.html.erb
65
65
  - app/views/benchmark/ruby_2html.html.rb
66
+ - app/views/home/form.html.rb
66
67
  - app/views/home/index.html.erb
67
68
  - app/views/home/rb_files.html.rb
68
69
  - app/views/layouts/application.html.erb
@@ -97,6 +98,11 @@ files:
97
98
  - lib/gem/ruby2html.rb
98
99
  - lib/gem/ruby2html/component_helper.rb
99
100
  - lib/gem/ruby2html/html_beautifier_middleware.rb
101
+ - lib/gem/ruby2html/rails_components/base_component.rb
102
+ - lib/gem/ruby2html/rails_components/button_to.rb
103
+ - lib/gem/ruby2html/rails_components/form_with.rb
104
+ - lib/gem/ruby2html/rails_components/image_tag.rb
105
+ - lib/gem/ruby2html/rails_components/link_to.rb
100
106
  - lib/gem/ruby2html/rails_helper.rb
101
107
  - lib/gem/ruby2html/railtie.rb
102
108
  - lib/gem/ruby2html/render.rb