class Rack::Way::Router::RequestBuilder

Public Class Methods

new(env) click to toggle source
# File lib/rack-way/router/request_builder.rb, line 5
def initialize(env)
  @env = env
end

Public Instance Methods

call(route = nil) click to toggle source
# File lib/rack-way/router/request_builder.rb, line 9
def call(route = nil)
  request = Rack::Request.new(@env)

  return request if route.nil?
  return request unless route.has_params?

  update_request_params(request, route)
end

Private Instance Methods

is_a_integer_string?(string) click to toggle source
# File lib/rack-way/router/request_builder.rb, line 38
def is_a_integer_string?(string)
  string =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
end
update_request_param(request, word, param) click to toggle source
# File lib/rack-way/router/request_builder.rb, line 42
def update_request_param(request, word, param)
  request.update_param(word.sub(':', '').to_sym, param)
end
update_request_params(request, route) click to toggle source
# File lib/rack-way/router/request_builder.rb, line 20
def update_request_params(request, route)
  splitted_request_path = request.path.split('/')

  route
    .splitted_path
    .each
    .with_index do |route_word, route_word_position|
      if route_word.start_with?(':')
        param = splitted_request_path[route_word_position]
        param = param.to_i if is_a_integer_string?(param)

        update_request_param(request, route_word, param)
      end
    end

  request
end