Class: RubyAPI::Request
- Inherits:
-
Object
- Object
- RubyAPI::Request
- Defined in:
- lib/ruby_api/request.rb
Overview
Request
Instance Method Summary collapse
- #app_module ⇒ Object
- #arguments ⇒ Object
- #feature ⇒ Object
- #feature_name ⇒ Object
-
#initialize(app, env, routes = {}) ⇒ Request
constructor
A new instance of Request.
- #json_arguments ⇒ Object
- #method ⇒ Object
- #operation ⇒ Object
- #operation_name ⇒ Object
- #path ⇒ Object
- #root_feature ⇒ Object
- #root_operation ⇒ Object
- #root_route ⇒ Object
- #route_slices(path) ⇒ Object
- #routes?(path) ⇒ Boolean
- #slices ⇒ Object
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_module ⇒ Object
44 45 46 |
# File 'lib/ruby_api/request.rb', line 44 def app_module @app.app_module end |
#arguments ⇒ Object
34 35 36 |
# File 'lib/ruby_api/request.rb', line 34 def arguments @rack_req.params.merge json_arguments end |
#feature ⇒ Object
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_name ⇒ Object
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_arguments ⇒ Object
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 |
#method ⇒ Object
85 86 87 |
# File 'lib/ruby_api/request.rb', line 85 def method @env['REQUEST_METHOD'].to_s.downcase end |
#operation ⇒ Object
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_name ⇒ Object
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 |
#path ⇒ Object
73 74 75 |
# File 'lib/ruby_api/request.rb', line 73 def path @env['REQUEST_PATH'].to_s.gsub(%r{^\/}, '') end |
#root_feature ⇒ Object
52 53 54 |
# File 'lib/ruby_api/request.rb', line 52 def root_feature root_route.split('/')[0].to_s end |
#root_operation ⇒ Object
56 57 58 |
# File 'lib/ruby_api/request.rb', line 56 def root_operation root_route.split('/')[1].to_s end |
#root_route ⇒ Object
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
77 78 79 |
# File 'lib/ruby_api/request.rb', line 77 def routes?(path) @routes.key?(path.to_sym) end |
#slices ⇒ Object
68 69 70 71 |
# File 'lib/ruby_api/request.rb', line 68 def slices return route_slices(path) if routes?(path) path.split('/') end |