class Podium::Resource

Constants

HTTP_OPTS

Attributes

name[R]
uri[R]

Public Class Methods

new(uri, name) click to toggle source
# File lib/podium/resource.rb, line 21
def initialize(uri, name)
  @uri = uri
  @name = name
end

Public Instance Methods

fetch(context = {}) click to toggle source
# File lib/podium/resource.rb, line 30
def fetch(context = {})
  response = make_request(content_uri, context)
  check_podlet_version!(response["podlet-version"])
  response.body.force_encoding("UTF-8")
end
manifest() click to toggle source
# File lib/podium/resource.rb, line 26
def manifest
  @manifest ||= fetch_manifest
end

Private Instance Methods

check_podlet_version!(version) click to toggle source
# File lib/podium/resource.rb, line 38
def check_podlet_version!(version)
  return if version == manifest.version

  raise VersionMismatchError.new(version, manifest.version)
end
content_uri() click to toggle source
# File lib/podium/resource.rb, line 66
def content_uri
  URI("#{uri}#{manifest.content}")
end
fetch_manifest() click to toggle source
# File lib/podium/resource.rb, line 44
def fetch_manifest
  Manifest.new(JSON.parse(make_request(manifest_uri, {}).body))
end
make_request(uri, context) click to toggle source
# File lib/podium/resource.rb, line 48
def make_request(uri, context)
  response = Net::HTTP.start(uri.host, uri.port, HTTP_OPTS) do |http|
    request = Net::HTTP::Get.new uri
    context.compact.each do |k, v|
      header = "podium-#{k.to_s.gsub("_", "-")}"
      request[header] = v
    end

    http.request(request)
  end
  raise StandardError, "Non 200 response from podlet" if response.code != "200"
  response
end
manifest_uri() click to toggle source
# File lib/podium/resource.rb, line 62
def manifest_uri
  URI("#{uri}/manifest.json")
end