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.



143
144
145
146
# File 'lib/hyperactive/transactions.rb', line 143

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

#attr_reader(*attributes) ⇒ Object

Works like normal attr_reader but with transactional awareness.



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/hyperactive/transactions.rb', line 107

def attr_reader(*attributes)
  attributes.each do |attribute|
    define_method(attribute) do
      value = instance_variable_get("@#{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.



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/hyperactive/transactions.rb', line 127

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