Module: Cyberweb::RouteHandlerModule

Included in:
ClassBasedTest, Cyberweb::RouteHandler::Base
Defined in:
lib/cyberweb/route_handler/module/misc.rb,
lib/cyberweb/route_handler/module/verbs.rb,
lib/cyberweb/route_handler/module/route_handler_module.rb

Overview

Cyberweb::RouteHandlerModule

Constant Summary collapse

DEFAULT_PORT_TO_USE =
#

DEFAULT_PORT_TO_USE

#
9292

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.port?Boolean

#

Cyberweb::RouteHandler::Base.port?

#

Returns:

  • (Boolean)


196
197
198
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 196

def self.port?
  DEFAULT_PORT_TO_USE
end

.use_this_webserver(i = :webrick) ⇒ Object

#

Cyberweb::RouteHandlerModule.use_this_webserver

#


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 31

def self.use_this_webserver(
    i = :webrick
  )
  @use_this_webserver = i.to_sym
  case @use_this_webserver
  # ======================================================================= #
  # === :webrick
  # ======================================================================= #
  when :webrick
    unless Object.const_defined? :WEBrick
      begin
        require 'webrick'
      rescue LoadError; end
    end
    Rack::Handler.pick(i.to_s)
  # ======================================================================= #
  # === :puma
  # ======================================================================= #
  when :puma
    unless Object.const_defined? :Puma
      begin
        require 'puma'
      rescue LoadError; end
    end
    Rack::Handler.pick(i.to_s)
  end
end

.use_which_webserver?Boolean

#

Cyberweb::RouteHandlerModule.use_which_webserver?

#

Returns:

  • (Boolean)


62
63
64
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 62

def self.use_which_webserver?
  @use_this_webserver.to_s
end

Instance Method Details

#call(env) ⇒ Object

#

call (call tag)

#


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/cyberweb/route_handler/module/misc.rb', line 51

def call(env)
  # ======================================================================= #
  # We must create a new rack-request next:
  # ======================================================================= #
  @request = rack_request(env)
  # ======================================================================= #
  # Capture which verb is requested by the visitor:
  # ======================================================================= #
  verb = request_method?
  requested_path = path_info?
  # ======================================================================= #
  # Next we have to find the proper handler, based on the verb.
  #
  # This will be stored as a Hash like this:
  #
  #   {"GET"=>
  #         {"/"=>#<Proc:0x00007f92cd194af8 test.rb:10>,
  #         "/test"=>#<Proc:0x00007f92cd194698 test.rb:14>}}
  #
  # ======================================================================= #
  handler = @routes.fetch(verb, {}).
                    fetch(requested_path, nil)
  if handler
    result = instance_eval(&handler)
    if result.is_a? String
      # =================================================================== #
      # This simplifies serving the proper result a little bit.
      # =================================================================== #
      [200, {}, [result]]
    else
      result
    end
  else # else tag
    return_route_404_error(verb) # Else the verb was not registered yet.
  end
end

#custom_error_page?Boolean

#

custom_error_page?

#

Returns:

  • (Boolean)


98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 98

def custom_error_page?
  # ======================================================================= #
  # First, we need to allow the user to define a different error page.
  # ======================================================================= #
  _ = ::Cyberweb.custom_error_page?
  if _.nil?
    # ===================================================================== #
    # Alright: in this event the user did NOT specify a custom error
    # page, so we can build up our 404-error page here.
    # ===================================================================== #
    code = '<br>'.dup
    code << "# in #{$PROGRAM_NAME}\n"
    code << "class #{self.class}\n"
    code << '  '+request_method?.downcase+" '"+request.path_info+"'"
    code = '<br><div id="c" style="font-size: 1.8em; margin-left: 1em;">
          <pre>You could possibly try code as follows:
          '+code+' do
  "Hello World"
end'
    code << "\nend\n"
    code << '</pre>'
    code << '</div>'
    _ = ''+
      '<div class="error_404_css_class inline" style="float:left;">404</div>'+
      Cyberweb.return_base64_image(:error_404, 'bblack2 mar1em marl4em')+
      '<pre style="font-size:150%">'+
      "Oops! No route for #{request_method?.downcase} "\
      "<b style=\"color: darkblue\">#{requested_path?}</b> "\
      "has been defined."\
      '</pre><br>'+ # +'The path is at: <b>'+path_info?+'</b>.<br>'
      'Additional information will be shown next.'+
      HtmlTags.div(
      'The handler (<b>webserver</b>) in use is: '\
      '<b>'+which_handler_is_used?+'</b><br>'+
      code,
      css_class: 'pad1em mar0_5em'
    )
  end
  return _
end

#delete(path, &handler) ⇒ Object

#

delete

#


42
43
44
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 42

def delete(path, &handler)
  route('DELETE', path, &handler)
end

#get(path, &handler) ⇒ Object

#

get (get tag)

#


14
15
16
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 14

def get(path, &handler)
  route('GET', path, &handler)
end

#head(path, &handler) ⇒ Object

#

head

#


49
50
51
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 49

def head(path, &handler)
  route('HEAD', path, &handler)
end

#initializeObject

#

initialize

#


69
70
71
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 69

def initialize
  reset
end

#params?Boolean Also known as: params

#

params? (params tag)

Obtain all params, by asking Rack.

#

Returns:

  • (Boolean)


93
94
95
# File 'lib/cyberweb/route_handler/module/misc.rb', line 93

def params?
  @request.params
end

#patch(path, &handler) ⇒ Object

#

patch

#


35
36
37
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 35

def patch(path, &handler)
  route('PATCH', path, &handler)
end

#post(path, &handler) ⇒ Object

#

post

#


21
22
23
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 21

def post(path, &handler)
  route('POST', path, &handler)
end

#put(path, &handler) ⇒ Object

#

put

#


28
29
30
# File 'lib/cyberweb/route_handler/module/verbs.rb', line 28

def put(path, &handler)
  route('PUT', path, &handler)
end

#rack_request(i) ⇒ Object

#

rack_request

#


87
88
89
90
91
92
93
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 87

def rack_request(i)
  # ======================================================================= #
  # Instantiate a new Rack::Request object.
  # ======================================================================= #
  @request = Rack::Request.new(i)
  return @request
end

#request?Boolean Also known as: request

#

request?

#

Returns:

  • (Boolean)


37
38
39
# File 'lib/cyberweb/route_handler/module/misc.rb', line 37

def request?
  @request
end

#request_method?Boolean

#

request_method?

#

Returns:

  • (Boolean)


44
45
46
# File 'lib/cyberweb/route_handler/module/misc.rb', line 44

def request_method?
  request?.request_method
end

#requested_path?Boolean Also known as: path_info?

#

requested_path?

This method will return the requested path.

It will return a String such as “/test”.

#

Returns:

  • (Boolean)


104
105
106
# File 'lib/cyberweb/route_handler/module/misc.rb', line 104

def requested_path?
  @request.path_info
end

#resetObject

#

reset (reset tag)

#


76
77
78
79
80
81
82
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 76

def reset
  @routes = {}
  # ======================================================================= #
  # === @port_to_use
  # ======================================================================= #
  @port_to_use = DEFAULT_PORT_TO_USE
end

#return_route_404_error(verb, custom_error_page = custom_error_page? ) ⇒ Object

#

return_route_404_error

This route will be returned when an entry was not (yet) registered.

#


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/cyberweb/route_handler/module/misc.rb', line 16

def return_route_404_error(
    verb,
    custom_error_page = custom_error_page?
  )
  [404, {},
    [
      Cyberweb.html_template(
        title: 'Route 404 error',
        use_these_css_classes:
          'pad1em mar0_5em bblack1 bblack2 error_404_css_class '\
          'mar1em marl3em inline',
        body_css_style: 'padding: 8px',
        body: custom_error_page
      )
    ]
  ]
end

#routes?Boolean Also known as: routes

#

routes?

#

Returns:

  • (Boolean)


169
170
171
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 169

def routes?
  @routes
end

#session?Boolean Also known as: session

#

session?

This method will access the underlying Rack-session.

#

Returns:

  • (Boolean)


162
163
164
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 162

def session?
  request?.session
end

#which_handler_is_used?Boolean

#

which_handler_is_used?

This method will be guaranteed to return a String.

#

Returns:

  • (Boolean)


144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/cyberweb/route_handler/module/route_handler_module.rb', line 144

def which_handler_is_used?
  _ = Cyberweb::RouteHandlerModule.use_which_webserver?
  case _
  when /Puma/i
    _ = 'puma'
  when /WEBrick/i
    _ = 'webrick'
  else
    _ = 'unknown handler ('+_+')'
  end
  return _.to_s
end