Sha256: 41a19ef4a01edbbecfa85c837d9af28fdd4b5afd88ffb147119e445e657097bc

Contents?: true

Size: 1.6 KB

Versions: 23

Compression:

Stored size: 1.6 KB

Contents

# -*- coding: utf-8 -*-
#
# 採番
#

module ActiveRecord::Turntable
  class Sequencer
    extend ActiveSupport::Autoload

    eager_autoload do
      autoload :Api
      autoload :Mysql
      autoload :Barrage
    end

    @@sequence_types = {
      :api => Api,
      :mysql => Mysql,
      :barrage => Barrage
    }

    @@sequences = {}
    @@tables = {}
    cattr_reader :sequences, :tables

    def self.build(klass, sequence_name = nil, cluster_name = nil)
      sequence_name ||= current_cluster_config_for(cluster_name || klass)["seq"].keys.first
      seq_config = current_cluster_config_for(cluster_name || klass)["seq"][sequence_name]
      seq_type = (seq_config["seq_type"] ? seq_config["seq_type"].to_sym : :mysql)
      @@tables[klass.table_name] ||= (@@sequences[sequence_name(klass.table_name, klass.primary_key)] ||= @@sequence_types[seq_type].new(klass, seq_config))
    end

    def self.has_sequencer?(table_name)
      !!@@tables[table_name]
    end

    def self.sequence_name(table_name, pk)
      "#{table_name}_#{pk || 'id'}_seq"
    end

    def self.table_name(seq_name)
      seq_name.split('_').first
    end

    def next_sequence_value
      raise NotImplementedError
    end

    def current_sequence_value
      raise NotImplementedError
    end

    private

    def self.current_cluster_config_for(klass_or_name)
      cluster_name = if klass_or_name.is_a?(Symbol)
                       klass_or_name
                     else
                       klass_or_name.turntable_cluster_name.to_s
                     end
      ActiveRecord::Base.turntable_config["clusters"][cluster_name]
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
activerecord-turntable-2.5.0 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.4.0 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.3.3 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.3.2 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.3.1 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.3.0 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.2.2 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.2.1 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.2.0 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.1 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.0 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.0.rc2 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.0.rc1 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.0.beta2 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.1.0.beta1 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.0.6 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.0.5 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.0.4 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.0.3 lib/active_record/turntable/sequencer.rb
activerecord-turntable-2.0.2 lib/active_record/turntable/sequencer.rb