rspec-sleeping_king_studios 2.1.1 → 2.2.0.rc.1

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -0
  3. data/DEVELOPMENT.md +26 -17
  4. data/LICENSE +1 -1
  5. data/README.md +198 -19
  6. data/lib/rspec/sleeping_king_studios/configuration.rb +63 -2
  7. data/lib/rspec/sleeping_king_studios/examples/property_examples.rb +115 -27
  8. data/lib/rspec/sleeping_king_studios/examples/rspec_matcher_examples.rb +66 -51
  9. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors.rb +8 -269
  10. data/lib/rspec/sleeping_king_studios/matchers/active_model/have_errors_matcher.rb +268 -0
  11. data/lib/rspec/sleeping_king_studios/matchers/base_matcher.rb +5 -15
  12. data/lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of.rb +3 -63
  13. data/lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of_matcher.rb +65 -0
  14. data/lib/rspec/sleeping_king_studios/matchers/built_in/include.rb +3 -108
  15. data/lib/rspec/sleeping_king_studios/matchers/built_in/include_matcher.rb +134 -0
  16. data/lib/rspec/sleeping_king_studios/matchers/built_in/respond_to.rb +3 -258
  17. data/lib/rspec/sleeping_king_studios/matchers/built_in/respond_to_matcher.rb +116 -0
  18. data/lib/rspec/sleeping_king_studios/matchers/core/alias_method.rb +11 -0
  19. data/lib/rspec/sleeping_king_studios/matchers/core/alias_method_matcher.rb +107 -0
  20. data/lib/rspec/sleeping_king_studios/matchers/core/be_boolean.rb +9 -36
  21. data/lib/rspec/sleeping_king_studios/matchers/core/be_boolean_matcher.rb +37 -0
  22. data/lib/rspec/sleeping_king_studios/matchers/core/construct.rb +3 -210
  23. data/lib/rspec/sleeping_king_studios/matchers/core/construct_matcher.rb +113 -0
  24. data/lib/rspec/sleeping_king_studios/matchers/core/delegate_method.rb +11 -0
  25. data/lib/rspec/sleeping_king_studios/matchers/core/delegate_method_matcher.rb +311 -0
  26. data/lib/rspec/sleeping_king_studios/matchers/core/have_constant.rb +16 -0
  27. data/lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb +225 -0
  28. data/lib/rspec/sleeping_king_studios/matchers/core/have_predicate.rb +11 -0
  29. data/lib/rspec/sleeping_king_studios/matchers/core/have_predicate_matcher.rb +97 -0
  30. data/lib/rspec/sleeping_king_studios/matchers/core/have_property.rb +3 -104
  31. data/lib/rspec/sleeping_king_studios/matchers/core/have_property_matcher.rb +108 -0
  32. data/lib/rspec/sleeping_king_studios/matchers/core/have_reader.rb +3 -74
  33. data/lib/rspec/sleeping_king_studios/matchers/core/have_reader_matcher.rb +96 -0
  34. data/lib/rspec/sleeping_king_studios/matchers/core/have_writer.rb +4 -59
  35. data/lib/rspec/sleeping_king_studios/matchers/core/have_writer_matcher.rb +55 -0
  36. data/lib/rspec/sleeping_king_studios/matchers/description.rb +62 -0
  37. data/lib/rspec/sleeping_king_studios/matchers/macros.rb +32 -0
  38. data/lib/rspec/sleeping_king_studios/matchers/shared/match_parameters.rb +168 -66
  39. data/lib/rspec/sleeping_king_studios/matchers/shared/match_property.rb +25 -0
  40. data/lib/rspec/sleeping_king_studios/matchers.rb +0 -4
  41. data/lib/rspec/sleeping_king_studios/support/method_signature.rb +51 -0
  42. data/lib/rspec/sleeping_king_studios/support/method_signature_expectation.rb +158 -0
  43. data/lib/rspec/sleeping_king_studios/support.rb +9 -0
  44. data/lib/rspec/sleeping_king_studios/version.rb +10 -4
  45. metadata +46 -30
@@ -0,0 +1,158 @@
1
+ # lib/rspec/sleeping_king_studios/support/method_signature_expectation.rb
2
+
3
+ require 'rspec/sleeping_king_studios/support/method_signature'
4
+
5
+ require 'sleeping_king_studios/tools/array_tools'
6
+
7
+ module RSpec::SleepingKingStudios::Support
8
+ # @api private
9
+ class MethodSignatureExpectation
10
+ def initialize
11
+ @min_arguments = 0
12
+ @max_arguments = 0
13
+ @unlimited_arguments = false
14
+ @keywords = []
15
+ @any_keywords = false
16
+ @block_argument = false
17
+ @errors = {}
18
+ end # method initialize
19
+
20
+ attr_accessor :min_arguments, :max_arguments, :keywords
21
+
22
+ attr_writer :any_keywords, :block_argument, :unlimited_arguments
23
+
24
+ attr_reader :errors
25
+
26
+ def description
27
+ messages = []
28
+
29
+ if min_arguments == max_arguments
30
+ messages << "#{min_arguments} argument#{1 == min_arguments ? '' : 's'}"
31
+ else
32
+ messages << "#{min_arguments}..#{max_arguments} arguments"
33
+ end # if-else
34
+
35
+ messages << 'unlimited arguments' if unlimited_arguments?
36
+
37
+ unless keywords.empty?
38
+ keywords_list = array_tools.humanize_list keywords.map(&:inspect)
39
+ messages << "keyword#{1 == keywords.count ? '' : 's'} #{keywords_list}"
40
+ end # if
41
+
42
+ messages << 'arbitrary keywords' if any_keywords?
43
+
44
+ messages << 'a block' if block_argument?
45
+
46
+ "with #{array_tools.humanize_list messages}"
47
+ end # method description
48
+
49
+ def matches? method
50
+ @signature = MethodSignature.new(method)
51
+ @errors = {}
52
+
53
+ match = true
54
+ match = false unless matches_arity?
55
+ match = false unless matches_keywords?
56
+ match = false unless matches_block?
57
+ match
58
+ end # method matches?
59
+
60
+ def any_keywords?
61
+ !!@any_keywords
62
+ end # method any_keywords?
63
+
64
+ def block_argument?
65
+ !!@block_argument
66
+ end # method block_argument?
67
+
68
+ def unlimited_arguments?
69
+ !!@unlimited_arguments
70
+ end # method unlimited_arguments?
71
+
72
+ private
73
+
74
+ attr_reader :signature
75
+
76
+ def array_tools
77
+ ::SleepingKingStudios::Tools::ArrayTools
78
+ end # method array_tools
79
+
80
+ def matches_arity?
81
+ match = true
82
+
83
+ if min_arguments < signature.min_arguments
84
+ match = false
85
+
86
+ @errors[:not_enough_args] = {
87
+ :expected => signature.min_arguments,
88
+ :received => min_arguments
89
+ } # end hash
90
+ end # if
91
+
92
+ if signature.unlimited_arguments?
93
+
94
+ else
95
+ if max_arguments > signature.max_arguments
96
+ match = false
97
+
98
+ @errors[:too_many_args] = {
99
+ :expected => signature.max_arguments,
100
+ :received => max_arguments
101
+ } # end hash
102
+ end # if-else
103
+
104
+ if unlimited_arguments?
105
+ match = false
106
+
107
+ @errors[:no_variadic_args] = {
108
+ :expected => signature.max_arguments
109
+ } # end hash
110
+ end # if
111
+ end # if-else
112
+
113
+ match
114
+ end # method matches_arity?
115
+
116
+ def matches_block?
117
+ match = true
118
+
119
+ if block_argument? && !signature.block_argument?
120
+ match = false
121
+
122
+ @errors[:no_block_argument] = true
123
+ end # if
124
+
125
+ match
126
+ end # method matches_block?
127
+
128
+ def matches_keywords?
129
+ match = true
130
+
131
+ missing_keywords = signature.required_keywords - keywords
132
+ unless missing_keywords.empty?
133
+ match = false
134
+
135
+ @errors[:missing_keywords] = missing_keywords
136
+ end # unless
137
+
138
+ if signature.any_keywords?
139
+
140
+ else
141
+ unexpected_keywords = keywords - signature.keywords
142
+ unless unexpected_keywords.empty?
143
+ match = false
144
+
145
+ @errors[:unexpected_keywords] = unexpected_keywords
146
+ end # unless
147
+
148
+ if any_keywords?
149
+ match = false
150
+
151
+ @errors[:no_variadic_keywords] = true
152
+ end # if
153
+ end # if-else
154
+
155
+ match
156
+ end # method matches_keywords?
157
+ end # class
158
+ end # module
@@ -0,0 +1,9 @@
1
+ # lib/rspec/sleeping_king_studios/support.rb
2
+
3
+ require 'rspec/sleeping_king_studios'
4
+
5
+ module RSpec::SleepingKingStudios
6
+ # Support classes and shared concerns for use with custom RSpec matchers and
7
+ # examples.
8
+ module Support; end
9
+ end # module
@@ -11,15 +11,21 @@ module RSpec
11
11
  # Major version.
12
12
  MAJOR = 2
13
13
  # Minor version.
14
- MINOR = 1
14
+ MINOR = 2
15
15
  # Patch version.
16
- PATCH = 1
16
+ PATCH = 0
17
17
  # Prerelease version.
18
- PRERELEASE = nil
18
+ PRERELEASE = 'rc'
19
19
  # Build metadata.
20
- BUILD = nil
20
+ BUILD = 1
21
21
 
22
22
  # Generates the gem version string from the Version constants.
23
+ #
24
+ # Inlined here because dependencies may not be loaded when processing a
25
+ # gemspec, which results in the user being unable to install the gem for
26
+ # the first time.
27
+ #
28
+ # @see SleepingKingStudios::Tools::SemanticVersion#to_gem_version
23
29
  def self.to_gem_version
24
30
  str = "#{MAJOR}.#{MINOR}.#{PATCH}"
25
31
 
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.1.1
4
+ version: 2.2.0.rc.1
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: 2016-01-24 00:00:00.000000000 Z
11
+ date: 2016-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -28,22 +28,16 @@ dependencies:
28
28
  name: sleeping_king_studios-tools
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.1'
34
31
  - - ">="
35
32
  - !ruby/object:Gem::Version
36
- version: 0.1.3
33
+ version: 0.3.0.rc.0
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - "~>"
42
- - !ruby/object:Gem::Version
43
- version: '0.1'
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
- version: 0.1.3
40
+ version: 0.3.0.rc.0
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: appraisal
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,34 +64,20 @@ dependencies:
70
64
  requirements:
71
65
  - - "~>"
72
66
  - !ruby/object:Gem::Version
73
- version: '3.5'
67
+ version: '8.2'
74
68
  - - ">="
75
69
  - !ruby/object:Gem::Version
76
- version: 3.5.1
70
+ version: 8.2.2
77
71
  type: :development
78
72
  prerelease: false
79
73
  version_requirements: !ruby/object:Gem::Requirement
80
74
  requirements:
81
75
  - - "~>"
82
76
  - !ruby/object:Gem::Version
83
- version: '3.5'
77
+ version: '8.2'
84
78
  - - ">="
85
79
  - !ruby/object:Gem::Version
86
- version: 3.5.1
87
- - !ruby/object:Gem::Dependency
88
- name: factory_girl
89
- requirement: !ruby/object:Gem::Requirement
90
- requirements:
91
- - - "~>"
92
- - !ruby/object:Gem::Version
93
- version: '4.2'
94
- type: :development
95
- prerelease: false
96
- version_requirements: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - "~>"
99
- - !ruby/object:Gem::Version
100
- version: '4.2'
80
+ version: 8.2.2
101
81
  - !ruby/object:Gem::Dependency
102
82
  name: rake
103
83
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +146,20 @@ dependencies:
166
146
  - - "<"
167
147
  - !ruby/object:Gem::Version
168
148
  version: '5.0'
149
+ - !ruby/object:Gem::Dependency
150
+ name: factory_girl
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '4.2'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '4.2'
169
163
  description: |2
170
164
  A collection of RSpec patches and custom matchers. The features can be
171
165
  included individually or by category. For more information, check out the
@@ -198,22 +192,44 @@ files:
198
192
  - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors.rb
199
193
  - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/error_expectation.rb
200
194
  - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors/message_expectation.rb
195
+ - lib/rspec/sleeping_king_studios/matchers/active_model/have_errors_matcher.rb
201
196
  - lib/rspec/sleeping_king_studios/matchers/all.rb
202
197
  - lib/rspec/sleeping_king_studios/matchers/base_matcher.rb
203
198
  - lib/rspec/sleeping_king_studios/matchers/built_in.rb
204
199
  - lib/rspec/sleeping_king_studios/matchers/built_in/all.rb
205
200
  - lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of.rb
201
+ - lib/rspec/sleeping_king_studios/matchers/built_in/be_kind_of_matcher.rb
206
202
  - lib/rspec/sleeping_king_studios/matchers/built_in/include.rb
203
+ - lib/rspec/sleeping_king_studios/matchers/built_in/include_matcher.rb
207
204
  - lib/rspec/sleeping_king_studios/matchers/built_in/respond_to.rb
205
+ - lib/rspec/sleeping_king_studios/matchers/built_in/respond_to_matcher.rb
208
206
  - lib/rspec/sleeping_king_studios/matchers/core.rb
207
+ - lib/rspec/sleeping_king_studios/matchers/core/alias_method.rb
208
+ - lib/rspec/sleeping_king_studios/matchers/core/alias_method_matcher.rb
209
209
  - lib/rspec/sleeping_king_studios/matchers/core/all.rb
210
210
  - lib/rspec/sleeping_king_studios/matchers/core/be_boolean.rb
211
+ - lib/rspec/sleeping_king_studios/matchers/core/be_boolean_matcher.rb
211
212
  - lib/rspec/sleeping_king_studios/matchers/core/construct.rb
213
+ - lib/rspec/sleeping_king_studios/matchers/core/construct_matcher.rb
214
+ - lib/rspec/sleeping_king_studios/matchers/core/delegate_method.rb
215
+ - lib/rspec/sleeping_king_studios/matchers/core/delegate_method_matcher.rb
216
+ - lib/rspec/sleeping_king_studios/matchers/core/have_constant.rb
217
+ - lib/rspec/sleeping_king_studios/matchers/core/have_constant_matcher.rb
218
+ - lib/rspec/sleeping_king_studios/matchers/core/have_predicate.rb
219
+ - lib/rspec/sleeping_king_studios/matchers/core/have_predicate_matcher.rb
212
220
  - lib/rspec/sleeping_king_studios/matchers/core/have_property.rb
221
+ - lib/rspec/sleeping_king_studios/matchers/core/have_property_matcher.rb
213
222
  - lib/rspec/sleeping_king_studios/matchers/core/have_reader.rb
223
+ - lib/rspec/sleeping_king_studios/matchers/core/have_reader_matcher.rb
214
224
  - lib/rspec/sleeping_king_studios/matchers/core/have_writer.rb
225
+ - lib/rspec/sleeping_king_studios/matchers/core/have_writer_matcher.rb
226
+ - lib/rspec/sleeping_king_studios/matchers/description.rb
227
+ - lib/rspec/sleeping_king_studios/matchers/macros.rb
215
228
  - lib/rspec/sleeping_king_studios/matchers/shared/match_parameters.rb
216
229
  - lib/rspec/sleeping_king_studios/matchers/shared/match_property.rb
230
+ - lib/rspec/sleeping_king_studios/support.rb
231
+ - lib/rspec/sleeping_king_studios/support/method_signature.rb
232
+ - lib/rspec/sleeping_king_studios/support/method_signature_expectation.rb
217
233
  - lib/rspec/sleeping_king_studios/version.rb
218
234
  homepage: http://sleepingkingstudios.com
219
235
  licenses:
@@ -230,9 +246,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
246
  version: '0'
231
247
  required_rubygems_version: !ruby/object:Gem::Requirement
232
248
  requirements:
233
- - - ">="
249
+ - - ">"
234
250
  - !ruby/object:Gem::Version
235
- version: '0'
251
+ version: 1.3.1
236
252
  requirements: []
237
253
  rubyforge_project:
238
254
  rubygems_version: 2.5.1