Module: Hyperactive::Transactions::Accessors::ClassMethods

Defined in:
lib/hyperactive/transactions.rb

Overview

The class methods that help us set/get instance variables in a transactionally aware way.

Instance Method Summary collapse

Instance Method Details

#attr_accessor(*attributes) ⇒ Object

Works like normal attr_accessor but with transactional awareness.



85
86
87
88
# File 'lib/hyperactive/transactions.rb', line 85

def attr_accessor(*attributes)
  attr_reader(*attributes)
  attr_writer(*attributes)
end

#attr_reader(*attributes) ⇒ Object

Works like normal attr_reader but with transactional awareness.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/hyperactive/transactions.rb', line 45

def attr_reader(*attributes)
  super
  attributes.each do |attribute|
    alias_method "hyperactive_transactions_accessors_#{attribute}", attribute
    define_method(attribute) do
      value = self.send("hyperactive_transactions_accessors_#{attribute}")
      if Archipelago::Treasure::Dubloon === value
        if @transaction ||= nil
          return value.join(@transaction)
        else
          return value
        end
      else
        return value
      end
    end
  end
end

#attr_writer(*attributes) ⇒ Object

Works like normal attr_writer but with transactional awareness.



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/hyperactive/transactions.rb', line 67

def attr_writer(*attributes)
  super
  attributes.each do |attribute|
    alias_method "hyperactive_transactions_accessors_#{attribute}=", "#{attribute}="
    define_method("#{attribute}=") do |new_value|
      if Archipelago::Treasure::Dubloon === new_value
        new_value.assert_transaction(@transaction) if @transaction ||= nil
        self.send("hyperactive_transactions_accessors_#{attribute}=", new_value)
      else
        self.send("hyperactive_transactions_accessors_#{attribute}=", new_value)
      end
    end
  end
end