Class: Canopus::Command::Registry
- Inherits:
-
Object
- Object
- Canopus::Command::Registry
- Defined in:
- lib/canopus/command.rb,
sig/command.rbs
Instance Attribute Summary collapse
-
#version ⇒ Integer
readonly
Returns the value of attribute version.
Instance Method Summary collapse
- #call(id, *arguments, context: {}) ⇒ Object
- #each(context: nil) {|arg0| ... } ⇒ Object
- #entries(context: nil) ⇒ Hash[String, String]
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #register(definition, description: definition.to_s, category: definition.to_s.split(".", 2).first, condition: "", keybinding: nil) {|arg0| ... } ⇒ Object
- #resolve(id, context: {}) ⇒ Definition?
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.
57 58 59 |
# File 'lib/canopus/command.rb', line 57 def version @version end |
Instance Method Details
#call(id, *arguments, context: {}) ⇒ Object
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]
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]
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
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?
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 |