pseudo_cleaner 0.0.30 → 0.0.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWQ1NjM5ZjVhZThkYTAwMzBmMGUzYjNjZjg1OTI5ODdhZTg0ZWY3Mw==
4
+ NjMyOGI1MjJmODFhYzMwZmJjMzY2NzA3MGMyY2U3ODNiMzEyOTc4Yg==
5
5
  data.tar.gz: !binary |-
6
- ODFkNjg4NWJmZTNkZGI0MDdhYWE0MjYyMTI2YjQ4M2RjYWJlYWJiYQ==
6
+ OTM2ZmI1ZmViZmYzZTZhODBiMjA4MmNhMWNiNDIxMzFiNTQyYjZjMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjBlMGFjN2E2MzVjMGI5NmIzOGM2MzU1NWVjMTE2NjA0YWVhYWM3NDdhNThh
10
- MGViMTMxZTQyYmI3YzUxOTcxYTcxMDgyZDlmZjI4NjBlNDlhZGNmOGM1MTMy
11
- NDY3YmQ0MTkxYWRhNWU1NWRmY2I4MTIzMjliMjcwZjI1ZGFlM2E=
9
+ MTRhNjIxN2Y1OWFkMGIxMDA4YTliOWRkM2RiNzgwNzM3Y2QzNjJkMzE1MTdm
10
+ NDc5OGE5ODBjM2Q5MzZjM2QwYjkwYjA2MzIxMTVlOWIwZDg2M2VhNTU0ZGY0
11
+ MzVmOTkxODI1YzQ3ZDAwZWZjMWQxYzJkNGQ1YzRlOWRiNGU2ODU=
12
12
  data.tar.gz: !binary |-
13
- NGNhYWY0Y2M0YmY3YWY0YjllMzllY2U4NDY2Njg3YjEyMTcxMmY1ZjdiMWMw
14
- M2Q4OWRiYzk0MzFhOGVjMTFiMjY1NDE1MDI0MzU2MmMyNWRjMDZmZmRmNzVm
15
- MDU5NGRlZGQyYzM2NTRiMWI3ZjUwZDA3NjFkZTA3M2Y3MDBmZjA=
13
+ Zjg3NWQ1NGY1OTkyOTQxOWY5NzAyNzM2MDZkZjE4YzhlYjU2ZjhmMjFjNTNl
14
+ MWVhM2E0NjAyOTY3ODQ2Mjg1MTcxYTgxYmZiOGM1MDRmYjgxMmUzN2E2YzM2
15
+ NzI2OGM5N2FkMTVjMTA0OGM5NDI0YzU2YjM2OWY1YWU4ZDNlMWY=
data/README.md CHANGED
@@ -61,6 +61,9 @@ To integrate the PseudoCleaner with Rspec, simply add the following lines to `sp
61
61
  require 'pseudo_cleaner'
62
62
  require 'pseudo_cleaner/rspec'
63
63
 
64
+ Add the lines as early as possible in the spec_helper because the hooks used are before and after hooks. Adding the
65
+ hooks early will wrap other hooks in the transaction.
66
+
64
67
  All tests will now by default use DatabaseCleaner with the `:transaction` strategy. For most tests, this will wrap
65
68
  the test in a transaction, and roll back the transaction at the end of the test.
66
69
 
@@ -85,7 +88,16 @@ Example:
85
88
 
86
89
  ### Cucumber
87
90
 
88
- Cucumber integration similar to Rspec integration is planned, but not implemented yet.
91
+ Cucumber integration similar to Rspec integration simply add the cucumber hook file instead.
92
+
93
+ require 'pseudo_cleaner'
94
+ require 'pseudo_cleaner/cucumber'
95
+
96
+ ### Spinach
97
+
98
+ Spinach integration hasn't been fully tested.
99
+
100
+ It probably should work.
89
101
 
90
102
  ### Manual
91
103
 
@@ -1,6 +1,8 @@
1
+ require "singleton"
2
+
1
3
  module PseudoCleaner
2
4
  class Configuration
3
- @@current_instance = nil
5
+ include Singleton
4
6
 
5
7
  # A simple configuration class for the PseudoCleaner
6
8
  #
@@ -12,33 +14,63 @@ module PseudoCleaner
12
14
  attr_accessor :reset_auto_increment
13
15
  attr_accessor :single_cleaner_set
14
16
  attr_accessor :post_transaction_analysis
17
+ attr_accessor :db_connections
15
18
 
16
19
  def self.current_instance
17
- @@current_instance ||= PseudoCleaner::Configuration.new
20
+ self.instance
18
21
  end
19
22
 
20
23
  def initialize
21
- @output_diagnostics = false # false to keep the noise level down...
22
- @clean_database_before_tests = false # false because I think it will annoy developers...
23
- @reset_auto_increment = true # true because I think it should be done
24
- @single_cleaner_set = true # true because I hope it will improve performance
25
- @post_transaction_analysis = false # should only be set true if you are searching for a problem
24
+ @output_diagnostics = false # false to keep the noise level down...
25
+ @clean_database_before_tests = false # false because I think it will annoy developers...
26
+ @reset_auto_increment = true # true because I think it should be done
27
+ @single_cleaner_set = true # true because I hope it will improve performance
28
+ @post_transaction_analysis = false # should only be set true if you are searching for a problem
29
+ @db_connections = {}
26
30
  end
27
31
 
32
+ # Backwards comaptibility...
28
33
  def self.db_connection=(connection)
29
- @db_connection = connection
34
+ self.instance.db_connection = connection
30
35
  end
31
36
 
32
37
  def self.db_connection(type)
33
- if @db_connection || type.nil?
34
- @db_connection
35
- else
36
- if type == :sequel
37
- Sequel::DATABASES[0]
38
+ self.instance.db_connection(type)
39
+ end
40
+
41
+ def db_connection=(connection)
42
+ if Object.const_defined?("ActiveRecord", false) && ActiveRecord.const_defined?("Base", false)
43
+ table_is_active_record = connection.class == ActiveRecord::Base
44
+ table_super_class = connection.class.superclass if connection.class
45
+ while !table_is_active_record && table_super_class
46
+ table_is_active_record = (table_super_class == ActiveRecord::Base)
47
+ table_super_class = table_super_class.superclass
48
+ end
49
+
50
+ @db_connections[:active_record] = connection if table_is_active_record
51
+ end
52
+
53
+ if Object.const_defined?("Sequel", false) && Sequel.const_defined?("Model", false)
54
+ @db_connections[:sequel] = connection
55
+ end
56
+ end
57
+
58
+ def db_connection(type)
59
+ if (!type)
60
+ if Object.const_defined?("Sequel", false) && Sequel.const_defined?("Model", false)
61
+ type = :sequel
38
62
  else
39
- ActiveRecord::Base
63
+ type = :active_record
40
64
  end
41
65
  end
66
+
67
+ if type == :sequel
68
+ @db_connections[type] ||= Sequel::DATABASES[0]
69
+ else
70
+ @db_connections[type] ||= ActiveRecord::Base
71
+ end
72
+
73
+ @db_connections[type]
42
74
  end
43
75
  end
44
76
  end
@@ -75,7 +75,7 @@ end
75
75
  #
76
76
  # I hope that this gets fixed, but until it does, we can't use Around for database cleaning.
77
77
  #
78
- # This is fixed in Cucumber 2.0.
78
+ # This was fixed in Cucumber 2.0.
79
79
 
80
80
 
81
81
  if Cucumber::VERSION.split[0].to_i >= 2
@@ -30,6 +30,14 @@ module PseudoCleaner
30
30
  @@suite_cleaner
31
31
  end
32
32
 
33
+ def database_cleaner
34
+ if Object.const_defined?("ActiveRecord", false) && ActiveRecord.const_defined?("Base", false)
35
+ DatabaseCleaner[:active_record, connection: PseudoCleaner::Configuration.db_connection(:active_record)]
36
+ elsif Object.const_defined?("Sequel", false) && Sequel.const_defined?("Model", false)
37
+ DatabaseCleaner[:sequel, connection: PseudoCleaner::Configuration.db_connection(:sequel)]
38
+ end
39
+ end
40
+
33
41
  def start_example(example_class, strategy)
34
42
  pseudo_cleaner_data = {}
35
43
  pseudo_cleaner_data[:test_strategy] = strategy
@@ -39,13 +47,7 @@ module PseudoCleaner
39
47
 
40
48
  DatabaseCleaner.strategy = PseudoCleaner::MasterCleaner::DB_CLEANER_CLEANING_STRATEGIES[strategy]
41
49
  unless [:pseudo_delete].include? strategy
42
- if Object.const_defined?("ActiveRecord", false) && ActiveRecord.const_defined?("Base", false)
43
- DatabaseCleaner[:active_record, connection: PseudoCleaner::Configuration.db_connection(:active_record)].
44
- start
45
- elsif Object.const_defined?("Sequel", false) && Sequel.const_defined?("Model", false)
46
- DatabaseCleaner[:sequel, connection: PseudoCleaner::Configuration.db_connection(:sequel)].start
47
- end
48
- # DatabaseCleaner.start
50
+ PseudoCleaner::MasterCleaner.database_cleaner.start
49
51
  end
50
52
 
51
53
  pseudo_cleaner_data[:pseudo_state] = PseudoCleaner::MasterCleaner.start_test strategy
@@ -59,13 +61,7 @@ module PseudoCleaner
59
61
 
60
62
  unless pseudo_cleaner_data[:test_strategy] == :none
61
63
  unless [:pseudo_delete].include? pseudo_cleaner_data[:test_strategy]
62
- if Object.const_defined?("ActiveRecord", false) && ActiveRecord.const_defined?("Base", false)
63
- DatabaseCleaner[:active_record, connection: PseudoCleaner::Configuration.db_connection(:active_record)].
64
- clean
65
- elsif Object.const_defined?("Sequel", false) && Sequel.const_defined?("Model", false)
66
- DatabaseCleaner[:sequel, connection: PseudoCleaner::Configuration.db_connection(:sequel)].clean
67
- end
68
- # DatabaseCleaner.clean
64
+ PseudoCleaner::MasterCleaner.database_cleaner.clean
69
65
  end
70
66
 
71
67
  case pseudo_cleaner_data[:test_strategy]
@@ -114,7 +110,7 @@ module PseudoCleaner
114
110
  end
115
111
 
116
112
  def reset_database
117
- DatabaseCleaner.clean_with(:truncation)
113
+ PseudoCleaner::MasterCleaner.database_cleaner.clean_with(:truncation)
118
114
 
119
115
  PseudoCleaner::MasterCleaner.database_reset
120
116
  end
@@ -358,15 +354,17 @@ module PseudoCleaner
358
354
  def run_all_cleaners(cleaner_function, cleaners, *args, &block)
359
355
  last_error = nil
360
356
 
361
- cleaners.each do |cleaner|
362
- begin
363
- if cleaner.respond_to?(cleaner_function)
364
- cleaner.send(cleaner_function, *args, &block)
365
- end
366
- rescue => error
367
- PseudoCleaner::MasterCleaner.process_exception(last_error) if last_error
357
+ if cleaners
358
+ cleaners.each do |cleaner|
359
+ begin
360
+ if cleaner.respond_to?(cleaner_function)
361
+ cleaner.send(cleaner_function, *args, &block)
362
+ end
363
+ rescue => error
364
+ PseudoCleaner::MasterCleaner.process_exception(last_error) if last_error
368
365
 
369
- last_error = error
366
+ last_error = error
367
+ end
370
368
  end
371
369
  end
372
370
 
@@ -15,9 +15,23 @@ RSpec.configure do |config|
15
15
  PseudoCleaner::MasterCleaner.end_suite
16
16
  end
17
17
 
18
- config.around(:each) do |example|
18
+ # I tried making this a config.around(:each).
19
+ # You can't do that. It turns out that RSpec injects a virtual around(:each) that
20
+ # calls after_teardown which calls ActiveRecord::Base.clear_active_connections!
21
+ #
22
+ # This resets the active connection.
23
+ #
24
+ # If (for whatever reason) there are multiple connections in the connection pool this
25
+ # means that when you go to clean, the connection has been released, and when
26
+ # DatabaseCleaner tries to get a new connection, it may not get the same one it had
27
+ # when start was called.
28
+ #
29
+ # By using before and after, we avoid this problem by being inside the around block.
30
+ # The compromize is that the user will be more load dependent to get the hooks
31
+ # in the right order (potentially).
32
+ config.before(:each) do |example|
33
+ test_example = example
19
34
  test_example = example.example if example.respond_to?(:example)
20
- test_example ||= self.example if self.respond_to?(:example)
21
35
 
22
36
  new_strategy = nil
23
37
 
@@ -34,11 +48,12 @@ RSpec.configure do |config|
34
48
  new_strategy ||= :transaction
35
49
 
36
50
  PseudoCleaner::MasterCleaner.start_example(test_example, new_strategy)
51
+ end
37
52
 
38
- begin
39
- example.run
40
- ensure
41
- PseudoCleaner::MasterCleaner.end_example(test_example)
42
- end
53
+ config.after(:each) do |example|
54
+ test_example = example
55
+ test_example = example.example if example.respond_to?(:example)
56
+
57
+ PseudoCleaner::MasterCleaner.end_example(test_example)
43
58
  end
44
59
  end
@@ -190,14 +190,14 @@ module PseudoCleaner
190
190
  end
191
191
 
192
192
  def test_end test_strategy
193
- reset_table test_strategy
193
+ reset_table test_strategy, false
194
194
  end
195
195
 
196
196
  def suite_end test_strategy
197
- reset_table test_strategy
197
+ reset_table test_strategy, true
198
198
  end
199
199
 
200
- def reset_table test_strategy
200
+ def reset_table test_strategy, require_output
201
201
  if @test_strategy != test_strategy && !PseudoCleaner::Configuration.current_instance.single_cleaner_set
202
202
  if @options[:output_diagnostics]
203
203
  PseudoCleaner::Logger.write(" *** The ending strategy for \"#{initial_state[:table_name]}\" changed! ***".red.on_light_white)
@@ -216,19 +216,23 @@ module PseudoCleaner
216
216
  # I'm using it because it is faster than reseeding each test...
217
217
  # And, I can be responsible for worrying about referential integrity in the test
218
218
  # if I want to...
219
- PseudoCleaner::Logger.write(" Resetting table \"#{initial_state[:table_name]}\"...") if @options[:output_diagnostics]
219
+ pre_string = " Resetting table \"#{initial_state[:table_name]}\" for #{test_strategy}..."
220
+ pre_string = "Tests ended without cleaning up properly!!!\n" + pre_string if require_output
221
+ pre_string = pre_string.red.on_light_white if require_output
222
+
223
+ require_output ||= @options[:output_diagnostics]
220
224
 
221
225
  if initial_state[:table_is_active_record]
222
- test_end_active_record test_strategy
226
+ test_end_active_record test_strategy, pre_string, require_output
223
227
  end
224
228
 
225
229
  if initial_state[:table_is_sequel_model]
226
- test_end_sequel_model test_strategy
230
+ test_end_sequel_model test_strategy, pre_string, require_output
227
231
  end
228
232
  end
229
233
  end
230
234
 
231
- def test_end_active_record test_strategy
235
+ def test_end_active_record test_strategy, pre_string, require_output
232
236
  initial_state = @@initial_states[@table]
233
237
  cleaned_table = false
234
238
 
@@ -243,7 +247,10 @@ module PseudoCleaner
243
247
  if num_deleted > 0
244
248
  cleaned_table = true
245
249
 
246
- output_delete_record(test_strategy, " Deleted #{num_deleted} records by ID.")
250
+ pre_string = output_delete_record(test_strategy,
251
+ " Deleted #{num_deleted} records by ID.",
252
+ pre_string,
253
+ require_output)
247
254
  end
248
255
  end
249
256
 
@@ -255,7 +262,10 @@ module PseudoCleaner
255
262
  if num_deleted > 0
256
263
  cleaned_table = true
257
264
 
258
- output_delete_record(test_strategy, " Deleted #{num_deleted} records by #{initial_state[:created][:column_name]}.")
265
+ pre_string = output_delete_record(test_strategy,
266
+ " Deleted #{num_deleted} records by #{initial_state[:created][:column_name]}.",
267
+ pre_string,
268
+ require_output)
259
269
  end
260
270
  end
261
271
 
@@ -263,14 +273,16 @@ module PseudoCleaner
263
273
  dirty_count = PseudoCleaner::Configuration.db_connection(:active_record).connection.
264
274
  execute("SELECT COUNT(*) FROM `#{table_name}` WHERE #{initial_state[:updated][:column_name]} > '#{initial_state[:updated][:value]}'").first[0]
265
275
 
266
- if @options[:output_diagnostics] && dirty_count > 0
276
+ if require_output && dirty_count > 0
267
277
  # cleaned_table = true
268
278
 
269
279
  initial_state[:updated][:value] = PseudoCleaner::Configuration.db_connection(:active_record).connection.
270
280
  execute("SELECT MAX(#{initial_state[:updated][:column_name]}) FROM `#{table_name}`").first[0]
271
281
 
272
- PseudoCleaner::Logger.write(" Resetting table \"#{initial_state[:table_name]}\"...") unless @options[:output_diagnostics]
273
- output_delete_record(test_strategy, " *** There are #{dirty_count} records which have been updated and may be dirty remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white)
282
+ pre_string = output_delete_record(test_strategy,
283
+ " *** There are #{dirty_count} records which have been updated and may be dirty remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
284
+ pre_string,
285
+ require_output)
274
286
  end
275
287
  end
276
288
 
@@ -282,7 +294,12 @@ module PseudoCleaner
282
294
 
283
295
  DatabaseCleaner[:active_record, connection: PseudoCleaner::Configuration.db_connection(:active_record)].
284
296
  clean_with(:truncation, only: [initial_state[:table_name]])
285
- output_delete_record(test_strategy, " Deleted #{final_count} records by cleaning the table.") if final_count > 0
297
+ if final_count > 0
298
+ pre_string = output_delete_record(test_strategy,
299
+ " Deleted #{final_count} records by cleaning the table.",
300
+ pre_string,
301
+ require_output)
302
+ end
286
303
 
287
304
  final_count = PseudoCleaner::Configuration.db_connection(:active_record).connection.
288
305
  execute("SELECT COUNT(*) FROM `#{table_name}`").first[0]
@@ -290,10 +307,10 @@ module PseudoCleaner
290
307
  end
291
308
 
292
309
  if initial_state[:count] != final_count
293
- PseudoCleaner::Logger.write(" Resetting table \"#{initial_state[:table_name]}\"...") unless @options[:output_diagnostics]
294
- output_delete_record(test_strategy,
295
- " *** There are #{final_count - initial_state[:count]} dirty records remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
296
- true)
310
+ pre_string = output_delete_record(test_strategy,
311
+ " *** There are #{final_count - initial_state[:count]} dirty records remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
312
+ pre_string,
313
+ true)
297
314
 
298
315
  initial_state[:count] = final_count
299
316
  cleaned_table = true
@@ -304,7 +321,7 @@ module PseudoCleaner
304
321
  end
305
322
  end
306
323
 
307
- def test_end_sequel_model test_strategy
324
+ def test_end_sequel_model test_strategy, pre_string, require_output
308
325
  initial_state = @@initial_states[@table]
309
326
  access_table = sequel_model_table
310
327
  cleaned_table = false
@@ -316,7 +333,10 @@ module PseudoCleaner
316
333
  if num_deleted > 0
317
334
  cleaned_table = true
318
335
 
319
- output_delete_record(test_strategy, " Deleted #{num_deleted} records by ID.")
336
+ pre_string = output_delete_record(test_strategy,
337
+ " Deleted #{num_deleted} records by ID.",
338
+ pre_string,
339
+ require_output)
320
340
  end
321
341
  end
322
342
 
@@ -328,7 +348,10 @@ module PseudoCleaner
328
348
  if num_deleted > 0
329
349
  cleaned_table = true
330
350
 
331
- output_delete_record(test_strategy, " Deleted #{num_deleted} records by #{initial_state[:created][:column_name]}.")
351
+ pre_string = output_delete_record(test_strategy,
352
+ " Deleted #{num_deleted} records by #{initial_state[:created][:column_name]}.",
353
+ pre_string,
354
+ require_output)
332
355
  end
333
356
  end
334
357
 
@@ -338,13 +361,15 @@ module PseudoCleaner
338
361
  where("`#{initial_state[:updated][:column_name]}` > ?", initial_state[:updated][:value]).
339
362
  count
340
363
 
341
- if @options[:output_diagnostics] && dirty_count > 0
364
+ if require_output && dirty_count > 0
342
365
  # cleaned_table = true
343
366
 
344
367
  initial_state[:updated][:value] = access_table.unfiltered.max(initial_state[:updated][:column_name])
345
368
 
346
- PseudoCleaner::Logger.write(" Resetting table \"#{initial_state[:table_name]}\"...") unless @options[:output_diagnostics]
347
- output_delete_record(test_strategy, " *** There are #{dirty_count} records which have been updated and may be dirty remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white)
369
+ pre_string = output_delete_record(test_strategy,
370
+ " *** There are #{dirty_count} records which have been updated and may be dirty remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
371
+ pre_string,
372
+ require_output)
348
373
  end
349
374
  end
350
375
 
@@ -355,17 +380,22 @@ module PseudoCleaner
355
380
 
356
381
  DatabaseCleaner[:sequel, connection: PseudoCleaner::Configuration.db_connection(:sequel)].
357
382
  clean_with(:truncation, only: [initial_state[:table_name]])
358
- output_delete_record(test_strategy, " Deleted #{final_count} records by cleaning the table.") if final_count > 0
383
+ if final_count > 0
384
+ pre_string = output_delete_record(test_strategy,
385
+ " Deleted #{final_count} records by cleaning the table.",
386
+ pre_string,
387
+ require_output)
388
+ end
359
389
 
360
390
  final_count = access_table.unfiltered.count
361
391
  end
362
392
  end
363
393
 
364
394
  if initial_state[:count] != final_count
365
- PseudoCleaner::Logger.write(" Resetting table \"#{initial_state[:table_name]}\"...") unless @options[:output_diagnostics]
366
- output_delete_record(test_strategy,
367
- " *** There are #{final_count - initial_state[:count]} dirty records remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
368
- true)
395
+ pre_string = output_delete_record(test_strategy,
396
+ " *** There are #{final_count - initial_state[:count]} dirty records remaining after cleaning \"#{initial_state[:table_name]}\"... ***".red.on_light_white,
397
+ pre_string,
398
+ true)
369
399
 
370
400
  initial_state[:count] = final_count
371
401
  cleaned_table = true
@@ -377,11 +407,14 @@ module PseudoCleaner
377
407
  end
378
408
  end
379
409
 
380
- def output_delete_record(test_strategy, stats_string, require_output = false)
410
+ def output_delete_record(test_strategy, stats_string, pre_string, require_output = false)
411
+ PseudoCleaner::Logger.write(pre_string) if pre_string && (@options[:output_diagnostics] || require_output)
381
412
  if test_strategy == :transaction
382
413
  PseudoCleaner::Logger.write(" ***** TRANSACTION FAILED!!! *****".red.on_light_white)
383
414
  end
384
415
  PseudoCleaner::Logger.write(stats_string) if @options[:output_diagnostics] || require_output
416
+
417
+ nil
385
418
  end
386
419
 
387
420
  def reset_auto_increment test_start
@@ -489,12 +522,14 @@ module PseudoCleaner
489
522
  def review_rows(&block)
490
523
  initial_state = @@initial_states[@table]
491
524
 
492
- if initial_state[:table_is_active_record]
493
- review_rows_active_record &block
494
- end
525
+ if initial_state
526
+ if initial_state[:table_is_active_record]
527
+ review_rows_active_record &block
528
+ end
495
529
 
496
- if initial_state[:table_is_sequel_model]
497
- review_rows_sequel_model &block
530
+ if initial_state[:table_is_sequel_model]
531
+ review_rows_sequel_model &block
532
+ end
498
533
  end
499
534
  end
500
535
 
@@ -1,3 +1,3 @@
1
1
  module PseudoCleaner
2
- VERSION = "0.0.30"
2
+ VERSION = "0.0.31"
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.30
4
+ version: 0.0.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - RealNobody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize