Sha256: 46f33894dcd50923b68aba3acfc427315f05290ee1688d6a0d4768904275b7a9
Contents?: true
Size: 1.22 KB
Versions: 2
Compression:
Stored size: 1.22 KB
Contents
module Volt module ReactiveAccessors module ClassMethods # Create a method to read a reactive value from an instance value. If it # is not setup, create it so it can be updated through the reactive value # at a later point. def reactive_reader(*names) names.each do |name| var_name = :"@#{name}" define_method(name.to_sym) do value = instance_variable_get(var_name) __reactive_dependency_get(name).depend value end end end def reactive_writer(*names) names.each do |name| var_name = :"@#{name}" define_method("#{name}=") do |new_value| instance_variable_set(var_name, new_value) __reactive_dependency_get(name).changed! end end end def reactive_accessor(*names) reactive_reader(*names) reactive_writer(*names) end end def self.included(base) base.send :extend, ClassMethods end def __reactive_dependency_get(var_name) value_dep = instance_variable_get(:"@__#{var_name}_dependency") value_dep ||= instance_variable_set(:"@__#{var_name}_dependency", Dependency.new) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
volt-0.9.1 | lib/volt/reactive/reactive_accessors.rb |
volt-0.9.1.pre5 | lib/volt/reactive/reactive_accessors.rb |