saharspec 0.0.3 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a363bdb21050423225b98a8dae3d2f8861947426
4
- data.tar.gz: 3ace51cf8d457d79caa8fe2c3b12e144c1a5a50a
2
+ SHA256:
3
+ metadata.gz: 402e6f62d9abc17f1dad82a3a5f38ae8f844ca458ad87a4756192976e4cd5496
4
+ data.tar.gz: 1541630eb677716d9ab2e58e1a25427ea86b67c5e001a52a25e9641491006971
5
5
  SHA512:
6
- metadata.gz: a6b1f390d030eeebbaa9ece4efbc64176e24cfd32d748e044a1d47fd8f7862b5a966a83fdcb64474b28496f0d9ea97150e70d725c0b99d9ed47d74d26d4f60b2
7
- data.tar.gz: fbf40cbc81e264aeb3f78d14c5c934a3c501e3586e851c32718e4cd2be9eaedd58f5f3e2fc5c4664159bb1abec90b065fb907589bde3395a4b62ae89083d8180
6
+ metadata.gz: 7923af91fee36b0a8b8c79fdba8d0bf6503598ca62589d8d30a2e8dace0428f9338e892d5e3a0538c4fc857a209b390b6b88eebf8637c41dc68dd6c61d6772d5
7
+ data.tar.gz: 5b844ac0a0098001638d19a2113e0eca4bf7acb225a87a456133e3d1ff564fc96648b95a0e0c37478c07d2532fc005e9c4db35a15b00f6b92018565c70097175
@@ -1,5 +1,31 @@
1
1
  # Saharspec history
2
2
 
3
+ ## 0.0.8 -- 2020-10-10
4
+
5
+ * Better `dont` failure message (just use underlying matchers `failure_message_when_negated`)
6
+
7
+ ## 0.0.7 -- 2020-04-11
8
+
9
+ * Allow `its_call` to work properly with keyword args on Ruby 2.7
10
+
11
+ ## 0.0.6 -- 2019-10-05
12
+
13
+ * Fix `dont.send_message` combination behavior (and generally, behavior of `dont.` with matchers
14
+ defining custom `does_not_matches?`);
15
+ * Better `ret` matcher failure message when there is a complicated matcher on the right side (use
16
+ its `failure_message` instead of `description`);
17
+ * Update `send_message` matcher description to be more readable;
18
+ * Drop Ruby 2.2 support.
19
+
20
+ ## 0.0.5 -- 2018-03-03
21
+
22
+ * `be_json` matcher;
23
+ * make `ret` diffable.
24
+
25
+ ## 0.0.4 -- 2017-11-07
26
+
27
+ * Update `its_call` description generation, looks better with `rspec --format doc`
28
+
3
29
  ## 0.0.3 -- 2017-11-06
4
30
 
5
31
  * Introduce new `its`-family addition: `its_call(*args)`
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014-15 Victor 'Zverok' Shepelev
3
+ Copyright (c) 2017-18 Victor 'Zverok' Shepelev
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -9,7 +9,8 @@ specs dry as a desert.
9
9
 
10
10
  ## Usage
11
11
 
12
- Install it as a usual gem `saharspec`.
12
+ Install it as a usual gem `saharspec` with `gem install` or `gem "saharspec"` in `:test` group of
13
+ your `Gemfile`.
13
14
 
14
15
  Then, probably in your `spec_helper.rb`
15
16
 
@@ -42,9 +43,9 @@ require 'saharspec/matchers/send_message'
42
43
  it {
43
44
  expect { fetcher }.to send_message(Net::HTTP, :get).with('http://google.com').returning('not this time')
44
45
  }
45
- # after + its_call
46
+ # after + its_block
46
47
  subject { fetcher }
47
- 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') }
48
49
  ```
49
50
 
50
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
@@ -102,6 +103,27 @@ end
102
103
 
103
104
  Plays really well with `its_call` shown below.
104
105
 
106
+ #### `be_json(value)` and `be_json_sym(value)` matchers
107
+
108
+ Simple matcher to check if string is valid JSON and optionally if it matches to expected values:
109
+
110
+ ```ruby
111
+ expect('{}').to be_json # ok
112
+ expect('garbage').to be_json
113
+ # expected value to be a valid JSON string but failed: 765: unexpected token at 'garbage'
114
+
115
+ expect('{"foo": "bar"}').to be_json('foo' => 'bar') # ok
116
+
117
+ # be_json_sym is more convenient to check with hash keys, parses JSON to symbols
118
+ expect('{"foo": "bar"}').to be_json_sym(foo: 'bar')
119
+
120
+ # nested matchers work, too
121
+ expect('{"foo": [1, 2, 3]').to be_json_sym(foo: array_including(3))
122
+
123
+ # We need to go deeper!
124
+ expect(something_large).to be_json_sym(include(meta: include(next_page: Integer)))
125
+ ```
126
+
105
127
  #### `eq_multiline(text)` matcher
106
128
 
107
129
  Dedicated to checking some multiline text generators.
@@ -135,7 +157,7 @@ require 'saharspec/matchers/eq_multiline'
135
157
 
136
158
  ### `dont`: matcher negation
137
159
 
138
- Another (exprimental) attempt to get rid of `define_negated_matcher`. `dont` is not 100% grammatically
160
+ Allows to get rid of gazilliions of `define_negated_matcher`. `dont` is not 100% grammatically
139
161
  correct, yet short and readable enought. It just negates attached matcher.
140
162
 
141
163
  ```ruby
@@ -241,4 +263,4 @@ checking them). Stay tuned.
241
263
 
242
264
  ## License
243
265
 
244
- [MIT](https://github.com/zverok/time_math2/blob/master/LICENSE.txt).
266
+ [MIT](https://github.com/zverok/saharspec/blob/master/LICENSE.txt).
@@ -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,11 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  # Wrapper module for all `its_*` RSpec additions.
3
5
  #
4
6
  # See:
5
7
  #
6
- # * {Map#its_map #its_map}
7
- # * {Block#its_block #its_block}
8
- # * {Call#its_call #its_call}
8
+ # ## {Map#its_map #its_map}
9
+ #
10
+ # ```ruby
11
+ # subject { %w[1 2 3] }
12
+ # its_map(:to_s) { is_expected.to eq [1, 2, 3] }
13
+ # ```
14
+ #
15
+ # ## {Call#its_call #its_call}
16
+ #
17
+ # ```ruby
18
+ # subject { [1, 2, 3].method(:[]) }
19
+ # its_call(2) { is_expected.to ret 3 }
20
+ # its_call('foo') { is_expected.to raise_error }
21
+ # ```
22
+ #
23
+ # ## {Block#its_block #its_block}
24
+ #
25
+ # ```ruby
26
+ # subject { something_action }
27
+ # its_block { is_expected.not_to raise_error }
28
+ # its_block { is_expected.to change(some, :value).by(1) }
29
+ # ```
30
+ #
9
31
  module Its
10
32
  end
11
33
  end
@@ -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,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby2_keywords'
4
+
1
5
  module Saharspec
2
6
  module Its
3
7
  module Call
@@ -23,11 +27,10 @@ module Saharspec
23
27
  # its_call(5) { is_expected.to change(array, :length).by(1) }
24
28
  # end
25
29
  #
26
- def its_call(*args, &block)
30
+ ruby2_keywords def its_call(*args, &block)
27
31
  # rubocop:disable Lint/NestedMethodDefinition
28
- describe('call') do
32
+ describe("(#{args.map(&:inspect).join(', ')})") do
29
33
  let(:__call_subject) do
30
- warn 'No need to use its_call without arguments, just it {} will work' if args.empty?
31
34
  -> { subject.call(*args) }
32
35
  end
33
36
 
@@ -48,4 +51,4 @@ RSpec.configure do |rspec|
48
51
  rspec.backtrace_exclusion_patterns << %r{/lib/saharspec/its/call}
49
52
  end
50
53
 
51
- RSpec::SharedContext.send(:include, Saharspec::Its::Call)
54
+ 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
@@ -11,7 +13,7 @@ module Saharspec
11
13
  # its_map(:length) { is_expected.to eq [4, 2, 6] }
12
14
  #
13
15
  # # with attribute chain
14
- # its_map(:'reverse.upcase') { is_expected.to eq %w[TSET EM ESAELP] }
16
+ # its_map('reverse.upcase') { is_expected.to eq %w[TSET EM ESAELP] }
15
17
  #
16
18
  # # with Hash (or any other object responding to `#[]`)
17
19
  # subject {
@@ -30,12 +32,13 @@ module Saharspec
30
32
  # @param block [Proc] The test itself. Inside it, `is_expected` (or `are_expected`) is related to result
31
33
  # of `map`ping the subject.
32
34
  #
33
- def its_map(attribute, *options, &block) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
35
+ def its_map(attribute, *options, &block) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
34
36
  # rubocop:disable Lint/NestedMethodDefinition
37
+ # TODO: better desciption for different cases
35
38
  describe("map(&:#{attribute})") do
36
39
  let(:__its_map_subject) do
37
- if Array === attribute # rubocop:disable Style/CaseEquality
38
- if subject.all? { |s| Hash === s } # rubocop:disable Style/CaseEquality
40
+ if Array === attribute
41
+ if subject.all? { |s| Hash === s }
39
42
  subject.map do |s|
40
43
  attribute.inject(s) { |inner, attr| inner[attr] }
41
44
  end
@@ -71,4 +74,4 @@ RSpec.configure do |rspec|
71
74
  rspec.backtrace_exclusion_patterns << %r{/lib/saharspec/its/map}
72
75
  end
73
76
 
74
- RSpec::SharedContext.send(:include, Saharspec::Its::Map)
77
+ RSpec::SharedContext.include Saharspec::Its::Map
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  # All Saharspec matchers, when required, included into `RSpec::Matchers` namespace.
3
5
  #
4
6
  # See:
5
7
  #
6
- # * {RSpec::Matchers#dont #dont}
7
- # * {RSpec::Matchers#send_message #send_message}
8
- # * {RSpec::Matchers#eq_multiline #eq_multiline}
9
- # * {RSpec::Matchers#ret #ret}
8
+ # * {RSpec::Matchers#dont #dont}: `expect { block }.to change(this).and dont.change(that)`
9
+ # * {RSpec::Matchers#send_message #send_message}: `expect { block }.to send_message(File, :write)`
10
+ # * {RSpec::Matchers#ret #ret}: `expect { block }.to ret value`
11
+ # * {RSpec::Matchers#be_json #be_json}: `expect(response.body).to be_json('foo' => 'bar')`
12
+ # * {RSpec::Matchers#eq_multiline #eq_multiline}: multiline equality akin to squiggly heredoc
10
13
  #
11
14
  module Matchers
12
15
  end
@@ -15,3 +18,5 @@ end
15
18
  require_relative 'matchers/eq_multiline'
16
19
  require_relative 'matchers/send_message'
17
20
  require_relative 'matchers/ret'
21
+ require_relative 'matchers/dont'
22
+ require_relative 'matchers/be_json'
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Saharspec
6
+ module Matchers
7
+ # @private
8
+ class BeJson
9
+ include RSpec::Matchers::Composable
10
+ include RSpec::Matchers # to have #match
11
+
12
+ ANY = Object.new.freeze
13
+
14
+ attr_reader :actual, :expected
15
+
16
+ def initialize(expected, **parse_opts)
17
+ @expected_matcher = @expected = expected
18
+
19
+ # wrap to make be_json('foo' => matcher) work, too
20
+ unless expected == ANY || expected.respond_to?(:matches?)
21
+ @expected_matcher = match(expected)
22
+ end
23
+ @parse_opts = parse_opts
24
+ end
25
+
26
+ def matches?(json)
27
+ @actual = JSON.parse(json, **@parse_opts)
28
+ @expected_matcher == ANY || @expected_matcher === @actual
29
+ rescue JSON::ParserError => e
30
+ @parser_error = e
31
+ false
32
+ end
33
+
34
+ def does_not_match?(*args)
35
+ !matches?(*args)
36
+ end
37
+
38
+ def diffable?
39
+ true
40
+ end
41
+
42
+ def description
43
+ if @expected == ANY
44
+ 'be a valid JSON string'
45
+ else
46
+ expected = @expected.respond_to?(:description) ? @expected.description : @expected
47
+ "be a valid JSON matching (#{expected})"
48
+ end
49
+ end
50
+
51
+ def failure_message
52
+ failed =
53
+ case
54
+ when @parser_error
55
+ "failed: #{@parser_error}"
56
+ when @expected != ANY
57
+ "was #{@actual}"
58
+ end
59
+ "expected value to #{description} but #{failed}"
60
+ end
61
+
62
+ def failure_message_when_negated
63
+ 'expected value not to be parsed as JSON, but succeeded'
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ module RSpec
70
+ module Matchers
71
+ # `be_json` checks if provided value is JSON, and optionally checks it contents.
72
+ #
73
+ # If you need to check against some hashes, it is more convenient to use `be_json_sym`, which
74
+ # parses JSON with `symbolize_names: true`.
75
+ #
76
+ # @example
77
+ #
78
+ # expect('{}').to be_json # ok
79
+ # expect('garbage').to be_json
80
+ # # expected value to be a valid JSON string but failed: 765: unexpected token at 'garbage'
81
+ #
82
+ # expect('{"foo": "bar"}').to be_json('foo' => 'bar') # ok
83
+ # expect('{"foo": "bar"}').to be_json_sym(foo: 'bar') # more convenient
84
+ #
85
+ # expect('{"foo": [1, 2, 3]').to be_json_sym(foo: array_including(3)) # nested matchers work
86
+ # expect(something_large).to be_json_sym(include(meta: include(next_page: Integer)))
87
+ #
88
+ # @param expected Value or matcher to check JSON against. It should implement `#===` method,
89
+ # so all standard and custom RSpec matchers work.
90
+ def be_json(expected = Saharspec::Matchers::BeJson::ANY)
91
+ Saharspec::Matchers::BeJson.new(expected)
92
+ end
93
+
94
+ # `be_json_sym` checks if value is a valid JSON and parses it with `symbolize_names: true`. This
95
+ # way, it is convenient to check hashes content with Ruby's short symbolic keys syntax.
96
+ #
97
+ # See {#be_json_sym} for examples.
98
+ #
99
+ # @param expected Value or matcher to check JSON against. It should implement `#===` method,
100
+ # so all standard and custom RSpec matchers work.
101
+ def be_json_sym(expected = Saharspec::Matchers::BeJson::ANY)
102
+ Saharspec::Matchers::BeJson.new(expected, symbolize_names: true)
103
+ end
104
+ end
105
+ end
@@ -1,8 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
4
6
  class Not < RSpec::Matchers::BuiltIn::BaseMatcher
5
- def initialize
7
+ def initialize(*)
8
+ super
6
9
  @delegator = Delegator.new
7
10
  end
8
11
 
@@ -11,16 +14,29 @@ module Saharspec
11
14
  end
12
15
 
13
16
  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)
17
+ @matcher or fail ArgumentError, '`dont` matcher used without any matcher to negate. '\
18
+ 'Usage: dont.other_matcher(args)'
19
+
20
+ # https://www.rubydoc.info/github/rspec/rspec-expectations/RSpec%2FMatchers%2FMatcherProtocol:does_not_match%3F
21
+ # In a negative expectation such as `expect(x).not_to foo`, RSpec will call
22
+ # `foo.does_not_match?(x)` if this method is defined. If it's not defined it
23
+ # will fall back to using `!foo.matches?(x)`.
24
+ if @matcher.respond_to?(:does_not_match?)
25
+ @matcher.does_not_match?(actual)
26
+ else
27
+ !@matcher.matches?(actual)
28
+ end
29
+ end
30
+
31
+ def failure_message
32
+ @matcher.failure_message_when_negated
17
33
  end
18
34
 
19
35
  def supports_block_expectations?
20
36
  @matcher.supports_block_expectations?
21
37
  end
22
38
 
23
- def method_missing(m, *a, &b) # rubocop:disable Style/MethodMissing
39
+ def method_missing(m, *a, &b) # rubocop:disable Lint/MissingSuper
24
40
  if @matcher
25
41
  @matcher.send(m, *a, &b)
26
42
  else
@@ -30,7 +46,7 @@ module Saharspec
30
46
  self
31
47
  end
32
48
 
33
- def respond_to_missing?(method, include_private = false)
49
+ def respond_to_missing?(method, include_private = false) # rubocop:disable Lint/MissingSuper
34
50
  if @matcher
35
51
  @matcher.respond_to?(method, include_private)
36
52
  else
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../util'
2
4
 
3
5
  module Saharspec
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
4
6
  class Ret
5
7
  include RSpec::Matchers::Composable
6
8
 
9
+ attr_reader :actual, :expected
10
+
7
11
  def initialize(expected)
8
12
  @expected = expected
9
13
  end
@@ -11,25 +15,41 @@ module Saharspec
11
15
  def matches?(subject)
12
16
  @subject = subject
13
17
  return false unless subject.respond_to?(:call)
18
+
14
19
  @actual = subject.call
15
- @expected === @actual # rubocop:disable Style/CaseEquality
20
+ @expected === @actual
16
21
  end
17
22
 
18
23
  def supports_block_expectations?
19
24
  true
20
25
  end
21
26
 
27
+ def diffable?
28
+ true
29
+ end
30
+
22
31
  def description
23
32
  "return #{@expected.respond_to?(:description) ? @expected.description : @expected.inspect}"
24
33
  end
25
34
 
26
35
  def failure_message
27
- "expected to #{description}, " +
28
- (@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
29
44
  end
30
45
 
31
46
  def failure_message_when_negated
32
- "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
33
53
  end
34
54
  end
35
55
  end
@@ -42,7 +62,8 @@ module RSpec
42
62
  # It should be considered instead of simple value matchers (like `eq`) in the situations:
43
63
  #
44
64
  # 1. Several block behaviors tested in the same test, joined with `.and`, or in separate tests
45
- # 2. You test what some block or method returns with arguments, using {Call#its_call #its_call}
65
+ # 2. You test what some block or method returns with arguments, using
66
+ # {Saharspec::Its::Call#its_call #its_call}
46
67
  #
47
68
  # Values are tested with `===`, which allows chaining other matchers and patterns to the check.
48
69
  #
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Matchers
3
5
  # @private
@@ -16,8 +18,8 @@ module Saharspec
16
18
  self
17
19
  end
18
20
 
19
- def returning(res)
20
- @res = res
21
+ def returning(*res)
22
+ @res = [*res]
21
23
  self
22
24
  end
23
25
 
@@ -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
@@ -91,7 +94,7 @@ module Saharspec
91
94
 
92
95
  def allower
93
96
  receive(@method).tap do |a|
94
- a.and_return(@res) if @res
97
+ a.and_return(*@res) if @res
95
98
  a.and_call_original if @call_original
96
99
  end
97
100
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
4
  module Util
3
5
  def multiline(string)
@@ -1,9 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Saharspec
2
- # @private
3
4
  MAJOR = 0
4
- # @private
5
5
  MINOR = 0
6
- # @private
7
- PATCH = 3
6
+ PATCH = 8
8
7
  VERSION = [MAJOR, MINOR, PATCH].join('.')
9
8
  end
@@ -23,10 +23,14 @@ 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_runtime_dependency 'ruby2_keywords'
29
+
30
+ if RUBY_VERSION >= '2.4' # Newest Rubocop fails on 2.3
31
+ s.add_development_dependency 'rubocop', '~> 0.93'
32
+ end
33
+ s.add_development_dependency 'rspec', '~> 3.7.0'
30
34
  s.add_development_dependency 'rspec-its'
31
35
  s.add_development_dependency 'simplecov', '~> 0.9'
32
36
  s.add_development_dependency 'rake'
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saharspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Shepelev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-06 00:00:00.000000000 Z
11
+ date: 2020-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rubocop
14
+ name: ruby2_keywords
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0.40'
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.93'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.93'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ">="
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0'
47
+ version: 3.7.0
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ">="
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0'
54
+ version: 3.7.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec-its
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -125,6 +139,7 @@ files:
125
139
  - lib/saharspec/its/call.rb
126
140
  - lib/saharspec/its/map.rb
127
141
  - lib/saharspec/matchers.rb
142
+ - lib/saharspec/matchers/be_json.rb
128
143
  - lib/saharspec/matchers/dont.rb
129
144
  - lib/saharspec/matchers/eq_multiline.rb
130
145
  - lib/saharspec/matchers/request_webmock.rb
@@ -145,15 +160,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
160
  requirements:
146
161
  - - ">="
147
162
  - !ruby/object:Gem::Version
148
- version: 2.1.0
163
+ version: 2.3.0
149
164
  required_rubygems_version: !ruby/object:Gem::Requirement
150
165
  requirements:
151
166
  - - ">="
152
167
  - !ruby/object:Gem::Version
153
168
  version: '0'
154
169
  requirements: []
155
- rubyforge_project:
156
- rubygems_version: 2.6.10
170
+ rubygems_version: 3.0.3
157
171
  signing_key:
158
172
  specification_version: 4
159
173
  summary: Several additions for DRYer RSpec code