Class: KStor::Controller::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/kstor/controller/base.rb

Overview

This class is abstract.

Common code for all controllers (except RequestHandler).

Direct Known Subclasses

Secret, User

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(store) ⇒ KStor::Controller::Base

Create sub-controller with access to data store.

Parameters:



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_typesObject

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_typesObject

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.

Parameters:

  • type (String)

    request type

Returns:

  • (Boolean)

    true if request type may be handled



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.

Parameters:



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