module Calibrate::Configurable::DirectoryStructure::ClassMethods

Constants

RequiredField

Attributes

path_heirarchy[W]

Public Instance Methods

dir(field_name, *args) click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 76
def dir(field_name, *args)
  rel_path = RequiredField
  if String === args.first
    rel_path = args.shift
  end
  parent_field = path(field_name, rel_path)

  self.path_heirarchy += args.map do |child_field|
    [parent_field, child_field]
  end
  return parent_field
end
path(field_name, rel_path=RequiredField) click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 89
def path(field_name, rel_path=RequiredField)
  field = setting(field_name, StructurePath.new(rel_path))
  root_paths << field
  path_fields << field
  return field
end
path_fields() click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 72
def path_fields
  @path_fields ||= []
end
path_heirarchy() click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 67
def path_heirarchy
  @path_heirarchy ||= []
end
resolve_path_on(instance, parent, child_field, missing_relatives) click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 96
def resolve_path_on(instance, parent, child_field, missing_relatives)
  child = child_field.value_on(instance)
  return unless child.field_unset?(:absolute_path)
  if child.field_unset?(:relative_path)
    missing_relatives << child_field
    return
  end
  child.absolute_path = File::join(parent.absolute_path, child.relative_path)
end
resolve_paths_on(instance) click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 106
def resolve_paths_on(instance)
  superclass_exception = nil
  if superclass < DirectoryStructure
    begin
    superclass.resolve_paths_on(instance)
    rescue MissingRelativePaths => mrp
      superclass_exception = mrp
    end
  end
  missing_relatives = []

  (root_paths - path_heirarchy.map{|_, child| child }).each do |field|
    resolve_path_on(instance, instance, field, missing_relatives)
  end

  path_heirarchy.reverse.each do |parent_field, child_field|
    next if missing_relatives.include?(parent_field)
    parent = parent_field.value_on(instance)
    resolve_path_on(instance, parent, child_field, missing_relatives)
  end

  case [missing_relatives.empty?, superclass_exception.nil?]
  when [true, false]
    raise superclass_exception
  when [false, true]
    raise MissingRelativePaths, "Required field#{missing_relatives.length == 1 ? "" : "s"} #{missing_relatives.map{|field| "#{field.name}.relative_path".inspect}.join(", ")} unset on #{self.inspect}"
  when [false, false]
    raise MissingRelativePaths, "Required field#{missing_relatives.length == 1 ? "" : "s"} #{missing_relatives.map{|field| "#{field.name}.relative_path".inspect}.join(", ")} unset on #{self.inspect}" + "\n" + superclass_exception.message
  end

  path_fields.each do |field|
    value = field.value_on(instance)
    next unless value.field_unset?(:relative_path)
    value.relative_path = value.absolute_path
  end
end
root_paths() click to toggle source
# File lib/calibrate/configurable/directory-structure.rb, line 63
def root_paths
  @root_paths ||= []
end