Module: Ramaze::Helper::Gestalt

Defined in:
lib/ramaze/helper/gestalt.rb

Constant Summary collapse

CACHE_G =
{}

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object



39
40
41
42
# File 'lib/ramaze/helper/gestalt.rb', line 39

def method_missing(sym, *args, &block)
  @gestalt ||= gestalt
  @gestalt.send(sym, *args, &block)
end

Instance Method Details

#build(&block) ⇒ Object



12
13
14
# File 'lib/ramaze/helper/gestalt.rb', line 12

def build(&block)
  Ramaze::Gestalt.build(&block)
end

#g(meth = nil, view = nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ramaze/helper/gestalt.rb', line 16

def g(meth = nil, view = nil)
  meth ||= caller[0].slice(/`(.*)'?/).gsub(/[\`\']/, '')
  view_name = (self.class.to_s.sub('Controller', '') + 'View').split('::')
  view ||= view_name.inject(Object){ |ns, name| ns.const_get(name) }

  gestalt_class = CACHE_G[view] ||= g_class
  gestalt = gestalt_class.new
  gestalt.extend(view)
  instance_variables.each do |iv|
    gestalt.instance_variable_set(iv, instance_variable_get(iv))
  end
  gestalt.__send__(meth)
  gestalt.to_s
end

#g_classObject



31
32
33
34
35
36
37
# File 'lib/ramaze/helper/gestalt.rb', line 31

def g_class
  ancs = self.class.ancestors
  helpers = Ramaze::Helper.constants.map{ |c| Ramaze::Helper.const_get(c)}
  our_helpers = ancs & helpers
  our_helpers.delete(Ramaze::Helper::Gestalt)
  gestalt_class = Class.new(Ramaze::Gestalt){ include(*our_helpers) }
end

#gestalt(&block) ⇒ Object



8
9
10
# File 'lib/ramaze/helper/gestalt.rb', line 8

def gestalt(&block)
  Ramaze::Gestalt.new(&block)
end