Sha256: 010114d67904cb99747ea29aa1620210a35bd53bb0c312b2a311f1db220570b2

Contents?: true

Size: 983 Bytes

Versions: 17

Compression:

Stored size: 983 Bytes

Contents

module Earthquake
  module IdVar
    attr_accessor :id_var

    def id2var(id)
      id_var.id2var(id)
    end

    def var2id(var)
      id_var.var2id(var)
    end

    class Gen
      def initialize(vars = "aa".."zz", prefix = "$")
        unless Range === vars and String === vars.first
          raise ArgumentError, "vars should be a Range of String"
        end
        @vars = vars
        @var = @vars.last.dup
        @table = ActiveSupport::Cache::MemoryStore.new
        @prefix = prefix
      end

      def var2id(var)
        @table.read(var)
      end

      def id2var(id)
        @table.read(id) || succ(id)
      end

      private

      def succ(id)
        @var.replace(@vars.first.dup) unless @vars.include?(@var.next!)
        var = @prefix + @var
        @table.delete(@table.read(var))
        @table.write(var, id)
        @table.write(id, var)
        var.dup
      end
    end
  end

  extend IdVar

  init do
    self.id_var ||= IdVar::Gen.new
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
earthquake-1.0.0 lib/earthquake/id_var.rb
earthquake-0.9.4 lib/earthquake/id_var.rb
earthquake-0.9.3 lib/earthquake/id_var.rb
earthquake-0.9.2 lib/earthquake/id_var.rb
earthquake-0.9.1 lib/earthquake/id_var.rb
earthquake-0.9.0 lib/earthquake/id_var.rb
earthquake-0.8.5 lib/earthquake/id_var.rb
earthquake-0.8.4 lib/earthquake/id_var.rb
earthquake-0.8.3 lib/earthquake/id_var.rb
earthquake-0.8.2 lib/earthquake/id_var.rb
earthquake-0.8.0 lib/earthquake/id_var.rb
earthquake-0.7.5 lib/earthquake/id_var.rb
earthquake-0.7.4 lib/earthquake/id_var.rb
earthquake-0.7.2 lib/earthquake/id_var.rb
earthquake-0.7.1 lib/earthquake/id_var.rb
earthquake-0.7.0 lib/earthquake/id_var.rb
earthquake-0.6.12 lib/earthquake/id_var.rb