r_spec-clone 1.0.0.rc1
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 +7 -0
- data/LICENSE.md +21 -0
- data/README.md +259 -0
- data/lib/r_spec.rb +172 -0
- data/lib/r_spec/clone.rb +11 -0
- data/lib/r_spec/clone/console.rb +40 -0
- data/lib/r_spec/clone/dsl.rb +350 -0
- data/lib/r_spec/clone/error.rb +16 -0
- data/lib/r_spec/clone/error/pending_expectation.rb +29 -0
- data/lib/r_spec/clone/error/reserved_method.rb +13 -0
- data/lib/r_spec/clone/error/undefined_described_class.rb +13 -0
- data/lib/r_spec/clone/error/undefined_subject.rb +13 -0
- data/lib/r_spec/clone/expectation_helper.rb +12 -0
- data/lib/r_spec/clone/expectation_helper/it.rb +43 -0
- data/lib/r_spec/clone/expectation_helper/its.rb +27 -0
- data/lib/r_spec/clone/expectation_helper/shared.rb +84 -0
- data/lib/r_spec/clone/expectation_target.rb +32 -0
- data/lib/r_spec/clone/expectation_target/base.rb +84 -0
- data/lib/r_spec/clone/expectation_target/block.rb +51 -0
- data/lib/r_spec/clone/expectation_target/value.rb +50 -0
- metadata +247 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative File.join("expectation_helper", "it")
|
4
|
+
require_relative File.join("expectation_helper", "its")
|
5
|
+
|
6
|
+
module RSpec
|
7
|
+
module Clone
|
8
|
+
# Namespace for {Dsl.it} and {Dsl.its}'s helper modules.
|
9
|
+
module ExpectationHelper
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "shared"
|
4
|
+
require_relative File.join("..", "expectation_target")
|
5
|
+
|
6
|
+
module RSpec
|
7
|
+
module Clone
|
8
|
+
module ExpectationHelper
|
9
|
+
# {RSpec::Clone::Dsl.it}'s expectation helper module.
|
10
|
+
module It
|
11
|
+
include Shared
|
12
|
+
|
13
|
+
# Create an expectation for a spec.
|
14
|
+
#
|
15
|
+
# @param value [#object_id, nil] An actual value.
|
16
|
+
# @param block [#call, nil] A code to evaluate.
|
17
|
+
#
|
18
|
+
# @return [Block, Value] The wrapped target of an expectation.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# expect("foo") # => #<RSpec::ExpectationTarget::Value:0x00007fb6b823 @actual="foo">
|
22
|
+
# expect { Boom } # => #<RSpec::ExpectationTarget::Block:0x00007fb6b826 @callable=#<Proc:0x00007fb6b826>>
|
23
|
+
#
|
24
|
+
# @api public
|
25
|
+
def expect(value = self.class.superclass, &block)
|
26
|
+
ExpectationTarget.call(self.class.superclass, value, block)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Wraps the target of an expectation with the subject as actual value.
|
30
|
+
#
|
31
|
+
# @return [Block] The wrapped target of an expectation.
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# is_expected # => #<RSpec::ExpectationTarget::Block:0x00007fb6b8263df8 @callable=#<Proc:0x00007fb6b8263e20>>
|
35
|
+
#
|
36
|
+
# @api public
|
37
|
+
def is_expected
|
38
|
+
expect { subject }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "shared"
|
4
|
+
require_relative File.join("..", "expectation_target", "block")
|
5
|
+
|
6
|
+
module RSpec
|
7
|
+
module Clone
|
8
|
+
module ExpectationHelper
|
9
|
+
# {RSpec::Clone::Dsl.its}'s expectation helper module.
|
10
|
+
module Its
|
11
|
+
include Shared
|
12
|
+
|
13
|
+
# Wraps the target of an expectation with the actual value.
|
14
|
+
#
|
15
|
+
# @return [Block] The wrapped target of an expectation.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# is_expected # => #<RSpec::ExpectationTarget::Block:0x00007fb6b8263df8 @callable=#<Proc:0x00007fb6b8263e20>>
|
19
|
+
#
|
20
|
+
# @api public
|
21
|
+
def is_expected
|
22
|
+
ExpectationTarget::Block.new(method(:actual))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "matchi/rspec"
|
4
|
+
|
5
|
+
require_relative File.join("..", "error", "pending_expectation")
|
6
|
+
|
7
|
+
module RSpec
|
8
|
+
module Clone
|
9
|
+
module ExpectationHelper
|
10
|
+
# Abstract expectation helper base module.
|
11
|
+
#
|
12
|
+
# This module defines a number of methods to create expectations, which are
|
13
|
+
# automatically included into examples.
|
14
|
+
#
|
15
|
+
# It also includes a collection of expectation matchers 🤹
|
16
|
+
#
|
17
|
+
# @example Equivalence matcher
|
18
|
+
# matcher = eql("foo") # => Matchi::Matcher::Eql.new("foo")
|
19
|
+
# matcher.matches? { "foo" } # => true
|
20
|
+
# matcher.matches? { "bar" } # => false
|
21
|
+
#
|
22
|
+
# matcher = eq("foo") # => Matchi::Matcher::Eq.new("foo")
|
23
|
+
# matcher.matches? { "foo" } # => true
|
24
|
+
# matcher.matches? { "bar" } # => false
|
25
|
+
#
|
26
|
+
# @example Identity matcher
|
27
|
+
# object = "foo"
|
28
|
+
#
|
29
|
+
# matcher = equal(object) # => Matchi::Matcher::Equal.new(object)
|
30
|
+
# matcher.matches? { object } # => true
|
31
|
+
# matcher.matches? { "foo" } # => false
|
32
|
+
#
|
33
|
+
# matcher = be(object) # => Matchi::Matcher::Be.new(object)
|
34
|
+
# matcher.matches? { object } # => true
|
35
|
+
# matcher.matches? { "foo" } # => false
|
36
|
+
#
|
37
|
+
# @example Regular expressions matcher
|
38
|
+
# matcher = match(/^foo$/) # => Matchi::Matcher::Match.new(/^foo$/)
|
39
|
+
# matcher.matches? { "foo" } # => true
|
40
|
+
# matcher.matches? { "bar" } # => false
|
41
|
+
#
|
42
|
+
# @example Expecting errors matcher
|
43
|
+
# matcher = raise_exception(NameError) # => Matchi::Matcher::RaiseException.new(NameError)
|
44
|
+
# matcher.matches? { Boom } # => true
|
45
|
+
# matcher.matches? { true } # => false
|
46
|
+
#
|
47
|
+
# @example Truth matcher
|
48
|
+
# matcher = be_true # => Matchi::Matcher::BeTrue.new
|
49
|
+
# matcher.matches? { true } # => true
|
50
|
+
# matcher.matches? { false } # => false
|
51
|
+
# matcher.matches? { nil } # => false
|
52
|
+
# matcher.matches? { 4 } # => false
|
53
|
+
#
|
54
|
+
# @example Untruth matcher
|
55
|
+
# matcher = be_false # => Matchi::Matcher::BeFalse.new
|
56
|
+
# matcher.matches? { false } # => true
|
57
|
+
# matcher.matches? { true } # => false
|
58
|
+
# matcher.matches? { nil } # => false
|
59
|
+
# matcher.matches? { 4 } # => false
|
60
|
+
#
|
61
|
+
# @example Nil matcher
|
62
|
+
# matcher = be_nil # => Matchi::Matcher::BeNil.new
|
63
|
+
# matcher.matches? { nil } # => true
|
64
|
+
# matcher.matches? { false } # => false
|
65
|
+
# matcher.matches? { true } # => false
|
66
|
+
# matcher.matches? { 4 } # => false
|
67
|
+
#
|
68
|
+
# @example Type/class matcher
|
69
|
+
# matcher = be_instance_of(String) # => Matchi::Matcher::BeInstanceOf.new(String)
|
70
|
+
# matcher.matches? { "foo" } # => true
|
71
|
+
# matcher.matches? { 4 } # => false
|
72
|
+
#
|
73
|
+
# matcher = be_an_instance_of(String) # => Matchi::Matcher::BeAnInstanceOf.new(String)
|
74
|
+
# matcher.matches? { "foo" } # => true
|
75
|
+
# matcher.matches? { 4 } # => false
|
76
|
+
#
|
77
|
+
# @see https://github.com/fixrb/matchi
|
78
|
+
# @see https://github.com/fixrb/matchi-rspec
|
79
|
+
module Shared
|
80
|
+
include ::Matchi::Helper
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative File.join("expectation_target", "block")
|
4
|
+
require_relative File.join("expectation_target", "value")
|
5
|
+
|
6
|
+
module RSpec
|
7
|
+
module Clone
|
8
|
+
# Wraps the target of an expectation.
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
module ExpectationTarget
|
12
|
+
# @param undefined_value A sentinel value to be able to tell when the user
|
13
|
+
# did not pass an argument. We can't use `nil` for that because `nil` is a
|
14
|
+
# valid value to pass.
|
15
|
+
# @param value [#object_id, nil] An actual value.
|
16
|
+
# @param block [#call, nil] A code to evaluate.
|
17
|
+
#
|
18
|
+
# @return [Block, Value] The wrapped target of an expectation.
|
19
|
+
def self.call(undefined_value, value, block)
|
20
|
+
if undefined_value.equal?(value)
|
21
|
+
raise ::ArgumentError, "Pass either an argument or a block" unless block
|
22
|
+
|
23
|
+
Block.new(block)
|
24
|
+
else
|
25
|
+
raise ::ArgumentError, "Can't pass both an argument and a block" if block
|
26
|
+
|
27
|
+
Value.new(value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "expresenter"
|
4
|
+
require "test_tube"
|
5
|
+
|
6
|
+
require_relative File.join("..", "console")
|
7
|
+
|
8
|
+
module RSpec
|
9
|
+
module Clone
|
10
|
+
module ExpectationTarget
|
11
|
+
# Abstract expectation target base class.
|
12
|
+
#
|
13
|
+
# @note `RSpec::ExpectationTarget::Base` is not intended to be instantiated
|
14
|
+
# directly by users. Use `expect` instead.
|
15
|
+
class Base
|
16
|
+
# Instantiate a new expectation target.
|
17
|
+
#
|
18
|
+
# @param actual [#object_id] The actual value of the code to evaluate.
|
19
|
+
def initialize(actual)
|
20
|
+
@actual = actual
|
21
|
+
end
|
22
|
+
|
23
|
+
# Runs the given expectation, passing if `matcher` returns true.
|
24
|
+
#
|
25
|
+
# @example _Absolute requirement_ definition
|
26
|
+
# expect { "foo".upcase }.to eq("foo")
|
27
|
+
#
|
28
|
+
# @param matcher [#matches?] The matcher.
|
29
|
+
#
|
30
|
+
# @raise (see #result)
|
31
|
+
# @return (see #result)
|
32
|
+
#
|
33
|
+
# @api public
|
34
|
+
def to(matcher)
|
35
|
+
absolute_requirement(matcher: matcher, negate: false)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Runs the given expectation, passing if `matcher` returns false.
|
39
|
+
#
|
40
|
+
# @example _Absolute prohibition_ definition
|
41
|
+
# expect { "foo".size }.not_to be(4)
|
42
|
+
#
|
43
|
+
# @param (see #to)
|
44
|
+
#
|
45
|
+
# @raise (see #result)
|
46
|
+
# @return (see #result)
|
47
|
+
#
|
48
|
+
# @api public
|
49
|
+
def not_to(matcher)
|
50
|
+
absolute_requirement(matcher: matcher, negate: true)
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
# @param passed [Boolean] The high expectation passed or failed.
|
56
|
+
# @param actual [#object_id] The actual value.
|
57
|
+
# @param error [Exception, nil] Any raised exception.
|
58
|
+
# @param got [Boolean, nil] Any returned value.
|
59
|
+
# @param matcher [#matches?] The matcher.
|
60
|
+
# @param negate [Boolean] The assertion is positive or negative.
|
61
|
+
#
|
62
|
+
# @return [nil] Write a message to STDOUT.
|
63
|
+
#
|
64
|
+
# @raise [SystemExit] Terminate execution immediately by calling
|
65
|
+
# `Kernel.exit(false)` with a failure message written to STDERR.
|
66
|
+
#
|
67
|
+
# @api private
|
68
|
+
def result(passed, actual:, error:, got:, matcher:, negate:)
|
69
|
+
Console.passed_spec ::Expresenter.call(passed).with(
|
70
|
+
actual: actual,
|
71
|
+
error: error,
|
72
|
+
expected: matcher.expected,
|
73
|
+
got: got,
|
74
|
+
negate: negate,
|
75
|
+
matcher: matcher.class.to_sym,
|
76
|
+
level: :MUST
|
77
|
+
)
|
78
|
+
rescue ::Expresenter::Fail => e
|
79
|
+
Console.failed_spec(e)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module RSpec
|
6
|
+
module Clone
|
7
|
+
module ExpectationTarget
|
8
|
+
# Wraps the target of an expectation with a block.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# expect { something } # => ExpectationTarget::Block wrapping something
|
12
|
+
#
|
13
|
+
# # used with `to`
|
14
|
+
# expect { actual }.to be(42)
|
15
|
+
#
|
16
|
+
# # with `not_to`
|
17
|
+
# expect { actual }.not_to be(4)
|
18
|
+
#
|
19
|
+
# @note `RSpec::ExpectationTarget::Block` is not intended to be instantiated
|
20
|
+
# directly by users. Use `expect` instead.
|
21
|
+
class Block < Base
|
22
|
+
protected
|
23
|
+
|
24
|
+
# @param matcher [#matches?] The matcher.
|
25
|
+
# @param negate [Boolean] The assertion is positive or negative.
|
26
|
+
#
|
27
|
+
# @return [nil] Write a message to STDOUT.
|
28
|
+
#
|
29
|
+
# @raise [SystemExit] Terminate execution immediately by calling
|
30
|
+
# `Kernel.exit(false)` with a failure message written to STDERR.
|
31
|
+
def absolute_requirement(matcher:, negate:)
|
32
|
+
experiment = ::TestTube.invoke(
|
33
|
+
@actual,
|
34
|
+
isolation: false,
|
35
|
+
matcher: matcher,
|
36
|
+
negate: negate
|
37
|
+
)
|
38
|
+
|
39
|
+
result(
|
40
|
+
experiment.got.equal?(true),
|
41
|
+
actual: experiment.actual,
|
42
|
+
error: experiment.error,
|
43
|
+
got: experiment.got,
|
44
|
+
matcher: matcher,
|
45
|
+
negate: negate
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module RSpec
|
6
|
+
module Clone
|
7
|
+
module ExpectationTarget
|
8
|
+
# Wraps the target of an expectation with a value.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# expect(something) # => ExpectationTarget::Value wrapping something
|
12
|
+
#
|
13
|
+
# # used with `to`
|
14
|
+
# expect(actual).to be(42)
|
15
|
+
#
|
16
|
+
# # with `not_to`
|
17
|
+
# expect(actual).not_to be(4)
|
18
|
+
#
|
19
|
+
# @note `RSpec::ExpectationTarget::Value` is not intended to be instantiated
|
20
|
+
# directly by users. Use `expect` instead.
|
21
|
+
class Value < Base
|
22
|
+
protected
|
23
|
+
|
24
|
+
# @param matcher [#matches?] The matcher.
|
25
|
+
# @param negate [Boolean] The assertion is positive or negative.
|
26
|
+
#
|
27
|
+
# @return [nil] Write a message to STDOUT.
|
28
|
+
#
|
29
|
+
# @raise [SystemExit] Terminate execution immediately by calling
|
30
|
+
# `Kernel.exit(false)` with a failure message written to STDERR.
|
31
|
+
def absolute_requirement(matcher:, negate:)
|
32
|
+
experiment = ::TestTube.pass(
|
33
|
+
@actual,
|
34
|
+
matcher: matcher,
|
35
|
+
negate: negate
|
36
|
+
)
|
37
|
+
|
38
|
+
result(
|
39
|
+
experiment.got.equal?(true),
|
40
|
+
actual: experiment.actual,
|
41
|
+
error: experiment.error,
|
42
|
+
got: experiment.got,
|
43
|
+
matcher: matcher,
|
44
|
+
negate: negate
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: r_spec-clone
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cyril Kato
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aw
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.12
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.12
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: expresenter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.3.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: matchi-rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.1.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.1.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test_tube
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.1.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-md
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-performance
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop-rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-rspec
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubocop-thread_safety
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: simplecov
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: yard
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description: A minimalist RSpec clone with all the essentials.
|
196
|
+
email: contact@cyril.email
|
197
|
+
executables: []
|
198
|
+
extensions: []
|
199
|
+
extra_rdoc_files: []
|
200
|
+
files:
|
201
|
+
- LICENSE.md
|
202
|
+
- README.md
|
203
|
+
- lib/r_spec.rb
|
204
|
+
- lib/r_spec/clone.rb
|
205
|
+
- lib/r_spec/clone/console.rb
|
206
|
+
- lib/r_spec/clone/dsl.rb
|
207
|
+
- lib/r_spec/clone/error.rb
|
208
|
+
- lib/r_spec/clone/error/pending_expectation.rb
|
209
|
+
- lib/r_spec/clone/error/reserved_method.rb
|
210
|
+
- lib/r_spec/clone/error/undefined_described_class.rb
|
211
|
+
- lib/r_spec/clone/error/undefined_subject.rb
|
212
|
+
- lib/r_spec/clone/expectation_helper.rb
|
213
|
+
- lib/r_spec/clone/expectation_helper/it.rb
|
214
|
+
- lib/r_spec/clone/expectation_helper/its.rb
|
215
|
+
- lib/r_spec/clone/expectation_helper/shared.rb
|
216
|
+
- lib/r_spec/clone/expectation_target.rb
|
217
|
+
- lib/r_spec/clone/expectation_target/base.rb
|
218
|
+
- lib/r_spec/clone/expectation_target/block.rb
|
219
|
+
- lib/r_spec/clone/expectation_target/value.rb
|
220
|
+
homepage: https://clone.r-spec.dev/
|
221
|
+
licenses:
|
222
|
+
- MIT
|
223
|
+
metadata:
|
224
|
+
bug_tracker_uri: https://github.com/cyril/r_spec-clone.rb/issues
|
225
|
+
documentation_uri: https://rubydoc.info/gems/r_spec-clone
|
226
|
+
source_code_uri: https://github.com/cyril/r_spec-clone.rb
|
227
|
+
wiki_uri: https://github.com/cyril/r_spec-clone.rb/wiki
|
228
|
+
post_install_message:
|
229
|
+
rdoc_options: []
|
230
|
+
require_paths:
|
231
|
+
- lib
|
232
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 2.7.0
|
237
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
|
+
requirements:
|
239
|
+
- - ">"
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: 1.3.1
|
242
|
+
requirements: []
|
243
|
+
rubygems_version: 3.1.6
|
244
|
+
signing_key:
|
245
|
+
specification_version: 4
|
246
|
+
summary: A minimalist RSpec clone
|
247
|
+
test_files: []
|