Module: Smith::Workflow::DefinitionIdentity::ClassMethods

Defined in:
lib/smith/workflow/definition_identity/class_methods.rb

Instance Method Summary collapse

Instance Method Details

#definition_digest(value = nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/smith/workflow/definition_identity/class_methods.rb', line 15

def definition_digest(value = nil)
  return definition_identity_mutex.synchronize { @definition_digest } if value.nil?

  unless Smith::Types::Sha256Hex.valid?(value)
    raise ArgumentError, "definition_digest must be a lowercase SHA-256 hex digest"
  end

  digest = value.dup.freeze
  definition_identity_mutex.synchronize do
    return @definition_digest if @definition_digest == digest
    if @definition_identity_sealed || frozen?
      raise ArgumentError, "definition_digest is sealed for this workflow class"
    end

    @definition_digest = digest
  end
end

#inherited(subclass) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/smith/workflow/definition_identity/class_methods.rb', line 7

def inherited(subclass)
  super
  digest = definition_identity_mutex.synchronize { @definition_digest }
  subclass.instance_variable_set(:@definition_digest, digest)
  subclass.instance_variable_set(:@definition_identity_mutex, Mutex.new)
  subclass.instance_variable_set(:@definition_identity_sealed, false)
end