module MotionKit::BaseLayoutClassMethods

Public Instance Methods

layout_for(klass) click to toggle source

Instantiates a new Layout instance using `layout` as the root-level layout

# File lib/motion-kit/helpers/base_layout_class_methods.rb, line 25
def layout_for(klass)
  memoized_klass = memoize(klass)
  memoized_klass && memoized_klass.new
end
memoize(klass) click to toggle source

Cache registered classes

# File lib/motion-kit/helpers/base_layout_class_methods.rb, line 31
def memoize(klass)
  @memoize ||= {}
  @memoize[klass] ||= begin
    while klass
      break if registered_class = target_klasses[klass]
      klass = klass.superclass
    end
    @memoize[klass] = registered_class if registered_class
  end
  @memoize[klass]
end
target_klasses() click to toggle source
# File lib/motion-kit/helpers/base_layout_class_methods.rb, line 4
def target_klasses
  # We don't want subclasses, just BaseLayout
  return BaseLayout.target_klasses unless self == BaseLayout
  @target_klasses ||= {}
end
targets(klass=nil) click to toggle source
# File lib/motion-kit/helpers/base_layout_class_methods.rb, line 10
def targets(klass=nil)
  return nil if klass.nil? && self == BaseLayout
  return @targets || superclass.targets if klass.nil?
  @targets = klass

  if BaseLayout.target_klasses.key?(klass) && BaseLayout.target_klasses[klass] != self
    NSLog('WARNING!  The class “%@” was registered with the layout class “%@”',
      klass, BaseLayout.target_klasses[klass])
  end
  BaseLayout.target_klasses[klass] = self

  nil
end