module Sanity::Http::Query

Attributes

resource_klass[R]
result_wrapper[R]

Public Class Methods

included(base) click to toggle source
# File lib/sanity/http/query.rb, line 11
def included(base)
  base.extend(ClassMethods)
  base.extend(Forwardable)
  base.delegate(%i[project_id api_version dataset token] => :"Sanity.config")
end
new(**args) click to toggle source

@todo Add query support

# File lib/sanity/http/query.rb, line 27
def initialize(**args)
  @resource_klass = args.delete(:resource_klass)
  @result_wrapper = args.delete(:result_wrapper) || Sanity::Http::Results
end

Public Instance Methods

call() { |call| ... } click to toggle source

@todo Add query support

# File lib/sanity/http/query.rb, line 33
def call
  http = Net::HTTP.new(uri.host, uri.port)

  http.use_ssl = uri.scheme == "https"

  request = Module.const_get("Net::HTTP::#{method.to_s.classify}").new(uri, headers)

  request.body = request_body

  http.request(request).then do |result|
    data = JSON.parse(result.body)

    block_given? ? yield(result_wrapper.call(data)) : result_wrapper.call(data)
  end
end

Private Instance Methods

base_url() click to toggle source
# File lib/sanity/http/query.rb, line 58
def base_url
  "https://#{project_id}.api.sanity.io/#{api_version}/#{api_endpoint}/#{dataset}"
end
headers() click to toggle source
# File lib/sanity/http/query.rb, line 62
def headers
  {
    "Content-Type": "application/json",
    Authorization: "Bearer #{token}"
  }
end
method() click to toggle source
# File lib/sanity/http/query.rb, line 54
def method
  :get
end
request_body() click to toggle source
# File lib/sanity/http/query.rb, line 51
def request_body
end
uri() click to toggle source
# File lib/sanity/http/query.rb, line 69
def uri
  URI(base_url)
end