class DbToFile::Uploader

Public Instance Methods

force_changed() click to toggle source
# File lib/db_to_file/uploader.rb, line 17
def force_changed
  write_changed_objects_to_db
end
force_upload() click to toggle source
# File lib/db_to_file/uploader.rb, line 13
def force_upload
  write_objects_to_db
end
upload(commit_message) click to toggle source
# File lib/db_to_file/uploader.rb, line 3
def upload(commit_message)
  if can_continue?
    invoke_unloader
  end
  if can_continue?
    write_objects_to_db
    update_code_version(commit_message)
  end
end

Private Instance Methods

build_objects(changed_only = false) click to toggle source
# File lib/db_to_file/uploader.rb, line 54
def build_objects(changed_only = false)
  objects = []
  files = changed_only ? (version_controller.get_modified_file_list & read_files) : read_files
  files.each do |model_field_file|
    data_segments = extract_data_segments(model_field_file)
    model = data_segments[:model]
    # find existing object
    object = objects.detect do |existing_object|
      existing_object.class == model && existing_object.id == data_segments[:id]
    end
    # build new object
    unless object
      object = model.find_by_id(data_segments[:id]) || model.new(id: data_segments[:id])
      objects << object
    end
    # set field-value to model
    update_object_with_field_value(object, data_segments[:field], model_field_file)
  end

  objects
end
can_continue?() click to toggle source
# File lib/db_to_file/uploader.rb, line 26
def can_continue?
  !merge_conflicts_present?
end
changed_objects() click to toggle source
# File lib/db_to_file/uploader.rb, line 50
def changed_objects
  @changed_objects ||= build_objects(true)
end
extract_data_segments(model_field_file) click to toggle source
# File lib/db_to_file/uploader.rb, line 85
def extract_data_segments(model_field_file)
  matches = model_field_file.split('/').last(3)

  {
      model: matches[0].singularize.classify.constantize,
      id:    matches[1].split('_').last.to_i,
      field: strip_extension(matches[2])
  }
end
file_value(model_field_file) click to toggle source
# File lib/db_to_file/uploader.rb, line 81
def file_value(model_field_file)
  File.read(model_field_file)
end
files_in_dir(folder) click to toggle source
# File lib/db_to_file/uploader.rb, line 99
def files_in_dir(folder)
  files = Dir.entries(folder)

  found_files = []
  files.each do |file|
    full_file = File.join([folder, file])
    if File.directory?(full_file) && file[0] != '.'
      subdir = File.join(folder, file)
      files_in_dir(subdir).each do |subdirfile|
        found_files << subdirfile
      end
    end
    if File.file?(full_file)
      found_files << full_file
    end
  end

  found_files
end
invoke_unloader() click to toggle source
# File lib/db_to_file/uploader.rb, line 22
def invoke_unloader
  Unloader.new.unload
end
merge_conflicts_present?() click to toggle source
# File lib/db_to_file/uploader.rb, line 30
def merge_conflicts_present?
  version_controller.merge_conflicts_present?
end
objects() click to toggle source
# File lib/db_to_file/uploader.rb, line 46
def objects
  @objects ||= build_objects
end
read_files() click to toggle source
# File lib/db_to_file/uploader.rb, line 95
def read_files
  files_in_dir(File.join('db', 'db_to_file'))
end
strip_extension(file_with_extension) click to toggle source
# File lib/db_to_file/uploader.rb, line 124
def strip_extension(file_with_extension)
  file_with_extension.split('.')[0]
end
update_code_version(commit_message) click to toggle source
# File lib/db_to_file/uploader.rb, line 42
def update_code_version(commit_message)
  version_controller.update_code_version(commit_message)
end
update_object_with_field_value(object, field, model_field_file) click to toggle source
# File lib/db_to_file/uploader.rb, line 76
def update_object_with_field_value(object, field, model_field_file)
  value = file_value(model_field_file)
  DbToFile::ValuesNormalizer::ValueIntoObject.new(object).normalize(field, value)
end
version_controller() click to toggle source
# File lib/db_to_file/uploader.rb, line 119
def version_controller
  @version_controller ||= VersionController.new
end
write_changed_objects_to_db() click to toggle source
# File lib/db_to_file/uploader.rb, line 38
def write_changed_objects_to_db
  changed_objects.each(&:save!)
end
write_objects_to_db() click to toggle source
# File lib/db_to_file/uploader.rb, line 34
def write_objects_to_db
  objects.each(&:save!)
end