pseudo_cleaner 0.0.38 → 0.0.39

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTk2NTg5N2FhYmRiYjJmYzkyMzA5NGE1YjhmZTNlYTE4MjhlODk1OQ==
4
+ YTgyNWUyNmQ2ZGE1MDI3YmVhNDNiYmEzNjRhYThlOGY5ZTdiODIxMQ==
5
5
  data.tar.gz: !binary |-
6
- ZjgwZDExYmRhNWE5YjE5OTAyZTY3OGIzNjdkZjEwMTFkOGVlYTNlNA==
6
+ YmY3MzcyYWE5MDczNDdjMjYyNDljYTMxYmQ4N2FhZTZjZDI2ZDcwYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWUwMDhlY2FjYzVjOWNiYjc4ZWEwMGY3NmU2YjA4MjRhMjg5MDkwNTkwNzFl
10
- NWUyZjA2MjdhMTg1NDJhYjgwNGY0MDAxZGYwMDg1OWJjN2RmNDdkYmMyNTVl
11
- OThiODEwYWZmZmFiM2MxZjBiY2RjYTQxYTAyMTVhZTVkMTczNjk=
9
+ OWQ4YmU1YjQ4MGRhMjZlOGJhMTZkMDUyZTczYjAyZWNhNDUxMjJkMTFmMDNi
10
+ NDBkZDFiNWEzMTUzYjJkMDY4NGY2MDUwNzFkMDk2M2Q5N2U5N2ZkYzNkZmI5
11
+ ODBkMmE4ZGNmNDZjNThlYWJjYjJiOWE1NmIzM2RiMTdlNTM3ZWM=
12
12
  data.tar.gz: !binary |-
13
- ZjhjNjI1MmVmOTRjYWE1MTY1OTg2Y2EwZDg4Zjk5ZDRhZTk1ZDg2NWU4MDU2
14
- NDhjZWFmY2JmNGRjZGQxN2Q5MTljYmVhMGRjYTNkNGFjZDI0MTAyMmMwMDZh
15
- YjdlNGQ0NmI2NGFiNzQ1MDZlNTg5YWZhNjA2YjQxNTllNmQxODk=
13
+ ZTRlOThkNmQ0MTk0OWY4ZDVkZGJhYzdlYmY4NDc4NzYyYzJlNmY1OTAxY2Zi
14
+ YmUzMTViYTE2YTEyNjIyZWQwNmMzYWNkMGQzMjQxNDljMTYyOGUxZGY0ZWEz
15
+ YzMzMTBhYTE4ZWYyYTA5NDhiZTE0NTQ5NzBkMWY2NzQyMTI2MTg=
data/README.md CHANGED
@@ -145,10 +145,102 @@ Cleaners must also include one or more of the following funcitons:
145
145
 
146
146
  A Cleaner can adjust when it is called in relation to other cleaners by overriding the instance method `<=>`
147
147
 
148
+ ### Redis Cleaner
149
+
150
+ The RedisCleaner is a base class for a Custom Cleaner you must create yourself. The RedisCleaner is designed to work
151
+ by replacing your existing redis class with a tracking redis class. It will track your updates as you make calls and
152
+ then clean them up when you are done.
153
+
154
+ An example implementation where the default redis used by the system is `$redis`. (In other cases, you may want to
155
+ use mocking to swap out the redis instance...)
156
+
157
+ This in the file: db\cleaners\redis_cleaner.rb in the project...
158
+
159
+ class RedisCleaner < PseudoCleaner::RedisCleaner
160
+ attr_reader :test_ignore_regex
161
+ attr_reader :current_ignore_regex
162
+
163
+ BASE_IGNORE =
164
+ [
165
+ /rc-analytics::exports:actions:partner_last_run_dates/,
166
+ /rack\|whitelist_cache\|hash_data/,
167
+ /SequelModelCache/,
168
+ /active_sessions/,
169
+ ]
170
+
171
+ def ignore_regexes
172
+ current_ignore_regex
173
+ end
174
+
175
+ def ignore_durring_test(additional_ignore_regexes, &block)
176
+ orig_test_ignore_regex = test_ignore_regex
177
+ begin
178
+ @test_ignore_regex = [*additional_ignore_regexes, *test_ignore_regex]
179
+ @current_ignore_regex = [*RedisCleaner::BASE_IGNORE, *test_ignore_regex]
180
+
181
+ block.yield
182
+ ensure
183
+ @test_ignore_regex = orig_test_ignore_regex
184
+ @current_ignore_regex = [*RedisCleaner::BASE_IGNORE, *test_ignore_regex]
185
+ end
186
+ end
187
+
188
+ def initialize(*args)
189
+ super(*args)
190
+
191
+ @current_ignore_regex = RedisCleaner::BASE_IGNORE
192
+ @test_ignore_regex = []
193
+ @redis = $redis
194
+ $redis = self
195
+
196
+ Redis.current = $redis
197
+ Ohm.redis = $redis
198
+ Redis::Objects.redis = $redis
199
+ end
200
+ end
201
+
202
+ The main point here is that I set the value of @redis to the redis instance I want to use, and then "replace" that
203
+ redis instance in the code with the RedisCleaner class.
204
+
205
+ ## Configurations
206
+
207
+ As the system evolves, I keep adding new and different options. Here is a summary of what some of them do at least:
208
+
209
+ * **output_diagnostics**
210
+ Output diagnostic information at various points in the process. This would include the level set starting point of
211
+ a table, what rows were deleted, etc.
212
+ * **clean_database_before_tests**
213
+ Delete all data in all tables can call SortedSeeer to re-seed the database before any tests are run. This is
214
+ defaulted to false because this can be time-consuming and many automated testing systems already do this for you.
215
+ * **reset_auto_increment**
216
+ Defaulted to true, this will set the auto-increment value for a table to the highest id + 1 when the system starts.
217
+ * **post_transaction_analysis**
218
+ An early version of the peek-data function. This will output information about every table at the end of the test.
219
+ The data output will match the initial state data if `output_diagnostics` is true.
220
+ * **peek_data_on_error**
221
+ Defaulted to true, this will output a dump of all of the new values in the database if an error occured in the test.
222
+ * **peek_data_not_on_error**
223
+ If set to true, this will output a dump of all of the new values in the database at the end of every test. This
224
+ functionality can also be achieved by tagging your test with `:full_data_dump` (RSpec) or `@full_data_dump`
225
+ (Cucumber and Spinach).
226
+ * **enable_full_data_dump_tag**
227
+ Defaulted to true, this allows the `full_data_dump` tag to work. If set to false, the tag will be ignored.
228
+ * **disable_cornucopia_output**
229
+ If set to false, this will force all output to be done through the registered logger which defaults to simply
230
+ outputing data to stdout.
231
+
232
+ ## Cornucopia integration
233
+
234
+ I have another gem that I use a lot called `cornucopia`. I like it because it gives me really useful reports on what
235
+ happened in my tests.
236
+
237
+ I have updated this gem to use Cornucopia to output most of the information to be output by the gem. You can disable
238
+ this feature by setting `disable_cornucopia_output` to true.
239
+
148
240
  ## Contributing
149
241
 
150
242
  1. Fork it
151
243
  2. Create your feature branch (`git checkout -b my-new-feature`)
152
244
  3. Commit your changes (`git commit -am 'Add some feature'`)
153
245
  4. Push to the branch (`git push origin my-new-feature`)
154
- 5. Create new Pull Request
246
+ 5. Create new Pull Request
@@ -33,6 +33,7 @@ module PseudoCleaner
33
33
  @peek_data_on_error = true
34
34
  @peek_data_not_on_error = false
35
35
  @enable_full_data_dump_tag = true
36
+ @disable_cornucopia_output = false
36
37
  end
37
38
 
38
39
  # Backwards comaptibility...
@@ -350,7 +350,8 @@ module PseudoCleaner
350
350
 
351
351
  if Object.const_defined?("Cornucopia", false) &&
352
352
  Cornucopia.const_defined?("Util", false) &&
353
- Cornucopia::Util.const_defined?("ReportBuilder", false)
353
+ Cornucopia::Util.const_defined?("ReportBuilder", false) &&
354
+ !PseudoCleaner::Configuration.current_instance.disable_cornucopia_output
354
355
  Cornucopia::Util::ReportBuilder.current_report.within_section(options[:description]) do |report|
355
356
  report.within_hidden_table do |outer_report_table|
356
357
  Cornucopia::Util::ReportTable.new(
@@ -110,6 +110,7 @@ module PseudoCleaner
110
110
  "sunionstore",
111
111
  "zincrby",
112
112
  "zinterstore",
113
+ "[]=",
113
114
  ]
114
115
  READ_COMMANDS =
115
116
  [
@@ -159,6 +160,7 @@ module PseudoCleaner
159
160
  "zscan",
160
161
  "zscan_each",
161
162
  "zscore",
163
+ "[]",
162
164
  ]
163
165
 
164
166
  attr_reader :initial_keys
@@ -242,11 +244,24 @@ module PseudoCleaner
242
244
  elsif ["exec", "pipelined"].include?(args[0])
243
245
  begin
244
246
  if (!response && @multi_commands.length > 0) || (response && response.length != @multi_commands.length)
245
- raise "exec response does not match sent commands.\n response: #{response}\n commands: #{@multi_commands}"
247
+ puts "exec response does not match sent commands.\n response: #{response}\n commands: #{@multi_commands}"
248
+
249
+ # make the response length match the commands length.
250
+ # so far the only time this has happened was when a multi returned nil which SHOULD indicate a failure
251
+ #
252
+ # I am assuming that the multi failed in this case, but even if so, it is safest for tracking purposes
253
+ # to assume that redis DID change and record it as such. Even if I am wrong, for the cleaner, it
254
+ # doesn't matter, and there is no harm.
255
+ response ||= []
256
+ @multi_commands.each_with_index do |command, index|
257
+ if response.length < index
258
+ response << true
259
+ end
260
+ end
246
261
  end
247
262
 
248
- response.each_with_index do |command_response, index|
249
- process_command(command_response, *(@multi_commands[index]))
263
+ @multi_commands.each_with_index do |command, index|
264
+ process_command(response[index], *command)
250
265
  end
251
266
  ensure
252
267
  @in_multi = false
@@ -258,7 +273,14 @@ module PseudoCleaner
258
273
  elsif WRITE_COMMANDS.include?(args[0])
259
274
  updated_keys.merge(extract_keys(*args))
260
275
  elsif SET_COMMANDS.include?(args[0])
261
- if [true, false].include?(response) ? response : (response > 0)
276
+ update_key = true
277
+ if [true, false].include?(response)
278
+ update_key = response
279
+ else
280
+ update_key = response > 0 rescue true
281
+ end
282
+
283
+ if update_key
262
284
  updated_keys.merge(extract_keys(*args))
263
285
  end
264
286
  end
@@ -1,3 +1,3 @@
1
1
  module PseudoCleaner
2
- VERSION = "0.0.38"
2
+ VERSION = "0.0.39"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pseudo_cleaner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.38
4
+ version: 0.0.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - RealNobody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
11
+ date: 2015-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize