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