Module: Upkeep::Runtime

Defined in:
lib/upkeep/runtime.rb

Defined Under Namespace

Modules: Ambient, AttributeObserver, CacheKeyObserver, ChangeEvents, ChangeLog, CookieObserver, CurrentAttributesClassObserver, Install, Observation, PersistenceObserver, RelationObserver, RequestObserver, SessionObserver, WardenObserver Classes: Current, ObservedHash, ObservedRequest, ObservedWarden, Recorder, RelationProvenance

Class Method Summary collapse

Class Method Details

.wrap_current_attribute_readers(klass, names) ⇒ Object



1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
# File 'lib/upkeep/runtime.rb', line 1182

def wrap_current_attribute_readers(klass, names)
  wrapped = klass.instance_variable_get(:@upkeep_wrapped_current_attributes) || {}

  names.each do |name|
    name = name.to_sym
    next if wrapped[name]
    next unless klass.method_defined?(name)

    original_reader = klass.instance_method(name)
    klass.define_method(name) do
      value = original_reader.bind_call(self)
      Runtime::Ambient.record_current_attribute(klass.name || klass.inspect, name, value)
      value
    end
    wrapped[name] = true
  end

  klass.instance_variable_set(:@upkeep_wrapped_current_attributes, wrapped)
end