rspec-sleeping_king_studios 2.1.1 → 2.2.0.rc.1

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