Module: Vedeu::Runtime::Router

Extended by:
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

Methods included from Common

#demodulize, #present?, #snake_case

Class Method Details

.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:

  • (Boolean)


118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/vedeu/runtime/router.rb', line 118

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:



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

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:



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

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].merge!(klass: klass)

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

  end

  storage
end

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

This method returns an undefined value.

Instruct Vedeu to load the client application controller action with parameters.

Examples:

Vedeu.goto(controller, action, args)

Parameters:

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

Raises:



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

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

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

.in_memoryHash<void> (private)

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

Returns:

  • (Hash<void>)


182
183
184
# File 'lib/vedeu/runtime/router.rb', line 182

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:

  • (Boolean)


166
167
168
# File 'lib/vedeu/runtime/router.rb', line 166

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:



150
151
152
153
154
155
156
157
158
159
# File 'lib/vedeu/runtime/router.rb', line 150

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

.registered?(controller) ⇒ Boolean

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

Parameters:

  • controller (Symbol)

Returns:

  • (Boolean)


98
99
100
# File 'lib/vedeu/runtime/router.rb', line 98

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

.reset!Hash<void> Also known as: reset

Removes all stored controllers with their respective actions.

Returns:

  • (Hash<void>)


105
106
107
# File 'lib/vedeu/runtime/router.rb', line 105

def reset!
  @storage = in_memory
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)


139
140
141
142
# File 'lib/vedeu/runtime/router.rb', line 139

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

.storageHash<Symbol => Hash<Symbol => String|Array<Symbol>>> (private)

Returns all the stored controllers and their respective actions.

Returns:

  • (Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>)


174
175
176
# File 'lib/vedeu/runtime/router.rb', line 174

def storage
  @storage ||= in_memory
end

Instance Method Details

#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:

  • (Boolean)


118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/vedeu/runtime/router.rb', line 118

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:



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

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:



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

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].merge!(klass: klass)

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

  end

  storage
end

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

This method returns an undefined value.

Instruct Vedeu to load the client application controller action with parameters.

Examples:

Vedeu.goto(controller, action, args)

Parameters:

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

Raises:



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

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

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

#in_memoryHash<void> (private)

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

Returns:

  • (Hash<void>)


182
183
184
# File 'lib/vedeu/runtime/router.rb', line 182

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:

  • (Boolean)


166
167
168
# File 'lib/vedeu/runtime/router.rb', line 166

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:



150
151
152
153
154
155
156
157
158
159
# File 'lib/vedeu/runtime/router.rb', line 150

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

#registered?(controller) ⇒ Boolean

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

Parameters:

  • controller (Symbol)

Returns:

  • (Boolean)


98
99
100
# File 'lib/vedeu/runtime/router.rb', line 98

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

#reset!Hash<void> Also known as: reset

Removes all stored controllers with their respective actions.

Returns:

  • (Hash<void>)


105
106
107
# File 'lib/vedeu/runtime/router.rb', line 105

def reset!
  @storage = in_memory
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)


139
140
141
142
# File 'lib/vedeu/runtime/router.rb', line 139

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

#storageHash<Symbol => Hash<Symbol => String|Array<Symbol>>> (private)

Returns all the stored controllers and their respective actions.

Returns:

  • (Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>)


174
175
176
# File 'lib/vedeu/runtime/router.rb', line 174

def storage
  @storage ||= in_memory
end