class Eql::Proxy

Proxy class proxies adapaters helpers and params to a template

Public Class Methods

generate(adapter) click to toggle source

Generate a proxy class for given adapter

@param [Eql::Adapters::Base] adapter

@return [Eql::Proxy] returns generated class

# File lib/eql/proxy.rb, line 74
def generate(adapter)
  generated[adapter.class] ||= begin
    helpers = AdapterFactory.adapter_helpers(adapter)
    Class.new(self) do
      helpers.each { |h| include h }
    end
  end
end
generated() click to toggle source

Cached generated proxy classes

@return [Hash{Symbol => Eql::Proxy}]

# File lib/eql/proxy.rb, line 63
def generated
  @generated ||= {}
end
new(builder, params = nil) click to toggle source

@param [Eql::Builder] builder @param [Object] params template's params to proxy

# File lib/eql/proxy.rb, line 10
def initialize(builder, params = nil)
  @builder = builder
  @params = params
  if @params.is_a?(Hash)
    @params = params.keys.each_with_object({}) do |key, ret|
      ret[key.respond_to?(:to_sym) ? key.to_sym : key] = params[key]
    end
  end
end

Public Instance Methods

get_binding() click to toggle source

Get proxy binding

@return [Binding]

# File lib/eql/proxy.rb, line 50
def get_binding
  # binding.name  # => :binding
  # if we have variable with the 'name' name we need to make a closure
  name = send(:name) if respond_to?(:name)
  binding
end
method_missing(name, *args, &block) click to toggle source
# File lib/eql/proxy.rb, line 34
def method_missing(name, *args, &block)
  return @params[name] if @params.is_a?(Hash) && @params.key?(name)
  @params.send(name, *args, &block)
end
render(tmpl, params = @params) click to toggle source

Render partial template

@param [String] tmpl partial's name @param [Object] params template's params

@return [String] returns rendered template

# File lib/eql/proxy.rb, line 28
def render(tmpl, params = @params)
  b = @builder.clone
  b.load(tmpl, params)
  b.render
end
respond_to_missing?(name, *) click to toggle source
Calls superclass method
# File lib/eql/proxy.rb, line 39
def respond_to_missing?(name, *)
  @params.is_a?(Hash) && @params.key?(name) ||
    @params.respond_to?(name) ||
    super
end