14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/expected_behavior/acts_as_archival.rb', line 14
def acts_as_archival(options = { })
unless included_modules.include? InstanceMethods
include InstanceMethods
before_validation :raise_if_not_archival
validate :readonly_when_archived if options[:readonly_when_archived]
scope :archived, lambda { where.not(:archived_at => nil, :archive_number => nil) }
scope :unarchived, lambda { where(:archived_at => nil, :archive_number => nil) }
scope :archived_from_archive_number, lambda { |head_archive_number| where(['archived_at IS NOT NULL AND archive_number = ?', head_archive_number]) }
callbacks = ['archive','unarchive']
if ActiveSupport::VERSION::STRING >= '5'
define_callbacks(*[callbacks].flatten)
elsif ActiveSupport::VERSION::STRING >= '4'
define_callbacks(*[callbacks, {:terminator => -> (_, result) { result == false }}].flatten)
end
callbacks.each do |callback|
eval <<-end_callbacks
unless defined?(before_#{callback})
def before_#{callback}(*args, &blk)
set_callback(:#{callback}, :before, *args, &blk)
end
end
unless defined?(after_#{callback})
def after_#{callback}(*args, &blk)
set_callback(:#{callback}, :after, *args, &blk)
end
end
end_callbacks
end
end
end
|