actionview-component 1.10.0 → 1.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +16 -1
- data/README.md +22 -10
- data/actionview-component.gemspec +1 -0
- data/lib/action_view/component/test_helpers.rb +11 -1
- data/lib/action_view/component/version.rb +1 -1
- data/lib/rails/generators/component/component_generator.rb +7 -3
- data/lib/rails/generators/erb/component_generator.rb +27 -0
- data/lib/rails/generators/{component → erb}/templates/component.html.erb.tt +0 -0
- data/lib/rails/generators/haml/component_generator.rb +27 -0
- data/lib/rails/generators/haml/templates/component.html.haml.tt +5 -0
- data/lib/rails/generators/slim/component_generator.rb +27 -0
- data/lib/rails/generators/slim/templates/component.html.slim +5 -0
- metadata +22 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d2c0dab4ae3674f45f3f830257f49b108f51923e98a3de1182667f71a951cb2
|
4
|
+
data.tar.gz: 220a51f5dee367a6bf22e3a5306d17a2e302c5326cf4ad4a5f271c2ff0edb864
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9c79d7c62166ef2fb8f1cba5220d1599c8d6129252e09aec47917de3a7db1c3d9d6ef70da8231dc3389eac9e0136b2b533a972867a12ad975f8f5db9f49d5cc
|
7
|
+
data.tar.gz: efc71bebe0aeba60aeefdc00ae50d7485e2a28334c7b4764d359e84402e740f8aa0b66a36035be5223a2114c1e432c50c071d0924c2a3f90d8658f5e76a330d5
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,19 @@
|
|
1
|
+
# v1.11.0
|
2
|
+
|
3
|
+
* Add support for Capybara matchers.
|
4
|
+
|
5
|
+
*Joel Hawksley*
|
6
|
+
|
7
|
+
* Add erb, haml, & slim template generators
|
8
|
+
|
9
|
+
*Asger Behncke Jacobsen*
|
10
|
+
|
1
11
|
# v1.10.0
|
2
12
|
|
3
13
|
* Deprecate all `render` syntaxes except for `render(MyComponent.new(foo: :bar))`
|
4
14
|
|
15
|
+
*Joel Hawksley*
|
16
|
+
|
5
17
|
# v1.9.0
|
6
18
|
|
7
19
|
* Remove initializer requirement for Ruby 2.7+
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
actionview-component (1.
|
4
|
+
actionview-component (1.11.0)
|
5
|
+
capybara (>= 3.26)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
@@ -61,6 +62,8 @@ GEM
|
|
61
62
|
minitest (~> 5.1)
|
62
63
|
tzinfo (~> 1.1)
|
63
64
|
zeitwerk (~> 2.1, >= 2.1.8)
|
65
|
+
addressable (2.7.0)
|
66
|
+
public_suffix (>= 2.0.2, < 5.0)
|
64
67
|
ast (2.4.0)
|
65
68
|
better_html (1.0.14)
|
66
69
|
actionview (>= 4.0)
|
@@ -71,6 +74,14 @@ GEM
|
|
71
74
|
parser (>= 2.4)
|
72
75
|
smart_properties
|
73
76
|
builder (3.2.3)
|
77
|
+
capybara (3.31.0)
|
78
|
+
addressable
|
79
|
+
mini_mime (>= 0.1.3)
|
80
|
+
nokogiri (~> 1.8)
|
81
|
+
rack (>= 1.6.0)
|
82
|
+
rack-test (>= 0.6.3)
|
83
|
+
regexp_parser (~> 1.5)
|
84
|
+
xpath (~> 3.2)
|
74
85
|
concurrent-ruby (1.1.5)
|
75
86
|
crass (1.0.5)
|
76
87
|
erubi (1.8.0)
|
@@ -101,6 +112,7 @@ GEM
|
|
101
112
|
parallel (1.17.0)
|
102
113
|
parser (2.6.3.0)
|
103
114
|
ast (~> 2.4.0)
|
115
|
+
public_suffix (4.0.3)
|
104
116
|
rack (2.0.8)
|
105
117
|
rack-test (1.1.0)
|
106
118
|
rack (>= 1.0, < 3)
|
@@ -132,6 +144,7 @@ GEM
|
|
132
144
|
thor (>= 0.20.3, < 2.0)
|
133
145
|
rainbow (3.0.0)
|
134
146
|
rake (10.5.0)
|
147
|
+
regexp_parser (1.6.0)
|
135
148
|
rubocop (0.74.0)
|
136
149
|
jaro_winkler (~> 1.5.1)
|
137
150
|
parallel (~> 1.10)
|
@@ -166,6 +179,8 @@ GEM
|
|
166
179
|
websocket-driver (0.7.1)
|
167
180
|
websocket-extensions (>= 0.1.0)
|
168
181
|
websocket-extensions (0.1.4)
|
182
|
+
xpath (3.2.0)
|
183
|
+
nokogiri (~> 1.8)
|
169
184
|
zeitwerk (2.1.10)
|
170
185
|
|
171
186
|
PLATFORMS
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
_Note: This gem is in the process of a name / API change, see https://github.com/github/actionview-component/issues/206_
|
2
|
+
|
1
3
|
# ActionView::Component
|
2
4
|
`ActionView::Component` is a framework for building view components in Rails.
|
3
5
|
|
@@ -15,7 +17,7 @@ As the goal of this gem is to be upstreamed into Rails, it is designed to integr
|
|
15
17
|
|
16
18
|
## Compatibility
|
17
19
|
|
18
|
-
`actionview-component` is tested for compatibility with combinations of Ruby `2.5`/`2.6` and Rails `5.0.0`/`5.2.3`/`6.0.0`/`6.1.0.alpha`.
|
20
|
+
`actionview-component` is tested for compatibility with combinations of Ruby `2.5`/`2.6`/`2.7` and Rails `5.0.0`/`5.2.3`/`6.0.0`/`6.1.0.alpha`.
|
19
21
|
|
20
22
|
## Installation
|
21
23
|
Add this line to your application's Gemfile:
|
@@ -117,6 +119,18 @@ bin/rails generate component Example title content
|
|
117
119
|
create app/components/example_component.html.erb
|
118
120
|
```
|
119
121
|
|
122
|
+
`ActionView::Component` includes template generators for the `erb`, `haml`, and `slim` template engines and will use the template engine specified in your Rails config (`config.generators.template_engine`) by default.
|
123
|
+
|
124
|
+
If you want to override this behavior, you can pass the template engine as an option to the generator:
|
125
|
+
|
126
|
+
```bash
|
127
|
+
bin/rails generate component Example title content --template-engine slim
|
128
|
+
invoke test_unit
|
129
|
+
create test/components/example_component_test.rb
|
130
|
+
create app/components/example_component.rb
|
131
|
+
create app/components/example_component.html.slim
|
132
|
+
```
|
133
|
+
|
120
134
|
#### Implementation
|
121
135
|
|
122
136
|
An `ActionView::Component` is a Ruby file and corresponding template file (in any format supported by Rails) with the same base name:
|
@@ -389,17 +403,16 @@ end
|
|
389
403
|
|
390
404
|
### Testing
|
391
405
|
|
392
|
-
Components are unit tested directly. The `render_inline` test helper
|
406
|
+
Components are unit tested directly. The `render_inline` test helper is compatible with Capybara matchers, allowing us to test the component above as:
|
393
407
|
|
394
408
|
```ruby
|
395
409
|
require "action_view/component/test_case"
|
396
410
|
|
397
411
|
class MyComponentTest < ActionView::Component::TestCase
|
398
412
|
test "render component" do
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
)
|
413
|
+
render_inline(TestComponent.new(title: "my title")) { "Hello, World!" }
|
414
|
+
|
415
|
+
assert_selector("span[title='my title']", "Hello, World!")
|
403
416
|
end
|
404
417
|
end
|
405
418
|
```
|
@@ -413,10 +426,9 @@ To test a specific variant you can wrap your test with the `with_variant` helper
|
|
413
426
|
```ruby
|
414
427
|
test "render component for tablet" do
|
415
428
|
with_variant :tablet do
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
)
|
429
|
+
render_inline(TestComponent.new(title: "my title")) { "Hello, tablets!" }
|
430
|
+
|
431
|
+
assert_selector("span[title='my title']", "Hello, tablets!")
|
420
432
|
end
|
421
433
|
end
|
422
434
|
```
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.required_ruby_version = ">= 2.3.0"
|
36
36
|
|
37
|
+
spec.add_runtime_dependency "capybara", ">= 3.26"
|
37
38
|
spec.add_development_dependency "bundler", ">= 1.14"
|
38
39
|
spec.add_development_dependency "rake", "~> 10.0"
|
39
40
|
spec.add_development_dependency "minitest", "= 5.1.0"
|
@@ -1,10 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "capybara/minitest"
|
4
|
+
|
3
5
|
module ActionView
|
4
6
|
module Component
|
5
7
|
module TestHelpers
|
8
|
+
include Capybara::Minitest::Assertions
|
9
|
+
|
10
|
+
def page
|
11
|
+
Capybara::Node::Simple.new(@raw)
|
12
|
+
end
|
13
|
+
|
6
14
|
def render_inline(component, **args, &block)
|
7
|
-
|
15
|
+
@raw = controller.view_context.render(component, args, &block)
|
16
|
+
|
17
|
+
Nokogiri::HTML.fragment(@raw)
|
8
18
|
end
|
9
19
|
|
10
20
|
def controller
|
@@ -6,15 +6,18 @@ module Rails
|
|
6
6
|
source_root File.expand_path("templates", __dir__)
|
7
7
|
|
8
8
|
argument :attributes, type: :array, default: [], banner: "attribute"
|
9
|
-
hook_for :test_framework
|
10
9
|
check_class_collision suffix: "Component"
|
11
10
|
|
11
|
+
class_option :require_content, type: :boolean, default: false
|
12
|
+
|
12
13
|
def create_component_file
|
13
14
|
template "component.rb", File.join("app/components", class_path, "#{file_name}_component.rb")
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
hook_for :test_framework
|
18
|
+
|
19
|
+
hook_for :template_engine do |instance, template_engine|
|
20
|
+
instance.invoke template_engine, [instance.name], require_content: instance.send(:requires_content?)
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
@@ -24,6 +27,7 @@ module Rails
|
|
24
27
|
end
|
25
28
|
|
26
29
|
def requires_content?
|
30
|
+
return if behavior == :revoke
|
27
31
|
return @requires_content if @asked
|
28
32
|
|
29
33
|
@asked = true
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/erb"
|
4
|
+
|
5
|
+
module Erb
|
6
|
+
module Generators
|
7
|
+
class ComponentGenerator < Base
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
class_option :require_content, type: :boolean, default: false
|
11
|
+
|
12
|
+
def copy_view_file
|
13
|
+
template "component.html.erb", File.join("app/components", class_path, "#{file_name}_component.html.erb")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def requires_content?
|
19
|
+
options["require_content"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_name
|
23
|
+
@_file_name ||= super.sub(/_component\z/i, "")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/erb/component_generator"
|
4
|
+
|
5
|
+
module Haml
|
6
|
+
module Generators
|
7
|
+
class ComponentGenerator < Erb::Generators::ComponentGenerator
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
class_option :require_content, type: :boolean, default: false
|
11
|
+
|
12
|
+
def copy_view_file
|
13
|
+
template "component.html.haml", File.join("app/components", class_path, "#{file_name}_component.html.haml")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def requires_content?
|
19
|
+
options["require_content"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_name
|
23
|
+
@_file_name ||= super.sub(/_component\z/i, "")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/erb/component_generator"
|
4
|
+
|
5
|
+
module Slim
|
6
|
+
module Generators
|
7
|
+
class ComponentGenerator < Erb::Generators::ComponentGenerator
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
class_option :require_content, type: :boolean, default: false
|
11
|
+
|
12
|
+
def copy_view_file
|
13
|
+
template "component.html.slim", File.join("app/components", class_path, "#{file_name}_component.html.slim")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def requires_content?
|
19
|
+
options["require_content"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_name
|
23
|
+
@_file_name ||= super.sub(/_component\z/i, "")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionview-component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capybara
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.26'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.26'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,10 +170,15 @@ files:
|
|
156
170
|
- lib/action_view/component/version.rb
|
157
171
|
- lib/rails/generators/component/USAGE
|
158
172
|
- lib/rails/generators/component/component_generator.rb
|
159
|
-
- lib/rails/generators/component/templates/component.html.erb.tt
|
160
173
|
- lib/rails/generators/component/templates/component.rb.tt
|
174
|
+
- lib/rails/generators/erb/component_generator.rb
|
175
|
+
- lib/rails/generators/erb/templates/component.html.erb.tt
|
176
|
+
- lib/rails/generators/haml/component_generator.rb
|
177
|
+
- lib/rails/generators/haml/templates/component.html.haml.tt
|
161
178
|
- lib/rails/generators/rspec/component_generator.rb
|
162
179
|
- lib/rails/generators/rspec/templates/component_spec.rb.tt
|
180
|
+
- lib/rails/generators/slim/component_generator.rb
|
181
|
+
- lib/rails/generators/slim/templates/component.html.slim
|
163
182
|
- lib/rails/generators/test_unit/component_generator.rb
|
164
183
|
- lib/rails/generators/test_unit/templates/component_test.rb.tt
|
165
184
|
- lib/railties/lib/rails.rb
|