Skip to content

Instantly share code, notes, and snippets.

@jordanbyron
Created October 2, 2010 18:38
Show Gist options
  • Save jordanbyron/607870 to your computer and use it in GitHub Desktop.
Save jordanbyron/607870 to your computer and use it in GitHub Desktop.
require "rubygems"
require "builder"
class Roster
def initialize
@members = []
@fresh = true
@content = nil
end
attr_reader :members
def <<(member)
@members << member
@fresh = false
end
def to_xml
if @fresh
@content ||= render_xml_roster
else
@content = render_xml_roster
@fresh = true
end
return @content
end
def dirty?
!@fresh
end
private
def render_xml_roster
raise "Cache Broked" if @fresh
builder = Builder::XmlMarkup.new
builder.roster do |r|
members.each do |m|
r.member(m)
end
end
end
end
require 'roster'
require 'test/unit'
class RosterTest < Test::Unit::TestCase
def setup
@roster = Roster.new
@roster << "Greg Brown"
@roster.to_xml # Populate cache and clear dirty flag
end
def test_dirty_is_true_after_a_member_is_added
assert [email protected]?, "Array is dirty"
@roster << "Jordan Byron"
assert @roster.dirty?, "Array is not dirty"
end
def test_cache_does_not_change_if_not_dirty
xml_id = @roster.to_xml.object_id
assert_equal xml_id, @roster.to_xml.object_id
end
def test_cache_does_change_if_dirty
xml_id = @roster.to_xml.object_id
@roster << "Jordan Byron"
assert_not_equal xml_id, @roster.to_xml.object_id
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment