rspec-sleeping_king_studios 2.3.0 → 2.4.0.rc.0

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.
Files changed (25) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +40 -2
  3. data/DEVELOPMENT.md +48 -28
  4. data/README.md +55 -7
  5. data/lib/rspec/sleeping_king_studios.rb +7 -0
  6. data/lib/rspec/sleeping_king_studios/concerns/example_constants.rb +14 -3
  7. data/lib/rspec/sleeping_king_studios/concerns/focus_examples.rb +1 -1
  8. data/lib/rspec/sleeping_king_studios/configuration.rb +20 -17
  9. data/lib/rspec/sleeping_king_studios/examples/property_examples/class_properties.rb +32 -22
  10. data/lib/rspec/sleeping_king_studios/examples/property_examples/constants.rb +8 -0
  11. data/lib/rspec/sleeping_king_studios/examples/property_examples/predicates.rb +8 -4
  12. data/lib/rspec/sleeping_king_studios/examples/property_examples/private_properties.rb +29 -24
  13. data/lib/rspec/sleeping_king_studios/examples/property_examples/properties.rb +52 -27
  14. data/lib/rspec/sleeping_king_studios/matchers/core/have_changed.rb +16 -0
  15. data/lib/rspec/sleeping_king_studios/matchers/core/have_changed_matcher.rb +222 -0
  16. data/lib/rspec/sleeping_king_studios/matchers/core/have_constant.rb +2 -0
  17. data/lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb +29 -27
  18. data/lib/rspec/sleeping_king_studios/matchers/core/have_predicate.rb +1 -0
  19. data/lib/rspec/sleeping_king_studios/matchers/core/have_predicate_matcher.rb +1 -1
  20. data/lib/rspec/sleeping_king_studios/matchers/core/have_property.rb +1 -0
  21. data/lib/rspec/sleeping_king_studios/matchers/core/have_reader.rb +1 -0
  22. data/lib/rspec/sleeping_king_studios/matchers/core/have_writer.rb +1 -0
  23. data/lib/rspec/sleeping_king_studios/support/value_spy.rb +67 -0
  24. data/lib/rspec/sleeping_king_studios/version.rb +3 -3
  25. metadata +24 -53
@@ -8,9 +8,11 @@ module RSpec::SleepingKingStudios::Matchers::Macros
8
8
  def have_constant expected
9
9
  RSpec::SleepingKingStudios::Matchers::Core::HaveConstantMatcher.new expected
10
10
  end # method have_reader
11
+ alias_method :define_constant, :have_constant
11
12
 
12
13
  # @see RSpec::SleepingKingStudios::Matchers::Core::HaveConstantMatcher#immutable
13
14
  def have_immutable_constant expected
14
15
  have_constant(expected).immutable
15
16
  end # method have_reader
17
+ alias_method :define_immutable_constant, :have_immutable_constant
16
18
  end # module
@@ -27,6 +27,15 @@ module RSpec::SleepingKingStudios::Matchers::Core
27
27
  message
28
28
  end # method description
29
29
 
30
+ # (see BaseMatcher#does_not_match?)
31
+ def does_not_match? actual
32
+ super
33
+
34
+ @errors = {}
35
+
36
+ !has_constant?
37
+ end # method does_not_match?
38
+
30
39
  # (see BaseMatcher#failure_message)
31
40
  def failure_message
32
41
  message = super
@@ -77,33 +86,6 @@ module RSpec::SleepingKingStudios::Matchers::Core
77
86
  message
78
87
  end # method failure_message
79
88
 
80
- # Checks if the object has a constant :expected. Additionally, if a
81
- # value expectation is set, compares the value of #expected to the
82
- # specified value and checks the mutability of the constant.
83
- #
84
- # @param [Object] actual The object to check.
85
- #
86
- # @return [Boolean] true If the object has a constant :expected and matches
87
- # the value and mutability expectations (if any); otherwise false.
88
- def matches? actual
89
- super
90
-
91
- @errors = {}
92
-
93
- return false unless has_constant?
94
-
95
- matches_constant? :all?
96
- end # method matches?
97
-
98
- # (see BaseMatcher#does_not_match?)
99
- def does_not_match? actual
100
- super
101
-
102
- @errors = {}
103
-
104
- !has_constant?
105
- end # method does_not_match?
106
-
107
89
  # Sets a mutability expectation. The matcher will determine whether the
108
90
  # value of the constant is mutable. Values of `nil`, `false`, `true` are
109
91
  # always immutable, as are `Numeric` and `Symbol` primitives. `Array`
@@ -116,12 +98,32 @@ module RSpec::SleepingKingStudios::Matchers::Core
116
98
 
117
99
  self
118
100
  end # method immutable
101
+ alias_method :frozen, :immutable
119
102
 
120
103
  # @return [Boolean] True if a mutability expectation is set, otherwise
121
104
  # false.
122
105
  def immutable?
123
106
  !!@immutable
124
107
  end # method immutable
108
+ alias_method :frozen?, :immutable?
109
+
110
+ # Checks if the object has a constant :expected. Additionally, if a
111
+ # value expectation is set, compares the value of #expected to the
112
+ # specified value and checks the mutability of the constant.
113
+ #
114
+ # @param [Object] actual The object to check.
115
+ #
116
+ # @return [Boolean] true If the object has a constant :expected and matches
117
+ # the value and mutability expectations (if any); otherwise false.
118
+ def matches? actual
119
+ super
120
+
121
+ @errors = {}
122
+
123
+ return false unless has_constant?
124
+
125
+ matches_constant? :all?
126
+ end # method matches?
125
127
 
126
128
  # Sets a value expectation. The matcher will compare the value of the
127
129
  # constant with the specified value.
@@ -8,4 +8,5 @@ module RSpec::SleepingKingStudios::Matchers::Macros
8
8
  def have_predicate expected
9
9
  RSpec::SleepingKingStudios::Matchers::Core::HavePredicateMatcher.new expected
10
10
  end # method have_reader
11
+ alias_method :define_predicate, :have_predicate
11
12
  end # module
@@ -17,7 +17,7 @@ module RSpec::SleepingKingStudios::Matchers::Core
17
17
  #
18
18
  # @return [String] The matcher description.
19
19
  def description
20
- "have predicate :#{@expected}"
20
+ "have predicate :#{@expected}?"
21
21
  end # method description
22
22
 
23
23
  # @param [String, Symbol] expected The predicate to check for on the actual
@@ -11,4 +11,5 @@ module RSpec::SleepingKingStudios::Matchers::Macros
11
11
  :allow_private => allow_private
12
12
  ) # end matcher
13
13
  end # method have_property
14
+ alias_method :define_property, :have_property
14
15
  end # module
@@ -11,4 +11,5 @@ module RSpec::SleepingKingStudios::Matchers::Macros
11
11
  :allow_private => allow_private
12
12
  ) # end matcher
13
13
  end # method have_reader
14
+ alias_method :define_reader, :have_reader
14
15
  end # module
@@ -11,4 +11,5 @@ module RSpec::SleepingKingStudios::Matchers::Macros
11
11
  :allow_private => allow_private
12
12
  ) # end matcher
13
13
  end # method have_writer
14
+ alias_method :define_writer, :have_writer
14
15
  end # module
@@ -0,0 +1,67 @@
1
+ require 'rspec/sleeping_king_studios/support'
2
+
3
+ module RSpec::SleepingKingStudios::Support
4
+ # Encapsulates the value of a method call or block, and captures a snapshot of
5
+ # the value at the time the spy is initialized.
6
+ #
7
+ # @example Observing a Method
8
+ # user = Person.new(name: 'Alan Bradley')
9
+ # value = ValueSpy.new(user, :name)
10
+ # value.initial_value #=> 'Alan Bradley'
11
+ # value.current_value #=> 'Alan Bradley'
12
+ #
13
+ # user.name = 'Ed Dillinger'
14
+ # value.initial_value #=> 'Alan Bradley'
15
+ # value.current_value #=> 'Ed Dillinger'
16
+ #
17
+ # @example Observing a Block
18
+ # value = ValueSpy.new { Person.where(virtual: false).count }
19
+ # value.initial_value #=> 4
20
+ # value.current_value #=> 4
21
+ #
22
+ # Person.where(name: 'Kevin Flynn').enter_grid!
23
+ # value.initial_value #=> 4
24
+ # value.current_value #=> 3
25
+ class ValueSpy
26
+ # @overload initialize(object, method_name)
27
+ # @param [Object] object The object to watch.
28
+ #
29
+ # @param [Symbol, String] method_name The name of the method to watch.
30
+ #
31
+ # @overload initialize(&block)
32
+ # @yield The value to watch. The block will be called each time the value
33
+ # is requested, and the return value of the block will be given as the
34
+ # current value.
35
+ def initialize(object = nil, method_name = nil, &block)
36
+ @observed_block = if block_given?
37
+ block
38
+ else
39
+ @method_name = method_name
40
+
41
+ -> { object.send(method_name) }
42
+ end
43
+
44
+ @initial_value = current_value
45
+ end
46
+
47
+ # @return [Object] the watched value at the time the spy was initialized.
48
+ attr_reader :initial_value
49
+
50
+ def changed?
51
+ !RSpec::Support::FuzzyMatcher.values_match?(initial_value, current_value)
52
+ end
53
+
54
+ # @return [Object] the watched value when #current_value is called.
55
+ def current_value
56
+ @observed_block.call
57
+ end
58
+
59
+ # @return [String] a human-readable representation of the watched method or
60
+ # block.
61
+ def description
62
+ return 'result' unless @method_name
63
+
64
+ "##{@method_name}"
65
+ end
66
+ end
67
+ end
@@ -11,13 +11,13 @@ module RSpec
11
11
  # Major version.
12
12
  MAJOR = 2
13
13
  # Minor version.
14
- MINOR = 3
14
+ MINOR = 4
15
15
  # Patch version.
16
16
  PATCH = 0
17
17
  # Prerelease version.
18
- PRERELEASE = nil
18
+ PRERELEASE = :rc
19
19
  # Build metadata.
20
- BUILD = nil
20
+ BUILD = 0
21
21
 
22
22
  # Generates the gem version string from the Version constants.
23
23
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-sleeping_king_studios
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0.rc.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob "Merlin" Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-11 00:00:00.000000000 Z
11
+ date: 2018-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.3'
19
+ version: '3.4'
20
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: '3.3'
26
+ version: '3.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sleeping_king_studios-tools
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,61 +44,49 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: 1.0.3
47
+ version: '2.2'
51
48
  type: :development
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
53
  - !ruby/object:Gem::Version
57
- version: '1.0'
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: 1.0.3
54
+ version: '2.2'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: byebug
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: '8.2'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 8.2.2
61
+ version: '10.0'
71
62
  type: :development
72
63
  prerelease: false
73
64
  version_requirements: !ruby/object:Gem::Requirement
74
65
  requirements:
75
66
  - - "~>"
76
67
  - !ruby/object:Gem::Version
77
- version: '8.2'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 8.2.2
68
+ version: '10.0'
81
69
  - !ruby/object:Gem::Dependency
82
70
  name: rake
83
71
  requirement: !ruby/object:Gem::Requirement
84
72
  requirements:
85
73
  - - "~>"
86
74
  - !ruby/object:Gem::Version
87
- version: '12.0'
75
+ version: '12.3'
88
76
  type: :development
89
77
  prerelease: false
90
78
  version_requirements: !ruby/object:Gem::Requirement
91
79
  requirements:
92
80
  - - "~>"
93
81
  - !ruby/object:Gem::Version
94
- version: '12.0'
82
+ version: '12.3'
95
83
  - !ruby/object:Gem::Dependency
96
84
  name: thor
97
85
  requirement: !ruby/object:Gem::Requirement
98
86
  requirements:
99
87
  - - "~>"
100
88
  - !ruby/object:Gem::Version
101
- version: '0.19'
89
+ version: '0.20'
102
90
  - - ">="
103
91
  - !ruby/object:Gem::Version
104
92
  version: 0.19.4
@@ -108,7 +96,7 @@ dependencies:
108
96
  requirements:
109
97
  - - "~>"
110
98
  - !ruby/object:Gem::Version
111
- version: '0.19'
99
+ version: '0.20'
112
100
  - - ">="
113
101
  - !ruby/object:Gem::Version
114
102
  version: 0.19.4
@@ -132,34 +120,28 @@ dependencies:
132
120
  requirements:
133
121
  - - "~>"
134
122
  - !ruby/object:Gem::Version
135
- version: '0.9'
123
+ version: '0.14'
136
124
  type: :development
137
125
  prerelease: false
138
126
  version_requirements: !ruby/object:Gem::Requirement
139
127
  requirements:
140
128
  - - "~>"
141
129
  - !ruby/object:Gem::Version
142
- version: '0.9'
130
+ version: '0.14'
143
131
  - !ruby/object:Gem::Dependency
144
132
  name: cucumber
145
133
  requirement: !ruby/object:Gem::Requirement
146
134
  requirements:
147
135
  - - "~>"
148
136
  - !ruby/object:Gem::Version
149
- version: '1.3'
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: 1.3.19
137
+ version: '3.1'
153
138
  type: :development
154
139
  prerelease: false
155
140
  version_requirements: !ruby/object:Gem::Requirement
156
141
  requirements:
157
142
  - - "~>"
158
143
  - !ruby/object:Gem::Version
159
- version: '1.3'
160
- - - ">="
161
- - !ruby/object:Gem::Version
162
- version: 1.3.19
144
+ version: '3.1'
163
145
  - !ruby/object:Gem::Dependency
164
146
  name: activemodel
165
147
  requirement: !ruby/object:Gem::Requirement
@@ -169,7 +151,7 @@ dependencies:
169
151
  version: '3.0'
170
152
  - - "<"
171
153
  - !ruby/object:Gem::Version
172
- version: '5.0'
154
+ version: '6.0'
173
155
  type: :development
174
156
  prerelease: false
175
157
  version_requirements: !ruby/object:Gem::Requirement
@@ -179,21 +161,7 @@ dependencies:
179
161
  version: '3.0'
180
162
  - - "<"
181
163
  - !ruby/object:Gem::Version
182
- version: '5.0'
183
- - !ruby/object:Gem::Dependency
184
- name: factory_girl
185
- requirement: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: '4.2'
190
- type: :development
191
- prerelease: false
192
- version_requirements: !ruby/object:Gem::Requirement
193
- requirements:
194
- - - "~>"
195
- - !ruby/object:Gem::Version
196
- version: '4.2'
164
+ version: '6.0'
197
165
  description: |2
198
166
  A collection of RSpec patches and custom matchers. The features can be
199
167
  included individually or by category. For more information, check out the
@@ -255,6 +223,8 @@ files:
255
223
  - lib/rspec/sleeping_king_studios/matchers/core/construct_matcher.rb
256
224
  - lib/rspec/sleeping_king_studios/matchers/core/delegate_method.rb
257
225
  - lib/rspec/sleeping_king_studios/matchers/core/delegate_method_matcher.rb
226
+ - lib/rspec/sleeping_king_studios/matchers/core/have_changed.rb
227
+ - lib/rspec/sleeping_king_studios/matchers/core/have_changed_matcher.rb
258
228
  - lib/rspec/sleeping_king_studios/matchers/core/have_constant.rb
259
229
  - lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb
260
230
  - lib/rspec/sleeping_king_studios/matchers/core/have_predicate.rb
@@ -272,6 +242,7 @@ files:
272
242
  - lib/rspec/sleeping_king_studios/support.rb
273
243
  - lib/rspec/sleeping_king_studios/support/method_signature.rb
274
244
  - lib/rspec/sleeping_king_studios/support/method_signature_expectation.rb
245
+ - lib/rspec/sleeping_king_studios/support/value_spy.rb
275
246
  - lib/rspec/sleeping_king_studios/version.rb
276
247
  homepage: http://sleepingkingstudios.com
277
248
  licenses:
@@ -288,12 +259,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
288
259
  version: '0'
289
260
  required_rubygems_version: !ruby/object:Gem::Requirement
290
261
  requirements:
291
- - - ">="
262
+ - - ">"
292
263
  - !ruby/object:Gem::Version
293
- version: '0'
264
+ version: 1.3.1
294
265
  requirements: []
295
266
  rubyforge_project:
296
- rubygems_version: 2.6.11
267
+ rubygems_version: 2.7.6
297
268
  signing_key:
298
269
  specification_version: 4
299
270
  summary: A collection of RSpec patches and custom matchers.