expected 1.0.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|