Sha256: 176f074fcc13cfdffe5a678a919c65697d9348c58437080216caa3be30d9c6cd

Contents?: true

Size: 1.6 KB

Versions: 7

Compression:

Stored size: 1.6 KB

Contents

class PreloadedDataHash
  attr_reader :preloader

  def initialize(preloader)
    @preloader, @backing_hash = preloader, {}
  end

  def []=(key, record)
    puts "DEPRECATION WARNING: Instead of 'data[:#{key}] = record' please use 'data.add(:#{key}) { record }'"
    add_to_backing_hash(key, record)
  end

  def [](key)
    @backing_hash[key]
  end

  def record_ids
    @backing_hash.values.select { |value| value.is_a?(Fixnum) }
  end

  def add(key)
    raise "You must pass a block to PreloaderDataHash#add.  You forgot to use the block in your #{preloader.model_type} prelodaer for the #{key.inspect} record." unless block_given?
    begin
      add_to_backing_hash(key, yield)
    rescue => e
      puts "WARNING: an error occurred while preloading the #{preloader.model_type.to_s}(:#{key}) record: #{e.class.to_s}: #{e.message}"
      add_to_backing_hash(key, nil, e)
    end
  end

  private

  def add_to_backing_hash(key, record, error = nil)
    print '.'
    if record
      if record.new_record? && !record.save
        raise StandardError.new("Error preloading factory data.  #{preloader.model_class.to_s} :#{key.to_s} could not be saved.  Errors: #{pretty_error_messages(record)}")
      else
        @backing_hash[key] = record.id
      end
    else
      @backing_hash[key] = error
    end
  end

  # Borrowed from shoulda: http://github.com/thoughtbot/shoulda/blob/e02228d45a879ff92cb72b84f5fccc6a5f856a65/lib/shoulda/active_record/helpers.rb#L4-9
  def pretty_error_messages(obj)
    obj.errors.map do |a, m|
      msg = "#{a} #{m}"
      msg << " (#{obj.send(a).inspect})" unless a.to_sym == :base
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
myronmarston-factory_data_preloader-0.5.0 lib/factory_data_preloader/preloaded_data_hash.rb
myronmarston-factory_data_preloader-0.5.1 lib/factory_data_preloader/preloaded_data_hash.rb
myronmarston-factory_data_preloader-0.5.2 lib/factory_data_preloader/preloaded_data_hash.rb
factory_data_preloader-1.0.3 lib/factory_data_preloader/preloaded_data_hash.rb
factory_data_preloader-1.0.2 lib/factory_data_preloader/preloaded_data_hash.rb
factory_data_preloader-1.0.1 lib/factory_data_preloader/preloaded_data_hash.rb
factory_data_preloader-0.5.2 lib/factory_data_preloader/preloaded_data_hash.rb