module JSONModel::HTTP
Public Class Methods
backend_url()
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 105 def self.backend_url if Module.const_defined?(:BACKEND_SERVICE_URL) BACKEND_SERVICE_URL else JSONModel::init_args[:url] end end
current_backend_session()
click to toggle source
Returns the session token to be sent to the backend when making requests.
# File lib/aspace_client/jsonmodel_client.rb, line 188 def self.current_backend_session # Set by the ApplicationController Thread.current[:backend_session] end
current_backend_session=(val)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 194 def self.current_backend_session=(val) Thread.current[:backend_session] = val end
delete_request(url)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 264 def self.delete_request(url) req = Net::HTTP::Delete.new(url.request_uri) do_http_request(url, req) end
do_http_request(url, req, &block)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 215 def self.do_http_request(url, req, &block) req['X-ArchivesSpace-Session'] = current_backend_session if high_priority? req['X-ArchivesSpace-Priority'] = "high" end response = http_conn.request(url, req, &block) if response.code =~ /^4/ JSONModel::handle_error(ASUtils.json_parse(response.body)) end response end
form_urlencoded(uri, params)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 121 def self.form_urlencoded(uri, params) request = Net::HTTP::Post.new(uri) request.form_data = params request end
get_json(uri, params = {})
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 172 def self.get_json(uri, params = {}) uri = URI("#{backend_url}#{uri}") uri.query = URI.encode_www_form(params) response = get_response(uri) if response.is_a?(Net::HTTPSuccess) || response.status == 200 ASUtils.json_parse(response.body) else nil end end
get_response(url)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 271 def self.get_response(url) req = Net::HTTP::Get.new(url.request_uri) do_http_request(url, req) end
high_priority?()
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 199 def self.high_priority? if Thread.current[:request_priority] Thread.current[:request_priority] == :high else JSONModel::init_args[:priority] == :high end end
http_conn()
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 208 def self.http_conn @http ||= Net::HTTP::Persistent.new 'jsonmodel_client' @http.read_timeout = 1200 @http end
multipart_request(uri, params)
click to toggle source
We override this in the backend’s spec_helper since Rack::Test::Methods doesn’t support multipart requests.
# File lib/aspace_client/jsonmodel_client.rb, line 116 def self.multipart_request(uri, params) Net::HTTP::Post::Multipart.new(uri, params) end
post_form(uri, params = {}, encoding = :x_www_form_urlencoded)
click to toggle source
Perform a HTTP
POST request against the backend with form parameters
‘encoding’ is either :x_www_form_urlencoded or :multipart_form_data. The latter is useful if you’re providing a file upload.
# File lib/aspace_client/jsonmodel_client.rb, line 132 def self.post_form(uri, params = {}, encoding = :x_www_form_urlencoded) url = URI("#{backend_url}#{uri}") req = if encoding == :x_www_form_urlencoded self.form_urlencoded(url.request_uri, params) elsif encoding == :multipart_form_data self.multipart_request(url.request_uri, params) else raise "Unknown form encoding: #{encoding.inspect}" end do_http_request(url, req) end
post_json(url, json)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 243 def self.post_json(url, json) req = Net::HTTP::Post.new(url.request_uri) req['Content-Type'] = 'text/json' req.body = json do_http_request(url, req) end
post_json_file(url, path, &block)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 252 def self.post_json_file(url, path, &block) File.open(path) do |fh| req = Net::HTTP::Post.new(url.request_uri) req['Content-Type'] = 'text/json' req['Content-Length'] = File.size(path) req.body_stream = fh do_http_request(url, req, &block) end end
stream(uri, params = {}, &block)
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 147 def self.stream(uri, params = {}, &block) uri = URI("#{backend_url}#{uri}") uri.query = URI.encode_www_form(params) req = Net::HTTP::Get.new(uri.request_uri) req['X-ArchivesSpace-Session'] = current_backend_session if high_priority? req['X-ArchivesSpace-Priority'] = "high" end Net::HTTP.start(uri.host, uri.port) do |http| http.request(req, nil) do |response| if response.code =~ /^4/ JSONModel::handle_error(ASUtils.json_parse(response.body)) raise response.body end block.call(response) end end end
with_request_priority(priority) { || ... }
click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 232 def self.with_request_priority(priority) old = Thread.current[:request_priority] Thread.current[:request_priority] = priority begin yield ensure Thread.current[:request_priority] = old end end