rspec-html 0.1.3 → 0.2.0
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 +4 -4
- data/.rubocop.yml +47 -0
- data/Gemfile.lock +36 -32
- data/README.md +54 -10
- data/lib/rspec/html.rb +1 -1
- data/lib/rspec/html/version.rb +1 -1
- data/lib/rspec_html.rb +2 -4
- data/lib/rspec_html/element.rb +15 -0
- data/lib/rspec_html/searchable.rb +72 -7
- data/lib/rspec_html/tags.rb +27 -0
- data/rspec-html.gemspec +4 -4
- metadata +19 -21
- data/lib/rspec_html/body.rb +0 -14
- data/lib/rspec_html/document.rb +0 -34
- data/lib/rspec_html/head.rb +0 -23
- data/lib/rspec_html/title.rb +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0d6b33d4bbde8f992f361359fed2e7ca1fa5aea60031bfeb72fcc719fe61bb4a
|
|
4
|
+
data.tar.gz: c8bbd8cae270839cba34034bdbd78a8d42085f01fe29891ef01eed6299805b1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 810cc82b373e10c3ab4f137d7dc4648972f81654f07478b937b7eb38d43832273c5b0203ad8ebcc7fb6927efea78ac1d048663d9c4a5f95d8afa8459f8bdae97
|
|
7
|
+
data.tar.gz: 0a9e83ccf82b023d0f4809935c354ef3d31b5bb6cc95161395bd8b4246ae839fcc71abfc933563d913eea8fcd9ee0935992c535a5455ef230a768e91ca48981d
|
data/.rubocop.yml
CHANGED
|
@@ -2,3 +2,50 @@ Metrics/BlockLength:
|
|
|
2
2
|
Exclude:
|
|
3
3
|
- 'spec/**/*'
|
|
4
4
|
- 'rspec-html.gemspec'
|
|
5
|
+
|
|
6
|
+
Layout/EmptyLinesAroundAttributeAccessor:
|
|
7
|
+
Enabled: true
|
|
8
|
+
Layout/SpaceAroundMethodCallOperator:
|
|
9
|
+
Enabled: true
|
|
10
|
+
Lint/DeprecatedOpenSSLConstant:
|
|
11
|
+
Enabled: true
|
|
12
|
+
Lint/DuplicateElsifCondition:
|
|
13
|
+
Enabled: true
|
|
14
|
+
Lint/MixedRegexpCaptureTypes:
|
|
15
|
+
Enabled: true
|
|
16
|
+
Lint/RaiseException:
|
|
17
|
+
Enabled: true
|
|
18
|
+
Lint/StructNewOverride:
|
|
19
|
+
Enabled: true
|
|
20
|
+
Style/AccessorGrouping:
|
|
21
|
+
Enabled: true
|
|
22
|
+
Style/ArrayCoercion:
|
|
23
|
+
Enabled: true
|
|
24
|
+
Style/BisectedAttrAccessor:
|
|
25
|
+
Enabled: true
|
|
26
|
+
Style/CaseLikeIf:
|
|
27
|
+
Enabled: true
|
|
28
|
+
Style/ExponentialNotation:
|
|
29
|
+
Enabled: true
|
|
30
|
+
Style/HashAsLastArrayItem:
|
|
31
|
+
Enabled: true
|
|
32
|
+
Style/HashEachMethods:
|
|
33
|
+
Enabled: true
|
|
34
|
+
Style/HashLikeCase:
|
|
35
|
+
Enabled: true
|
|
36
|
+
Style/HashTransformKeys:
|
|
37
|
+
Enabled: true
|
|
38
|
+
Style/HashTransformValues:
|
|
39
|
+
Enabled: true
|
|
40
|
+
Style/RedundantAssignment:
|
|
41
|
+
Enabled: true
|
|
42
|
+
Style/RedundantFetchBlock:
|
|
43
|
+
Enabled: true
|
|
44
|
+
Style/RedundantFileExtensionInRequire:
|
|
45
|
+
Enabled: true
|
|
46
|
+
Style/RedundantRegexpCharacterClass:
|
|
47
|
+
Enabled: true
|
|
48
|
+
Style/RedundantRegexpEscape:
|
|
49
|
+
Enabled: true
|
|
50
|
+
Style/SlicingWithRange:
|
|
51
|
+
Enabled: true
|
data/Gemfile.lock
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rspec-html (0.
|
|
4
|
+
rspec-html (0.2.0)
|
|
5
5
|
nokogiri (~> 1.10)
|
|
6
6
|
rspec (~> 3.0)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
ast (2.4.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
i18n (1.7.0)
|
|
11
|
+
ast (2.4.1)
|
|
12
|
+
byebug (11.1.3)
|
|
13
|
+
concurrent-ruby (1.1.6)
|
|
14
|
+
devpack (0.1.2)
|
|
15
|
+
diff-lcs (1.4.4)
|
|
16
|
+
i18n (1.8.5)
|
|
18
17
|
concurrent-ruby (~> 1.0)
|
|
19
|
-
jaro_winkler (1.5.4)
|
|
20
18
|
mini_portile2 (2.4.0)
|
|
21
|
-
nokogiri (1.10.
|
|
19
|
+
nokogiri (1.10.10)
|
|
22
20
|
mini_portile2 (~> 2.4.0)
|
|
23
|
-
paint (2.
|
|
24
|
-
parallel (1.19.
|
|
25
|
-
parser (2.
|
|
26
|
-
ast (~> 2.4.
|
|
21
|
+
paint (2.2.0)
|
|
22
|
+
parallel (1.19.2)
|
|
23
|
+
parser (2.7.1.4)
|
|
24
|
+
ast (~> 2.4.1)
|
|
27
25
|
rainbow (3.0.0)
|
|
28
|
-
rake (
|
|
26
|
+
rake (13.0.1)
|
|
27
|
+
regexp_parser (1.7.1)
|
|
28
|
+
rexml (3.2.4)
|
|
29
29
|
rspec (3.9.0)
|
|
30
30
|
rspec-core (~> 3.9.0)
|
|
31
31
|
rspec-expectations (~> 3.9.0)
|
|
32
32
|
rspec-mocks (~> 3.9.0)
|
|
33
|
-
rspec-core (3.9.
|
|
34
|
-
rspec-support (~> 3.9.
|
|
35
|
-
rspec-expectations (3.9.
|
|
33
|
+
rspec-core (3.9.2)
|
|
34
|
+
rspec-support (~> 3.9.3)
|
|
35
|
+
rspec-expectations (3.9.2)
|
|
36
36
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
37
37
|
rspec-support (~> 3.9.0)
|
|
38
38
|
rspec-its (1.3.0)
|
|
@@ -41,36 +41,40 @@ GEM
|
|
|
41
41
|
rspec-mocks (3.9.1)
|
|
42
42
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
43
43
|
rspec-support (~> 3.9.0)
|
|
44
|
-
rspec-support (3.9.
|
|
45
|
-
rubocop (0.
|
|
46
|
-
jaro_winkler (~> 1.5.1)
|
|
44
|
+
rspec-support (3.9.3)
|
|
45
|
+
rubocop (0.88.0)
|
|
47
46
|
parallel (~> 1.10)
|
|
48
|
-
parser (>= 2.
|
|
47
|
+
parser (>= 2.7.1.1)
|
|
49
48
|
rainbow (>= 2.2.2, < 4.0)
|
|
49
|
+
regexp_parser (>= 1.7)
|
|
50
|
+
rexml
|
|
51
|
+
rubocop-ast (>= 0.1.0, < 1.0)
|
|
50
52
|
ruby-progressbar (~> 1.7)
|
|
51
|
-
unicode-display_width (>= 1.4.0, <
|
|
52
|
-
rubocop-
|
|
53
|
-
|
|
53
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
54
|
+
rubocop-ast (0.2.0)
|
|
55
|
+
parser (>= 2.7.0.1)
|
|
56
|
+
rubocop-rspec (1.42.0)
|
|
57
|
+
rubocop (>= 0.87.0)
|
|
54
58
|
ruby-progressbar (1.10.1)
|
|
55
|
-
strong_versions (0.
|
|
56
|
-
i18n (>= 0.5
|
|
59
|
+
strong_versions (0.4.5)
|
|
60
|
+
i18n (>= 0.5)
|
|
57
61
|
paint (~> 2.0)
|
|
58
|
-
unicode-display_width (1.
|
|
62
|
+
unicode-display_width (1.7.0)
|
|
59
63
|
|
|
60
64
|
PLATFORMS
|
|
61
65
|
ruby
|
|
62
66
|
|
|
63
67
|
DEPENDENCIES
|
|
64
|
-
betterp (~> 0.1.3)
|
|
65
68
|
bundler (~> 2.0)
|
|
66
69
|
byebug (~> 11.0)
|
|
70
|
+
devpack (~> 0.1.2)
|
|
67
71
|
i18n (~> 1.7)
|
|
68
|
-
rake (~>
|
|
72
|
+
rake (~> 13.0)
|
|
69
73
|
rspec-html!
|
|
70
74
|
rspec-its (~> 1.3)
|
|
71
|
-
rubocop (~> 0.
|
|
75
|
+
rubocop (~> 0.88.0)
|
|
72
76
|
rubocop-rspec (~> 1.36)
|
|
73
|
-
strong_versions (~> 0.
|
|
77
|
+
strong_versions (~> 0.4.5)
|
|
74
78
|
|
|
75
79
|
BUNDLED WITH
|
|
76
80
|
2.0.2
|
data/README.md
CHANGED
|
@@ -5,7 +5,7 @@ _RSpec::HTML_ provides a simple object interface to HTML responses from [_RSpec
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```ruby
|
|
8
|
-
gem 'rspec-html', '~> 0.
|
|
8
|
+
gem 'rspec-html', '~> 0.2.0'
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Bundle
|
|
@@ -26,17 +26,61 @@ Require the gem in your `spec_helper.rb`:
|
|
|
26
26
|
require 'rspec/html'
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
In request specs, access the HTML document through the provided object
|
|
29
|
+
In request specs, access the HTML document through the provided `document` object.
|
|
30
30
|
|
|
31
|
+
### Object Interface
|
|
32
|
+
|
|
33
|
+
To navigating the _DOM_ by a sequence of tag names use chained method calls on the `document` object:
|
|
34
|
+
|
|
35
|
+
#### Tag Traversal
|
|
36
|
+
```ruby
|
|
37
|
+
expect(document.body.div.span).to include 'some text'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
#### Attribute Matching
|
|
41
|
+
To select an element matching certain attributes pass a hash to any of the chained methods:
|
|
42
|
+
```ruby
|
|
43
|
+
expect(document.body.div(id: 'my-div').span(class: 'my-class')).to eql 'some text'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
#### Attribute Retrieval
|
|
47
|
+
To select an attribute from an element use the hash-style interface:
|
|
48
|
+
```ruby
|
|
49
|
+
expect(document.body.div.span[:class]).to eql 'my-class'
|
|
50
|
+
expect(document.body.div.span['data-content']).to eql 'my content'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### Indexing a Matching Set
|
|
54
|
+
To select an index from a set of matched elements use the array-style interface (the first matching element is `1`, not `0`):
|
|
55
|
+
```ruby
|
|
56
|
+
expect(document.body.div[1].span[1][:class]).to eql 'my-class'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
#### Element Existence
|
|
60
|
+
To test if a matching element was found use the `exist` matcher:
|
|
61
|
+
```ruby
|
|
62
|
+
expect(document.body.div[1]).to exist
|
|
63
|
+
expect(document.body.div[4]).to_not exist
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### Length of matched attributes
|
|
67
|
+
To test the length of matched elements use the `#size` or `#length` method:
|
|
68
|
+
```ruby
|
|
69
|
+
expect(document.body.div.size).to eql 3
|
|
70
|
+
expect(document.body.div.length).to eql 3
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### XPath / CSS Selectors
|
|
74
|
+
If you need something more specific you can always use the _Nokogiri_ `#xpath` and `#css` methods on any element:
|
|
75
|
+
```ruby
|
|
76
|
+
expect(document.body.xpath('//span[@class="my-class"]')).to include 'some text'
|
|
77
|
+
expect(document.body.css('span.my-class')).to include 'some text'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
To simply check that an _XPath_ or _CSS_ selector exists use `have_xpath` and `have_css`:
|
|
31
81
|
```ruby
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
get '/'
|
|
35
|
-
expect(document.body).to include 'something'
|
|
36
|
-
expect(document.body).to have_css 'html body div.myclass'
|
|
37
|
-
expect(document.body).to have_xpath '//html/body/div[@class="myclass"]'
|
|
38
|
-
end
|
|
39
|
-
end
|
|
82
|
+
expect(document.body).to have_css 'html body div.myclass'
|
|
83
|
+
expect(document.body).to have_xpath '//html/body/div[@class="myclass"]'
|
|
40
84
|
```
|
|
41
85
|
|
|
42
86
|
## Contributing
|
data/lib/rspec/html.rb
CHANGED
data/lib/rspec/html/version.rb
CHANGED
data/lib/rspec_html.rb
CHANGED
|
@@ -5,10 +5,8 @@ require 'pathname'
|
|
|
5
5
|
|
|
6
6
|
require 'rspec_html/nameable'
|
|
7
7
|
require 'rspec_html/searchable'
|
|
8
|
-
require 'rspec_html/
|
|
9
|
-
require 'rspec_html/
|
|
10
|
-
require 'rspec_html/head'
|
|
11
|
-
require 'rspec_html/title'
|
|
8
|
+
require 'rspec_html/element'
|
|
9
|
+
require 'rspec_html/tags'
|
|
12
10
|
|
|
13
11
|
# Support module for rspec/html
|
|
14
12
|
module RSpecHTML
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RSpecHTML
|
|
4
|
+
# HTML DOM element abstraction
|
|
5
|
+
class Element
|
|
6
|
+
include Searchable
|
|
7
|
+
include Nameable
|
|
8
|
+
|
|
9
|
+
def initialize(element, name, siblings: [])
|
|
10
|
+
@name = name
|
|
11
|
+
@element = element
|
|
12
|
+
@siblings = siblings
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -4,33 +4,98 @@ module RSpecHTML
|
|
|
4
4
|
# Mixin module providing methods for searching text content of HTML entities
|
|
5
5
|
module Searchable
|
|
6
6
|
def include?(val)
|
|
7
|
-
@
|
|
7
|
+
@element.text.include?(val)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def css(*args)
|
|
11
|
-
@
|
|
11
|
+
self.class.new(@element&.css(*args), :css)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def xpath(*args)
|
|
15
|
-
@
|
|
15
|
+
self.class.new(@element&.xpath(*args), :xpath)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def present?
|
|
19
|
+
!@element.nil?
|
|
20
|
+
end
|
|
21
|
+
alias exist? present?
|
|
22
|
+
|
|
18
23
|
# rubocop:disable Naming/PredicateName
|
|
19
24
|
def has_css?(*args)
|
|
20
|
-
|
|
25
|
+
!@element&.css(*args)&.empty?
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
def has_xpath?(*args)
|
|
24
|
-
|
|
29
|
+
!@element&.xpath(*args)&.empty?
|
|
25
30
|
end
|
|
26
31
|
# rubocop:enable Naming/PredicateName
|
|
27
32
|
|
|
28
33
|
def to_s
|
|
29
|
-
@
|
|
34
|
+
@element&.text&.strip
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
def inspect
|
|
33
|
-
%("#{
|
|
38
|
+
%("#{@element}")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def [](val)
|
|
42
|
+
return index(val) if val.is_a?(Integer)
|
|
43
|
+
return range(val) if val.is_a?(Range)
|
|
44
|
+
|
|
45
|
+
@element&.attr(val.to_s)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def size
|
|
49
|
+
return @element.size if @element.respond_to?(:size)
|
|
50
|
+
|
|
51
|
+
@siblings.size
|
|
52
|
+
end
|
|
53
|
+
alias length size
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def method_missing(tag, *args)
|
|
58
|
+
return super unless Tags.include?(tag)
|
|
59
|
+
return self.class.new(find(tag), tag, siblings: find(tag, all: true)) if args.empty?
|
|
60
|
+
|
|
61
|
+
self.class.new(where(tag, args.first), tag, siblings: where(tag, args.first, all: true))
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def index(val)
|
|
65
|
+
zero_index_error if val.zero?
|
|
66
|
+
self.class.new(@siblings[val - 1], name)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def range(val)
|
|
70
|
+
zero_index_error if val.first.zero?
|
|
71
|
+
self.class.new(@siblings[(val.first - 1)..(val.last - 1)], :range)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def zero_index_error
|
|
75
|
+
raise ArgumentError, 'Index for matched sets starts at 1, not 0.'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def where(tag, query, all: false)
|
|
79
|
+
matched = @element&.xpath("//#{tag}[#{where_conditions(query)}]")
|
|
80
|
+
return matched&.first unless all
|
|
81
|
+
|
|
82
|
+
matched
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def where_conditions(query)
|
|
86
|
+
query.map do |key, value|
|
|
87
|
+
%(@#{key}="#{value}")
|
|
88
|
+
end.join ' and '
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def find(tag, all: false)
|
|
92
|
+
return @element&.css(tag.to_s)&.first unless all
|
|
93
|
+
|
|
94
|
+
@element&.css(tag.to_s)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def respond_to_missing?(method_name, *_)
|
|
98
|
+
Tags.include?(method_name)
|
|
34
99
|
end
|
|
35
100
|
end
|
|
36
101
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RSpecHTML
|
|
4
|
+
# HTML tag identification, used to determine viability for DOM traversal via chained methods.
|
|
5
|
+
class Tags
|
|
6
|
+
def self.include?(val)
|
|
7
|
+
tags.include?(val.to_s.upcase)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# rubocop:disable Metrics/MethodLength
|
|
11
|
+
def self.tags
|
|
12
|
+
%w[
|
|
13
|
+
A ABBR ACRONYM ADDRESS APPLET AREA ARTICLE ASIDE AUDIO B BASE BASEFONT BDI BDO BGSOUND
|
|
14
|
+
BIG BLINK BLOCKQUOTE BODY BR BUTTON CANVAS CAPTION CENTER CITE CODE COL COLGROUP COMMAND
|
|
15
|
+
CONTENT DATA DATALIST DD DEL DETAILS DFN DIALOG DIR DIV DL DT ELEMENT EM EMBED FIELDSET
|
|
16
|
+
FIGCAPTION FIGURE FONT FOOTER FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HEADER HGROUP HR
|
|
17
|
+
HTML I IFRAME IMAGE IMG INPUT INS ISINDEX KBD KEYGEN LABEL LEGEND LI LINK LISTING MAIN
|
|
18
|
+
MAIN MAP MARK MARQUEE MENU MENUITEM META METER MULTICOL NAV NEXTID NOBR NOEMBED NOFRAMES
|
|
19
|
+
NOSCRIPT OBJECT OL OPTGROUP OPTION OUTPUT P PARAM PICTURE PLAINTEXT PRE PROGRESS Q RB RP
|
|
20
|
+
RT RTC RUBY S SAMP SCRIPT SECTION SELECT SHADOW SLOT SMALL SOURCE SPACER SPAN STRIKE
|
|
21
|
+
STRONG STYLE SUB SUMMARY SUP TABLE TBODY TD TEMPLATE TEXTAREA TFOOT TH THEAD TIME TITLE
|
|
22
|
+
TR TRACK TT U UL VAR VIDEO WBR XMP
|
|
23
|
+
]
|
|
24
|
+
end
|
|
25
|
+
# rubocop:enable Metrics/MethodLength
|
|
26
|
+
end
|
|
27
|
+
end
|
data/rspec-html.gemspec
CHANGED
|
@@ -31,13 +31,13 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.add_dependency 'nokogiri', '~> 1.10'
|
|
32
32
|
spec.add_dependency 'rspec', '~> 3.0'
|
|
33
33
|
|
|
34
|
-
spec.add_development_dependency 'betterp', '~> 0.1.3'
|
|
35
34
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
36
35
|
spec.add_development_dependency 'byebug', '~> 11.0'
|
|
36
|
+
spec.add_development_dependency 'devpack', '~> 0.1.2'
|
|
37
37
|
spec.add_development_dependency 'i18n', '~> 1.7'
|
|
38
|
-
spec.add_development_dependency 'rake', '~>
|
|
38
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
39
39
|
spec.add_development_dependency 'rspec-its', '~> 1.3'
|
|
40
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
|
40
|
+
spec.add_development_dependency 'rubocop', '~> 0.88.0'
|
|
41
41
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
|
|
42
|
-
spec.add_development_dependency 'strong_versions', '~> 0.
|
|
42
|
+
spec.add_development_dependency 'strong_versions', '~> 0.4.5'
|
|
43
43
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspec-html
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bob Farrell
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-07-
|
|
11
|
+
date: 2020-07-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|
|
@@ -39,47 +39,47 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '3.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0
|
|
47
|
+
version: '2.0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0
|
|
54
|
+
version: '2.0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: byebug
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '11.0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '11.0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: devpack
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 0.1.2
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: 0.1.2
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: i18n
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,14 +100,14 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
103
|
+
version: '13.0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
110
|
+
version: '13.0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rspec-its
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -128,14 +128,14 @@ dependencies:
|
|
|
128
128
|
requirements:
|
|
129
129
|
- - "~>"
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 0.
|
|
131
|
+
version: 0.88.0
|
|
132
132
|
type: :development
|
|
133
133
|
prerelease: false
|
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
135
|
requirements:
|
|
136
136
|
- - "~>"
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 0.
|
|
138
|
+
version: 0.88.0
|
|
139
139
|
- !ruby/object:Gem::Dependency
|
|
140
140
|
name: rubocop-rspec
|
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -156,14 +156,14 @@ dependencies:
|
|
|
156
156
|
requirements:
|
|
157
157
|
- - "~>"
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: 0.
|
|
159
|
+
version: 0.4.5
|
|
160
160
|
type: :development
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
164
164
|
- - "~>"
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: 0.
|
|
166
|
+
version: 0.4.5
|
|
167
167
|
description: HTML document abstraction and matchers for RSpec
|
|
168
168
|
email:
|
|
169
169
|
- git@bob.frl
|
|
@@ -187,12 +187,10 @@ files:
|
|
|
187
187
|
- lib/rspec/html.rb
|
|
188
188
|
- lib/rspec/html/version.rb
|
|
189
189
|
- lib/rspec_html.rb
|
|
190
|
-
- lib/rspec_html/
|
|
191
|
-
- lib/rspec_html/document.rb
|
|
192
|
-
- lib/rspec_html/head.rb
|
|
190
|
+
- lib/rspec_html/element.rb
|
|
193
191
|
- lib/rspec_html/nameable.rb
|
|
194
192
|
- lib/rspec_html/searchable.rb
|
|
195
|
-
- lib/rspec_html/
|
|
193
|
+
- lib/rspec_html/tags.rb
|
|
196
194
|
- rspec-html.gemspec
|
|
197
195
|
homepage: https://github.com/bobf/rspec-html
|
|
198
196
|
licenses:
|
data/lib/rspec_html/body.rb
DELETED
data/lib/rspec_html/document.rb
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecHTML
|
|
4
|
-
# HTML Document representation
|
|
5
|
-
class Document
|
|
6
|
-
def initialize(html)
|
|
7
|
-
@html = html
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# rubocop:disable Naming/PredicateName
|
|
11
|
-
def has_xpath?(*args)
|
|
12
|
-
!parsed_html.xpath(*args).empty?
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def has_css?(*args)
|
|
16
|
-
!parsed_html.css(*args).empty?
|
|
17
|
-
end
|
|
18
|
-
# rubocop:enable Naming/PredicateName
|
|
19
|
-
|
|
20
|
-
def body
|
|
21
|
-
Body.new(parsed_html)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def head
|
|
25
|
-
Head.new(parsed_html)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
|
|
30
|
-
def parsed_html
|
|
31
|
-
@parsed_html ||= Nokogiri::HTML(@html)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
data/lib/rspec_html/head.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module RSpecHTML
|
|
4
|
-
# HTML/BODY abstraction
|
|
5
|
-
class Head
|
|
6
|
-
include Nameable
|
|
7
|
-
include Searchable
|
|
8
|
-
|
|
9
|
-
def initialize(parsed_html)
|
|
10
|
-
@parsed_html = parsed_html
|
|
11
|
-
@entity = parsed_html.css('head')
|
|
12
|
-
@name = :head
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def title
|
|
16
|
-
Title.new(@parsed_html)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def include?(val)
|
|
20
|
-
title.include?(val)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/rspec_html/title.rb
DELETED