Module: Vedeu::Runtime::Router

Extended by:
Vedeu::Repositories::Storage, Router
Includes:
Common
Included in:
Router
Defined in:
lib/vedeu/runtime/router.rb

Overview

Stores all client application controllers with their respective actions.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

.action_defined?(action, controller) ⇒ Boolean (private)

Returns a boolean indicating whether the given action name is defined for the given controller.

Parameters:

  • action (Symbol)
  • controller (Symbol)

Returns:



108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/vedeu/runtime/router.rb', line 108

def action_defined?(action, controller)
  if registered?(controller)
    return true if storage[controller][:actions].include?(action)

    fail Vedeu::Error::ActionNotFound,
         "#{action} is not registered for #{controller}."

  else
    fail Vedeu::Error::ControllerNotFound,
         "#{controller} is not registered."

  end
end

.add_action(controller, action) ⇒ void

This method returns an undefined value.

Registers an action to the given controller name for the client application.

Parameters:

  • controller (Symbol)
  • action (Symbol)

Raises:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/vedeu/runtime/router.rb', line 51

def add_action(controller, action)
  if present?(controller) && present?(action)
    Vedeu.log(type:    :create,
              message: "Action: ':#{action}' " \
                       "(for ':#{controller}')")

    if registered?(controller)
      storage[controller][:actions] << action

    else
      add_controller(controller, '')
      add_action(controller, action)

    end

    storage

  else
    fail Vedeu::Error::MissingRequired,
         'Cannot store action without a controller or name ' \
         'attribute.'

  end
end

.add_controller(controller, klass) ⇒ void

This method returns an undefined value.

Registers a controller with the given controller name for the client application.

Parameters:

  • controller (Symbol)
  • klass (String)

Raises:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/vedeu/runtime/router.rb', line 24

def add_controller(controller, klass)
  unless present?(controller)
    fail Vedeu::Error::MissingRequired,
         'Cannot store controller without a name attribute.'
  end

  Vedeu.log(type:    :create,
            message: "Controller: ':#{controller}'")

  if registered?(controller)
    storage[controller][:klass] = klass

  else
    storage.store(controller, klass: klass, actions: [])

  end

  storage
end

.become(klass, attributes) ⇒ Class Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts one class into another.

Parameters:

  • klass (Class)

    The class to become an instance of.

  • attributes (Hash)

    The attributes of klass.

Returns:

  • (Class)

    Returns a new instance of klass.

.boolean(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the value was a boolean.

Parameters:

  • value (void)

Returns:

.boolean?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Boolean.

Parameters:

Returns:

.escape?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is an escape sequence object (e.g. Vedeu::Cells::Escape.)

Returns:

.falsy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered false.

Parameters:

  • value (void)

Returns:

.goto(controller, action, **args) ⇒ void Also known as: action

This method returns an undefined value.

Parameters:

  • controller (Symbol)
  • action (Symbol)
  • args (void)

Raises:



83
84
85
86
87
88
# File 'lib/vedeu/runtime/router.rb', line 83

def goto(controller, action, **args)
  Vedeu.log(type:    :debug,
            message: "Routing: #{controller} #{action}")

  route(controller, action, args) if action_defined?(action, controller)
end

.hash?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Hash.

Parameters:

  • value (Hash|void)

Returns:

.in_memoryHash<void> (private)

Returns an empty collection ready for the storing of client application controllers and actions.

Returns:

  • (Hash<void>)


163
164
165
# File 'lib/vedeu/runtime/router.rb', line 163

def in_memory
  {}
end

.klass_defined?(controller) ⇒ Boolean (private)

Returns a boolean indicating whether the given controller name has a class defined.

Parameters:

  • controller (Symbol)

Returns:



155
156
157
# File 'lib/vedeu/runtime/router.rb', line 155

def klass_defined?(controller)
  present?(storage[controller][:klass])
end

.klass_for(controller) ⇒ String (private)

Fetch the class for the controller by name.

Parameters:

  • controller (Symbol)

Returns:

  • (String)

Raises:



139
140
141
142
143
144
145
146
147
148
# File 'lib/vedeu/runtime/router.rb', line 139

def klass_for(controller)
  if registered?(controller) && klass_defined?(controller)
    storage[controller][:klass]

  else
    fail Vedeu::Error::MissingRequired,
         "Cannot route to #{controller} as no class defined."

  end
end

.line_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Line.

Returns:

.numeric?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (Fixnum|void)

Returns:

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

.registered?(controller) ⇒ Boolean

Returns a boolean indicating whether the given controller name is already registered.

Parameters:

  • controller (Symbol)

Returns:



96
97
98
# File 'lib/vedeu/runtime/router.rb', line 96

def registered?(controller)
  storage.key?(controller)
end

.reset!void Also known as: reset Originally defined in module Vedeu::Repositories::Storage

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Remove all currently stored data for this repository.

.route(controller, action, **args) ⇒ void (private)

This method returns an undefined value.

Instantiate the given controller by name, the call the action (method) with any given arguments.

Parameters:

  • controller (Symbol)
  • action (Symbol)
  • args (Symbol)


129
130
131
132
# File 'lib/vedeu/runtime/router.rb', line 129

def route(controller, action, **args)
  klass = Object.const_get(klass_for(controller)).new(**args)
  klass.send(action)
end

.snake_case(klass) ⇒ String Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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"

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

Parameters:

  • klass (Module|Class|String)

Returns:

  • (String)

.storagevoid Also known as: all Originally defined in module Vedeu::Repositories::Storage

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method returns an undefined value.

Return whole repository; provides raw access to the storage for this repository.

.stream_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Stream.

Returns:

.string?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (String|void)

Returns:

.truthy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered true.

Parameters:

  • value (void)

Returns:

.view_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::View.

Returns:

Instance Method Details

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#action_defined?(action, controller) ⇒ Boolean (private)

Returns a boolean indicating whether the given action name is defined for the given controller.

Parameters:

  • action (Symbol)
  • controller (Symbol)

Returns:



108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/vedeu/runtime/router.rb', line 108

def action_defined?(action, controller)
  if registered?(controller)
    return true if storage[controller][:actions].include?(action)

    fail Vedeu::Error::ActionNotFound,
         "#{action} is not registered for #{controller}."

  else
    fail Vedeu::Error::ControllerNotFound,
         "#{controller} is not registered."

  end
end

#add_action(controller, action) ⇒ void

This method returns an undefined value.

Registers an action to the given controller name for the client application.

Parameters:

  • controller (Symbol)
  • action (Symbol)

Raises:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/vedeu/runtime/router.rb', line 51

def add_action(controller, action)
  if present?(controller) && present?(action)
    Vedeu.log(type:    :create,
              message: "Action: ':#{action}' " \
                       "(for ':#{controller}')")

    if registered?(controller)
      storage[controller][:actions] << action

    else
      add_controller(controller, '')
      add_action(controller, action)

    end

    storage

  else
    fail Vedeu::Error::MissingRequired,
         'Cannot store action without a controller or name ' \
         'attribute.'

  end
end

#add_controller(controller, klass) ⇒ void

This method returns an undefined value.

Registers a controller with the given controller name for the client application.

Parameters:

  • controller (Symbol)
  • klass (String)

Raises:



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/vedeu/runtime/router.rb', line 24

def add_controller(controller, klass)
  unless present?(controller)
    fail Vedeu::Error::MissingRequired,
         'Cannot store controller without a name attribute.'
  end

  Vedeu.log(type:    :create,
            message: "Controller: ':#{controller}'")

  if registered?(controller)
    storage[controller][:klass] = klass

  else
    storage.store(controller, klass: klass, actions: [])

  end

  storage
end

#become(klass, attributes) ⇒ Class Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Converts one class into another.

Parameters:

  • klass (Class)

    The class to become an instance of.

  • attributes (Hash)

    The attributes of klass.

Returns:

  • (Class)

    Returns a new instance of klass.

#boolean(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the value was a boolean.

Parameters:

  • value (void)

Returns:

#boolean?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Boolean.

Parameters:

Returns:

#escape?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is an escape sequence object (e.g. Vedeu::Cells::Escape.)

Returns:

#falsy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered false.

Parameters:

  • value (void)

Returns:

#goto(controller, action, **args) ⇒ void Also known as: action

This method returns an undefined value.

Parameters:

  • controller (Symbol)
  • action (Symbol)
  • args (void)

Raises:



83
84
85
86
87
88
# File 'lib/vedeu/runtime/router.rb', line 83

def goto(controller, action, **args)
  Vedeu.log(type:    :debug,
            message: "Routing: #{controller} #{action}")

  route(controller, action, args) if action_defined?(action, controller)
end

#hash?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Hash.

Parameters:

  • value (Hash|void)

Returns:

#in_memoryHash<void> (private)

Returns an empty collection ready for the storing of client application controllers and actions.

Returns:

  • (Hash<void>)


163
164
165
# File 'lib/vedeu/runtime/router.rb', line 163

def in_memory
  {}
end

#klass_defined?(controller) ⇒ Boolean (private)

Returns a boolean indicating whether the given controller name has a class defined.

Parameters:

  • controller (Symbol)

Returns:



155
156
157
# File 'lib/vedeu/runtime/router.rb', line 155

def klass_defined?(controller)
  present?(storage[controller][:klass])
end

#klass_for(controller) ⇒ String (private)

Fetch the class for the controller by name.

Parameters:

  • controller (Symbol)

Returns:

  • (String)

Raises:



139
140
141
142
143
144
145
146
147
148
# File 'lib/vedeu/runtime/router.rb', line 139

def klass_for(controller)
  if registered?(controller) && klass_defined?(controller)
    storage[controller][:klass]

  else
    fail Vedeu::Error::MissingRequired,
         "Cannot route to #{controller} as no class defined."

  end
end

#line_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Line.

Returns:

#numeric?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (Fixnum|void)

Returns:

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • variable (String|Symbol|Array|Fixnum)

    The variable to check.

Returns:

#registered?(controller) ⇒ Boolean

Returns a boolean indicating whether the given controller name is already registered.

Parameters:

  • controller (Symbol)

Returns:



96
97
98
# File 'lib/vedeu/runtime/router.rb', line 96

def registered?(controller)
  storage.key?(controller)
end

#route(controller, action, **args) ⇒ void (private)

This method returns an undefined value.

Instantiate the given controller by name, the call the action (method) with any given arguments.

Parameters:

  • controller (Symbol)
  • action (Symbol)
  • args (Symbol)


129
130
131
132
# File 'lib/vedeu/runtime/router.rb', line 129

def route(controller, action, **args)
  klass = Object.const_get(klass_for(controller)).new(**args)
  klass.send(action)
end

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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"

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

Parameters:

  • klass (Module|Class|String)

Returns:

  • (String)

#stream_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::Stream.

Returns:

#string?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value is a Fixnum.

Parameters:

  • value (String|void)

Returns:

#truthy?(value) ⇒ Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating whether the value should be considered true.

Parameters:

  • value (void)

Returns:

#view_model?Boolean Originally defined in module Common

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a boolean indicating the model is a Views::View.

Returns: