pseudo_cleaner 0.0.30 → 0.0.31

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
- 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