Sha256: 1d0a9c67abe0e8fdf43a5cece62a658fdf531f4791b18f5479227f5137bf319f

Contents?: true

Size: 1.25 KB

Versions: 15

Compression:

Stored size: 1.25 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_dependency_get(var_name)
        value_dep = instance_variable_get(:"@__#{var_name}_dependency")
        value_dep ||= instance_variable_set(:"@__#{var_name}_dependency", Dependency.new)
      end

      def reactive_reader(*names)
        names.each do |name|
          var_name = :"@#{name}"
          define_method(name.to_sym) do
            value = instance_variable_get(var_name)

            self.class.__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)

            self.class.__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
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
volt-0.8.27.beta2 lib/volt/reactive/reactive_accessors.rb
volt-0.8.27.beta1 lib/volt/reactive/reactive_accessors.rb
volt-0.8.26.beta1 lib/volt/reactive/reactive_accessors.rb
volt-0.8.26 lib/volt/reactive/reactive_accessors.rb
volt-0.8.24 lib/volt/reactive/reactive_accessors.rb
volt-0.8.23 lib/volt/reactive/reactive_accessors.rb
volt-0.8.22 lib/volt/reactive/reactive_accessors.rb
volt-0.8.22.beta2 lib/volt/reactive/reactive_accessors.rb
volt-0.8.22.beta1 lib/volt/reactive/reactive_accessors.rb
volt-0.8.21 lib/volt/reactive/reactive_accessors.rb
volt-0.8.20 lib/volt/reactive/reactive_accessors.rb
volt-0.8.19 lib/volt/reactive/reactive_accessors.rb
volt-0.8.18 lib/volt/reactive/reactive_accessors.rb
volt-0.8.17 lib/volt/reactive/reactive_accessors.rb
volt-0.8.16 lib/volt/reactive/reactive_accessors.rb