Module: ModelConcerns::Sequenable::ClassMethods

Defined in:
lib/model_concerns/sequenable.rb

Instance Method Summary collapse

Instance Method Details

#sequence(prefix = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/model_concerns/sequenable.rb', line 8

def sequence(prefix = nil)
  class_eval <<-CODE, __FILE__, __LINE__ + 1
    after_initialize :generate_no
    validates_uniqueness_of :no

    private
    def generate_no
      # 如果序号为空,或者已经被锁定了,就重新创建一个序号
      file = File.open("/tmp/locks/" + self.class.name.underscore.pluralize + "_no.lock", "w")
      file.flock(File::LOCK_EX)

      if self.no.blank?
        self.no = Time.now.strftime("#{prefix}%y%m%d%H%M%S%L")
        sleep(0.001)
      end

      file.flock(File::LOCK_UN)
    end

  CODE
end