module Lolita::Extensions
This module provides functionality for extension machinery in Lolita
. It loads proxies on demand.
Constants
- EXTENSIONS
Public Class Methods
add(type)
click to toggle source
# File lib/lolita/extensions/extensions.rb, line 41 def self.add type EXTENSIONS << type unless EXTENSIONS.include?(type) end
Public Instance Methods
load_extension_proxy(type,context=self,options={})
click to toggle source
# File lib/lolita/extensions/extensions.rb, line 29 def load_extension_proxy type,context=self,options={} proxy_class = "Lolita::Extensions::#{type.to_s.camelize}::Proxy".constantize initialize_arity = proxy_class.instance_method(:initialize).arity __extensions_proxies[type] = if initialize_arity < 0 || initialize_arity > 1 proxy_class.new(context,options) elsif initialize_arity == 0 proxy_class.new else proxy_class.new(context) end end
load_extensions_proxies(context=self, options={})
click to toggle source
# File lib/lolita/extensions/extensions.rb, line 23 def load_extensions_proxies(context=self, options={}) EXTENSIONS.each do |type| load_extension_proxy(type,context,options) end end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/lolita/extensions/extensions.rb, line 6 def method_missing method_name, *args, &block if method_name[/_proxy$/] type = method_name.to_s.sub(/_proxy$/,"") self.class_eval <<-EXTENSION,__FILE__,__LINE__+1 def #{method_name}(*args,&block) unless __extensions_proxies[:#{type}] load_extension_proxy(:#{type},self,__proxy_options_from_context) end __extensions_proxies[:#{type}] end EXTENSION send(method_name) else super end end
Private Instance Methods
__extensions_proxies()
click to toggle source
# File lib/lolita/extensions/extensions.rb, line 55 def __extensions_proxies @proxies ||= {} end
__proxy_options_from_context()
click to toggle source
# File lib/lolita/extensions/extensions.rb, line 47 def __proxy_options_from_context if defined?(::ActionController::Base) && self.is_a?(::ActionController::Base) {:controller => self, :request => request} elsif defined?(::ActionView::Base) && self.is_a?(::ActionView::Base) {:request => request} end end