Module: SequenceGenerator::ActsAsSequenced::InstanceMethods

Defined in:
app/models/concerns/act_as_sequenced.rb

Instance Method Summary collapse

Instance Method Details

#set_sequential_ids(options) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/models/concerns/act_as_sequenced.rb', line 50

def set_sequential_ids(options)
  return if send(options[:column]).present?
  prefix_id = options[:prefix_column] ? self[options[:prefix_column]] : self.sequence_generator_id
  if prefix_id.present?
    sequence = Sequence.find(prefix_id)
    if sequence.scope.to_s == send(options[:scope]).to_s
      assign_attributes(options[:column]=> sequence.generate_sequence_number)
    else
      errors.add(:sequential_id, 'Sequence is not associated with your branch')
    end
  else
    date_to_consider = Time.now
    if options[:date_column] && send(options[:date_column])
      date_to_consider = send(options[:date_column])
    end
    sequence = Sequence.where(purpose: options[:purpose], scope: send(options[:scope]))
                   .where('valid_from <= ? AND valid_till >= ?', date_to_consider, date_to_consider).first
    unless self.as_json[options[:column]].present?
      if sequence
        sequence.lock!
        assign_attributes(options[:column]=> sequence.generate_sequence_number)
      else
        errors.add(:sequential_id, 'Sequence is not created')
      end
    end
  end
end