saharspec 0.0.5 → 0.0.6

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
- SHA1:
3
- metadata.gz: 627f1f82b546e7a3e096497b74f25cab346d0fa2
4
- data.tar.gz: d7efe0bcc330cdd47d426fb502b5114fbffa85e6
2
+ SHA256:
3
+ metadata.gz: 9467b45b9c26592854a9ce9ef7b9e5a549229a357602a3bf03241d5398f9cfcb
4
+ data.tar.gz: 0b981cb23146042faa5e584400bd941012a9ab57f8d5f68a080add82d443e23c
5
5
  SHA512:
6
- metadata.gz: e2249769358166c5b72bee55ca94b9b0ed698715afc71e439e7687fba8f745b63641312e4cb7d52340c3e4f6a805458c0f7e0b7be9b23e4eeccb90487d6699a2
7
- data.tar.gz: 945e11582fd5c21b7cb7fd8b0d7f1021611d546bb957446df2f8b1c7b2d5c1b060e19dfd80956b5dec8a0d6a4949cda0981e216d1093d9084d44e005cf25dd49
6
+ metadata.gz: fef4a6f67cf9db940fcd906f6c3b3edf924c26577d2d504202776b1bcbaad35027f9071bd2658afae22d081800ae8997fe70ae73ca3b165726a7d2b630484975
7
+ data.tar.gz: b55ed52e2842a7cf4b00ce01c8c2bf8c8fd91b53833dbf86498ead0febf55ed5cd86ab42b8c130e3a538ae5e0300df25c5beb114a778ae808cecf225d9198777
@@ -1,10 +1,23 @@
1
1
  # Saharspec history
2
2
 
3
+ ## 0.0.6 -- 2019-10-05
4
+
5
+ * Fix `dont.send_message` combination behavior (and generally, behavior of `dont.` with matchers
6
+ defining custom `does_not_matches?`);
7
+ * Better `ret` matcher failure message when there is a complicated matcher on the right side (use
8
+ its `failure_message` instead of `description`);
9
+ * Update `send_message` matcher description to be more readable;
10
+ * Drop Ruby 2.2 support.
11
+
12
+ ## 0.0.5 -- 2018-03-03
13
+
14
+ * `be_json` matcher;
15
+ * make `ret` diffable.
16
+
3
17
  ## 0.0.4 -- 2017-11-07
4
18
 
5
19
  * Update `its_call` description generation, looks better with `rspec --format doc`
6
20
 
7
-
8
21
  ## 0.0.3 -- 2017-11-06
9
22
 
10
23
  * Introduce new `its`-family addition: `its_call(*args)`
data/README.md CHANGED
@@ -43,9 +43,9 @@ require 'saharspec/matchers/send_message'
43
43
  it {
44
44
  expect { fetcher }.to send_message(Net::HTTP, :get).with('http://google.com').returning('not this time')
45
45
  }
46
- # after + its_call
46
+ # after + its_block
47
47
  subject { fetcher }
48
- its_call { is_expected.to send_message(Net::HTTP, :get).with('http://google.com').returning('not this time') }
48
+ its_block { is_expected.to send_message(Net::HTTP, :get).with('http://google.com').returning('not this time') }
49
49
  ```
50
50
 
51
51
  Note: there is [reasons](https://github.com/rspec/rspec-expectations/issues/934) why it is not in rspec-mocks, though, not very persuative for
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Umbrella module for all Saharspec RSpec DRY-ing features.
2
4
  #
3
5
  # See {file:README.md} or {Its} and {Matchers} separately.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  # Wrapper module for all `its_*` RSpec additions.
3
5
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Its
3
5
  module Block
@@ -53,4 +55,4 @@ RSpec.configure do |rspec|
53
55
  rspec.backtrace_exclusion_patterns << %r{/lib/saharspec/its/block}
54
56
  end
55
57
 
56
- RSpec::SharedContext.send(:include, Saharspec::Its::Block)
58
+ RSpec::SharedContext.include Saharspec::Its::Block
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Its
3
5
  module Call
@@ -27,7 +29,6 @@ module Saharspec
27
29
  # rubocop:disable Lint/NestedMethodDefinition
28
30
  describe("(#{args.map(&:inspect).join(', ')})") do
29
31
  let(:__call_subject) do
30
- warn 'No need to use its_call without arguments, just it {} will work' if args.empty?
31
32
  -> { subject.call(*args) }
32
33
  end
33
34
 
@@ -48,4 +49,4 @@ RSpec.configure do |rspec|
48
49
  rspec.backtrace_exclusion_patterns << %r{/lib/saharspec/its/call}
49
50
  end
50
51
 
51
- RSpec::SharedContext.send(:include, Saharspec::Its::Call)
52
+ RSpec::SharedContext.include Saharspec::Its::Call
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Its
3
5
  module Map
@@ -72,4 +74,4 @@ RSpec.configure do |rspec|
72
74
  rspec.backtrace_exclusion_patterns << %r{/lib/saharspec/its/map}
73
75
  end
74
76
 
75
- RSpec::SharedContext.send(:include, Saharspec::Its::Map)
77
+ RSpec::SharedContext.include Saharspec::Its::Map
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  # All Saharspec matchers, when required, included into `RSpec::Matchers` namespace.
3
5
  #
@@ -1,27 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
 
3
5
  module Saharspec
4
6
  module Matchers
5
7
  # @private
6
8
  class BeJson
7
- NONE = Object.new.freeze
8
9
  include RSpec::Matchers::Composable
9
10
  include RSpec::Matchers # to have #match
10
11
 
12
+ ANY = Object.new.freeze
13
+
11
14
  attr_reader :actual, :expected
12
15
 
13
16
  def initialize(expected, **parse_opts)
14
17
  @expected_matcher = @expected = expected
18
+
15
19
  # wrap to make be_json('foo' => matcher) work, too
16
- @expected_matcher = match(expected) unless expected == NONE || expected.respond_to?(:matches?)
20
+ unless expected == ANY || expected.respond_to?(:matches?)
21
+ @expected_matcher = match(expected)
22
+ end
17
23
  @parse_opts = parse_opts
18
24
  end
19
25
 
20
26
  def matches?(json)
21
27
  @actual = JSON.parse(json, **@parse_opts)
22
- @expected_matcher == NONE || @expected_matcher === @actual
23
- rescue JSON::ParserError => parse_error
24
- @parser_error = parse_error
28
+ @expected_matcher == ANY || @expected_matcher === @actual
29
+ rescue JSON::ParserError => e
30
+ @parser_error = e
25
31
  false
26
32
  end
27
33
 
@@ -34,7 +40,7 @@ module Saharspec
34
40
  end
35
41
 
36
42
  def description
37
- if @expected == NONE
43
+ if @expected == ANY
38
44
  'be a valid JSON string'
39
45
  else
40
46
  expected = @expected.respond_to?(:description) ? @expected.description : @expected
@@ -47,7 +53,7 @@ module Saharspec
47
53
  case
48
54
  when @parser_error
49
55
  "failed: #{@parser_error}"
50
- when @expected != NONE
56
+ when @expected != ANY
51
57
  "was #{@actual}"
52
58
  end
53
59
  "expected value to #{description} but #{failed}"
@@ -81,7 +87,7 @@ module RSpec
81
87
  #
82
88
  # @param expected Value or matcher to check JSON against. It should implement `#===` method,
83
89
  # so all standard and custom RSpec matchers work.
84
- def be_json(expected = Saharspec::Matchers::BeJson::NONE)
90
+ def be_json(expected = Saharspec::Matchers::BeJson::ANY)
85
91
  Saharspec::Matchers::BeJson.new(expected)
86
92
  end
87
93
 
@@ -92,7 +98,7 @@ module RSpec
92
98
  #
93
99
  # @param expected Value or matcher to check JSON against. It should implement `#===` method,
94
100
  # so all standard and custom RSpec matchers work.
95
- def be_json_sym(expected = Saharspec::Matchers::BeJson::NONE)
101
+ def be_json_sym(expected = Saharspec::Matchers::BeJson::ANY)
96
102
  Saharspec::Matchers::BeJson.new(expected, symbolize_names: true)
97
103
  end
98
104
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
@@ -11,16 +13,25 @@ module Saharspec
11
13
  end
12
14
 
13
15
  def match(_expected, actual)
14
- @matcher or
15
- fail(ArgumentError, '`dont` matcher used without any matcher to negate. Usage: dont.other_matcher(args)')
16
- !@matcher.matches?(actual)
16
+ @matcher or fail ArgumentError, '`dont` matcher used without any matcher to negate. '\
17
+ 'Usage: dont.other_matcher(args)'
18
+
19
+ # https://www.rubydoc.info/github/rspec/rspec-expectations/RSpec%2FMatchers%2FMatcherProtocol:does_not_match%3F
20
+ # In a negative expectation such as `expect(x).not_to foo`, RSpec will call
21
+ # `foo.does_not_match?(x)` if this method is defined. If it's not defined it
22
+ # will fall back to using `!foo.matches?(x)`.
23
+ if @matcher.respond_to?(:does_not_match?)
24
+ @matcher.does_not_match?(actual)
25
+ else
26
+ !@matcher.matches?(actual)
27
+ end
17
28
  end
18
29
 
19
30
  def supports_block_expectations?
20
31
  @matcher.supports_block_expectations?
21
32
  end
22
33
 
23
- def method_missing(m, *a, &b) # rubocop:disable Style/MethodMissing
34
+ def method_missing(m, *a, &b) # rubocop:disable Style/MethodMissingSuper
24
35
  if @matcher
25
36
  @matcher.send(m, *a, &b)
26
37
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../util'
2
4
 
3
5
  module Saharspec
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
@@ -13,6 +15,7 @@ module Saharspec
13
15
  def matches?(subject)
14
16
  @subject = subject
15
17
  return false unless subject.respond_to?(:call)
18
+
16
19
  @actual = subject.call
17
20
  @expected === @actual
18
21
  end
@@ -30,12 +33,23 @@ module Saharspec
30
33
  end
31
34
 
32
35
  def failure_message
33
- "expected to #{description}, " +
34
- (@subject.respond_to?(:call) ? "but returned #{@actual.inspect}" : 'but was not callable')
36
+ case
37
+ when !@subject.respond_to?(:call)
38
+ "expected to #{description}, but was not callable"
39
+ when @expected.respond_to?(:failure_message)
40
+ "return value mismatch: #{@expected.failure_message}"
41
+ else
42
+ "expected to #{description}, but returned #{@actual.inspect}"
43
+ end
35
44
  end
36
45
 
37
46
  def failure_message_when_negated
38
- "expected not to #{description}, but returned it"
47
+ case
48
+ when @expected.respond_to?(:failure_message_when_negated)
49
+ "return value mismatch: #{@expected.failure_message_when_negated}"
50
+ else
51
+ "expected not to #{description}, but returned it"
52
+ end
39
53
  end
40
54
  end
41
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
@@ -33,6 +35,7 @@ module Saharspec
33
35
 
34
36
  def times
35
37
  fail NoMethodError unless @times
38
+
36
39
  self
37
40
  end
38
41
 
@@ -68,7 +71,7 @@ module Saharspec
68
71
  end
69
72
 
70
73
  def description
71
- format('to send %p.%s', @target, @method)
74
+ format('send %p.%s', @target, @method)
72
75
  end
73
76
 
74
77
  def failure_message
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Util
3
5
  def multiline(string)
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  MAJOR = 0
3
5
  MINOR = 0
4
- PATCH = 5
6
+ PATCH = 6
5
7
  VERSION = [MAJOR, MINOR, PATCH].join('.')
6
8
  end
@@ -23,10 +23,10 @@ Gem::Specification.new do |s|
23
23
  end
24
24
  s.require_paths = ["lib"]
25
25
 
26
- s.required_ruby_version = '>= 2.1.0'
26
+ s.required_ruby_version = '>= 2.3.0'
27
27
 
28
- s.add_development_dependency 'rubocop', '>= 0.40'
29
- s.add_development_dependency 'rspec'
28
+ s.add_development_dependency 'rubocop', '~> 0.75'
29
+ s.add_development_dependency 'rspec', '~> 3.7.0'
30
30
  s.add_development_dependency 'rspec-its'
31
31
  s.add_development_dependency 'simplecov', '~> 0.9'
32
32
  s.add_development_dependency 'rake'
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saharspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Shepelev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2019-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.40'
19
+ version: '0.75'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.40'
26
+ version: '0.75'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 3.7.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 3.7.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec-its
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -146,15 +146,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
147
  - - ">="
148
148
  - !ruby/object:Gem::Version
149
- version: 2.1.0
149
+ version: 2.3.0
150
150
  required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  requirements:
152
152
  - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  requirements: []
156
- rubyforge_project:
157
- rubygems_version: 2.6.14
156
+ rubygems_version: 3.0.3
158
157
  signing_key:
159
158
  specification_version: 4
160
159
  summary: Several additions for DRYer RSpec code