class Dragonfly::Configurable::Configurer

Attributes

obj[R]

Public Class Methods

new(&block) click to toggle source
# File lib/dragonfly/configurable.rb, line 44
def initialize(&block)
  (class << self; self; end).class_eval(&block)
end

Private Class Methods

extract_options(args) click to toggle source
# File lib/dragonfly/configurable.rb, line 38
def extract_options(args)
  opts = args.last.is_a?(Hash) ? args.pop : {}
  [args, opts]
end
meth(*args) click to toggle source
# File lib/dragonfly/configurable.rb, line 25
def meth(*args)
  names, opts = extract_options(args)
  names.each do |name|
    define_method name do |*args, &block|
      if opts[:for]
        obj.send(opts[:for]).send(name, *args, &block)
      else
        obj.send(name, *args, &block)
      end
    end
  end
end
writer(*args) click to toggle source
# File lib/dragonfly/configurable.rb, line 12
def writer(*args)
  names, opts = extract_options(args)
  names.each do |name|
    define_method name do |value|
      if opts[:for]
        obj.send(opts[:for]).send("#{name}=", value)
      else
        obj.send("#{name}=", value)
      end
    end
  end
end

Public Instance Methods

configure(obj, &block) click to toggle source
# File lib/dragonfly/configurable.rb, line 48
def configure(obj, &block)
  previous_obj = @obj
  @obj = obj
  instance_eval(&block)
  @obj = previous_obj
end
configure_with_plugin(obj, plugin, *args, &block) click to toggle source
# File lib/dragonfly/configurable.rb, line 55
def configure_with_plugin(obj, plugin, *args, &block)
  if plugin.is_a?(Symbol)
    symbol = plugin
    raise(UnregisteredPlugin, "plugin #{symbol.inspect} is not registered") unless registered_plugins[symbol]
    plugin = registered_plugins[symbol].call
    obj.plugins[symbol] = plugin if obj.respond_to?(:plugins)
  end
  plugin.call(obj, *args, &block)
  plugin
end
plugin(plugin, *args, &block) click to toggle source
# File lib/dragonfly/configurable.rb, line 70
def plugin(plugin, *args, &block)
  configure_with_plugin(obj, plugin, *args, &block)
end
register_plugin(name, &block) click to toggle source
# File lib/dragonfly/configurable.rb, line 66
def register_plugin(name, &block)
  registered_plugins[name] = block
end

Private Instance Methods

registered_plugins() click to toggle source
# File lib/dragonfly/configurable.rb, line 78
def registered_plugins
  @registered_plugins ||= {}
end