rspec-html 0.2.9 → 0.2.12

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: 152d9f0198dc22aa14461a8814b98d3be18e663e1b9b95206247cdc3c99ffdf7
4
- data.tar.gz: ea64b6dafe91b0e13a46e3231a493c0a2b7097458ac02b28d5599639dc3f585f
3
+ metadata.gz: 0c34a7cf68a03240483a87a23055af2dd15b8215e8e9d071b3d5a1599a69af0e
4
+ data.tar.gz: 03c82e1d52598e7b77f0fcdd9c7a12223e60dbd9e638d31d06be64d2833a26cf
5
5
  SHA512:
6
- metadata.gz: 728cc6614e604366f38f90d85e93d9822480bbe56b7542810c4887d1723db4b2d39963b8c77a7d5415b5a8fe21489df56135c13630442f2201d18ba4bc2d01a3
7
- data.tar.gz: b77a735db02261431fea9caabf7d3674c7365198709167780761a983e8175a11ce7d770d81c75202b23a719c8faf110559321fff305f4ccb1eba527176c1d763
6
+ metadata.gz: 576bb61d56e699378ec157adc9b4d8a14097c4443b1a79586f10bf866d26904e5a9e9777a4a9bc68650d1c53552e50c8c3dbba7f35e1326989a4bcff2fa071d7
7
+ data.tar.gz: 27a02c3c756539d5e24d441f49a1e09463638567425f36e19a231d849d6c42eb3faea86633d6a76685135b9e4dbdeb8b05ceba9e9eca514cfdfdfb9473c4a645
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-html (0.2.9)
4
+ rspec-html (0.2.11)
5
5
  nokogiri (~> 1.10)
6
6
  rspec (~> 3.0)
7
7
 
data/README.md CHANGED
@@ -7,7 +7,7 @@ _RSpec::HTML_ provides a simple object interface to HTML responses from [_RSpec
7
7
  Add the gem to your `Gemfile`:
8
8
 
9
9
  ```ruby
10
- gem 'rspec-html', '~> 0.2.9'
10
+ gem 'rspec-html', '~> 0.2.12'
11
11
  ```
12
12
 
13
13
  And rebuild your bundle:
@@ -41,6 +41,11 @@ it 'says hello' do
41
41
  end
42
42
  ```
43
43
 
44
+ This method can also be used for _ActionMailer_ emails:
45
+ ```ruby
46
+ before { parse_html(ActionMailer::Base.deliveries.last.body.decoded) }
47
+ ```
48
+
44
49
  To navigate the _DOM_ by a sequence of tag names use chained method calls on the `document` object:
45
50
 
46
51
  #### Tag Traversal
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module HTML
5
- VERSION = '0.2.9'
5
+ VERSION = '0.2.12'
6
6
  end
7
7
  end
@@ -8,7 +8,10 @@ module RSpecHTML
8
8
  extend Forwardable
9
9
 
10
10
  def_delegators :@search,
11
- :has_css?, :has_xpath?, :include?, :text, :truncated_text, :size, :length, :css, :xpath, :[]
11
+ :has_css?, :has_xpath?, :include?,
12
+ :siblings, :text, :truncated_text,
13
+ :size, :length, :[],
14
+ :css, :xpath
12
15
 
13
16
  def initialize(element, name, options: {}, siblings: [])
14
17
  @name = name
@@ -26,7 +29,7 @@ module RSpecHTML
26
29
  alias exist? present?
27
30
 
28
31
  def inspect
29
- "<#{self.class}::#{name.to_s.capitalize}>"
32
+ reconstituted
30
33
  end
31
34
 
32
35
  def to_s
@@ -10,10 +10,28 @@ module RSpecHTML
10
10
 
11
11
  def match(actual)
12
12
  @rspec_actual = actual&.text
13
- return (actual&.text || '').include?(@expected.to_s) unless @expected.is_a?(Regexp)
13
+ return regexp_match?(actual) || regexp_siblings_match?(actual) if @expected.is_a?(Regexp)
14
14
 
15
+ string_match?(actual) || string_siblings_match?(actual)
16
+ end
17
+
18
+ private
19
+
20
+ def regexp_match?(actual)
15
21
  @expected.match(actual&.text || '')
16
22
  end
23
+
24
+ def regexp_siblings_match?(actual)
25
+ actual.siblings.any? { |sibling| @expected.match(sibling&.text || '') }
26
+ end
27
+
28
+ def string_match?(actual)
29
+ (actual&.text || '').include?(@expected.to_s)
30
+ end
31
+
32
+ def string_siblings_match?(actual)
33
+ actual.siblings.any? { |sibling| (sibling&.text || '').include?(@expected.to_s) }
34
+ end
17
35
  end
18
36
  end
19
37
  end
@@ -12,7 +12,7 @@ module RSpecHTML
12
12
  name = @tag.to_s.downcase
13
13
  return '#document' if name == 'document'
14
14
  return name if name == 'document'
15
- return "<#{name}#{@options} />" if @options.is_a?(String)
15
+ return "<#{name}#{shorthand_options} />" if @options.is_a?(String)
16
16
  return "<#{name}#{formatted_attributes} />" unless @options&.key?(:text)
17
17
 
18
18
  "<#{name}#{formatted_attributes}>#{@options[:text]}</#{name}>"
@@ -33,5 +33,23 @@ module RSpecHTML
33
33
  def formatted_attributes
34
34
  mapped_attributes.empty? ? nil : " #{mapped_attributes.join(' ')}"
35
35
  end
36
+
37
+ def shorthand_options
38
+ case @options[0]
39
+ when '.'
40
+ " #{shorthand_classes}"
41
+ when '#'
42
+ options = %( id="#{@options.partition('#').last.partition('.').first}")
43
+ shorthand_classes.nil? ? options : "#{options} #{shorthand_classes}"
44
+ else
45
+ @options
46
+ end
47
+ end
48
+
49
+ def shorthand_classes
50
+ return nil unless @options.include?('.')
51
+
52
+ %(class="#{@options.partition('.').last.split('.').map(&:strip).reject(&:empty?).join(' ')}")
53
+ end
36
54
  end
37
55
  end
@@ -4,6 +4,8 @@ module RSpecHTML
4
4
  # Provides element/attribute/text searching for HTML entities
5
5
  # rubocop:disable Metrics/ClassLength
6
6
  class Search
7
+ attr_reader :siblings
8
+
7
9
  def initialize(element, siblings)
8
10
  @element = element
9
11
  @siblings = siblings
@@ -57,7 +59,7 @@ module RSpecHTML
57
59
  def size
58
60
  return @element.size if @element.respond_to?(:size)
59
61
 
60
- @siblings.size
62
+ @siblings&.size || 0
61
63
  end
62
64
  alias length size
63
65
 
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.2.9
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-28 00:00:00.000000000 Z
11
+ date: 2022-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri