module ESA::Traits::Extendable

Public Class Methods

accountable_name(extension=self) click to toggle source
# File app/models/esa/traits/extendable.rb, line 70
def self.accountable_name(extension=self)
  registered_keys_for(extension).find{|k| k.is_a? String}
end
extension_class(accountable) click to toggle source
# File app/models/esa/traits/extendable.rb, line 50
def self.extension_class(accountable)
  if extension_name(accountable).present?
    extension_name(accountable).constantize
  else
    nil
  end
end
extension_instance(accountable) click to toggle source
# File app/models/esa/traits/extendable.rb, line 58
def self.extension_instance(accountable)
  if extension_class(accountable).present?
    extension_class(accountable).instance_for(accountable)
  else
    nil
  end
end
extension_name(accountable) click to toggle source
# File app/models/esa/traits/extendable.rb, line 36
def self.extension_name(accountable)
  if accountable.is_a? Class
    if accountable.respond_to? :accountable_name
      lookup_extension(accountable.accountable_name)
    else
      lookup_extension(accountable.name)
    end
  elsif accountable.is_a? Object and not accountable.is_a? String
    extension_name(accountable.class)
  else
    lookup_extension(accountable)
  end
end
instance_for(accountable) click to toggle source
# File app/models/esa/traits/extendable.rb, line 66
def self.instance_for(accountable)
  self.first_or_create
end
list_extensions() click to toggle source
# File app/models/esa/traits/extendable.rb, line 84
def self.list_extensions
  self.esa_extensions.each do |accountable, extension|
    puts "#{accountable} --> #{extension}"
  end
  nil
end
lookup_extension(name) click to toggle source
# File app/models/esa/traits/extendable.rb, line 14
def self.lookup_extension(name)
  if self.esa_extensions.present?
    matches = self.esa_extensions.map do |expr,extension|
      if expr.is_a? Regexp and expr.match(name).present?
        extension
      elsif expr.is_a? String and expr == name
        extension
      else
        nil
      end
    end.compact

    if matches.present?
      matches.first
    else
      nil
    end
  else
    self.name
  end
end
register_extension(expression, extension) click to toggle source
# File app/models/esa/traits/extendable.rb, line 10
def self.register_extension(expression, extension)
  self.esa_extensions[expression] = extension
end
registered_keys_for(extension=self) click to toggle source
# File app/models/esa/traits/extendable.rb, line 74
def self.registered_keys_for(extension=self)
  if extension.is_a? Class
    self.esa_extensions.select{|k,v| v == extension.name}.keys
  elsif extension.is_a? Object and not extension.is_a? String
    registered_keys_for(extension.class)
  else
    self.esa_extensions.select{|k,v| v == extension}.keys
  end
end