Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 10 additions & 16 deletions lib/sequenced/acts_as_sequenced.rb
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
require "active_support/core_ext/hash/slice"
require "active_support/core_ext/class/attribute_accessors"

module Sequenced
module ActsAsSequenced
extend ActiveSupport::Concern

DEFAULT_OPTIONS = {
column: :sequential_id,
start_at: 1
}.freeze
SequencedColumnExists = Class.new(StandardError)

def self.included(base)
base.extend ClassMethods
end

module ClassMethods
# Public: Defines ActiveRecord callbacks to set a sequential ID scoped
# on a specific class.
Expand Down Expand Up @@ -40,14 +37,11 @@ module ClassMethods
# Returns nothing.
def acts_as_sequenced(options = {})
unless defined?(sequenced_options)
include Sequenced::ActsAsSequenced::InstanceMethods

mattr_accessor :sequenced_options, instance_accessor: false
self.sequenced_options = []

before_save :set_sequential_ids
mattr_accessor :sequenced_options, instance_accessor: false, default: []
end

before_save :set_sequential_ids

options = DEFAULT_OPTIONS.merge(options)
column_name = options[:column]

Expand All @@ -63,11 +57,11 @@ def acts_as_sequenced(options = {})
end
end

module InstanceMethods
def set_sequential_ids
self.class.base_class.sequenced_options.each do |options|
Sequenced::Generator.new(self, options).set
end
private

def set_sequential_ids
self.class.base_class.sequenced_options.each do |options|
Sequenced::Generator.new(self, options).set
end
end
end
Expand Down