expected 1.0.0 → 1.1.2
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 +36 -7
- data/lib/expected/configuration.rb +6 -1
- data/lib/expected/matchers.rb +5 -2
- data/lib/expected/matchers/be_a_concern.rb +70 -0
- data/lib/expected/matchers/extend_module.rb +68 -0
- data/lib/expected/matchers/have_attr_accessor.rb +2 -0
- data/lib/expected/matchers/include_module.rb +67 -0
- data/lib/expected/matchers/inherit_from.rb +1 -1
- data/lib/expected/version.rb +2 -2
- metadata +5 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbca42d3e57b1a222b2e75768bba23ef79eceec10c59e25388d0234cdd5099c2
|
4
|
+
data.tar.gz: ff40dd47a526a18912391837d1346c89aa9c422d6c21d081c13959aac67a3975
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93552e9c8c85b6291b02e82a687748d69122f8458e38a2504a2ab8a3babadb9a11e9ff97af33419241201ac303223bf8498f9e2d4635909fc61f98ff75e1a90d
|
7
|
+
data.tar.gz: 971093756132a91567d723e76abff892adfe71d8f31861a0c9962e8d482188907f469c4439e90f2cb93687a9494ea13826e3edf29c6e04d204d497e511eee05e
|
data/README.md
CHANGED
@@ -19,10 +19,9 @@ end
|
|
19
19
|
```
|
20
20
|
|
21
21
|
### Add to RSpec
|
22
|
-
Add the following to your projects `spec/rails_helper.rb` for Rails apps, or `spec/spec_helper.rb for non-Rails apps.
|
22
|
+
Add the following to your projects `spec/rails_helper.rb` for Rails apps, or `spec/spec_helper.rb` for non-Rails apps.
|
23
23
|
```ruby
|
24
|
-
Expected.configure
|
25
|
-
end
|
24
|
+
Expected.configure
|
26
25
|
```
|
27
26
|
|
28
27
|
|
@@ -33,12 +32,22 @@ end
|
|
33
32
|
|
34
33
|
|
35
34
|
|
36
|
-
### `
|
37
|
-
Used to test
|
35
|
+
### `be_a_concern`
|
36
|
+
Used to test that a Module is an ActiveSupport::Concern
|
38
37
|
|
39
38
|
```ruby
|
40
|
-
# Test if the subject
|
41
|
-
it { is_expected.to
|
39
|
+
# Test if the subject is an ActiveSupport::Concern`
|
40
|
+
it { is_expected.to be_a_concern }
|
41
|
+
```
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
### `extend_module`
|
46
|
+
Used to test that a Class or Module extends the supplied Module
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
# Test if the subject extends the supplied Module
|
50
|
+
it { is_expected.to extend_module(SomeModule) }
|
42
51
|
```
|
43
52
|
|
44
53
|
|
@@ -89,6 +98,26 @@ it { is_expected.to have_attr_accessor(:attribute) }
|
|
89
98
|
|
90
99
|
|
91
100
|
|
101
|
+
### `include_module`
|
102
|
+
Used to test that a Class or Module includes the supplied Module
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
# Test if the subject includes the supplied Module
|
106
|
+
it { is_expected.to include_module(SomeModule) }
|
107
|
+
```
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
### `inherit_from`
|
112
|
+
Used to test inheritance
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
# Test if the subject inherits from the supplied Class
|
116
|
+
it { is_expected.to inherit_from(SomeClass) }
|
117
|
+
```
|
118
|
+
|
119
|
+
|
120
|
+
|
92
121
|
## License
|
93
122
|
Expected is copyright © 2019-2020 Taylor Yelverton.
|
94
123
|
It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
|
@@ -7,7 +7,12 @@ module Expected
|
|
7
7
|
# Configure the library
|
8
8
|
# @yield [Configuration]
|
9
9
|
def configure
|
10
|
-
yield configuration
|
10
|
+
yield configuration if block_given?
|
11
|
+
return unless defined?(::RSpec)
|
12
|
+
::RSpec.configure do |config|
|
13
|
+
config.include(Matchers)
|
14
|
+
end
|
15
|
+
configuration
|
11
16
|
end
|
12
17
|
|
13
18
|
# Memoized {Configuration}
|
data/lib/expected/matchers.rb
CHANGED
@@ -6,8 +6,11 @@ module Expected
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
+
require 'expected/matchers/be_a_concern'
|
10
|
+
require 'expected/matchers/extend_module'
|
9
11
|
require 'expected/matchers/have_constant'
|
10
|
-
require 'expected/matchers/
|
12
|
+
require 'expected/matchers/have_attr_accessor'
|
11
13
|
require 'expected/matchers/have_attr_reader'
|
12
14
|
require 'expected/matchers/have_attr_writer'
|
13
|
-
require 'expected/matchers/
|
15
|
+
require 'expected/matchers/include_module'
|
16
|
+
require 'expected/matchers/inherit_from'
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'expected/matchers/extend_module'
|
4
|
+
|
5
|
+
module Expected
|
6
|
+
# :nodoc:
|
7
|
+
module Matchers
|
8
|
+
|
9
|
+
# Used to test inheritance
|
10
|
+
# @return [BeAConcernMatcher]
|
11
|
+
#
|
12
|
+
# @example Test if the subject is an ActiveSupport::Concern
|
13
|
+
# it { is_expected.to be_a_concern }
|
14
|
+
#
|
15
|
+
def be_a_concern
|
16
|
+
BeAConcernMatcher.new
|
17
|
+
end
|
18
|
+
|
19
|
+
# Class used by {#be_a_concern}
|
20
|
+
class BeAConcernMatcher
|
21
|
+
attr_reader :extend_module_matcher, :subject
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@extend_module_matcher = ExtendModuleMatcher.new(ActiveSupport::Concern)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Run the test
|
28
|
+
# @param subject The thing to test against
|
29
|
+
# @return [True] If the test passes
|
30
|
+
# @return [False] if the test fails
|
31
|
+
def matches?(subject)
|
32
|
+
self.subject = subject
|
33
|
+
@extend_module_matcher.matches?(subject)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [String]
|
37
|
+
def failure_message
|
38
|
+
"Expected #{expectation}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
def failure_message_when_negated
|
43
|
+
"Did not expect #{expectation}"
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [String]
|
47
|
+
def description
|
48
|
+
'be_a_concern'
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# The thing to test against
|
54
|
+
# @return [Module]
|
55
|
+
def subject=(subject)
|
56
|
+
unless subject.instance_of?(Module)
|
57
|
+
raise "The subject for BeAConcernMatcher must be a Module, but was: `#{subject.inspect}`"
|
58
|
+
end
|
59
|
+
@subject = subject
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return String
|
63
|
+
def expectation
|
64
|
+
"<#{subject.inspect}> to be an ActiveSupport::Concern"
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Expected
|
4
|
+
# :nodoc:
|
5
|
+
module Matchers
|
6
|
+
|
7
|
+
# Used to test inheritance
|
8
|
+
# @param expected_module [Class]
|
9
|
+
# @return [ExtendModuleMatcher]
|
10
|
+
#
|
11
|
+
# @example Test if the subject extends the supplied Module
|
12
|
+
# it { is_expected.to extend(SomeClass) }
|
13
|
+
#
|
14
|
+
def extend_module(expected_module)
|
15
|
+
ExtendModuleMatcher.new(expected_module)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Class used by {#extend_module}
|
19
|
+
class ExtendModuleMatcher
|
20
|
+
attr_reader :expected_module, :subject
|
21
|
+
|
22
|
+
# @param expected_module [Class] The module the {#subject} is expected to include
|
23
|
+
def initialize(expected_module)
|
24
|
+
@expected_module = expected_module
|
25
|
+
end
|
26
|
+
|
27
|
+
# Run the test
|
28
|
+
# @param subject The thing to test against
|
29
|
+
# @return [True] If the test passes
|
30
|
+
# @return [False] if the test fails
|
31
|
+
def matches?(subject)
|
32
|
+
self.subject = subject
|
33
|
+
klass = self.subject.singleton_class
|
34
|
+
klass.included_modules.include? expected_module
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [String]
|
38
|
+
def failure_message
|
39
|
+
"Expected #{expectation}"
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [String]
|
43
|
+
def failure_message_when_negated
|
44
|
+
"Did not expect #{expectation}"
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [String]
|
48
|
+
def description
|
49
|
+
"extend_module: <#{expected_module.inspect}>"
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# The thing to test against
|
55
|
+
# @return [Class, Module]
|
56
|
+
def subject=(subject)
|
57
|
+
@subject = subject.instance_of?(Class) || subject.is_a?(Module) ? subject : subject.class
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return String
|
61
|
+
def expectation
|
62
|
+
"<#{subject.inspect}> to extend <#{expected_module.inspect}>"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Expected
|
4
|
+
# :nodoc:
|
5
|
+
module Matchers
|
6
|
+
|
7
|
+
# Used to test inheritance
|
8
|
+
# @param expected_module [Module]
|
9
|
+
# @return [IncludeModuleMatcher]
|
10
|
+
#
|
11
|
+
# @example Test if the subject includes the supplied Module
|
12
|
+
# it { is_expected.to include_module(SomeModule) }
|
13
|
+
#
|
14
|
+
def include_module(expected_module)
|
15
|
+
IncludeModuleMatcher.new(expected_module)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Class used by {#include_module}
|
19
|
+
class IncludeModuleMatcher
|
20
|
+
attr_reader :expected_module, :subject
|
21
|
+
|
22
|
+
# @param expected_module [Module] The module the {#subject} is expected to include
|
23
|
+
def initialize(expected_module)
|
24
|
+
@expected_module = expected_module
|
25
|
+
end
|
26
|
+
|
27
|
+
# Run the test
|
28
|
+
# @param subject The thing to test against
|
29
|
+
# @return [True] If the test passes
|
30
|
+
# @return [False] if the test fails
|
31
|
+
def matches?(subject)
|
32
|
+
self.subject = subject
|
33
|
+
self.subject.included_modules.include? expected_module
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [String]
|
37
|
+
def failure_message
|
38
|
+
"Expected #{expectation}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [String]
|
42
|
+
def failure_message_when_negated
|
43
|
+
"Did not expect #{expectation}"
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [String]
|
47
|
+
def description
|
48
|
+
"include_module: <#{expected_module.inspect}>"
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
# The thing to test against
|
54
|
+
# @return [Class, Module]
|
55
|
+
def subject=(subject)
|
56
|
+
@subject = subject.instance_of?(Class) || subject.is_a?(Module) ? subject : subject.class
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return String
|
60
|
+
def expectation
|
61
|
+
"<#{subject.inspect}> to include <#{expected_module.inspect}>"
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
data/lib/expected/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expected
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taylor Yelverton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -17,9 +17,6 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 5.0.0
|
20
|
-
- - "~>"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '5.0'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,9 +24,6 @@ dependencies:
|
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 5.0.0
|
30
|
-
- - "~>"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '5.0'
|
33
27
|
description: RSpec's missing matchers
|
34
28
|
email: rubygems@yelvert.io
|
35
29
|
executables: []
|
@@ -41,10 +35,13 @@ files:
|
|
41
35
|
- lib/expected.rb
|
42
36
|
- lib/expected/configuration.rb
|
43
37
|
- lib/expected/matchers.rb
|
38
|
+
- lib/expected/matchers/be_a_concern.rb
|
39
|
+
- lib/expected/matchers/extend_module.rb
|
44
40
|
- lib/expected/matchers/have_attr_accessor.rb
|
45
41
|
- lib/expected/matchers/have_attr_reader.rb
|
46
42
|
- lib/expected/matchers/have_attr_writer.rb
|
47
43
|
- lib/expected/matchers/have_constant.rb
|
44
|
+
- lib/expected/matchers/include_module.rb
|
48
45
|
- lib/expected/matchers/inherit_from.rb
|
49
46
|
- lib/expected/version.rb
|
50
47
|
homepage: https://github.com/yelvert/expected
|