Sha256: da8f1e37e7eb1c6d88c52ec2c4a7b689cf9de00bed2c7ed5806524ac4ae2b519

Contents?: true

Size: 983 Bytes

Versions: 66

Compression:

Stored size: 983 Bytes

Contents

# Adds Redcar::Observable to Struct. e.g:
#
#   irb> Customer = ObservableStruct.new(:name, :address) 
#   => Customer
#   irb> customer = Customer.new("Dave", "123 Main")
#   => #<Customer name="Dave", address="123 Main">
#   irb> customer.add_listener(:changed_name) { |new_name| puts "the new name is: #{new_name}" }
#   => #<Proc:0x65f4cdd2@(irb):203>
#   irb> customer.name = "Dan"
#   the new name is Dan
#   => #<Customer name="Dan", address="123 Main">
class ObservableStruct
  def self.new(*args)
    klass = Struct.new(*args)
    klass.send(:include, Redcar::Observable)
    if args.first.is_a?(String)
      accessors = args[1..-1]
    else
      accessors = args
    end
    accessors.each do |accessor|
      klass.class_eval %Q{
        alias_method :set_#{accessor}, :#{accessor}=
        def #{accessor}=(val)
          notify_listeners(:changed_#{accessor}, val) do
            self.set_#{accessor}(val)
          end
        end
      }
    end
    klass
  end
end

Version data entries

66 entries across 66 versions & 2 rubygems

Version Path
redcar-0.13 plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.5dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.4dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.3dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.2dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.1dev plugins/core/lib/core/observable_struct.rb
redcar-0.12.1 plugins/core/lib/core/observable_struct.rb
redcar-dev-0.13.0dev plugins/core/lib/core/observable_struct.rb
redcar-0.12 plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.27dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.26dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.25dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.24dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.23dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.22dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.21dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.20dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.19dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.18dev plugins/core/lib/core/observable_struct.rb
redcar-dev-0.12.17dev plugins/core/lib/core/observable_struct.rb