Sha256: a240020fa3211e8261104191bcd9b7361136c6e0a0a9c0ad90a81f7800ae6423

Contents?: true

Size: 1.29 KB

Versions: 5

Compression:

Stored size: 1.29 KB

Contents

require 'database_cleaner/cleaner'
require 'database_cleaner/safeguard'

module DatabaseCleaner
  class Cleaners < Hash
    def initialize hash={}
      super.replace(hash)
    end

    # FIXME this method conflates creation with lookup... both a command and a query. yuck.
    def [](orm, **opts)
      raise ArgumentError if orm.nil?
      fetch([orm, opts]) { add_cleaner(orm, **opts) }
    end

    def strategy=(strategy)
      values.each { |cleaner| cleaner.strategy = strategy }
      remove_duplicates
    end

    def start
      Safeguard.new.run
      values.each { |cleaner| cleaner.start }
    end

    def clean
      Safeguard.new.run
      values.each { |cleaner| cleaner.clean }
    end

    def cleaning(&inner_block)
      Safeguard.new.run
      values.inject(inner_block) do |curr_block, cleaner|
        proc { cleaner.cleaning(&curr_block) }
      end.call
    end

    def clean_with(*args)
      Safeguard.new.run
      values.each { |cleaner| cleaner.clean_with(*args) }
    end

    private

    def add_cleaner(orm, **opts)
      self[[orm, opts]] = Cleaner.new(orm, **opts)
    end

    def remove_duplicates
      replace(reduce(Cleaners.new) do |cleaners, (key, value)|
        cleaners[key] = value unless cleaners.values.include?(value)
        cleaners
      end)
    end
  end
end

Version data entries

5 entries across 4 versions & 3 rubygems

Version Path
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.1.0/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaners.rb
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaners.rb
date_n_time_picker_activeadmin-0.1.2 vendor/bundle/ruby/2.6.0/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaners.rb
date_n_time_picker_activeadmin-0.1.1 vendor/bundle/ruby/2.6.0/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaners.rb
database_cleaner-core-2.0.1 lib/database_cleaner/cleaners.rb