view_component 2.58.0 → 2.59.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of view_component might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/docs/CHANGELOG.md +49 -0
- data/lib/view_component/capybara_simple_session.rb +132 -0
- data/lib/view_component/test_helpers.rb +25 -1
- data/lib/view_component/version.rb +1 -1
- data/lib/view_component.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca82494216cd6b91d9a073bd1ab025cbe48049560893a500e72caff01141e02f
|
4
|
+
data.tar.gz: 9eecd79663f09edb31cae5a104b861c4922a99a92307f583b0703b11053a2d60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e04336d18bd57be41e3ae4637ae1978a4884a352fced4b852a40901fa1ff02a13e6266ab4c669fbb3669fa718eecbfd8a5b13c54df79cbb9b692e278f02f35e
|
7
|
+
data.tar.gz: 2fed6153f148f683afe4cd27c909051aedfc92e9f896e6fe41736083d05217e7df15ac12799291fd2299ca59c1ee12e7ec1145ac9be5ee78cacb81d55fccf548
|
data/docs/CHANGELOG.md
CHANGED
@@ -9,6 +9,55 @@ title: Changelog
|
|
9
9
|
|
10
10
|
## main
|
11
11
|
|
12
|
+
## 2.59.0
|
13
|
+
|
14
|
+
* Expose Capybara DSL methods directly inside tests.
|
15
|
+
|
16
|
+
The following Capybara methods are now available directly without having to use the `page` method:
|
17
|
+
|
18
|
+
* [`all`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FFinders:all)
|
19
|
+
* [`first`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FFinders:first)
|
20
|
+
* [`text`](https://rubydoc.info/github/teamcapybara/capybara/Capybara%2FNode%2FSimple:text)
|
21
|
+
* [`find`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find)
|
22
|
+
* [`find_all`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_all)
|
23
|
+
* [`find_button`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_button)
|
24
|
+
* [`find_by_id`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_by_id)
|
25
|
+
* [`find_field`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_field)
|
26
|
+
* [`find_link`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FFinders:find_link)
|
27
|
+
* [`has_content?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_content%3F)
|
28
|
+
* [`has_text?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_text%3F)
|
29
|
+
* [`has_css?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_css%3F)
|
30
|
+
* [`has_no_content?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_content%3F)
|
31
|
+
* [`has_no_text?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_text%3F)
|
32
|
+
* [`has_no_css?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_css%3F)
|
33
|
+
* [`has_no_xpath?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_xpath%3F)
|
34
|
+
* [`has_xpath?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_xpath%3F)
|
35
|
+
* [`has_link?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_link%3F)
|
36
|
+
* [`has_no_link?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_link%3F)
|
37
|
+
* [`has_button?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_button%3F)
|
38
|
+
* [`has_no_button?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_button%3F)
|
39
|
+
* [`has_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_field%3F)
|
40
|
+
* [`has_no_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_field%3F)
|
41
|
+
* [`has_checked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_checked_field%3F)
|
42
|
+
* [`has_unchecked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_unchecked_field%3F)
|
43
|
+
* [`has_no_table?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_table%3F)
|
44
|
+
* [`has_table?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_table%3F)
|
45
|
+
* [`has_select?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_select%3F)
|
46
|
+
* [`has_no_select?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_select%3F)
|
47
|
+
* [`has_selector?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_selector%3F)
|
48
|
+
* [`has_no_selector?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_selector%3F)
|
49
|
+
* [`has_no_checked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_checked_field%3F)
|
50
|
+
* [`has_no_unchecked_field?`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FNode%2FMatchers:has_no_unchecked_field%3F)
|
51
|
+
|
52
|
+
* Add support for `within*` Capybara DLS methods:
|
53
|
+
|
54
|
+
* [`within`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within)
|
55
|
+
* [`within_element`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within)
|
56
|
+
* [`within_fieldset`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within_fieldset)
|
57
|
+
* [`within_table`](https://rubydoc.info/github/teamcapybara/capybara/master/Capybara%2FSession:within_table)
|
58
|
+
|
59
|
+
*Jacob Carlborg*
|
60
|
+
|
12
61
|
## 2.58.0
|
13
62
|
|
14
63
|
* Switch to `standardrb`.
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ViewComponent
|
4
|
+
# This is a simpler version of {Capybara::Session}.
|
5
|
+
#
|
6
|
+
# It only includes {Capybara::Node::Finders}, {Capybara::Node::Matchers},
|
7
|
+
# {#within} and {#within_element}. It is useful in that it does not require a
|
8
|
+
# session, an application or a driver, but can still use Capybara's finders
|
9
|
+
# and matchers on any string that contains HTML.
|
10
|
+
class CapybaraSimpleSession
|
11
|
+
# Most of the code in this class is shamelessly stolen from the
|
12
|
+
# {Capybara::Session} class in the Capybara gem
|
13
|
+
# (https://github.com/teamcapybara/capybara/blob/e704d00879fb1d1e1a0cc01e04c101bcd8af4a68/lib/capybara/session.rb#L38).
|
14
|
+
|
15
|
+
NODE_METHODS = %i[
|
16
|
+
all
|
17
|
+
first
|
18
|
+
text
|
19
|
+
|
20
|
+
find
|
21
|
+
find_all
|
22
|
+
find_button
|
23
|
+
find_by_id
|
24
|
+
find_field
|
25
|
+
find_link
|
26
|
+
|
27
|
+
has_content?
|
28
|
+
has_text?
|
29
|
+
has_css?
|
30
|
+
has_no_content?
|
31
|
+
has_no_text?
|
32
|
+
has_no_css?
|
33
|
+
has_no_xpath?
|
34
|
+
has_xpath?
|
35
|
+
has_link?
|
36
|
+
has_no_link?
|
37
|
+
has_button?
|
38
|
+
has_no_button?
|
39
|
+
has_field?
|
40
|
+
has_no_field?
|
41
|
+
has_checked_field?
|
42
|
+
has_unchecked_field?
|
43
|
+
has_no_table?
|
44
|
+
has_table?
|
45
|
+
has_select?
|
46
|
+
has_no_select?
|
47
|
+
has_selector?
|
48
|
+
has_no_selector?
|
49
|
+
has_no_checked_field?
|
50
|
+
has_no_unchecked_field?
|
51
|
+
|
52
|
+
assert_selector
|
53
|
+
assert_no_selector
|
54
|
+
assert_all_of_selectors
|
55
|
+
assert_none_of_selectors
|
56
|
+
assert_any_of_selectors
|
57
|
+
assert_text
|
58
|
+
assert_no_text
|
59
|
+
].freeze
|
60
|
+
|
61
|
+
private_constant :NODE_METHODS
|
62
|
+
|
63
|
+
SESSION_METHODS = %i[within within_element within_fieldset within_table].freeze
|
64
|
+
|
65
|
+
private_constant :SESSION_METHODS
|
66
|
+
|
67
|
+
DSL_METHODS = (NODE_METHODS + SESSION_METHODS).freeze
|
68
|
+
|
69
|
+
# Stolen from: https://github.com/teamcapybara/capybara/blob/e704d00879fb1d1e1a0cc01e04c101bcd8af4a68/lib/capybara/session.rb#L767-L774.
|
70
|
+
NODE_METHODS.each do |method|
|
71
|
+
if RUBY_VERSION >= "2.7"
|
72
|
+
class_eval <<~METHOD, __FILE__, __LINE__ + 1
|
73
|
+
def #{method}(...)
|
74
|
+
current_scope.#{method}(...)
|
75
|
+
end
|
76
|
+
METHOD
|
77
|
+
else
|
78
|
+
define_method method do |*args, &block|
|
79
|
+
current_scope.send(method, *args, &block)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Initializes the receiver with the given string of HTML.
|
85
|
+
#
|
86
|
+
# @param html [String] the HTML to create the session out of
|
87
|
+
def initialize(html)
|
88
|
+
@document = Capybara::Node::Simple.new(html)
|
89
|
+
end
|
90
|
+
|
91
|
+
# (see Capybara::Session#within)
|
92
|
+
def within(*args, **kw_args)
|
93
|
+
new_scope = args.first.respond_to?(:to_capybara_node) ? args.first.to_capybara_node : find(*args, **kw_args)
|
94
|
+
begin
|
95
|
+
scopes.push(new_scope)
|
96
|
+
yield if block_given?
|
97
|
+
ensure
|
98
|
+
scopes.pop
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# (see Capybara::Session#within_element)
|
103
|
+
alias_method :within_element, :within
|
104
|
+
|
105
|
+
# (see Capybara::Session#within_fieldset)
|
106
|
+
def within_fieldset(locator, &block)
|
107
|
+
within(:fieldset, locator, &block)
|
108
|
+
end
|
109
|
+
|
110
|
+
# (see Capybara::Session#within_table)
|
111
|
+
def within_table(locator, &block)
|
112
|
+
within(:table, locator, &block)
|
113
|
+
end
|
114
|
+
|
115
|
+
# (see Capybara::Node::Element#native)
|
116
|
+
def native
|
117
|
+
current_scope.native
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
attr_reader :document
|
123
|
+
|
124
|
+
def scopes
|
125
|
+
@scopes ||= [nil]
|
126
|
+
end
|
127
|
+
|
128
|
+
def current_scope
|
129
|
+
scopes.last.presence || document
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -1,15 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "view_component/render_preview_helper"
|
4
|
+
require "view_component/capybara_simple_session"
|
4
5
|
|
5
6
|
module ViewComponent
|
6
7
|
module TestHelpers
|
7
8
|
begin
|
8
9
|
require "capybara/minitest"
|
10
|
+
|
9
11
|
include Capybara::Minitest::Assertions
|
10
12
|
|
13
|
+
CapybaraSimpleSession::DSL_METHODS.each do |method|
|
14
|
+
if RUBY_VERSION >= "2.7"
|
15
|
+
class_eval <<~METHOD, __FILE__, __LINE__ + 1
|
16
|
+
def #{method}(...)
|
17
|
+
page.method("#{method}").call(...)
|
18
|
+
end
|
19
|
+
METHOD
|
20
|
+
else
|
21
|
+
define_method method do |*args, &block|
|
22
|
+
page.send method, *args, &block
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.included(mod)
|
28
|
+
Capybara::Node::Simple.send(:define_method, :to_capybara_node) do
|
29
|
+
self
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
11
33
|
def page
|
12
|
-
|
34
|
+
@page ||= CapybaraSimpleSession.new(rendered_content)
|
13
35
|
end
|
14
36
|
|
15
37
|
def refute_component_rendered
|
@@ -55,6 +77,7 @@ module ViewComponent
|
|
55
77
|
# @param component [ViewComponent::Base, ViewComponent::Collection] The instance of the component to be rendered.
|
56
78
|
# @return [Nokogiri::HTML]
|
57
79
|
def render_inline(component, **args, &block)
|
80
|
+
@page = nil
|
58
81
|
@rendered_content =
|
59
82
|
if Rails.version.to_f >= 6.1
|
60
83
|
controller.view_context.render(component, args, &block)
|
@@ -76,6 +99,7 @@ module ViewComponent
|
|
76
99
|
# assert_text("Hello, World!")
|
77
100
|
# ```
|
78
101
|
def render_in_view_context(&block)
|
102
|
+
@page = nil
|
79
103
|
@rendered_content = controller.view_context.instance_exec(&block)
|
80
104
|
Nokogiri::HTML.fragment(@rendered_content)
|
81
105
|
end
|
data/lib/view_component.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: view_component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.59.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
@@ -325,6 +325,7 @@ files:
|
|
325
325
|
- lib/rails/generators/test_unit/templates/component_test.rb.tt
|
326
326
|
- lib/view_component.rb
|
327
327
|
- lib/view_component/base.rb
|
328
|
+
- lib/view_component/capybara_simple_session.rb
|
328
329
|
- lib/view_component/collection.rb
|
329
330
|
- lib/view_component/compile_cache.rb
|
330
331
|
- lib/view_component/compiler.rb
|