Class: CMDx::Deprecators

Inherits:
Object
  • Object
show all
Defined in:
lib/cmdx/deprecators.rb,
lib/cmdx/deprecators/log.rb,
lib/cmdx/deprecators/warn.rb,
lib/cmdx/deprecators/error.rb

Overview

Registry of named deprecation actions consulted by ‘Deprecation#execute` to dispatch a task class’s deprecation. Ships with built-ins for ‘:log`, `:warn`, and `:error`. A deprecator is any callable accepting `call(task)`; the return value is discarded.

Defined Under Namespace

Modules: Error, Log, Warn

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDeprecators

Returns a new instance of Deprecators.



12
13
14
15
16
17
18
# File 'lib/cmdx/deprecators.rb', line 12

def initialize
  @registry = {
    log: Deprecators::Log,
    warn: Deprecators::Warn,
    error: Deprecators::Error
  }
end

Instance Attribute Details

#registryObject (readonly)

Returns the value of attribute registry.



10
11
12
# File 'lib/cmdx/deprecators.rb', line 10

def registry
  @registry
end

Instance Method Details

#deregister(name) ⇒ Deprecators

Returns self for chaining.

Parameters:

  • name (Symbol)

Returns:



50
51
52
53
# File 'lib/cmdx/deprecators.rb', line 50

def deregister(name)
  registry.delete(name.to_sym)
  self
end

#empty?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/cmdx/deprecators.rb', line 91

def empty?
  registry.empty?
end

#initialize_copy(source) ⇒ void

This method returns an undefined value.

Parameters:



22
23
24
# File 'lib/cmdx/deprecators.rb', line 22

def initialize_copy(source)
  @registry = source.registry.dup
end

#key?(name) ⇒ Boolean

Returns whether a deprecator is registered under ‘name`.

Parameters:

  • name (Symbol)

Returns:

  • (Boolean)

    whether a deprecator is registered under ‘name`



57
58
59
# File 'lib/cmdx/deprecators.rb', line 57

def key?(name)
  registry.key?(name.to_sym)
end

#lookup(name) ⇒ #call

Returns the registered deprecator.

Parameters:

  • name (Symbol)

Returns:

  • (#call)

    the registered deprecator

Raises:

  • (ArgumentError)

    when ‘name` isn’t registered



64
65
66
67
68
# File 'lib/cmdx/deprecators.rb', line 64

def lookup(name)
  registry[name] || begin
    raise ArgumentError, "unknown deprecator: #{name.inspect}"
  end
end

#register(name, callable = nil, &block) { ... } ⇒ Deprecators

Registers a named deprecator, overwriting any existing entry.

Parameters:

  • name (Symbol)
  • callable (#call, nil) (defaults to: nil)

    pass either this or a block

  • block (#call, nil)

    deprecator callable when ‘callable` is omitted

Yields:

  • deprecator body — ‘call(task)`

Returns:

Raises:

  • (ArgumentError)

    when both ‘callable` and a block are given, or when the resolved deprecator isn’t callable



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/cmdx/deprecators.rb', line 35

def register(name, callable = nil, &block)
  deprecator = callable || block

  if callable && block
    raise ArgumentError, "provide either a callable or a block, not both"
  elsif !deprecator.respond_to?(:call)
    raise ArgumentError, "deprecator must respond to #call"
  end

  registry[name.to_sym] = deprecator
  self
end

#resolve(spec) ⇒ #call?

Resolves a ‘deprecation` declaration’s value to a concrete callable. Accepts a Symbol (registry lookup) or any object responding to ‘#call`. `nil` resolves to `nil` so callers can short-circuit.

Parameters:

  • spec (Symbol, #call, nil)

Returns:

  • (#call, nil)

Raises:

  • (ArgumentError)

    when ‘spec` is an unknown symbol or not callable



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/cmdx/deprecators.rb', line 77

def resolve(spec)
  case spec
  when NilClass
    nil
  when Symbol
    lookup(spec)
  else
    return spec if spec.respond_to?(:call)

    raise ArgumentError, "unknown deprecator: #{spec.inspect}"
  end
end

#sizeInteger

Returns:

  • (Integer)


96
97
98
# File 'lib/cmdx/deprecators.rb', line 96

def size
  registry.size
end