Skip to content

Instantly share code, notes, and snippets.

@mark
Created February 18, 2011 16:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mark/833887 to your computer and use it in GitHub Desktop.
Save mark/833887 to your computer and use it in GitHub Desktop.
array_transformer.rb
class Array
def transform(new_array)
delta = ArrayTransformer.new
yield(delta)
(self - new_array).each { |item| delta.call_remove(item) }
(new_array - self).each { |item| delta.call_insert(item) }
self
end
end
class ArrayTransformer
def insert(&block)
@insert_method = block
end
def remove(&block)
@remove_method = block
end
def call_insert(item)
@insert_method[item] if @insert_method
end
def call_remove(item)
@remove_method[item] if @remove_method
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment