Class: FactoryDataPreloader::Preloader
- Defined in:
- lib/factory_data_preloader/preloader.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#depends_on ⇒ Object
Returns the value of attribute depends_on.
-
#model_class ⇒ Object
Returns the value of attribute model_class.
-
#model_type ⇒ Object
Returns the value of attribute model_type.
-
#proc ⇒ Object
Returns the value of attribute proc.
Instance Method Summary collapse
- #all_dependencies ⇒ Object
- #delete_table_data! ⇒ Object
- #dependencies ⇒ Object
- #get_record(key) ⇒ Object
-
#initialize(model_type, model_class, proc, depends_on) ⇒ Preloader
constructor
A new instance of Preloader.
- #preload! ⇒ Object
- #preloaded? ⇒ Boolean
- #remove! ⇒ Object
Constructor Details
#initialize(model_type, model_class, proc, depends_on) ⇒ Preloader
Returns a new instance of Preloader.
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/factory_data_preloader/preloader.rb', line 31 def initialize(model_type, model_class, proc, depends_on) model_class ||= model_type.to_s.pluralize.classify.constantize @model_type, @model_class, @proc, @depends_on = model_type, model_class, proc, [depends_on].compact.flatten AllPreloaders.instance << self DataMethods.class_eval do define_method model_type do |key| FactoryData.send(:get_record, model_type, key) end end end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
29 30 31 |
# File 'lib/factory_data_preloader/preloader.rb', line 29 def data @data end |
#depends_on ⇒ Object
Returns the value of attribute depends_on.
28 29 30 |
# File 'lib/factory_data_preloader/preloader.rb', line 28 def depends_on @depends_on end |
#model_class ⇒ Object
Returns the value of attribute model_class.
28 29 30 |
# File 'lib/factory_data_preloader/preloader.rb', line 28 def model_class @model_class end |
#model_type ⇒ Object
Returns the value of attribute model_type.
28 29 30 |
# File 'lib/factory_data_preloader/preloader.rb', line 28 def model_type @model_type end |
#proc ⇒ Object
Returns the value of attribute proc.
28 29 30 |
# File 'lib/factory_data_preloader/preloader.rb', line 28 def proc @proc end |
Instance Method Details
#all_dependencies ⇒ Object
67 68 69 |
# File 'lib/factory_data_preloader/preloader.rb', line 67 def all_dependencies (self.dependencies + (self.dependencies.collect { |d| d.all_dependencies }).flatten).uniq end |
#delete_table_data! ⇒ Object
56 57 58 59 60 61 |
# File 'lib/factory_data_preloader/preloader.rb', line 56 def delete_table_data! unless @table_data_deleted self.model_class.delete_all @table_data_deleted = true end end |
#dependencies ⇒ Object
63 64 65 |
# File 'lib/factory_data_preloader/preloader.rb', line 63 def dependencies self.depends_on.collect { |dependency| AllPreloaders.instance.from_symbol(dependency) } end |
#get_record(key) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/factory_data_preloader/preloader.rb', line 71 def get_record(key) unless self.preloaded? raise DefinedPreloaderNotRunError.new, "The :#{self.model_type} preloader has never been run. Did you forget to add the 'preload_factory_data :#{self.model_type}' declaration to your test case? You'll need this at the top of your test case class if you want to use the factory data defined by this preloader." end unless record_id_or_error = self.data[key] raise PreloadedRecordNotFound.new, "Could not find a preloaded record #{self.model_type} recore for :#{key}. Did you mispell :#{key}?" end if record_id_or_error.is_a?(Exception) raise ErrorWhilePreloadingRecord.new, "An error occurred while preloading #{self.model_type}(:#{key}): #{record_id_or_error.class.to_s}: #{record_id_or_error.}\n\nBacktrace:\n\n #{record_id_or_error.backtrace.join("\n ")}\n" end self.model_class.find_by_id(record_id_or_error) end |
#preload! ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/factory_data_preloader/preloader.rb', line 44 def preload! return if preloaded? @data = PreloadedDataHash.new(self) print "Preloading #{model_type}:" benchmark_measurement = Benchmark.measure { self.proc.try(:call, @data) } print "(#{format('%.3f', benchmark_measurement.real)} secs)\n" end |
#preloaded? ⇒ Boolean
52 53 54 |
# File 'lib/factory_data_preloader/preloader.rb', line 52 def preloaded? !@data.nil? end |
#remove! ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/factory_data_preloader/preloader.rb', line 87 def remove! preloader = self DataMethods.class_eval do remove_method(preloader.model_type) if method_defined?(preloader.model_type) end if @data self.model_class.delete_all(:id => @data.record_ids) @data = nil end AllPreloaders.instance.delete(self) end |