Class: Vedeu::Input::DSL

Inherits:
Object
  • Object
show all
Includes:
Common, DSL
Defined in:
lib/vedeu/input/dsl.rb

Overview

You can define keymaps by name which matches a defined interface. When that interface is in focus, keys pressed as part of this definition will affect that interface. This allows you to form context driven behaviour for your application.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Vedeu::DSL

Instance Attribute Details

#clientObject (readonly, protected) Originally defined in module DSL

Returns The object instance where the DSL is being used.

Returns:

  • (Object)

    The object instance where the DSL is being used.

#modelvoid (readonly, protected) Originally defined in module DSL

This method returns an undefined value.

Returns The new model object which the DSL is constructing.

Class Method Details

.keymap(name, &block) ⇒ Vedeu::Input::Keymap

TODO:

Try to remember why we need to pre-create the keymap in the repository.

Define actions for keypresses for when specific interfaces are in focus. Unless an interface is specified, the key will be assumed to be global, meaning its action will happen regardless of the interface in focus.

Vedeu.keymap :my_interface do
  key('s')        { Vedeu.trigger(:save) }
  key('h', :left) { Vedeu.trigger(:left) }
  key('j', :down) { Vedeu.trigger(:down) }
  key('p') do
    # ... some code
  end
  # ... some code
end

# or...

Vedeu.keys :my_interface do
  # ... some code
end

# or...

Vedeu.interface :my_interface do
  keymap do
    # ... some code
  end # or...

  keys do
    # ... some code
  end
end

Parameters:

  • name (String|Symbol)

    The name of the interface which this keymap relates to.

  • block (Proc)

Returns:

Raises:



55
56
57
58
59
# File 'lib/vedeu/input/dsl.rb', line 55

def self.keymap(name, &block)
  Vedeu::Input::Keymap.new(name: name).store

  Vedeu::Input::Keymap.build(name: name, &block).store
end

Instance Method Details

#absent?(variable) ⇒ Boolean Originally defined in module Common

Returns a boolean indicating whether a variable is nil or empty.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#attributesHash<Symbol => void> (private) Originally defined in module DSL

Note:

Specific DSL classes may be overriding this method.

Returns the default attributes for the new model.

Returns:

  • (Hash<Symbol => void>)

#demodulize(klass) ⇒ String Originally defined in module Common

Removes the module part from the expression in the string.

Examples:

demodulize('Vedeu::SomeModule::SomeClass') # => "SomeClass"

Parameters:

  • klass (Class|String)

Returns:

  • (String)

#initialize(model, client = nil) ⇒ void Originally defined in module DSL

Returns an instance of the DSL class including Vedeu::DSL.

Parameters:

  • model (void)

    The model class which the DSL class is wrapping.

  • client (void) (defaults to: nil)

    The class where the DSL methods are being used.

#key(*values, &block) ⇒ Array Also known as: key=

Define keypress(es) to perform an action.

Parameters:

  • values (Array<String>|Array<Symbol>|String|Symbol)

    The key(s) pressed. Special keys can be found in Input#specials. When more than one key is defined, then the extras are treated as aliases.

  • block (Proc)

    The action to perform when this key is pressed. Can be a method call or event triggered.

Returns:

  • (Array)

    A collection containing the keypress(es).

Raises:

  • (Vedeu::Error::InvalidSyntax)

    When the required block is not given, the values parameter is undefined, or when processing the collection, a member is undefined.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/vedeu/input/dsl.rb', line 74

def key(*values, &block)
  fail Vedeu::Error::InvalidSyntax,
       'No action defined for `key`.'.freeze unless block_given?

  fail Vedeu::Error::InvalidSyntax,
       'No keypress(es) defined for `key`.'.freeze unless present?(values)

  values.each do |value|
    unless present?(value)
      fail Vedeu::Error::InvalidSyntax,
           'An invalid value for `key` was encountered.'.freeze
    end

    model.add(model.member.new(value, &block))
  end
end

#name(value) ⇒ String Also known as: name=

Define the name of the keymap.

To only allow certain keys to work with specific interfaces, use the same name as the interface.

When the name :global is used, all keys in the keymap block will be available to all interfaces. Once a key has been defined in the :global keymap, it cannot be used for a specific interface.

Vedeu.keymap do
  name :some_interface
end

Parameters:

  • value (String|Symbol)

Returns:

  • (String)


108
109
110
# File 'lib/vedeu/input/dsl.rb', line 108

def name(value)
  model.name = value
end

#present?(variable) ⇒ Boolean Originally defined in module Common

Returns a boolean indicating whether a variable has a useful value.

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

  • (Boolean)

#snake_case(name) ⇒ String Originally defined in module Common

Converts a class name to a lowercase snake case string.

Examples:

snake_case(MyClassName) # => "my_class_name"
snake_case(NameSpaced::ClassName)
# => "name_spaced/class_name"

Parameters:

  • name (String)

Returns:

  • (String)