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)