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