bean_counter 0.0.3 → 0.0.4
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.
- data/README.md +1 -1
- data/lib/bean_counter/core.rb +67 -41
- data/lib/bean_counter/enqueued_expectation.rb +61 -20
- data/lib/bean_counter/spec_matchers.rb +21 -8
- data/lib/bean_counter/strategies/stalk_climber_strategy.rb +67 -46
- data/lib/bean_counter/strategy.rb +101 -77
- data/lib/bean_counter/test_assertions.rb +148 -98
- data/lib/bean_counter/tube_expectation.rb +50 -18
- data/lib/bean_counter/version.rb +1 -1
- data/test/unit/core_test.rb +2 -3
- metadata +2 -2
@@ -25,26 +25,25 @@ class BeanCounter::Strategy
|
|
25
25
|
@@strategies = {}
|
26
26
|
|
27
27
|
|
28
|
-
#
|
28
|
+
# Used to maintain an index of classes known to subclass Strategy.
|
29
29
|
def self.inherited(subclass)
|
30
30
|
identifier = subclass.name || subclass.to_s[8, subclass.to_s.length - 9]
|
31
31
|
@@strategies[identifier.to_sym] = subclass
|
32
32
|
end
|
33
33
|
|
34
34
|
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
# Determines if the provided +strategy_identifer+ corresponds to a known
|
39
|
-
# subclass of strategy. The provided +strategy_identifer+ can be a class
|
40
|
-
# or any object that responds to :to_sym. Classes are compared directly.
|
35
|
+
# Determines if the provided `strategy_identifer` corresponds to a known
|
36
|
+
# subclass of strategy. The provided `strategy_identifer` can be a class
|
37
|
+
# or any object that implements :to_sym. Classes are compared directly.
|
41
38
|
# For non-class objects that respond to :to_sym, the symbolized form
|
42
|
-
# of
|
39
|
+
# of `strategy_identifer` is used as a key to attempt to retrieve a strategy
|
43
40
|
# from the strategies Hash.
|
44
41
|
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
42
|
+
# @param strategy_identifier [Object] A class or any Object that implements
|
43
|
+
# :to_sym
|
44
|
+
# @return [Boolean] Returns true if `strategy_identifier` is a known
|
45
|
+
# strategy or maps to a known strategy. Otherwise, false is returned.
|
46
|
+
# @example
|
48
47
|
# BeanCounter::Strategy.known_strategy?(Object)
|
49
48
|
# #=> false
|
50
49
|
#
|
@@ -59,16 +58,18 @@ class BeanCounter::Strategy
|
|
59
58
|
end
|
60
59
|
|
61
60
|
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
# Materialize the provided +strategy_identifier+ into a subclass of Strategy.
|
66
|
-
# If +strategy_identifer+ is already a subclass of Strategy,
|
67
|
-
# +strategy_identifier+ is returned. Otherwise, +strategy_identifer+ is
|
61
|
+
# Materialize the provided `strategy_identifier` into a subclass of Strategy.
|
62
|
+
# If `strategy_identifer` is already a subclass of Strategy,
|
63
|
+
# `strategy_identifier` is returned. Otherwise, `strategy_identifer` is
|
68
64
|
# converted into a Symbol and is used as a key to retrieve a strategy from
|
69
|
-
# the known subclasses of Strategy. If
|
65
|
+
# the known subclasses of Strategy. If `strategy_identifier` does not map to
|
70
66
|
# a known subclass of Strategy, an ArgumentError is raised.
|
71
67
|
#
|
68
|
+
# @param strategy_identifier [Object] A class or any Object that implements
|
69
|
+
# :to_sym
|
70
|
+
# @return [BeanCounter::Strategy] The strategy the given `strategy_identifier`
|
71
|
+
# was materialized into
|
72
|
+
# @example
|
72
73
|
# BeanCounter::Strategy.materialize_strategy(:'BeanCounter::Strategy::StalkClimberStrategy')
|
73
74
|
# #=> BeanCounter::Strategy::StalkClimberStrategy
|
74
75
|
def self.materialize_strategy(strategy_identifier)
|
@@ -82,27 +83,30 @@ class BeanCounter::Strategy
|
|
82
83
|
end
|
83
84
|
|
84
85
|
|
85
|
-
# :call-seq:
|
86
|
-
# strategies() => Hash
|
87
|
-
#
|
88
86
|
# Returns a list of known classes that inherit from BeanCounter::Strategy.
|
89
87
|
# Typically this list represents the strategies available for interacting
|
90
88
|
# with beanstalkd.
|
89
|
+
#
|
90
|
+
# @return [Array<BeanCounter::Strategy>] A list of classes known to inherit
|
91
|
+
# from BeanCounter::Strategy.
|
91
92
|
def self.strategies
|
92
93
|
return @@strategies.dup
|
93
94
|
end
|
94
95
|
|
95
96
|
|
96
|
-
# :call-seq:
|
97
|
-
# collect_new_jobs { block } => Array[Strategy Job]
|
98
|
-
#
|
99
97
|
# Provide a means of collecting jobs enqueued during the execution of the
|
100
|
-
# provided
|
98
|
+
# provided `block`. Returns an Array of Jobs as implemented by the Strategy.
|
101
99
|
#
|
102
100
|
# Used internally to reduce the set of jobs that must be examined to evaluate
|
103
101
|
# the truth of an assertion to only those enqueued during the evaluation of
|
104
|
-
# the given
|
105
|
-
#
|
102
|
+
# the given `block`.
|
103
|
+
#
|
104
|
+
# @abstract Subclasses must override to implement
|
105
|
+
# @yield Nothing yielded to provided block
|
106
|
+
# @yieldreturn [void] No specific value is expected from provided block
|
107
|
+
# @return [Array<Strategy::Job>] Returns an Array of Jobs as implemented by
|
108
|
+
# the Strategy.
|
109
|
+
# @example
|
106
110
|
# new_jobs = strategy.collect_new_jobs do
|
107
111
|
# ...
|
108
112
|
# end
|
@@ -112,45 +116,54 @@ class BeanCounter::Strategy
|
|
112
116
|
end
|
113
117
|
|
114
118
|
|
115
|
-
# :call-seq:
|
116
|
-
# delete_job(job) => Boolean
|
117
|
-
#
|
118
119
|
# Provide a means for deleting a job specific to the job interface used by
|
119
|
-
#
|
120
|
-
#
|
120
|
+
# the strategy.
|
121
|
+
# Should return true if the job was deleted successfully or no longer exists
|
122
|
+
# and false if the job could not be deleted.
|
121
123
|
#
|
122
124
|
# Used internally to delete a job, allowing the beanstalkd pool to be reset.
|
123
125
|
#
|
124
|
-
#
|
125
|
-
#
|
126
|
+
# @abstract Subclasses must override to implement
|
127
|
+
# @param job [Strategy::Job] The job to be deleted.
|
128
|
+
# @return [Boolean] True if the job was deleted successfully or no longer
|
129
|
+
# exists, false if the job could not be deleted.
|
130
|
+
# @example
|
131
|
+
# strategy.delete_job(job)
|
132
|
+
# #=> true
|
126
133
|
def delete_job
|
127
134
|
raise NotImplementedError
|
128
135
|
end
|
129
136
|
|
130
137
|
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
136
|
-
#
|
137
|
-
# compared against. True is returned if every _value_ in +options+ evaluates to
|
138
|
-
# true when compared to the attribute of +job+ identified by the corresponding
|
139
|
-
# _key_. False is returned if any of the comparisons evaluates to false.
|
138
|
+
# Returns a boolean indicating whether or not the provided `job` matches the
|
139
|
+
# given Hash of `options`. Each `key` in `options` is a String or a Symbol that
|
140
|
+
# identifies an attribute of `job` that the corresponding `value` should be
|
141
|
+
# compared against. True is returned if every `value` in `options` evaluates to
|
142
|
+
# true when compared to the attribute of `job` identified by the corresponding
|
143
|
+
# `key`. False is returned if any of the comparisons evaluates to false.
|
140
144
|
#
|
141
145
|
# If no options are given, returns true for any job that exists at the time of
|
142
146
|
# evaluation.
|
143
147
|
#
|
144
|
-
# Each attribute comparison is performed using the triple
|
145
|
-
# operator/method of
|
148
|
+
# Each attribute comparison is performed using the triple-equal (===)
|
149
|
+
# operator/method of `value` with the attribute of `job` identified by `key`
|
146
150
|
# passed into the method. Use of === allows for more complex comparisons
|
147
151
|
# using Procs, Ranges, Regexps, etc.
|
148
152
|
#
|
149
|
-
# Consult MATCHABLE_JOB_ATTRIBUTES for a list of which attributes of
|
153
|
+
# Consult {MATCHABLE_JOB_ATTRIBUTES} for a list of which attributes of `job`
|
150
154
|
# can be matched against.
|
151
155
|
#
|
152
156
|
# Used internally to evaluate if a job matches an assertion.
|
153
157
|
#
|
158
|
+
# @abstract Subclasses must override to implement
|
159
|
+
# @param job [Strategy::Job] The job to evaluate for a match.
|
160
|
+
# @param options [Hash{Symbol, String => Numeric, Proc, Range, Regexp, String, Symbol}]
|
161
|
+
# Options used to evaluate match.
|
162
|
+
# @return [Boolean] True if every value of the `options` Hash evaluates to
|
163
|
+
# true when comared to the attribute of `job` identified by the
|
164
|
+
# corresponding key. False is returned if any of the comparisons evaluates
|
165
|
+
# to false.
|
166
|
+
# @example
|
154
167
|
# strategy.job_matches?(reserved_job, :state => 'reserved')
|
155
168
|
# #=> true
|
156
169
|
#
|
@@ -164,65 +177,75 @@ class BeanCounter::Strategy
|
|
164
177
|
end
|
165
178
|
|
166
179
|
|
167
|
-
#
|
168
|
-
#
|
169
|
-
#
|
170
|
-
# Returns an Enumerator providing a means to enumerate all jobs in the beanstalkd
|
171
|
-
# pool.
|
180
|
+
# Returns an Enumerator providing a means to enumerate all jobs in the
|
181
|
+
# Beanstalkd pool.
|
172
182
|
#
|
173
183
|
# Used internally to enumerate all jobs to find jobs matching an assertion.
|
184
|
+
#
|
185
|
+
# @abstract Subclasses must override to implement
|
186
|
+
# @return [Enumerator<Strategy::Job>] An Enumerator of all jobs in the
|
187
|
+
# Beanstalkd pool
|
174
188
|
def jobs
|
175
189
|
raise NotImplementedError
|
176
190
|
end
|
177
191
|
|
178
192
|
|
179
|
-
#
|
180
|
-
#
|
181
|
-
#
|
182
|
-
# Returns a String representation of +job+ in a pretty, human readable
|
183
|
-
# format.
|
193
|
+
# Returns a String representation of `job` in a pretty, human-readable
|
194
|
+
# format.
|
184
195
|
#
|
185
196
|
# Used internally to print a job when an assertion fails.
|
197
|
+
#
|
198
|
+
# @abstract Subclasses must override to implement
|
199
|
+
# @param job [Strategy::Job] The job to represent in a pretty, human-readable
|
200
|
+
# format
|
201
|
+
# @return [String] `job` in a more human-readable format
|
186
202
|
def pretty_print_job
|
187
203
|
raise NotImplementedError
|
188
204
|
end
|
189
205
|
|
190
206
|
|
191
|
-
#
|
192
|
-
#
|
193
|
-
#
|
194
|
-
# Returns a String representation of the tube in a pretty, human readable
|
195
|
-
# format. Used internally to print a tube when an assertion fails.
|
207
|
+
# Returns a String representation of the tube in a pretty, human-readable
|
208
|
+
# format.
|
196
209
|
#
|
197
210
|
# Used internally to print a tube when an assertion fails.
|
211
|
+
#
|
212
|
+
# @abstract Subclasses must override to implement
|
213
|
+
# @param tube [Strategy::Tube] The tube to represent in a pretty, human-readable
|
214
|
+
# format
|
215
|
+
# @return [String] `tube` in a more human-readable format.
|
198
216
|
def pretty_print_tube
|
199
217
|
raise NotImplementedError
|
200
218
|
end
|
201
219
|
|
202
|
-
|
203
|
-
#
|
204
|
-
#
|
205
|
-
#
|
206
|
-
#
|
207
|
-
#
|
208
|
-
# identifies an attribute of +tube+ that the corresponding _value_ should be
|
209
|
-
# compared against. True is returned if every _value_ in +options+ evaluates to
|
210
|
-
# true when compared to the attribute of +tube+ identified by the corresponding
|
211
|
-
# _key_. False is returned if any of the comparisons evaluates to false.
|
220
|
+
# Returns a boolean indicating whether or not the provided `tube` matches the
|
221
|
+
# given Hash of `options`. Each `key` in `options` is a String or a Symbol that
|
222
|
+
# identifies an attribute of `tube` that the corresponding `value` should be
|
223
|
+
# compared against. True is returned if every `value` in `options` evaluates to
|
224
|
+
# true when compared to the attribute of `tube` identified by the corresponding
|
225
|
+
# `key`. False is returned if any of the comparisons evaluates to false.
|
212
226
|
#
|
213
227
|
# If no options are given, returns true for any tube that exists at the time of
|
214
228
|
# evaluation.
|
215
229
|
#
|
216
|
-
# Each attribute comparison is performed using the triple
|
217
|
-
# operator/method of
|
230
|
+
# Each attribute comparison is performed using the triple-equal (===)
|
231
|
+
# operator/method of `value` with the attribute of `job` identified by `key`
|
218
232
|
# passed into the method. Use of === allows for more complex comparisons using
|
219
233
|
# Procs, Ranges, Regexps, etc.
|
220
234
|
#
|
221
|
-
# Consult MATCHABLE_TUBE_ATTRIBUTES for a list of which attributes of
|
235
|
+
# Consult {MATCHABLE_TUBE_ATTRIBUTES} for a list of which attributes of `tube`
|
222
236
|
# can be matched against.
|
223
237
|
#
|
224
238
|
# Used internally to evaluate if a tube matches an assertion.
|
225
239
|
#
|
240
|
+
# @abstract Subclasses must override to implement
|
241
|
+
# @param tube [Strategy::Tube] The tube to evaluate for a match.
|
242
|
+
# @param options [Hash{Symbol, String => Numeric, Proc, Range, Regexp, String, Symbol}]
|
243
|
+
# Options used to evaluate match.
|
244
|
+
# @return [Boolean] True if every value of the `options` Hash evaluates to
|
245
|
+
# true when comared to the attribute of `tube` identified by the
|
246
|
+
# corresponding key. False is returned if any of the comparisons evaluates
|
247
|
+
# to false.
|
248
|
+
# @example
|
226
249
|
# strategy.tube_matches?(paused_tube, :state => 'paused')
|
227
250
|
# #=> true
|
228
251
|
#
|
@@ -236,13 +259,14 @@ class BeanCounter::Strategy
|
|
236
259
|
end
|
237
260
|
|
238
261
|
|
239
|
-
# :call-seq:
|
240
|
-
# tubes() => Enumerator
|
241
|
-
#
|
242
262
|
# Returns an Enumerator providing a means to enumerate all tubes in the beanstalkd
|
243
263
|
# pool.
|
244
264
|
#
|
245
265
|
# Used internally to enumerate all tubes to find tubes matching an assertion.
|
266
|
+
#
|
267
|
+
# @abstract Subclasses must override to implement
|
268
|
+
# @return [Enumerator<Strategy::Tube>] An Enumerator of all tubes in the
|
269
|
+
# Beanstalkd pool
|
246
270
|
def tubes
|
247
271
|
raise NotImplementedError
|
248
272
|
end
|
@@ -1,32 +1,41 @@
|
|
1
1
|
module BeanCounter::TestAssertions
|
2
2
|
|
3
|
-
# :call-seq:
|
4
|
-
# assert_enqueued(options = {Symbol,String => Numeric,Proc,Range,Regexp,String})
|
5
|
-
#
|
6
3
|
# Asserts that some number of jobs are enqueued that match the given Hash of
|
7
|
-
#
|
4
|
+
# `options`. If no `options` are given, asserts that at least one job exists.
|
8
5
|
#
|
9
|
-
# Each
|
10
|
-
# of a job that the corresponding
|
11
|
-
# comparisons are performed using the triple
|
12
|
-
# the given
|
6
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
7
|
+
# of a job that the corresponding `value` should be compared against. All attribute
|
8
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
9
|
+
# the given `value`.
|
13
10
|
#
|
14
|
-
#
|
11
|
+
# `options` may additionally include a `count` key ('count' or :count) that
|
15
12
|
# can be used to assert that a particular number of matching jobs are found.
|
16
13
|
#
|
17
|
-
# If no
|
18
|
-
# that matches all of the
|
19
|
-
#
|
14
|
+
# If no `count` option is provided, the assertion succeeds if any job is found
|
15
|
+
# that matches all of the `options` given. If no jobs are found that match the
|
16
|
+
# `options` given, the assertion fails.
|
20
17
|
#
|
21
|
-
# If a
|
22
|
-
# (===) operator/method of the value of
|
18
|
+
# If a `count` option is provided the assertion only succeeds if the triple-equal
|
19
|
+
# (===) operator/method of the value of `count` evaluates to true when given the
|
23
20
|
# total number of matching jobs. Otherwise the assertion fails. The use of ===
|
24
21
|
# allows for more advanced comparisons using Procs, Ranges, Regexps, etc.
|
25
22
|
#
|
26
|
-
# See Strategy
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
23
|
+
# See {BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES} for a list of what
|
24
|
+
# attributes can be used when matching.
|
25
|
+
#
|
26
|
+
# See {BeanCounter::Strategy#job_matches?} and/or the #job_matches? method of
|
27
|
+
# the strategy in use for more detailed information on how it is determined
|
28
|
+
# whether or not a job matches the given `options`.
|
29
|
+
#
|
30
|
+
# @see BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES
|
31
|
+
# @see BeanCounter::Strategy#job_matches?
|
32
|
+
# @param options
|
33
|
+
# [Hash{String, Symbol => Numeric, Proc, Range, Regexp, String, Symbol}]
|
34
|
+
# Options expected when evaluating match assertion.
|
35
|
+
# @option options [Numeric, Range] :count (nil) A particular number of matching
|
36
|
+
# jobs expected
|
37
|
+
# @return [true] if the assertion succeeds
|
38
|
+
# @example
|
30
39
|
# assert_enqueued
|
31
40
|
#
|
32
41
|
# assert_enqueued(:body => /test/, :count => 5)
|
@@ -37,40 +46,51 @@ module BeanCounter::TestAssertions
|
|
37
46
|
end
|
38
47
|
|
39
48
|
|
40
|
-
#
|
41
|
-
#
|
49
|
+
# Asserts that the provided `block` enqueues some number of jobs that match
|
50
|
+
# the given Hash of `options`. If no `options` are given, asserts that at
|
51
|
+
# least one job is enqueued during the execution of the `block`.
|
42
52
|
#
|
43
|
-
#
|
44
|
-
# given Hash of +options+. If no +options+ are given, asserts that at least
|
45
|
-
# one job is enqueued during the execution of the +block+.
|
46
|
-
#
|
47
|
-
# Unlike #assert_enqueued, which will evaluate all jobs in the beanstalkd pool,
|
53
|
+
# Unlike {#assert_enqueued}, which will evaluate all jobs in the Beanstalkd pool,
|
48
54
|
# this method will only evaluate jobs that were enqueued during the
|
49
|
-
# execution of the given
|
55
|
+
# execution of the given `block`. This can be useful for performance and for
|
50
56
|
# making assertions that could return false positives if all jobs were
|
51
57
|
# evaluated.
|
52
58
|
#
|
53
|
-
# Each
|
54
|
-
# of a job that the corresponding
|
55
|
-
# comparisons are performed using the triple
|
56
|
-
# the given
|
59
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
60
|
+
# of a job that the corresponding `value` should be compared against. All attribute
|
61
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
62
|
+
# the given `value`.
|
57
63
|
#
|
58
|
-
#
|
64
|
+
# `options` may additionally include a `count` key ('count' or :count) that
|
59
65
|
# can be used to assert that a particular number of matching jobs are found.
|
60
66
|
#
|
61
|
-
# If no
|
62
|
-
# that matches all of the
|
63
|
-
#
|
67
|
+
# If no `count` option is provided, the assertion succeeds if any job is found
|
68
|
+
# that matches all of the `options` given. If no jobs are found that match the
|
69
|
+
# `options` given, the assertion fails.
|
64
70
|
#
|
65
|
-
# If a
|
66
|
-
# (===) operator/method of the value of
|
71
|
+
# If a `count` option is provided the assertion only succeeds if the triple-equal
|
72
|
+
# (===) operator/method of the value of `count` evaluates to true when given the
|
67
73
|
# total number of matching jobs. Otherwise the assertion fails. The use of ===
|
68
74
|
# allows for more advanced comparisons using Procs, Ranges, Regexps, etc.
|
69
75
|
#
|
70
|
-
# See Strategy
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
76
|
+
# See {BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES} for a list of what
|
77
|
+
# attributes can be used when matching.
|
78
|
+
#
|
79
|
+
# See {BeanCounter::Strategy#job_matches?} and/or the #job_matches? method of
|
80
|
+
# the strategy in use for more detailed information on how it is determined
|
81
|
+
# whether or not a job matches the given `options`.
|
82
|
+
#
|
83
|
+
# @see BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES
|
84
|
+
# @see BeanCounter::Strategy#job_matches?
|
85
|
+
# @param options
|
86
|
+
# [Hash{String, Symbol => Numeric, Proc, Range, Regexp, String, Symbol}]
|
87
|
+
# Options expected when evaluating match assertion.
|
88
|
+
# @option options [Numeric, Range] :count (nil) A particular number of matching
|
89
|
+
# jobs expected
|
90
|
+
# @yield No value is yielded to the provided block.
|
91
|
+
# @raise [ArgumentError] if no block is given.
|
92
|
+
# @return [true] if the assertion succeeds
|
93
|
+
# @example
|
74
94
|
# assert_enqueues(:body => /test/) do
|
75
95
|
# enqueue_some_jobs
|
76
96
|
# end
|
@@ -81,26 +101,32 @@ module BeanCounter::TestAssertions
|
|
81
101
|
end
|
82
102
|
|
83
103
|
|
84
|
-
# :call-seq:
|
85
|
-
# assert_tube(options = {Symbol,String => Numeric,Proc,Range,Regexp,String})
|
86
|
-
#
|
87
104
|
# Asserts that at least one tube exist that matches the given Hash of
|
88
|
-
#
|
105
|
+
# `options`. If no `options` are given, asserts that at least one tube exists,
|
89
106
|
# which will always succeed.
|
90
107
|
#
|
91
|
-
# Each
|
92
|
-
# of a tube that the corresponding
|
93
|
-
# comparisons are performed using the triple
|
94
|
-
# the given
|
108
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
109
|
+
# of a tube that the corresponding `value` should be compared against. All attribute
|
110
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
111
|
+
# the given `value`.
|
95
112
|
#
|
96
113
|
# The assertion succeeds if any tube exists that matches all of the given
|
97
|
-
#
|
114
|
+
# `options`. If no tube exists matching all of the given `options`, the assertion
|
98
115
|
# fails.
|
99
116
|
#
|
100
|
-
# See Strategy
|
101
|
-
#
|
102
|
-
#
|
117
|
+
# See {BeanCounter::Strategy::MATCHABLE_TUBE_ATTRIBUTES} for a list of those
|
118
|
+
# attributes that can be used when matching.
|
119
|
+
#
|
120
|
+
# See {BeanCounter::Strategy#tube_matches?} and/or the #tube_matches? method of
|
121
|
+
# the strategy in use for more detailed information on how it is determined
|
122
|
+
# whether or not a tube matches the given `options`.
|
103
123
|
#
|
124
|
+
# @see BeanCounter::Strategy::MATCHABLE_TUBE_ATTRIBUTES
|
125
|
+
# @see BeanCounter::Strategy#tube_matches?
|
126
|
+
# @param options [Hash{Symbol, String => Numeric, Proc, Range, Regexp, String, Symbol}]
|
127
|
+
# Options expected when evaluating match assertion.
|
128
|
+
# @return [true] if the assertion succeeds
|
129
|
+
# @example
|
104
130
|
# assert_tube
|
105
131
|
#
|
106
132
|
# assert_tube(:name => /test/)
|
@@ -111,24 +137,31 @@ module BeanCounter::TestAssertions
|
|
111
137
|
end
|
112
138
|
|
113
139
|
|
114
|
-
#
|
115
|
-
#
|
140
|
+
# Asserts that no jobs are enqueued that match the given Hash of `options`.
|
141
|
+
# If no `options` are given, asserts that no jobs exist.
|
116
142
|
#
|
117
|
-
#
|
118
|
-
#
|
143
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
144
|
+
# of a job that the corresponding `value` should be compared against. All attribute
|
145
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
146
|
+
# the given `value`.
|
119
147
|
#
|
120
|
-
#
|
121
|
-
# of a job that the corresponding _value_ should be compared against. All attribute
|
122
|
-
# comparisons are performed using the triple equal (===) operator/method of
|
123
|
-
# the given _value_.
|
124
|
-
#
|
125
|
-
# The refutation succeeds if no jobs are found that match all of the +options+
|
148
|
+
# The refutation succeeds if no jobs are found that match all of the `options`
|
126
149
|
# given. If any matching jobs are found, the refutation fails.
|
127
150
|
#
|
128
|
-
# See Strategy
|
129
|
-
#
|
130
|
-
#
|
151
|
+
# See {BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES} for a list of what
|
152
|
+
# attributes can be used when matching.
|
153
|
+
#
|
154
|
+
# See {BeanCounter::Strategy#job_matches?} and/or the #job_matches? method of
|
155
|
+
# the strategy in use for more detailed information on how it is determined
|
156
|
+
# whether or not a job matches the given `options`.
|
131
157
|
#
|
158
|
+
# @see BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES
|
159
|
+
# @see BeanCounter::Strategy#job_matches?
|
160
|
+
# @param options
|
161
|
+
# [Hash{String, Symbol => Numeric, Proc, Range, Regexp, String, Symbol}]
|
162
|
+
# Options expected when evaluating match assertion.
|
163
|
+
# @return [false] if the refutation succeeds
|
164
|
+
# @example
|
132
165
|
# refute_enqueued
|
133
166
|
#
|
134
167
|
# refute_enqueued(:body => lambda {|body| body.length > 50})
|
@@ -139,31 +172,39 @@ module BeanCounter::TestAssertions
|
|
139
172
|
end
|
140
173
|
|
141
174
|
|
142
|
-
#
|
143
|
-
#
|
175
|
+
# Asserts that the given `block` enqueues no jobs that match the given Hash
|
176
|
+
# of `options`. If no `options` are given, asserts that no job are enqueued
|
177
|
+
# by the given `block`.
|
144
178
|
#
|
145
|
-
#
|
146
|
-
# of +options+. If no +options+ are given, asserts that no job are enqueued
|
147
|
-
# by the given +block+.
|
148
|
-
#
|
149
|
-
# Unlike #refute_enqueued, which will evaluate all jobs in the beanstalkd pool,
|
179
|
+
# Unlike {#refute_enqueued}, which will evaluate all jobs in the beanstalkd pool,
|
150
180
|
# this method will only evaluate jobs that were enqueued during the
|
151
|
-
# execution of the given
|
181
|
+
# execution of the given `block`. This can be useful for performance and for
|
152
182
|
# making assertions that could return false positives if all jobs were
|
153
183
|
# evaluated.
|
154
184
|
#
|
155
|
-
# Each
|
156
|
-
# of a job that the corresponding
|
157
|
-
# comparisons are performed using the triple
|
158
|
-
# the given
|
185
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
186
|
+
# of a job that the corresponding `value` should be compared against. All attribute
|
187
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
188
|
+
# the given `value`.
|
159
189
|
#
|
160
|
-
# The refutation succeeds if no jobs are found that match all of the
|
190
|
+
# The refutation succeeds if no jobs are found that match all of the `options`
|
161
191
|
# given. If any matching jobs are found, the refutation fails.
|
162
192
|
#
|
163
|
-
# See Strategy
|
164
|
-
#
|
165
|
-
#
|
166
|
-
#
|
193
|
+
# See {BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES} for a list of what
|
194
|
+
# attributes can be used when matching.
|
195
|
+
#
|
196
|
+
# See {BeanCounter::Strategy#job_matches?} and/or the #job_matches? method of
|
197
|
+
# the strategy in use for more detailed information on how it is determined
|
198
|
+
# whether or not a job matches the given `options`.
|
199
|
+
#
|
200
|
+
# @see BeanCounter::Strategy::MATCHABLE_JOB_ATTRIBUTES
|
201
|
+
# @see BeanCounter::Strategy#job_matches?
|
202
|
+
# @param options
|
203
|
+
# [Hash{String, Symbol => Numeric, Proc, Range, Regexp, String, Symbol}]
|
204
|
+
# Options expected when evaluating match assertion.
|
205
|
+
# @yield The provided block is given no parameters.
|
206
|
+
# @return [false] if the refutation succeeds
|
207
|
+
# @example
|
167
208
|
# refute_enqueues do
|
168
209
|
# do_some_work_that_should_not_enqueue_any_jobs
|
169
210
|
# end
|
@@ -174,25 +215,34 @@ module BeanCounter::TestAssertions
|
|
174
215
|
end
|
175
216
|
|
176
217
|
|
177
|
-
#
|
178
|
-
# refute_tube(options = {Symbol,String => Numeric,Proc,Range,Regexp,String})
|
179
|
-
#
|
180
|
-
# Asserts that no tube exist that matches the given Hash of +options+.
|
218
|
+
# Asserts that no tube exist that matches the given Hash of `options`.
|
181
219
|
# If no options are given, asserts that no tubes exist which will always fail.
|
182
220
|
#
|
183
|
-
# Each
|
184
|
-
# of a tube that the corresponding
|
185
|
-
# comparisons are performed using the triple
|
186
|
-
# the given
|
221
|
+
# Each `key` in `options` is a String or a Symbol that identifies an attribute
|
222
|
+
# of a tube that the corresponding `value` should be compared against. All attribute
|
223
|
+
# comparisons are performed using the triple-equal (===) operator/method of
|
224
|
+
# the given `value`.
|
187
225
|
#
|
188
226
|
# The refutation succeeds if no tube exists that matches all of the given
|
189
|
-
#
|
227
|
+
# `options`. If any tubes exist that match all of the given `options`, the
|
190
228
|
# refutation fails.
|
191
229
|
#
|
192
|
-
# See Strategy
|
193
|
-
#
|
194
|
-
# a tube matches the given +options+.
|
230
|
+
# See {BeanCounter::Strategy::MATCHABLE_TUBE_ATTRIBUTES} for a list of those
|
231
|
+
# attributes that can be used when matching.
|
195
232
|
#
|
233
|
+
# See {BeanCounter::Strategy#tube_matches?} and/or the #tube_matches? method of the strategy
|
234
|
+
# in use for more detailed information on how it is determined whether or not
|
235
|
+
# a tube matches the given `options`.
|
236
|
+
#
|
237
|
+
# @see BeanCounter::Strategy::MATCHABLE_TUBE_ATTRIBUTES
|
238
|
+
# @see BeanCounter::Strategy#job_matches?
|
239
|
+
# @param options
|
240
|
+
# [Hash{String, Symbol => Numeric, Proc, Range, Regexp, String, Symbol}]
|
241
|
+
# Options expected when evaluating match assertion.
|
242
|
+
# @option options [Numeric, Range] :count (nil) A particular number of matching
|
243
|
+
# jobs expected
|
244
|
+
# @return [false] if the refutation succeeds
|
245
|
+
# @example
|
196
246
|
# refute_tube
|
197
247
|
# #=> always fails
|
198
248
|
#
|
@@ -206,8 +256,8 @@ module BeanCounter::TestAssertions
|
|
206
256
|
private
|
207
257
|
|
208
258
|
|
209
|
-
# Builds job expectation object, evaluates and makes appropriate assertion
|
210
|
-
# with appropriate failure message
|
259
|
+
# Builds job expectation object, evaluates, and makes appropriate assertion
|
260
|
+
# with appropriate failure message.
|
211
261
|
def enqueue_expectation(assertion_method, options, &block)
|
212
262
|
message_type = assertion_method == :assert ? :failure_message : :negative_failure_message
|
213
263
|
expectation = BeanCounter::EnqueuedExpectation.new(options)
|
@@ -216,8 +266,8 @@ module BeanCounter::TestAssertions
|
|
216
266
|
end
|
217
267
|
|
218
268
|
|
219
|
-
# Builds tube expectation object, evaluates and makes appropriate assertion
|
220
|
-
# with appropriate failure message
|
269
|
+
# Builds tube expectation object, evaluates, and makes appropriate assertion
|
270
|
+
# with appropriate failure message.
|
221
271
|
def tube_expectation(assertion_method, message_type, options)
|
222
272
|
expectation = BeanCounter::TubeExpectation.new(options)
|
223
273
|
match = expectation.matches?
|