Module: Sublet::PathResolver
- Defined in:
- lib/sublet/path_resolver.rb
Class Method Summary collapse
-
.resolve_path_to_tenant(klass) ⇒ Object
Walk from
klassfollowing declared subletter parents until we find a tenant root (klass._sublet_is_tenant == true).
Class Method Details
.resolve_path_to_tenant(klass) ⇒ Object
Walk from klass following declared subletter parents until
we find a tenant root (klass._sublet_is_tenant == true).
Returns an array of association names (symbols), e.g. [:department, :company]
or [] if klass itself is the tenant root.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/sublet/path_resolver.rb', line 11 def resolve_path_to_tenant(klass) path = [] current = klass # prevent infinite loops seen = {} until current.nil? || current._sublet_is_tenant return nil unless current.respond_to?(:_subletter_parent) # nothing declared parent_assoc = current._subletter_parent return nil if parent_assoc.nil? return nil if seen[current] # cycle detected seen[current] = true path << parent_assoc # Follow reflection to next klass refl = current.reflect_on_association(parent_assoc) return nil unless refl current = refl.klass end current&._sublet_is_tenant ? path : nil end |