module Cirneco::Utils

Constants

UPPER_LIMIT

32 by the factor of 6

Public Instance Methods

decode_doi(doi) click to toggle source
# File lib/cirneco/utils.rb, line 53
def decode_doi(doi)
  prefix, string = doi.split('/', 2)
  Base32::URL.decode(string, checksum: true)
end
encode_doi(prefix, options={}) click to toggle source
# File lib/cirneco/utils.rb, line 58
def encode_doi(prefix, options={})
  prefix = validate_prefix(prefix)
  return nil unless prefix.present?

  number = options[:number].to_s.scan(/\d+/).join("").to_i
  number = SecureRandom.random_number(UPPER_LIMIT) unless number > 0
  shoulder = options[:shoulder].to_s
  shoulder += "-" if shoulder.present?
  length = 8
  split = 4
  prefix.to_s + "/" + shoulder + Base32::URL.encode(number, split: split, length: length, checksum: true)
end
generate_accession_number(options={}) click to toggle source
# File lib/cirneco/utils.rb, line 71
def generate_accession_number(options={})
  lower_limit = options[:lower_limit] || 0
  namespace = options[:namespace] || 'MS-'
  registered_numbers = options[:registered_numbers] || []

  if options[:number]
    number = options[:number].to_s
  else
    begin
      number = SecureRandom.random_number(1000000) + lower_limit
    end while registered_numbers.include? number
    number = number.to_s
  end

  number = number.to_s.rjust(options[:length], '0') if options[:length]

  if options[:split]
    number = number.reverse
    number = number.scan(/.{1,#{options[:split]}}/).map { |x| x.reverse }
    number = number.reverse.join("-")
  end

  namespace + number
end
generate_state_change_template(options={}) click to toggle source
# File lib/cirneco/utils.rb, line 41
def generate_state_change_template(options={})
  response = {
    "data" => {
      "type" => "dois",
      "attributes" => {
        "event" => options[:operation]
      }
    }
  }
  response
end
generate_transfer_template(options={}) click to toggle source
# File lib/cirneco/utils.rb, line 21
def generate_transfer_template(options={})
  response = {
    "data" => {
      "type" => "dois",
      "attributes" => {
        "mode" => "transfer"
      },
      "relationships"=> {
        "client"=>  {
          "data"=> {
            "type"=> "clients",
            "id"=> options[:target].downcase
          }
        }
      }
    }
  }
  response
end
get_dois_by_prefix(prefix, options={}) click to toggle source
# File lib/cirneco/utils.rb, line 12
def get_dois_by_prefix(prefix, options={})
  response = get_dois(options)

  if response.body["data"].present?
    response.body["data"] = response.body["data"].select { |doi| doi.start_with?(prefix) }
  end
  response
end