/usr/lib/ruby/vendor_ruby/global_id/global_id.rb is in ruby-globalid 0.3.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | require 'active_support'
require 'active_support/core_ext/string/inflections' # For #model_class constantize
require 'active_support/core_ext/array/access'
require 'active_support/core_ext/object/try' # For #find
require 'active_support/core_ext/module/delegation'
require 'global_id/uri/gid'
class GlobalID
class << self
attr_reader :app
def create(model, options = {})
if app = options.fetch(:app) { GlobalID.app }
params = options.except(:app, :verifier, :for)
new URI::GID.create(app, model, params), options
else
raise ArgumentError, 'An app is required to create a GlobalID. ' \
'Pass the :app option or set the default GlobalID.app.'
end
end
def find(gid, options = {})
parse(gid, options).try(:find, options)
end
def parse(gid, options = {})
gid.is_a?(self) ? gid : new(gid, options)
rescue URI::Error
parse_encoded_gid(gid, options)
end
def app=(app)
@app = URI::GID.validate_app(app)
end
private
def parse_encoded_gid(gid, options)
new(Base64.urlsafe_decode64(repad_gid(gid)), options) rescue nil
end
# We removed the base64 padding character = during #to_param, now we're adding it back so decoding will work
def repad_gid(gid)
padding_chars = gid.length.modulo(4).zero? ? 0 : (4 - gid.length.modulo(4))
gid + ('=' * padding_chars)
end
end
attr_reader :uri
delegate :app, :model_name, :model_id, :params, :to_s, to: :uri
def initialize(gid, options = {})
@uri = gid.is_a?(URI::GID) ? gid : URI::GID.parse(gid)
end
def find(options = {})
Locator.locate self, options
end
def model_class
model_name.constantize
end
def ==(other)
other.is_a?(GlobalID) && @uri == other.uri
end
def to_param
# remove the = padding character for a prettier param -- it'll be added back in parse_encoded_gid
Base64.urlsafe_encode64(to_s).sub(/=+$/, '')
end
end
|