Class: RubyAPI::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_api/request.rb

Overview

Request

Instance Method Summary collapse

Constructor Details

#initialize(app, env, routes = {}) ⇒ Request

Returns a new instance of Request.



10
11
12
13
14
15
# File 'lib/ruby_api/request.rb', line 10

def initialize(app, env, routes = {})
  @app = app
  @env = env
  @routes = routes
  @rack_req = Rack::Request.new(env)
end

Instance Method Details

#app_moduleObject



44
45
46
# File 'lib/ruby_api/request.rb', line 44

def app_module
  @app.app_module
end

#argumentsObject



34
35
36
# File 'lib/ruby_api/request.rb', line 34

def arguments
  @rack_req.params.merge json_arguments
end

#featureObject



17
18
19
20
21
22
23
# File 'lib/ruby_api/request.rb', line 17

def feature
  class_name = feature_name.camelize
  unless app_module.const_defined?(class_name)
    raise "Feature `#{feature_name}` not found"
  end
  app_module.const_get(class_name)
end

#feature_nameObject



60
61
62
# File 'lib/ruby_api/request.rb', line 60

def feature_name
  slices[0].to_s.empty? ? root_feature : slices[0].to_s
end

#json_argumentsObject



38
39
40
41
42
# File 'lib/ruby_api/request.rb', line 38

def json_arguments
  JSON.parse @rack_req.body.read
rescue JSON::ParserError
  {}
end

#methodObject



85
86
87
# File 'lib/ruby_api/request.rb', line 85

def method
  @env['REQUEST_METHOD'].to_s.downcase
end

#operationObject



25
26
27
28
29
30
31
32
# File 'lib/ruby_api/request.rb', line 25

def operation
  class_name = operation_name.camelize
  unless feature.const_defined?(class_name)
    fname = feature.name.split('::').last.underscore
    raise "Operation `#{fname}/#{operation_name}` not found"
  end
  feature.const_get class_name
end

#operation_nameObject



64
65
66
# File 'lib/ruby_api/request.rb', line 64

def operation_name
  slices[1].to_s.empty? ? root_operation : slices[1].to_s
end

#pathObject



73
74
75
# File 'lib/ruby_api/request.rb', line 73

def path
  @env['REQUEST_PATH'].to_s.gsub(%r{^\/}, '')
end

#root_featureObject



52
53
54
# File 'lib/ruby_api/request.rb', line 52

def root_feature
  root_route.split('/')[0].to_s
end

#root_operationObject



56
57
58
# File 'lib/ruby_api/request.rb', line 56

def root_operation
  root_route.split('/')[1].to_s
end

#root_routeObject



48
49
50
# File 'lib/ruby_api/request.rb', line 48

def root_route
  @routes[:root]
end

#route_slices(path) ⇒ Object



81
82
83
# File 'lib/ruby_api/request.rb', line 81

def route_slices(path)
  @routes[path.to_sym].split('/')
end

#routes?(path) ⇒ Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/ruby_api/request.rb', line 77

def routes?(path)
  @routes.key?(path.to_sym)
end

#slicesObject



68
69
70
71
# File 'lib/ruby_api/request.rb', line 68

def slices
  return route_slices(path) if routes?(path)
  path.split('/')
end