Class: KStor::Controller::Base Abstract
- Inherits:
-
Object
- Object
- KStor::Controller::Base
- Defined in:
- lib/kstor/controller/base.rb
Overview
This class is abstract.
Common code for all controllers (except RequestHandler).
Class Attribute Summary collapse
-
.request_types ⇒ Object
Returns the value of attribute request_types.
-
.response_types ⇒ Object
Returns the value of attribute response_types.
Class Method Summary collapse
-
.handles?(req) ⇒ Boolean
True if sub-controller handles these requests.
-
.request_type(klass) ⇒ Object
Declare that this controller handles this type of request.
-
.response_type(klass) ⇒ Object
Declare that this controller produces this type of response.
Instance Method Summary collapse
-
#handle_request(user, sid, req) ⇒ Object
Handle client request.
-
#initialize(store) ⇒ KStor::Controller::Base
constructor
Create sub-controller with access to data store.
Constructor Details
#initialize(store) ⇒ KStor::Controller::Base
Create sub-controller with access to data store.
39 40 41 42 43 44 45 |
# File 'lib/kstor/controller/base.rb', line 39 def initialize(store) @store = store @request_handlers = self.class.request_types.to_h do |klass| meth = "handle_#{klass.type}".to_sym [klass, meth] end end |
Class Attribute Details
.request_types ⇒ Object
Returns the value of attribute request_types.
11 12 13 |
# File 'lib/kstor/controller/base.rb', line 11 def request_types @request_types end |
.response_types ⇒ Object
Returns the value of attribute response_types.
12 13 14 |
# File 'lib/kstor/controller/base.rb', line 12 def response_types @response_types end |
Class Method Details
.handles?(req) ⇒ Boolean
True if sub-controller handles these requests.
30 31 32 |
# File 'lib/kstor/controller/base.rb', line 30 def handles?(req) @request_types.include?(req.class) end |
.request_type(klass) ⇒ Object
Declare that this controller handles this type of request.
15 16 17 18 |
# File 'lib/kstor/controller/base.rb', line 15 def request_type(klass) @request_types ||= [] @request_types << klass end |
.response_type(klass) ⇒ Object
Declare that this controller produces this type of response.
21 22 23 24 |
# File 'lib/kstor/controller/base.rb', line 21 def response_type(klass) @response_types ||= [] @response_types << klass end |
Instance Method Details
#handle_request(user, sid, req) ⇒ Object
Handle client request.
51 52 53 54 55 56 57 58 |
# File 'lib/kstor/controller/base.rb', line 51 def handle_request(user, sid, req) unless @request_handlers.key?(req.class) raise Error.for_code('REQ/UNKNOWN', req.type) end klass, args = __send__(@request_handlers[req.class], user, req) klass.new(args, { session_id: sid }) end |