Class: Tush::Importer
- Inherits:
-
Object
- Object
- Tush::Importer
- Defined in:
- lib/tush/importer.rb
Overview
This class takes in a tush export and imports it into ActiveRecord.
Defined Under Namespace
Classes: InvalidWrapperError, NonUniqueWrapperError
Instance Attribute Summary collapse
-
#data ⇒ Object
Returns the value of attribute data.
-
#imported_model_wrappers ⇒ Object
Returns the value of attribute imported_model_wrappers.
-
#model_to_attribute_blacklist ⇒ Object
Returns the value of attribute model_to_attribute_blacklist.
Class Method Summary collapse
Instance Method Summary collapse
- #create_models! ⇒ Object
- #find_wrapper_by_class_and_old_id(klass, old_id) ⇒ Object
-
#initialize(exported_data) ⇒ Importer
constructor
A new instance of Importer.
-
#update_foreign_keys! ⇒ Object
This method updates stale foreign keys after the new models have been created.
Constructor Details
#initialize(exported_data) ⇒ Importer
Returns a new instance of Importer.
16 17 18 19 20 |
# File 'lib/tush/importer.rb', line 16 def initialize(exported_data) self.data = exported_data self.imported_model_wrappers = [] self.model_to_attribute_blacklist = {} end |
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
12 13 14 |
# File 'lib/tush/importer.rb', line 12 def data @data end |
#imported_model_wrappers ⇒ Object
Returns the value of attribute imported_model_wrappers.
12 13 14 |
# File 'lib/tush/importer.rb', line 12 def imported_model_wrappers @imported_model_wrappers end |
#model_to_attribute_blacklist ⇒ Object
Returns the value of attribute model_to_attribute_blacklist.
12 13 14 |
# File 'lib/tush/importer.rb', line 12 def model_to_attribute_blacklist @model_to_attribute_blacklist end |
Class Method Details
.new_from_json(unparsed_json) ⇒ Object
27 28 29 |
# File 'lib/tush/importer.rb', line 27 def self.new_from_json(unparsed_json) self.new(JSON.parse(unparsed_json)) end |
.new_from_json_file(json_path) ⇒ Object
22 23 24 25 |
# File 'lib/tush/importer.rb', line 22 def self.new_from_json_file(json_path) unparsed_json = File.read(json_path) self.new(JSON.parse(unparsed_json)) end |
Instance Method Details
#create_models! ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/tush/importer.rb', line 31 def create_models! model_wrappers = self.data["model_wrappers"] model_wrappers.each do |model_wrapper| model_class = model_wrapper["model_class"].constantize imported_model_wrapper = ModelWrapper.new(:model_class => model_class.to_s, :model_attributes => model_wrapper["model_attributes"], :blacklisted_attributes => self.model_to_attribute_blacklist[model_class]) imported_model_wrapper.create_copy self.imported_model_wrappers << imported_model_wrapper end end |
#find_wrapper_by_class_and_old_id(klass, old_id) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/tush/importer.rb', line 47 def find_wrapper_by_class_and_old_id(klass, old_id) wrappers = self.imported_model_wrappers.select do |wrapper| (wrapper.model_class == klass) and (wrapper.original_db_id == old_id) end wrappers[0] end |
#update_foreign_keys! ⇒ Object
This method updates stale foreign keys after the new models have been created.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/tush/importer.rb', line 56 def update_foreign_keys! models = self.imported_model_wrappers.map { |wrapper| wrapper.model_class } model_to_foreign_keys = AssociationHelpers.create_foreign_key_mapping(models) imported_model_wrappers.each do |wrapper| foreign_keys = model_to_foreign_keys[wrapper.model_class] foreign_keys.each do |foreign_key_info| match = self.find_wrapper_by_class_and_old_id(foreign_key_info[:class], wrapper.model_attributes[foreign_key_info[:foreign_key]]) if match new_id = match.new_model.send(match.original_db_key) else # If we don't have a model wrapper (like in the case of a copy only model), # remove the id new_id = nil end ActiveRecord::Base.transaction(:requires_new => true) do begin wrapper.new_model.update_column(foreign_key_info[:foreign_key], new_id) # If the column has a not null restraint, keep the original value rescue ActiveRecord::StatementInvalid raise ActiveRecord::Rollback end wrapper.new_model_attributes[foreign_key_info[:foreign_key]] = new_id end end end end |