Sha256: bc852aec1041b20fce9bb7712ba2f1482a20427ff3ce75d6ef942bba45cd00d0
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
require 'base32/crockford' require 'securerandom' require 'bergamasco' require 'open-uri' require 'time' module Cirneco module Utils # "ZZZZZZZ" decoded as number UPPER_LIMIT = 34359738367 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 def decode_doi(doi) prefix, string = doi.split('/', 2) Base32::Crockford.decode(string.upcase, checksum: true).to_i end def encode_doi(prefix, options={}) prefix = validate_prefix(prefix) return nil unless prefix.present? number = options[:number].to_s.scan(/\d+/).first.to_i number = SecureRandom.random_number(UPPER_LIMIT) unless number > 0 shoulder = options[:shoulder].to_s length = shoulder.length > 0 ? 6 : 8 split = shoulder.length > 0 ? nil : 4 prefix.to_s + "/" + shoulder + Base32::Crockford.encode(number, split: split, length: length, checksum: true).downcase end 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 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cirneco-0.9.15 | lib/cirneco/utils.rb |