Sha256: 5836ce539d5a2c5a8912312f838f925b6def74fdfba68c11062a93419f0b878f

Contents?: true

Size: 1.13 KB

Versions: 18

Compression:

Stored size: 1.13 KB

Contents

#
#
# Ruby Notify like class
#
# Ref: https://ozone.wordpress.com/category/programming/metaprogramming/
##
# Listeners implement:
#
#  def attribute_changed(attr, old, new)
#    ...
#  end
#
#
module SknUtils
  class NotifierBase

    def initialize
      @listeners = []
    end

    def register_listener(listener)
      @listeners.push(listener) unless @listeners.include?(listener)
    end

    def unregister_listener(listener)
      @listeners.delete(listener)
    end

    # create writer-with-notify and reader
    def self.attribute(*attrs)
      attrs.each do |attr|
        instance_variable_set("@#{attr}", nil)
        define_method(attr) do
          instance_variable_get("@#{attr}")
        end
        define_method("#{attr}=") do |value|
          old_value = instance_variable_get("@#{attr}")
          unless (value == old_value)
            instance_variable_set("@#{attr}", value)
            @listeners.each do |listener|
              listener.attribute_changed(attr, old_value, value)
            end
          end
        end
      end # loop on attrs
    end # end of attribute method

  end # end of NotifierBase class
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
skn_utils-5.4.0 lib/skn_utils/notifier_base.rb
skn_utils-5.3.0 lib/skn_utils/notifier_base.rb
skn_utils-5.2.0 lib/skn_utils/notifier_base.rb
skn_utils-5.1.3 lib/skn_utils/notifier_base.rb
skn_utils-5.1.2 lib/skn_utils/notifier_base.rb
skn_utils-5.1.1 lib/skn_utils/notifier_base.rb
skn_utils-5.1.0 lib/skn_utils/notifier_base.rb
skn_utils-5.0.2 lib/skn_utils/notifier_base.rb
skn_utils-5.0.1 lib/skn_utils/notifier_base.rb
skn_utils-5.0.0 lib/skn_utils/notifier_base.rb
skn_utils-4.0.4 lib/skn_utils/notifier_base.rb
skn_utils-4.0.3 lib/skn_utils/notifier_base.rb
skn_utils-4.0.1 lib/skn_utils/notifier_base.rb
skn_utils-4.0.0 lib/skn_utils/notifier_base.rb
skn_utils-3.6.0 lib/skn_utils/notifier_base.rb
skn_utils-3.5.2 lib/skn_utils/notifier_base.rb
skn_utils-3.5.0 lib/skn_utils/notifier_base.rb
skn_utils-3.4.2 lib/skn_utils/notifier_base.rb