Module: ActsAsSequence::Extension::ClassMethods
- Defined in:
- lib/acts_as_sequence/extension.rb
Instance Method Summary collapse
Instance Method Details
#acts_as_sequenced(field, sequencer, *args) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/acts_as_sequence/extension.rb', line 9 def acts_as_sequenced(field, sequencer, *args) field = field.to_sym = args. sequence_name = .delete(:sequence) || "#{field}_#{self.name.underscore}" after_initialize do write_attribute(field, sequencer.next_sequence_value(sequence_name)) if read_attribute(field).blank? && new_record? end (class << self; self; end).send(:define_method, :"next_sequence_#{field}") do sequencer.next_sequence_value(sequence_name) end end |
#acts_as_sequencer ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/acts_as_sequence/extension.rb', line 23 def acts_as_sequencer class_eval do def self.next_sequence_value(sequence) raise ArgumentError, "Sequence column #{sequence} not found in model #{name}" unless column_names.include?(sequence.to_s) transaction do record = first(:lock => true) record = create! if record.nil? value = record[sequence].to_i record[sequence] = value + 1 record.save! value end end end end |