Module: Vedeu::Runtime::Router
Overview
Stores all client application controllers with their respective actions.
Class Method Summary collapse
-
.action_defined?(action, controller) ⇒ Boolean
private
Returns a boolean indicating whether the given action name is defined for the given controller.
-
.add_action(controller, action) ⇒ void
Registers an action to the given controller name for the client application.
-
.add_controller(controller, klass) ⇒ void
Registers a controller with the given controller name for the client application.
-
.goto(controller, action, **args) ⇒ void
(also: #action)
Instruct Vedeu to load the client application controller action with parameters.
-
.in_memory ⇒ Hash<void>
private
Returns an empty collection ready for the storing of client application controllers and actions.
-
.klass_defined?(controller) ⇒ Boolean
private
Returns a boolean indicating whether the given controller name has a class defined.
-
.klass_for(controller) ⇒ String
private
Fetch the class for the controller by name.
-
.registered?(controller) ⇒ Boolean
Returns a boolean indicating whether the given controller name is already registered.
-
.reset! ⇒ Hash<void>
(also: #reset)
Removes all stored controllers with their respective actions.
-
.route(controller, action, **args) ⇒ void
private
Instantiate the given controller by name, the call the action (method) with any given arguments.
-
.storage ⇒ Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>
private
Returns all the stored controllers and their respective actions.
Instance Method Summary collapse
-
#action_defined?(action, controller) ⇒ Boolean
private
Returns a boolean indicating whether the given action name is defined for the given controller.
-
#add_action(controller, action) ⇒ void
Registers an action to the given controller name for the client application.
-
#add_controller(controller, klass) ⇒ void
Registers a controller with the given controller name for the client application.
-
#goto(controller, action, **args) ⇒ void
(also: #action)
Instruct Vedeu to load the client application controller action with parameters.
-
#in_memory ⇒ Hash<void>
private
Returns an empty collection ready for the storing of client application controllers and actions.
-
#klass_defined?(controller) ⇒ Boolean
private
Returns a boolean indicating whether the given controller name has a class defined.
-
#klass_for(controller) ⇒ String
private
Fetch the class for the controller by name.
-
#registered?(controller) ⇒ Boolean
Returns a boolean indicating whether the given controller name is already registered.
-
#reset! ⇒ Hash<void>
(also: #reset)
Removes all stored controllers with their respective actions.
-
#route(controller, action, **args) ⇒ void
private
Instantiate the given controller by name, the call the action (method) with any given arguments.
-
#storage ⇒ Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>
private
Returns all the stored controllers and their respective actions.
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.
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.
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.
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.
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_memory ⇒ Hash<void> (private)
Returns an empty collection ready for the storing of client application controllers and actions.
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.
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.
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.
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.
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.
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 |
.storage ⇒ Hash<Symbol => Hash<Symbol => String|Array<Symbol>>> (private)
Returns all the stored controllers and their respective actions.
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.
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.
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.
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.
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_memory ⇒ Hash<void> (private)
Returns an empty collection ready for the storing of client application controllers and actions.
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.
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.
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.
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.
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.
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 |
#storage ⇒ Hash<Symbol => Hash<Symbol => String|Array<Symbol>>> (private)
Returns all the stored controllers and their respective actions.
174 175 176 |
# File 'lib/vedeu/runtime/router.rb', line 174 def storage @storage ||= in_memory end |