Sha256: 410c8fb6bb4c8d3f050139e2a46aebf2f7db4f57f430dba2029e9a751c9eff97
Contents?: true
Size: 1.42 KB
Versions: 4
Compression:
Stored size: 1.42 KB
Contents
require_relative "../exceptions" module Statesman module Adapters class ActiveRecord attr_reader :transition_class attr_reader :parent_model def initialize(transition_class, parent_model) unless transition_class.serialized_attributes.include?("metadata") raise UnserializedMetadataError, "#{transition_class.name}#metadata is not serialized" end @transition_class = transition_class @parent_model = parent_model end def create(to, before_cbs, after_cbs, metadata = {}) transition = transitions_for_parent.build(to_state: to, sort_key: next_sort_key, metadata: metadata) ::ActiveRecord::Base.transaction do before_cbs.each { |cb| cb.call(@parent_model, transition) } transition.save! after_cbs.each { |cb| cb.call(@parent_model, transition) } @last_transition = nil end transition end def history transitions_for_parent.order(:sort_key) end def last @last_transition ||= transitions_for_parent.order(:sort_key).last end private def transitions_for_parent @parent_model.send(@transition_class.table_name) end def next_sort_key (last && last.sort_key + 10) || 0 end end end end
Version data entries
4 entries across 4 versions & 1 rubygems