module JSONModel::Client

Public Class Methods

included(base) click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 283
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

add_error(field, message) click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 395
def add_error(field, message)
  @errors ||= {}
  @errors[field.to_s] ||= []
  @errors[field.to_s] << message
end
delete() click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 354
def delete
  response = JSONModel::HTTP.delete_request(self.class.my_url(self.id))

  if response.code == '200'
    true
  elsif response.code == '403'
    raise AccessDeniedException.new
  elsif response.code == '404'
    nil
  elsif response.code == '409'
    err = ASUtils.json_parse(response.body)
    raise ConflictException.new(err["error"])
  else
    raise Exception.new("Unknown response: #{response}")
  end
end
refetch() click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 343
def refetch
  # if a new object, nothing to fetch
  return self if self.id.nil?

  obj = (self.instance_data.has_key? :find_opts) ?
            self.class.find(self.id, self.instance_data[:find_opts]) : self.class.find(self.id)

  self.reset_from(obj) if not obj.nil?
end
save(opts = {}, whole_body = false) click to toggle source

Validate this JSONModel instance, produce a JSON string, and send an update to the backend.

# File lib/aspace_client/jsonmodel_client.rb, line 290
def save(opts = {}, whole_body = false)

  clear_errors

  type = self.class.record_type
  response = JSONModel::HTTP.post_json(self.class.my_url(self.id, opts),
                                       self.to_json)

  if response.code == '200'
    response = ASUtils.json_parse(response.body)

    self.uri = self.class.uri_for(response["id"], opts)

    # If we were able to save successfully, increment our local version
    # number to match the version on the server.
    self.lock_version = response["lock_version"]

    # Ensure object is up to date
    if response["stale"]
      self.refetch
    end

    return whole_body ? response : response["id"]

  elsif response.code == '403'
    raise AccessDeniedException.new

  elsif response.code == '409'
    err = ASUtils.json_parse(response.body)
    raise ConflictException.new(err["error"])

  elsif response.code == '404'
    raise RecordNotFound.new

  elsif response.code =~ /^4/
    err = ASUtils.json_parse(response.body)

    if err["error"].is_a?(Hash)
      err["error"].each do |field, errors|
        errors.each do |msg|
          add_error(field, msg)
        end
      end
    end

    raise ValidationException.new(:invalid_object => self,
                                  :errors => err["error"])
  else
    raise Exception.new("Unknown response: #{response.body} (code: #{response.code})")
  end
end
set_suppressed(val) click to toggle source

Mark the suppression status of this record

# File lib/aspace_client/jsonmodel_client.rb, line 372
def set_suppressed(val)
  response = JSONModel::HTTP.post_form("#{self.uri}/suppressed", :suppressed => val)

  if response.code == '403'
    raise AccessDeniedException.new("Permission denied when setting suppression status")
  elsif response.code != '200'
    raise "Error when setting suppression status for #{self}: #{response.code} -- #{response.body}"
  end

  self["suppressed"] = ASUtils.json_parse(response.body)["suppressed_state"]
end
suppress() click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 385
def suppress
  set_suppressed(true)
end
unsuppress() click to toggle source
# File lib/aspace_client/jsonmodel_client.rb, line 390
def unsuppress
  set_suppressed(false)
end