Class: Jets::Controller::Base
- Inherits:
-
Lambda::Functions
- Object
- Lambda::Functions
- Jets::Controller::Base
- Includes:
- ActiveSupport::Rescuable, Authorization, Callbacks, Cookies, ForgeryProtection, Layout, Params, Rendering, Router::Helpers
- Defined in:
- lib/jets/controller/base.rb
Direct Known Subclasses
ApplicationController, MailersController, PublicController, RackController
Constant Summary
Constants included from Router::Helpers::CoreHelper
Router::Helpers::CoreHelper::CONTROLLER_DELEGATES
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
- .helper_method(*meths) ⇒ Object
- .internal(value = nil) ⇒ Object
-
.process(event, context = {}, meth) ⇒ Object
Overrides Base.process.
Instance Method Summary collapse
- #action_name ⇒ Object
- #controller_paths ⇒ Object
- #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
One key difference between process! vs dispatch!.
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_back, #redirect_to
Methods included from Params
#body_params, #params, #query_parameters
Methods included from Router::Helpers::NamedRoutesHelper
Methods included from Router::Helpers::CoreHelper
Methods included from ForgeryProtection
Methods included from Cookies
Methods inherited from Lambda::Functions
inherited, output_keys, subclasses
Methods included from Lambda::Dsl
Constructor Details
Instance Attribute Details
#request ⇒ Object (readonly)
Returns the value of attribute request.
19 20 21 |
# File 'lib/jets/controller/base.rb', line 19 def request @request end |
#response ⇒ Object (readonly)
Returns the value of attribute response.
19 20 21 |
# File 'lib/jets/controller/base.rb', line 19 def response @response end |
#session ⇒ Object
Returns the value of attribute session.
20 21 22 |
# File 'lib/jets/controller/base.rb', line 20 def session @session end |
Class Method Details
.helper_method(*meths) ⇒ Object
125 126 127 128 129 |
# File 'lib/jets/controller/base.rb', line 125 def helper_method(*meths) meths.each do |meth| Jets::Router::Helpers.define_helper_method(meth) end end |
.internal(value = nil) ⇒ Object
117 118 119 120 121 122 123 |
# File 'lib/jets/controller/base.rb', line 117 def internal(value=nil) if !value.nil? self.internal_controller = value else self.internal_controller end end |
.process(event, context = {}, meth) ⇒ Object
Overrides Base.process
28 29 30 31 32 33 34 35 |
# File 'lib/jets/controller/base.rb', line 28 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
#action_name ⇒ Object
111 112 113 |
# File 'lib/jets/controller/base.rb', line 111 def action_name @meth end |
#controller_paths ⇒ Object
101 102 103 104 105 106 107 108 109 |
# File 'lib/jets/controller/base.rb', line 101 def controller_paths paths = [] klass = self.class while klass != Jets::Controller::Base paths << klass.controller_path klass = klass.superclass end paths end |
#dispatch! ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/jets/controller/base.rb', line 57 def dispatch! t1 = Time.now log_info_start begin if run_before_actions(break_if: -> { @rendered }) send(@meth) action_completed = true else Jets.logger.info "Filter chain halted as #{@last_callback_name} rendered or redirected" end triplet = ensure_render run_after_actions if action_completed rescue Exception => exception rescue_with_handler(exception) || raise triplet = ensure_render end 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
94 95 96 97 98 99 |
# File 'lib/jets/controller/base.rb', line 94 def json_dump(data) JSON.dump(data) rescue Encoding::UndefinedConversionError data['body'] = '[BINARY]' JSON.dump(data) end |
#log_info_start ⇒ Object
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/jets/controller/base.rb', line 82 def log_info_start display_event = @event.dup display_event['body'] = '[BASE64_ENCODED]' if @event['isBase64Encoded'] # JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line 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
One key difference between process! vs dispatch!
process! - takes the request through the middleware stack
dispatch! - does not
Most of the time, you want process! instead of dispatch!
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/jets/controller/base.rb', line 44 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 |