Class: Canopus::Command::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/canopus/command.rb,
sig/command.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Registry

Returns a new instance of Registry.



59
60
61
# File 'lib/canopus/command.rb', line 59

def initialize
  @definitions, @predicates, @version = {}, {}, 0
end

Instance Attribute Details

#version ⇒ Integer (readonly)

Returns the value of attribute version.

Returns:

  • (Integer)


57
58
59
# File 'lib/canopus/command.rb', line 57

def version
  @version
end

Instance Method Details

#call(id, *arguments, context: {}) ⇒ Object

Parameters:

  • id (String, Symbol)
  • arguments (Object)
  • context: (context) (defaults to: {})

Returns:

  • (Object)

Raises:

  • (KeyError)


80
81
82
83
84
# File 'lib/canopus/command.rb', line 80

def call(id, *arguments, context: {})
  definition = resolve(id, context: context)
  raise KeyError, "command unavailable: #{id}" unless definition
  definition.run.call(*arguments)
end

#each(context:) ⇒ self #each(context:) ⇒ Enumerator[Definition, self]

Overloads:

  • #each(context:) ⇒ self

    Parameters:

    • context: (context, nil)

    Returns:

    • (self)
  • #each(context:) ⇒ Enumerator[Definition, self]

    Parameters:

    • context: (context, nil)

    Returns:

Yields:

Yield Parameters:

Yield Returns:

  • (Object)


86
87
88
89
90
# File 'lib/canopus/command.rb', line 86

def each(context: nil)
  return enum_for(__method__, context: context) unless block_given?
  @definitions.each_value { |definition| yield definition if context.nil? || resolve(definition.id, context: context) }
  self
end

#entries(context: nil) ⇒ Hash[String, String]

Parameters:

  • context: (context, nil) (defaults to: nil)

Returns:

  • (Hash[String, String])


92
# File 'lib/canopus/command.rb', line 92

def entries(context: nil) = each(context: context).to_h { |definition| [definition.id, definition.title] }.freeze

#register(definition) ⇒ Definition #register(id, description:, category:, condition:, keybinding:) ⇒ Definition

Overloads:

  • #register(definition) ⇒ Definition

    Parameters:

    Returns:

  • #register(id, description:, category:, condition:, keybinding:) ⇒ Definition

    Parameters:

    • id (String)
    • description: (String)
    • category: (String)
    • condition: (String)
    • keybinding: (keybinding)

    Returns:

Yields:

Yield Parameters:

  • arg0 (Object)

Yield Returns:

  • (Object)


63
64
65
66
67
68
69
70
71
72
# File 'lib/canopus/command.rb', line 63

def register(definition, description: definition.to_s, category: definition.to_s.split(".", 2).first,
  condition: "", keybinding: nil, &run)
  definition = Definition.new(definition.to_s, description, category, condition, run, keybinding) unless definition.is_a?(Definition)
  definition = normalize(definition)
  predicate = Zaniah::Input::ContextPredicate.new(definition.when)
  @definitions[definition.id] = definition
  @predicates[definition.id] = predicate
  @version += 1
  definition
end

#resolve(id, context: {}) ⇒ Definition?

Parameters:

  • id (String, Symbol)
  • context: (context) (defaults to: {})

Returns:



74
75
76
77
78
# File 'lib/canopus/command.rb', line 74

def resolve(id, context: {})
  id = id.to_s
  definition = @definitions[id]
  definition if definition && @predicates.fetch(id).call(context)
end