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