module Aspector::Base::ClassMethods

Public Instance Methods

advices() click to toggle source
# File lib/aspector/base_class_methods.rb, line 41
def advices
  @advices ||= []
end
apply(target, *rest) click to toggle source
# File lib/aspector/base_class_methods.rb, line 49
def apply target, *rest
  options = rest.last.is_a?(Hash) ? rest.pop : {}

  targets = rest.unshift target
  targets.map do |target|
    logger.info 'apply', target, options.inspect
    instance = new
    instance.send :apply, target, options
  end
end
default_options() click to toggle source
# File lib/aspector/base_class_methods.rb, line 45
def default_options
  @default_options ||= {}
end
disable() click to toggle source
# File lib/aspector/base_class_methods.rb, line 26
def disable
  logger.info 'disable-aspect'

  send :define_method, :disabled? do
    true
  end
end
enable() click to toggle source
# File lib/aspector/base_class_methods.rb, line 18
def enable
  logger.info 'enable-aspect'

  send :define_method, :disabled? do
    false
  end
end
logger() click to toggle source

if ENV is set, use it else try to load logem and use Logem::Logger else use built in logger

# File lib/aspector/base_class_methods.rb, line 37
def logger
  @logger ||= Logging.get_logger(self)
end

Private Instance Methods

_create_advice_(meta_data, klass_or_module, *methods, &block) click to toggle source
# File lib/aspector/base_class_methods.rb, line 83
def _create_advice_ meta_data, klass_or_module, *methods, &block
  methods.flatten!

  options = meta_data.default_options.clone
  options.merge!(methods.pop) if methods.last.is_a? Hash

  if meta_data.advice_type == Aspector::Advice::RAW
    raise "Bad raw advice - code block is required" unless block_given?
    with_method = nil
  else
    with_method = methods.pop unless block_given?
  end

  # Convert symbols to strings to avoid inconsistencies
  methods.size.times do |i|
    methods[i] = methods[i].to_s if methods[i].is_a? Symbol
  end

  methods << DeferredOption.new(:method) << DeferredOption.new(:methods) if methods.empty?

  Aspector::Advice.new(self,
                       meta_data.advice_type,
                       Aspector::MethodMatcher.new(*methods),
                       with_method,
                       options,
                       &block)
end
_deferred_logics_() click to toggle source
# File lib/aspector/base_class_methods.rb, line 79
def _deferred_logics_
  @deferred_logics ||= []
end
default(options) click to toggle source
# File lib/aspector/base_class_methods.rb, line 62
def default options
  @default_options ||= {}
  @default_options.merge!(options)
end
options() click to toggle source
# File lib/aspector/base_class_methods.rb, line 75
def options
  DeferredOption.new
end
target(code = nil, &block) click to toggle source
# File lib/aspector/base_class_methods.rb, line 67
def target code = nil, &block
  raise ArgumentError.new('No code or block is passed.') unless code or block_given?

  logic = DeferredLogic.new(code || block)
  _deferred_logics_ << logic
  logic
end