lib/data_seeder/loader.rb in data_seeder-0.0.4 vs lib/data_seeder/loader.rb in data_seeder-0.0.5

- old
+ new

@@ -22,10 +22,16 @@ def logger DataSeeder.logger end + def klass! + @path_minus_ext.classify.constantize + rescue NameError => e + raise "#{@path} doesn't match a corresponding model" + end + def klass # This should always translate to a class except for custom loaders @path_minus_ext.classify.constantize rescue nil end @@ -46,18 +52,18 @@ call_file_method(:teardown) end def setup @key_attribute = self.file_config[:key_attribute] || :id - @old_keys = self.klass.all.pluck(@key_attribute).map(&:to_s) if @purge + @old_keys = self.klass!.all.pluck(@key_attribute).map(&:to_s) if @purge logger.info { "Loading #{@path}" } call_file_method(:setup) end def teardown @old_keys.each do |key| - if model = self.klass.find_by(@key_attribute => key) + if model = self.klass!.find_by(@key_attribute => key) logger.info { " Destroying #{model_info(model)}"} model.destroy end end end @@ -100,14 +106,14 @@ key = attr[@key_attribute.to_s] || attr[@key_attribute.to_sym] raise "No #{@key_attribute} in #{attr.inspect}" unless key end if method = @file_config[:postprocess] method.call(attr) - elsif self.klass.respond_to?(:data_seeder_postprocess) - self.klass.send(:data_seeder_postprocess, attr) + elsif self.klass!.respond_to?(:data_seeder_postprocess) + self.klass!.send(:data_seeder_postprocess, attr) end @old_keys.delete(key.to_s) - model = self.klass.find_or_initialize_by(@key_attribute => key) + model = self.klass!.find_or_initialize_by(@key_attribute => key) model.attributes = attr save_model(model) end def save_model(model)