class Arvados::Model

Public Class Methods

api_exec(method, parameters={}) click to toggle source
# File lib/arvados.rb, line 184
def self.api_exec(method, parameters={})
  api_method = arvados_api.send(api_models_sym).send(method.name.to_sym)
  parameters.each do |k,v|
    parameters[k] = v.to_json if v.is_a? Array or v.is_a? Hash
  end
  # Look for objects expected by request.properties.(key).$ref and
  # move them from parameters (query string) to request body.
  body = nil
  method.discovery_document['request'].
    andand['properties'].
    andand.each do |k,v|
    if v.is_a? Hash and v['$ref']
      body ||= {}
      body[k] = parameters.delete k.to_sym
    end
  end
  result = client.
    execute(:api_method => api_method,
            :authenticated => false,
            :parameters => parameters,
            :body_object => body,
            :headers => {
              :authorization => 'Bearer '+arvados.config['ARVADOS_API_TOKEN']
            })
  resp = JSON.parse result.body, :symbolize_names => true
  if resp[:errors]
    raise Arvados::TransactionFailedError.new(resp[:errors])
  elsif resp[:uuid] and resp[:etag]
    self.new(resp)
  elsif resp[:items].is_a? Array
    resp.merge(:items => resp[:items].collect do |i|
                 self.new(i)
               end)
  else
    resp
  end
end
arvados_api() click to toggle source
# File lib/arvados.rb, line 172
def self.arvados_api
  arvados.arvados_api
end
client() click to toggle source
# File lib/arvados.rb, line 175
def self.client
  arvados.client
end
debuglog(*args) click to toggle source
# File lib/arvados.rb, line 178
def self.debuglog(*args)
  arvados.class.debuglog *args
end
new(j) click to toggle source
# File lib/arvados.rb, line 254
def initialize(j)
  @attributes_to_update = {}
  @attributes = j
end

Public Instance Methods

[](x) click to toggle source
# File lib/arvados.rb, line 226
def [](x)
  if @attributes[x].is_a? Hash or @attributes[x].is_a? Array
    # We won't be notified via []= if these change, so we'll just
    # assume they are going to get changed, and submit them if
    # save() is called.
    @attributes_to_update[x] = @attributes[x]
  end
  @attributes[x]
end
[]=(x,y) click to toggle source
# File lib/arvados.rb, line 222
def []=(x,y)
  @attributes_to_update[x] = y
  @attributes[x] = y
end
debuglog(*args) click to toggle source
# File lib/arvados.rb, line 181
def debuglog(*args)
  self.class.arvados.class.debuglog *args
end
save() click to toggle source
# File lib/arvados.rb, line 235
def save
  @attributes_to_update.keys.each do |k|
    @attributes_to_update[k] = @attributes[k]
  end
  j = self.class.api_exec :update, {
    :uuid => @attributes[:uuid],
    self.class.api_model_sym => @attributes_to_update.to_json
  }
  unless j.respond_to? :[] and j[:uuid]
    debuglog "Failed to save #{self.to_s}: #{j[:errors] rescue nil}", 0
    nil
  else
    @attributes_to_update = {}
    @attributes = j
  end
end