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