Created
October 2, 2010 18:38
-
-
Save jordanbyron/607870 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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