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