module Duckery

Public Class Methods

config() { |configuration| ... } click to toggle source
# File lib/duckery.rb, line 36
def self.config
  yield(configuration) if block_given?
end
configuration() click to toggle source
# File lib/duckery.rb, line 27
def self.configuration
  @configuration ||= Duckery::Configuration.new
end
prepended(base) click to toggle source
Calls superclass method
# File lib/duckery.rb, line 7
def self.prepended(base)
  overiden_classes_module =
    Module.new do
      Duckery.configuration.variants.each do |variant|
        Duckery.statistic[base.name] ||= { variants: [] }

        # Lookup on self and ancestor for method `variant`
        next unless base.methods.include?(variant)

        define_method variant do |*args|
          Duckery.statistic[base.name][:variants].push(variant) # Roll call

          super(*args)
        end
      end
    end

  base.singleton_class.prepend(overiden_classes_module)
end
reset_configuration() click to toggle source
# File lib/duckery.rb, line 40
def self.reset_configuration
  @configuration = Duckery::Configuration.new
end
statistic() click to toggle source
# File lib/duckery.rb, line 44
def self.statistic
  @statistic ||= {}
end
variants() click to toggle source

TODO: convert to symbols

# File lib/duckery.rb, line 32
def self.variants
  configuration.variants
end