Class: Jets::Controller::Base
- Inherits:
-
Lambda::Functions
- Object
- Lambda::Functions
- Jets::Controller::Base
- Defined in:
- lib/jets/controller/base.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#response ⇒ Object
readonly
Returns the value of attribute response.
-
#session ⇒ Object
Returns the value of attribute session.
Attributes inherited from Lambda::Functions
Class Method Summary collapse
Instance Method Summary collapse
- #dispatch! ⇒ Object
-
#initialize(event, context = {}, meth) ⇒ Base
constructor
A new instance of Base.
-
#json_dump(data) ⇒ Object
Handles binary data safely.
- #log_info_start ⇒ Object
- #process! ⇒ Object
Methods included from Rendering
#actual_host, #add_stage_name, #adjust_content_type!, #default_layout, #ensure_render, #managed_options, #normalize_options, #render, #url_for
Methods included from Redirection
#ensure_protocol, #redirect_to
Methods included from Params
#body_params, #params, #query_parameters
Methods included from Cookies
Methods inherited from Lambda::Functions
Methods included from Lambda::Dsl
add_custom_resource_extensions, included, #lambda_functions
Constructor Details
Instance Attribute Details
#request ⇒ Object (readonly)
Returns the value of attribute request.
15 16 17 |
# File 'lib/jets/controller/base.rb', line 15 def request @request end |
#response ⇒ Object (readonly)
Returns the value of attribute response.
15 16 17 |
# File 'lib/jets/controller/base.rb', line 15 def response @response end |
#session ⇒ Object
Returns the value of attribute session.
16 17 18 |
# File 'lib/jets/controller/base.rb', line 16 def session @session end |
Class Method Details
.internal(value = nil) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/jets/controller/base.rb', line 82 def self.internal(value=nil) if !value.nil? self.internal_controller = value else self.internal_controller end end |
.process(event, context = {}, meth) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/jets/controller/base.rb', line 72 def self.process(event, context={}, meth) controller = new(event, context, meth) # Using send because process! is private method in Jets::RackController so # it doesnt create a lambda function. It's doesnt matter what scope process! # is in Controller::Base because Jets lambda functions inheritance doesnt # include methods in Controller::Base. controller.send(:process!) end |
Instance Method Details
#dispatch! ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/jets/controller/base.rb', line 36 def dispatch! t1 = Time.now log_info_start run_before_actions send(@meth) triplet = ensure_render run_after_actions took = Time.now - t1 status = triplet[0] Jets.logger.info "Completed Status Code #{status} in #{took}s" triplet # status, headers, body end |
#json_dump(data) ⇒ Object
Handles binary data safely
65 66 67 68 69 70 |
# File 'lib/jets/controller/base.rb', line 65 def json_dump(data) JSON.dump(data) rescue Encoding::UndefinedConversionError data['body'] = '[BINARY]' JSON.dump(data) end |
#log_info_start ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/jets/controller/base.rb', line 52 def log_info_start display_event = @event.dup display_event['body'] = '[BASE64_ENCODED]' if @event['isBase64Encoded'] # Interesting, JSON.dump makes logging look like JSON.pretty_generate in # CloudWatch but not locally. This is what we want. ip = request.ip Jets.logger.info "Started #{@event['httpMethod']} \"#{@event['path']}\" for #{ip} at #{Time.now}" Jets.logger.info "Processing #{self.class.name}##{@meth}" Jets.logger.info " Event: #{json_dump(display_event)}" Jets.logger.info " Parameters: #{JSON.dump(params(raw: true).to_h)}" end |
#process! ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/jets/controller/base.rb', line 23 def process! adapter = Jets::Controller::Rack::Adapter.new(event, context, meth) adapter.rack_vars( 'jets.controller' => self, 'lambda.context' => context, 'lambda.event' => event, 'lambda.meth' => meth, ) # adapter.process ultimately calls app controller action at the very last # middleware stack. adapter.process # Returns API Gateway hash structure end |