class Dataverse::Dataverse

Constants

SAMPLE_DATA
TYPES

Attributes

id[R]

Public Class Methods

id(id) click to toggle source
# File lib/dataverse/dataverse.rb, line 11
def self.id(id)
  new(id)
rescue RestClient::NotFound
  nil
end
new(id) click to toggle source
# File lib/dataverse/dataverse.rb, line 140
def initialize(id)
  @id = id
  init(get_data)
end
root() click to toggle source
# File lib/dataverse/dataverse.rb, line 17
def self.root
  id(':root')
end

Public Instance Methods

call(url, **args) click to toggle source
# File lib/dataverse/dataverse.rb, line 73
def call(url, **args)
  api_call("dataverses/#{id}/#{url}", **args)
end
children() click to toggle source
# File lib/dataverse/dataverse.rb, line 77
def children
  @children ||= begin
    result = []
    data = call("contents")
    data.each do |x|
      case x['type']
      when 'dataverse'
        result << Dataverse.id(x['id'])
      when 'dataset'
        result << Dataset.id(x['id'])
      else
        raise Error.new("Unsupported type: #{x['type']} (#{x['name']})")
      end
    end
    result
  end
end
create(data) click to toggle source
# File lib/dataverse/dataverse.rb, line 34
def create(data)
  data = StringIO.new(data.to_json) if data.is_a?(Hash)
  if data.is_a?(String)
    begin
      if File.exist?(data)
        data = File.open(data, 'r')
      elsif JSON::parse(data)
        data = StringIO.new(data)
      end
    rescue JSON::ParserError, File
      data = nil
    end
  end
  
  unless data.is_a?(File) || data.is_a?(StringIO)
    raise Error.new("Data could not be parsed. Should be a Hash, filename or JSON string.")
  end

  result = call('', method: :post, body: data)
  
  dv = Dataverse.new(nil)
  dv.init(result)
  dv.instance_variable_set('@id', result['id'])
  return dv

ensure
  data.close if data.is_a?(File)

end
delete() click to toggle source
# File lib/dataverse/dataverse.rb, line 69
def delete
  call('', method: :delete)['message']
end
each_dataset() { |child| ... } click to toggle source
# File lib/dataverse/dataverse.rb, line 106
def each_dataset(&block)
  data = []
  children.each do |child|
    if child.is_a?(Dataverse)
      data += child.each_dataset(&block)
    elsif child.is_a?(Dataset)
      data << (block_given? ? yield(child) : child)
    end
  end
  data
end
each_dataverse() { |child| ... } click to toggle source
# File lib/dataverse/dataverse.rb, line 95
def each_dataverse(&block)
  data = []
  children.each do |child|
    if child.is_a?(Dataverse)
      data << (block_given? ? yield(child) : child)
      data += child.each_dataverse(&block)
    end
  end
  data
end
export_metadata(md_type) click to toggle source
# File lib/dataverse/dataverse.rb, line 129
def export_metadata(md_type)
  case md_type.to_s
  when 'rdm'
    return rdm_data
  else
    raise Error.new("Unknown metadata format: '#{md_type}'")
  end
end
publish() click to toggle source
# File lib/dataverse/dataverse.rb, line 64
def publish
  call("actions/:publish", method: :post)
  return "Dataverse #{id} published"
end
rdm_data() click to toggle source
# File lib/dataverse/dataverse.rb, line 125
def rdm_data
  api_data
end
size() click to toggle source
# File lib/dataverse/dataverse.rb, line 118
def size
  @size ||= begin
    data = api_call("dataverses/#{id}/storagesize")
    data['message'][/[,\d]+/].delete(',').to_i
  end
end

Protected Instance Methods

get_data() click to toggle source
# File lib/dataverse/dataverse.rb, line 151
def get_data
  return unless id
  api_call("dataverses/#{id}")
end
init(data) click to toggle source
Calls superclass method Dataverse::Base#init
# File lib/dataverse/dataverse.rb, line 145
def init(data)
  @size = nil
  @children = nil
  super(data)
end