class Cirneco::Doi

Public Instance Methods

accession_number() click to toggle source
# File lib/cirneco/doi.rb, line 92
def accession_number
  puts generate_accession_number(options)
end
bulk_state_change(file) click to toggle source
# File lib/cirneco/doi.rb, line 148
def bulk_state_change(file)
  count = 0
  File.foreach(file) do |line|
    doi = line.rstrip
    next unless doi.present?

    previous_state, operation = case options[:target_state]
    when "findable"
      ["registered", "publish"]
    when "registered"
      ["draft", "register"]
    end

    meta = generate_state_change_template({operation: operation})

    metadata_reponse = get_rest_doi(doi, options)

    unless [200].include?(metadata_reponse.status)
      puts "#{doi} was not found #{metadata_reponse.status}"
      next
    end
    
    metadata = JSON.parse(metadata_reponse.body.fetch("data", []))
    if metadata.dig("data","attributes","state") == previous_state
      response = update_rest_doi(doi, options.merge(data: meta.to_json))
    else
      puts "#{doi} is in the wrong state for change. #{doi} was not changed"
      next
    end

    if [200, 201].include?(response.status)
      puts "#{doi} Updated to #{options[:target_state]}."
      count += 1
    else
      puts "Error: #{doi} " + response.body["errors"].first.fetch("title", "An error occured")
    end
  end

  puts "#{count} DOIs updated."
end
check(doi) click to toggle source
# File lib/cirneco/doi.rb, line 108
def check(doi)
  unless decode_doi(doi).nil?
    puts "Checksum for #{doi} is valid"
  else
    puts "Checksum for #{doi} is not valid"
  end
end
decode(doi) click to toggle source
# File lib/cirneco/doi.rb, line 97
def decode(doi)
  number = decode_doi(doi)

  unless number.nil?
    puts "DOI #{doi} was encoded with #{number}"
  else
    puts "DOI #{doi} could not be decoded"
  end
end
generate() click to toggle source
# File lib/cirneco/doi.rb, line 80
def generate
  if options[:prefix]
    puts encode_doi(options[:prefix], number: options[:number])
  else
    puts "No PREFIX provided. Use --prefix option or PREFIX ENV variable"
  end
end
get(doi) click to toggle source
# File lib/cirneco/doi.rb, line 21
def get(doi)
  if doi == "all"
    response = get_dois(options)
  else
    response = get_doi(doi, options)
  end

  if response.body["errors"]
    puts "Error: " + response.body["errors"].first.fetch("title", "An error occured")
  elsif doi == "all"
    puts response.body["data"][0...options[:limit]]
  else
    puts response.body["data"]
  end
end
post(file) click to toggle source
# File lib/cirneco/doi.rb, line 56
def post(file)
  data = JSON.parse(IO.read(file))
  count = 0
  data.each do |json|
    doi = doi_from_url(json["@id"])
    url = json["url"]
    next unless doi.present? && url.present?

    response = put_doi(doi, options.merge(url: url))

    if [200, 201].include?(response.status)
      puts "#{doi} registered/updated."
      count += 1
    else
      puts "Error: " + response.body["errors"].first.fetch("title", "An error occured")
    end
  end

  puts "#{count} DOIs registered/updated."
end
put(doi) click to toggle source
# File lib/cirneco/doi.rb, line 42
def put(doi)
  response = put_doi(doi, options)

  if response.body["errors"]
    puts "Error: " + response.body["errors"].first.fetch("title", "An error occured")
  else
    puts response.body["data"]
  end
end
transfer(file) click to toggle source
# File lib/cirneco/doi.rb, line 122
def transfer(file)
  count = 0
  File.foreach(file) do |line|
    doi = line.rstrip
    next unless doi.present?
    meta = generate_transfer_template(options)

    response = transfer_doi(doi, options.merge(data: meta.to_json))

    if [200, 201].include?(response.status)
      puts "#{doi} Transfered to #{options[:target]}."
      count += 1
    else
      puts "Error: " + response.body["errors"].first.fetch("title", "An error occured")
    end
  end

  puts "#{count} DOIs transfered."
end