Module: JSONModel::HTTP

Defined in:
common/jsonmodel_client.rb

Class Method Summary (collapse)

Class Method Details

+ (Object) backend_url



105
106
107
108
109
110
111
# File 'common/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

+ (Object) current_backend_session

Returns the session token to be sent to the backend when making requests.



189
190
191
192
# File 'common/jsonmodel_client.rb', line 189

def self.current_backend_session
  # Set by the ApplicationController
  Thread.current[:backend_session]
end

+ (Object) current_backend_session=(val)



195
196
197
# File 'common/jsonmodel_client.rb', line 195

def self.current_backend_session=(val)
  Thread.current[:backend_session] = val
end

+ (Object) delete_request(url)



265
266
267
268
269
# File 'common/jsonmodel_client.rb', line 265

def self.delete_request(url)
  req = Net::HTTP::Delete.new(url.request_uri)

  do_http_request(url, req)
end

+ (Object) do_http_request(url, req, &block)



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'common/jsonmodel_client.rb', line 216

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

+ (Object) form_urlencoded(uri, params)



121
122
123
124
125
# File 'common/jsonmodel_client.rb', line 121

def self.form_urlencoded(uri, params)
  request = Net::HTTP::Post.new(uri)
  request.form_data = params
  request
end

+ (Object) get_json(uri, params = {})



172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'common/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.code == '200'
    ASUtils.json_parse(response.body)
  else
    nil
  end
end

+ (Object) get_response(url)



272
273
274
275
276
# File 'common/jsonmodel_client.rb', line 272

def self.get_response(url)
  req = Net::HTTP::Get.new(url.request_uri)

  do_http_request(url, req)
end

+ (Boolean) high_priority?

Returns:

  • (Boolean)


200
201
202
203
204
205
206
# File 'common/jsonmodel_client.rb', line 200

def self.high_priority?
  if Thread.current[:request_priority]
    Thread.current[:request_priority] == :high
  else
    JSONModel::init_args[:priority] == :high
  end
end

+ (Object) http_conn



209
210
211
212
213
# File 'common/jsonmodel_client.rb', line 209

def self.http_conn
  @http ||= Net::HTTP::Persistent.new 'jsonmodel_client'
  @http.read_timeout = 1200
  @http
end

+ (Object) multipart_request(uri, params)

We override this in the backend’s spec_helper since Rack::Test::Methods doesn’t support multipart requests.



116
117
118
# File 'common/jsonmodel_client.rb', line 116

def self.multipart_request(uri, params)
  Net::HTTP::Post::Multipart.new(uri, params)
end

+ (Object) post_form(uri, params = {}, encoding = :x_www_form_urlencoded)

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.



132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'common/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

+ (Object) post_json(url, json)



244
245
246
247
248
249
250
# File 'common/jsonmodel_client.rb', line 244

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

+ (Object) post_json_file(url, path, &block)



253
254
255
256
257
258
259
260
261
262
# File 'common/jsonmodel_client.rb', line 253

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

+ (Object) stream(uri, params = {}, &block)



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'common/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

+ (Object) with_request_priority(priority)



233
234
235
236
237
238
239
240
241
# File 'common/jsonmodel_client.rb', line 233

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