rspice 0.2.0 → 0.2.5
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/README.md +1 -0
- data/lib/rspice.rb +8 -3
- data/lib/rspice/custom_matchers.rb +6 -0
- data/lib/rspice/custom_matchers/alias_method.rb +29 -0
- data/lib/rspice/custom_matchers/extend_module.rb +33 -0
- data/lib/rspice/custom_matchers/include_module.rb +33 -0
- data/lib/rspice/custom_matchers/inherit_from.rb +29 -0
- data/lib/rspice/shared_context.rb +3 -0
- data/lib/rspice/shared_context/with_an_example_descendant_class.rb +8 -0
- data/lib/rspice/shared_examples.rb +3 -0
- data/lib/rspice/shared_examples/a_class_pass_method.rb +36 -0
- data/lib/rspice/version.rb +1 -1
- metadata +40 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa2eccc7a2ee562c1fccf79425a722e1dcbdd148c5e16e4c57cbf7d764b7b4f8
|
4
|
+
data.tar.gz: b0202df71dc3994f57f68898c51c99fb3c0ccd8f7a3098ece21d1014fc3b222f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e13f6c01268d681cdaabf6537b56924c77881521737ee3e74835f73b7f9d7462798fcfab9ba62752018b6311064bbc67ecc6d5c01a2bb7d24e677117de4727d
|
7
|
+
data.tar.gz: ae6894bc99e52ca53ad3f9094977b405c127c57a335d0e0d92b6c0f7e31b354e76822fddc087c551860632442a578c21473fdfded29d29a283a2ca0f24007467
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Rspice
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/rspice)
|
3
4
|
[](https://semaphoreci.com/freshly/spicerack)
|
4
5
|
[](https://codeclimate.com/github/Freshly/spicerack/maintainability)
|
5
6
|
[](https://codeclimate.com/github/Freshly/spicerack/test_coverage)
|
data/lib/rspice.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rspec"
|
4
|
+
require "faker"
|
5
|
+
|
3
6
|
require "rspice/version"
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
+
require "rspice/custom_matchers"
|
9
|
+
require "rspice/shared_context"
|
10
|
+
require "rspice/shared_examples"
|
11
|
+
|
12
|
+
module Rspice; end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# RSpec matcher to spec inheritance.
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# RSpec.describe User, type: :model do
|
8
|
+
# subject { described_class.new }
|
9
|
+
#
|
10
|
+
# it { is_expected.to alias_method :alias_name, :target_name }
|
11
|
+
# end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :alias_method do |alias_name, target_name|
|
14
|
+
match do |instance|
|
15
|
+
instance.method(alias_name) == instance.method(target_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
description do
|
19
|
+
"aliases #{target_name} as #{alias_name}"
|
20
|
+
end
|
21
|
+
|
22
|
+
failure_message do |instance|
|
23
|
+
"expected #{instance.class.name}##{alias_name} to be an alias of #{target_name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
failure_message_when_negated do |instance|
|
27
|
+
"expected #{instance.class.name}##{alias_name} to not be an alias of #{target_name}"
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# RSpec matcher for extend module.
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# RSpec.describe User, type: :model do
|
8
|
+
# subject { described_class }
|
9
|
+
#
|
10
|
+
# it { is_expected.to extend_module Authenticatable }
|
11
|
+
# end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :extend_module do |module_class|
|
14
|
+
match do
|
15
|
+
test_subject.singleton_class.included_modules.include? module_class
|
16
|
+
end
|
17
|
+
|
18
|
+
description do
|
19
|
+
"extended the module #{module_class}"
|
20
|
+
end
|
21
|
+
|
22
|
+
failure_message do |described_class|
|
23
|
+
"expected #{described_class} to extend module #{module_class}"
|
24
|
+
end
|
25
|
+
|
26
|
+
failure_message_when_negated do |described_class|
|
27
|
+
"expected #{described_class} not to extend module #{module_class}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_subject
|
31
|
+
subject.is_a?(Class) ? subject : subject.class
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# RSpec matcher for include module.
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# RSpec.describe User, type: :model do
|
8
|
+
# subject { described_class }
|
9
|
+
#
|
10
|
+
# it { is_expected.to include_module ApplicationRecord }
|
11
|
+
# end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :include_module do |module_class|
|
14
|
+
match do
|
15
|
+
test_subject.included_modules.include? module_class
|
16
|
+
end
|
17
|
+
|
18
|
+
description do
|
19
|
+
"included the module #{module_class}"
|
20
|
+
end
|
21
|
+
|
22
|
+
failure_message do |described_class|
|
23
|
+
"expected #{described_class} to include module #{module_class}"
|
24
|
+
end
|
25
|
+
|
26
|
+
failure_message_when_negated do |described_class|
|
27
|
+
"expected #{described_class} not to include module #{module_class}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_subject
|
31
|
+
subject.is_a?(Class) ? subject : subject.class
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# RSpec matcher to spec inheritance.
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
#
|
7
|
+
# RSpec.describe User, type: :model do
|
8
|
+
# subject { described_class }
|
9
|
+
#
|
10
|
+
# it { is_expected.to inherit_from ApplicationRecord }
|
11
|
+
# end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :inherit_from do |superclass|
|
14
|
+
match do
|
15
|
+
described_class.ancestors.include? superclass
|
16
|
+
end
|
17
|
+
|
18
|
+
description do
|
19
|
+
"inherit from #{superclass}"
|
20
|
+
end
|
21
|
+
|
22
|
+
failure_message do
|
23
|
+
"expected #{described_class.name} to inherit from #{superclass}"
|
24
|
+
end
|
25
|
+
|
26
|
+
failure_message_when_negated do
|
27
|
+
"expected #{described_class.name} not to inherit from #{superclass}"
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_context "with an example descendant class" do
|
4
|
+
let(:example_class) { Class.new(described_class) }
|
5
|
+
let(:example_class_name) { Faker::Internet.domain_word.capitalize }
|
6
|
+
|
7
|
+
before { stub_const(example_class_name, example_class) }
|
8
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# TODO: Jank - this should use Method#parameters, not Method#arity
|
4
|
+
|
5
|
+
RSpec.shared_examples_for "a class pass method" do |method|
|
6
|
+
subject do
|
7
|
+
if takes_options?
|
8
|
+
test_class.public_send(method, *arguments, **options)
|
9
|
+
else
|
10
|
+
test_class.public_send(method, *arguments)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:test_class) { described_class }
|
15
|
+
let(:initialize_arity) { test_class.instance_method(:initialize).arity }
|
16
|
+
let(:takes_options?) { (initialize_arity < 0) }
|
17
|
+
let(:argument_arity) { takes_options? ? (initialize_arity.abs - 1) : initialize_arity }
|
18
|
+
|
19
|
+
let(:arguments) do
|
20
|
+
Array.new(argument_arity) { double }
|
21
|
+
end
|
22
|
+
let(:options) { takes_options? ? Hash[*Faker::Lorem.words(2 * rand(1..2))].symbolize_keys : nil }
|
23
|
+
let(:instance) { instance_double(test_class) }
|
24
|
+
let(:output) { double }
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(instance).to receive(method).and_return(output)
|
28
|
+
if takes_options?
|
29
|
+
allow(test_class).to receive(:new).with(*arguments, **options).and_return(instance)
|
30
|
+
else
|
31
|
+
allow(test_class).to receive(:new).with(*arguments).and_return(instance)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it { is_expected.to eq output }
|
36
|
+
end
|
data/lib/rspice/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Garside
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
12
|
-
dependencies:
|
11
|
+
date: 2018-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faker
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.8'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.8'
|
13
41
|
description: A dash of spice to make your RSpec tests very nice.
|
14
42
|
email:
|
15
43
|
- garside@gmail.com
|
@@ -20,6 +48,15 @@ files:
|
|
20
48
|
- LICENSE.txt
|
21
49
|
- README.md
|
22
50
|
- lib/rspice.rb
|
51
|
+
- lib/rspice/custom_matchers.rb
|
52
|
+
- lib/rspice/custom_matchers/alias_method.rb
|
53
|
+
- lib/rspice/custom_matchers/extend_module.rb
|
54
|
+
- lib/rspice/custom_matchers/include_module.rb
|
55
|
+
- lib/rspice/custom_matchers/inherit_from.rb
|
56
|
+
- lib/rspice/shared_context.rb
|
57
|
+
- lib/rspice/shared_context/with_an_example_descendant_class.rb
|
58
|
+
- lib/rspice/shared_examples.rb
|
59
|
+
- lib/rspice/shared_examples/a_class_pass_method.rb
|
23
60
|
- lib/rspice/version.rb
|
24
61
|
homepage: https://www.freshly.com
|
25
62
|
licenses:
|