Module: Gin::Mountable

Included in:
Controller
Defined in:
lib/gin/mountable.rb

Overview

The Gin::Mountable module provides an interface to mount any type of object to a Gin::App route.

The Gin::Mountable module is only necessary if features such automatic route naming and defaults are needed. Gin will otherwise happily mount any object that responds to the ‘call’ method onto it’s routing tree.

Instance Method Summary collapse

Instance Method Details

#actionsObject

The actions available on this Mountable object. Actions can be of any object type.

Must return an Array of actions. Must be overloaded.

UserController.actions
#=> [:show, :delete, :list, :update]

Raises:

  • (NoMethodError)


37
38
39
40
41
# File 'lib/gin/mountable.rb', line 37

def actions
  raise NoMethodError,
    "The `#{__method__}' method must be defined on #{self} and return an\
Array of available actions for the Router to map to."
end

#controller_nameObject

The String representing the controller.

Must return a String. Must be overloaded.

UserController.controller_name
#=> 'user'

Raises:

  • (NoMethodError)


51
52
53
54
55
# File 'lib/gin/mountable.rb', line 51

def controller_name
  raise NoMethodError,
    "The `#{__method__}' method must be defined on #{self} and return a\
String representing the controller name."
end

#default_route_for(action) ⇒ Object

Should return a 2 item Array with the HTTP verb and request path (local to the controller) to use for a given action.

Must return a 2 item Array of Strings. Must be overloaded.

UserController.default_route_for :show
#=> ['GET', '/:id']

Raises:

  • (NoMethodError)


66
67
68
69
70
# File 'lib/gin/mountable.rb', line 66

def default_route_for action
  raise NoMethodError,
    "The `#{__method__}' method must be defined on #{self} and return a\
2 item Array with the HTTP verb and local path: ['GET', '/users/:id']"
end

#display_name(action = nil) ⇒ Object

Creates a display name for the Controller (and optional action). Used for logging and error messages.

Must return a String. Must be overloaded.

UserController.display_name :show
#=> "UserController#show"

Raises:

  • (NoMethodError)


95
96
97
98
99
# File 'lib/gin/mountable.rb', line 95

def display_name action=nil
  raise NoMethodError,
    "The `#{__method__}' method must be defined on #{self} and return a\
String for display purposes"
end

#route_name_for(action) ⇒ Object

Creates a route name used to identify a given route. Used by helper methods.

Must return a Symbol, or nil. Must be overloaded.

UserController.route_name_for :show
#=> :show_user

Raises:

  • (NoMethodError)


80
81
82
83
84
# File 'lib/gin/mountable.rb', line 80

def route_name_for action
  raise NoMethodError,
    "The `#{__method__}' method must be defined on #{self} and return a\
Symbol representing the route name: :show_user"
end

#verify_mount!Object

:nodoc:



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/gin/mountable.rb', line 11

def verify_mount! #:nodoc:
  controller_name.to_str

  test_action = actions[0]

  test_route = default_route_for(test_action)
  test_route[0].to_str
  test_route[1].to_str

  route_name_for(test_action).to_proc

  display_name.to_str
  display_name(test_action).to_str

  true
end