Class: Vedeu::Keymap

Inherits:
Object
  • Object
show all
Includes:
Model
Defined in:
lib/vedeu/input/keymap.rb

Overview

A container class for keys associated with a particular interface.

Instance Attribute Summary collapse

Attributes included from Model

#repository

Instance Method Summary collapse

Methods included from Model

#demodulize, #deputy, #dsl_class, included, #store

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Keymap

Returns a new instance of Vedeu::Keymap.

Parameters:

  • attributes (Hash) (defaults to: {})

Options Hash (attributes):

  • name (String)

    The name of the keymap.

  • keys (Vedeu::Keys|Array)

    A collection of keys.

  • repository (Vedeu::Repository)

    This model’s storage.



24
25
26
27
28
29
30
# File 'lib/vedeu/input/keymap.rb', line 24

def initialize(attributes = {})
  @attributes = defaults.merge!(attributes)

  @attributes.each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

Instance Attribute Details

#nameString

Returns:

  • (String)


15
16
17
# File 'lib/vedeu/input/keymap.rb', line 15

def name
  @name
end

Instance Method Details

#add(key) ⇒ void

This method returns an undefined value.

Add a key to the keymap.

Parameters:



36
37
38
39
40
# File 'lib/vedeu/input/keymap.rb', line 36

def add(key)
  return false unless valid?(key)

  @keys = keys.add(key)
end

#defaultsHash (private)

Returns:

  • (Hash)


76
77
78
79
80
81
82
# File 'lib/vedeu/input/keymap.rb', line 76

def defaults
  {
    name:       '',
    keys:       [],
    repository: Vedeu::Keymaps.keymaps,
  }
end

#key_defined?(input) ⇒ Boolean

Check whether the key is already defined for this keymap.

Parameters:

  • input (String|Symbol)

Returns:

  • (Boolean)

    A boolean indicating the input provided is already in use for this keymap.



54
55
56
# File 'lib/vedeu/input/keymap.rb', line 54

def key_defined?(input)
  keys.any? { |key| key.input == input }
end

#keysVedeu::Keys

Returns the collection of keys defined for this keymap.

Returns:



45
46
47
# File 'lib/vedeu/input/keymap.rb', line 45

def keys
  collection.coerce(@keys, self)
end

#use(input) ⇒ Array|FalseClass

Triggers the action associated with the key, if it is registered with this keymap.

Parameters:

  • input (String|Symbol)

Returns:

  • (Array|FalseClass)


63
64
65
66
67
68
69
70
71
# File 'lib/vedeu/input/keymap.rb', line 63

def use(input)
  return false unless key_defined?(input)

  Vedeu.log(type: :input, message: "Key pressed: '#{input}'")

  Vedeu.trigger(:key, input)

  keys.select { |key| key.input == input }.map(&:press)
end

#valid?(key) ⇒ Boolean (private)

Checks that the provided key is not already registered with this keymap.

Parameters:

Returns:

  • (Boolean)


88
89
90
91
92
93
94
95
# File 'lib/vedeu/input/keymap.rb', line 88

def valid?(key)
  return true unless key_defined?(key.input)

  Vedeu.log(type:    :debug,
            message: "Keymap '#{name}' already defines '#{key.input}'.")

  false
end