Module: PolyId

Defined in:
lib/polyid.rb,
lib/polyid/cache.rb,
lib/polyid/model.rb,
lib/polyid/railtie.rb,
lib/polyid/version.rb,
lib/polyid/binary_uuid_type.rb

Defined Under Namespace

Modules: Cache, Model Classes: BinaryUuidType, Railtie

Constant Summary collapse

UUID_PATTERN =
/\A\h{8}-\h{4}-\h{4}-\h{4}-\h{12}\z/i
VERSION =
Gem.loaded_specs["polyid"].version.to_s

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.auto_detect=(value) ⇒ Object (writeonly)

Sets the attribute auto_detect

Parameters:

  • value

    the value to set the attribute auto_detect to.



18
19
20
# File 'lib/polyid.rb', line 18

def auto_detect=(value)
  @auto_detect = value
end

.cacheObject



20
21
22
# File 'lib/polyid.rb', line 20

def cache
  @cache ||= ActiveSupport::Cache::MemoryStore.new
end

.cache_binary_uuids=(value) ⇒ Object (writeonly)

Sets the attribute cache_binary_uuids

Parameters:

  • value

    the value to set the attribute cache_binary_uuids to.



18
19
20
# File 'lib/polyid.rb', line 18

def cache_binary_uuids=(value)
  @cache_binary_uuids = value
end

.default_uuid_attributeObject



65
66
67
# File 'lib/polyid.rb', line 65

def default_uuid_attribute
  @default_uuid_attribute ||= "uuid"
end

.uuid_generatorObject



42
43
44
# File 'lib/polyid.rb', line 42

def uuid_generator
  @uuid_generator ||= SecureRandom.respond_to?(:uuid_v7) ? :v7 : :v4
end

Class Method Details

.auto_detect?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/polyid.rb', line 61

def auto_detect?
  @auto_detect.nil? ? true : @auto_detect
end

.cache_binary_uuids?Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
# File 'lib/polyid.rb', line 34

def cache_binary_uuids?
  unless instance_variable_defined?(:@cache_binary_uuids)
    @cache_binary_uuids = !!(defined?(Rails) && Rails.respond_to?(:env) && Rails.env.production?)
  end

  @cache_binary_uuids
end

.generate_uuid(generator = nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/polyid.rb', line 46

def generate_uuid(generator = nil)
  generator ||= uuid_generator

  case generator
  when Proc
    generator.call
  when :v7, 7, "v7", "7"
    SecureRandom.uuid_v7
  when :v4, 4, "v4", "4"
    SecureRandom.uuid
  else
    raise ArgumentError, "unsupported uuid generator: #{generator.inspect}"
  end
end

.is_uuid?(value) ⇒ Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
# File 'lib/polyid.rb', line 69

def is_uuid?(value)
  return false unless value.is_a?(String) && UUID_PATTERN.match?(value)

  version = value.getbyte(14).chr.to_i(16)
  variant = value.getbyte(19).chr.to_i(16)

  version.between?(1, 8) && variant.between?(8, 11)
end

.resetObject



24
25
26
27
28
29
30
31
32
# File 'lib/polyid.rb', line 24

def reset
  @cache&.clear if instance_variable_defined?(:@cache)

  remove_instance_variable(:@cache) if instance_variable_defined?(:@cache)
  remove_instance_variable(:@cache_binary_uuids) if instance_variable_defined?(:@cache_binary_uuids)
  remove_instance_variable(:@uuid_generator) if instance_variable_defined?(:@uuid_generator)
  remove_instance_variable(:@auto_detect) if instance_variable_defined?(:@auto_detect)
  remove_instance_variable(:@default_uuid_attribute) if instance_variable_defined?(:@default_uuid_attribute)
end