class Medicine::Dependency

Attributes

name[R]

Public Class Methods

new(name, options = {}) click to toggle source
# File lib/medicine/dependency.rb, line 8
def initialize(name, options = {})
  @name    = name
  @default = options.fetch(:default, NoDefault)
end

Public Instance Methods

default() { || ... } click to toggle source

returns the default, yields block or raises an error

FIXME: move block yielding to default_or method.

# File lib/medicine/dependency.rb, line 20
def default
  if default?
    typecast(@default)
  else
    if block_given?
      yield
    else
      raise NoDefaultError, "No default declared for #{name}"
    end
  end
end
default?() click to toggle source
# File lib/medicine/dependency.rb, line 32
def default?
  !required?
end
method_name() click to toggle source
# File lib/medicine/dependency.rb, line 13
def method_name
  name
end
required?() click to toggle source
# File lib/medicine/dependency.rb, line 36
def required?
  @default == NoDefault
end

Private Instance Methods

typecast(dependency) click to toggle source
# File lib/medicine/dependency.rb, line 42
def typecast(dependency)
  case dependency.class.name
  when 'String' then
    Inflecto.constantize(Inflecto.camelize(dependency))
  when 'Symbol' then
    typecast(dependency.to_s)
  when 'Proc' then
    dependency.call
  else
    dependency
  end
end