module Shaf::Profile::UniqueId
Public Instance Methods
__pending_id?()
click to toggle source
# File lib/shaf/profile/unique_id.rb, line 11 def __pending_id? @__pending_id ||= false end
id()
click to toggle source
# File lib/shaf/profile/unique_id.rb, line 6 def id return @id if defined? @id @id = __find_unique_id end
Private Instance Methods
__find_unique_id()
click to toggle source
# File lib/shaf/profile/unique_id.rb, line 17 def __find_unique_id @__pending_id = true return name.to_s unless __id_collision? name.to_s id = [parent.name, name].join('_') return id unless __id_collision? id id = "#{id}0" loop do id = id.next break id unless __id_collision? id end ensure @__pending_id = false end
__id_collision?(id)
click to toggle source
# File lib/shaf/profile/unique_id.rb, line 35 def __id_collision? id descriptor = self loop do break false unless descriptor.respond_to?(:parent) && descriptor.parent descriptor = descriptor.parent __parent_descriptors(descriptor).each do |desc| next if desc == self next if desc.__pending_id? return true if desc.id == id end end end
__parent_descriptors(parent)
click to toggle source
# File lib/shaf/profile/unique_id.rb, line 50 def __parent_descriptors(parent) descriptors = [] descriptors += parent.attributes if parent.respond_to? :attributes descriptors += parent.relations if parent.respond_to? :relations descriptors end