Module: Multimeter::Http

Defined in:
lib/multimeter.rb

Defined Under Namespace

Classes: BadRequest

Constant Summary collapse

COMMON_HEADERS =
{'Connection' => 'close'}.freeze
JSON_HEADERS =
COMMON_HEADERS.merge('Content-Type' => 'application/json').freeze
JSONP_HEADERS =
COMMON_HEADERS.merge('Content-Type' => 'application/javascript').freeze
ERROR_HEADERS =
COMMON_HEADERS.merge('Content-Type' => 'text/plain').freeze

Class Method Summary collapse

Class Method Details

.create_app(registry) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/multimeter.rb', line 124

def self.create_app(registry)
  proc do |env|
    begin
      body = registry.to_h.to_json
      headers = JSON_HEADERS
      if (callback_name = env['QUERY_STRING'][/callback=([^$&]+)/, 1])
        if callback_name =~ /^[\w\d.]+$/
          body = "#{callback_name}(#{body});"
          headers = JSONP_HEADERS
        else
          raise BadRequest
        end
      else
        headers = headers.merge('Access-Control-Allow-Origin' => '*')
      end
      [200, headers, [body]]
    rescue BadRequest => e
      [400, ERROR_HEADERS, ['Bad Request']]
    rescue => e
      [500, ERROR_HEADERS, ["Internal Server Error\n\n", e.message, "\n\t", *e.backtrace.join("\n\t")]]
    end
  end
end