Module: UniversalID

Defined in:
lib/universalid.rb,
lib/universalid/version.rb

Defined Under Namespace

Modules: Encoder, Extensions, Refinements Classes: Packer, PrepackDatabaseOptions, PrepackOptions, Prepacker, Settings

Constant Summary collapse

VERSION =
"0.1.7"
MessagePackFactory =
MessagePack::Factory.new.tap do |factory|
  class << factory
    attr_reader :msgpack_pool

    def create_msgpack_pool
      @msgpack_pool = UniversalID::MessagePackFactory.pool([Etc.nprocessors.to_i, 1].max)
    end

    def register_scalar(type:, recreate_pool: true, **options)
      register id: next_type_id(order: :asc), type: type, **options
    end

    def register(type:, id: nil, recreate_pool: true, **options)
      options[:recursive] = true unless options.key?(:recursive)
      register_type(id || next_type_id(order: :desc), type, options)
      create_msgpack_pool if recreate_pool
    end

    def next_type_id(order:)
      range = 0..127

      case order
      when :asc
        id = range.first
        id += 1 while type_registered?(id)
      when :desc
        id = range.last
        id -= 1 while type_registered?(id)
      end

      id = nil unless range.cover?(id)
      id
    end
  end
end

Class Attribute Summary collapse

Class Attribute Details

.loggerObject



12
13
14
# File 'lib/universalid.rb', line 12

def logger
  @logger ||= defined?(Rails) ? Rails.logger : Logger.new(File::NULL)
end