Module: MotionKit::BaseLayoutClassMethods

Included in:
BaseLayout
Defined in:
lib/motion-kit/helpers/base_layout_class_methods.rb

Instance Method Summary collapse

Instance Method Details

#layout_for(klass) ⇒ Object

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



25
26
27
28
# 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) ⇒ Object

Cache registered classes



31
32
33
34
35
36
37
38
39
40
41
# 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_klassesObject



4
5
6
7
8
# 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) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
# 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