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
search(path, context) { |path, context| ... }
click to toggle source
# File lib/dir_model/import.rb, line 63 def search(path, context) return unless block_given? dir_models = [] current_position = path.index path.rewind while !path.end? do path.read_path dir_models << yield(path, context) end path.set_position(current_position) dir_models.uniq.compact end