module DirModel::Import::ClassMethods

Public Instance Methods

next(path, context={}, previous=nil) click to toggle source
# File lib/dir_model/import.rb, line 28
def next(path, context={}, previous=nil)
  return if path.end?

  path.read_path
  dir_model = new(path.current_path, index: path.index, context: context, previous: previous)
  find_relations(dir_model, path, context) unless dir_model.skip?

  dir_model
end

Private Instance Methods

find_relations(dir_model, path, context) click to toggle source
# File lib/dir_model/import.rb, line 40
def find_relations(dir_model, path, context)
  if dir_model.has_relations?
    if dir_model.has_one?
      child = search(path, context) do |_path, _context|
        related_dir_model = nil
        dir_model.has_one.each do |name, options|
          related_dir_model = dir_model.append_dir_model(_path.current_path, index: _path.index, context: _context, relation_name: name, relation_options: options)
        end
        related_dir_model
      end.first
      # Recursive call on children
      find_relations(child, path, context) if child
    end
    if dir_model.has_many?
      children = search(path, context) do |_path, _context|
        dir_model.append_dir_models(_path.current_path, index: _path.index, context: _context)
      end
      # Recursive call on children
      children.each { |_child| find_relations(_child, path, context) }
    end
  end
end