class Pluggaloid::Collection

Attributes

values[R]

Public Class Methods

new(event, *args) click to toggle source
# File lib/pluggaloid/collection.rb, line 7
def initialize(event, *args)
  @event = event
  args[event.collect_index] = nil
  @args = args.freeze
  @spec = argument_hash(args)
  @values = [].freeze
end

Public Instance Methods

<<(*v)
Alias for: add
add(*v) click to toggle source
# File lib/pluggaloid/collection.rb, line 15
def add(*v)
  rewind do |primitive|
    primitive + v
  end
end
Also aliased as: <<
argument_hash_same?(specs) click to toggle source
# File lib/pluggaloid/collection.rb, line 45
def argument_hash_same?(specs)
  @spec == argument_hash(specs)
end
delete(*v) click to toggle source
# File lib/pluggaloid/collection.rb, line 22
def delete(*v)
  rewind do |primitive|
    primitive - v
  end
end
rewind(&block) click to toggle source
# File lib/pluggaloid/collection.rb, line 28
def rewind(&block)
  new_values = block.(@values.dup)
  added, deleted = new_values - @values, @values - new_values
  @values = new_values.freeze
  unless added.empty?
    args = @args.dup
    args[@event.collect_index] = added
    @event.collection_add_event.call(*args)
  end
  unless deleted.empty?
    args = @args.dup
    args[@event.collect_index] = deleted
    @event.collection_delete_event.call(*args)
  end
  self
end

Private Instance Methods

argument_hash(specs) click to toggle source
# File lib/pluggaloid/collection.rb, line 51
def argument_hash(specs)
  @event.argument_hash(specs, @event.collect_index)
end