Sha256: d6ea82b52888d00030b7df4124a869e4db6172add8d2ff519b53deb307ad06f5

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

require 'purgatory/attribute_accessor_fields'

module PurgatoryModule
  extend ActiveSupport::Concern

  module ClassMethods
    def use_purgatory(options={})
      AttributeAccessorFields.set_local_attributes_to_save(self,options[:local_attributes]) 
      self.has_many :purgatories, as: :soul
    end
  end

  def purgatize(requester = nil, options = {})
    Purgatization.new(self, requester, options)
  end

  def purgatory!(requester = nil, options = {})
    return nil if self.invalid?
    return nil if Purgatory.pending_with_matching_soul(self).any? && options[:fail_if_matching_soul]
    Purgatory.create soul: self, requester: requester, attr_accessor_fields: AttributeAccessorFields.determine_attr_accessor_fields(self)
  end

  class Configuration
    attr_accessor :user_class_name
  end

  class Purgatization
    def initialize(soul, requester, options)
      @soul = soul
      @requester = requester
      @options = options
    end

    def method_missing(method, *args, **kwargs)
      return nil if Purgatory.pending_with_matching_soul(@soul).any? && @options[:fail_if_matching_soul]
      Purgatory.create soul: @soul, requester: @requester, performable_method: { method: method.to_sym, args: args, kwargs: kwargs }
    end
  end

  class << self
    def configure(&block)
      yield(configuration)
      configuration
    end

    def configuration
      @_configuration ||= Configuration.new
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
purgatory-6.0.3 lib/purgatory/purgatory_module.rb
purgatory-6.0.2 lib/purgatory/purgatory_module.rb