Module: RackHelpers

Defined in:
lib/stack-service-base/rack_helpers.rb

Class Method Summary collapse

Class Method Details

.rack_setup(app) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/stack-service-base/rack_helpers.rb', line 127

def rack_setup(app)
  # PATCH: for the Grape Swagger
  # https://github.com/ruby-grape/grape-swagger/pull/905
  # https://github.com/ruby-grape/grape-swagger/issues/904
  GrapeSwagger::DocMethods::ParseParams.instance_eval do
    def parse_enum_or_range_values(values)
      case values
      when Proc
        parse_enum_or_range_values(values.call) if values.parameters.empty?
      when Range
        parse_range_values(values) # if values.first.is_a?(Integer) TODO
      when Array
        { enum: values }
      else
        { enum: [values] } if values
      end
    end
  end if defined? GrapeSwagger::DocMethods::ParseParams

  app.use Rack.middleware_klass do |env, app|
    # env['REQUEST_PATH'] == '/healthcheck' ? [200, {}, ['Healthy']] : app.call(env)
    env['PATH_INFO'] == '/healthcheck' ? [200, {'Content-Type' =>'application/json'}, [{ Status: 'Healthy' }.to_json ]] : app.call(env)
  end

  if defined? OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware
    use OpenTelemetry::Instrumentation::Rack::Middlewares::TracerMiddleware
  end
  app.use Rack::Deflater
  app.use OTELTraceInfo

  unless defined?(PERFORMANCE) && PERFORMANCE
    app.use RequestProfile
    app.use HeadersLogger

    if defined? Rack::ODataCommonLogger
      app.use Rack::ODataCommonLogger, LOGGER # or use Rack::CommonLogger, LOGGER
    end
  end

  app.use Rack.middleware_klass do |env, app|
    code, headers, body = env['REQUEST_METHOD'] == 'OPTIONS' ? [200, {}, []] : app.call(env)

    # scheme = env['rack.url_scheme']
    # referer = URI.parse env['HTTP_REFERER']
    headers.merge!(
      # 'Access-Control-Allow-Origin' => "#{referer.scheme}://#{referer.host}",
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Allow-Methods' => 'GET, PUT, POST, DELETE, HEAD, OPTIONS',
      'Access-Control-Allow-Headers' => '*',
      'Access-Control-Allow-Credentials' => 'true')
    [code, headers, body]
  end

  # unless @run
  #   run ->(_env) { [200, {'Content-Type' => 'text/plain'}, ['OK!?']] }
  # end
end