Skip to content

Instantly share code, notes, and snippets.

@carols10cents
Forked from practicingruby/roster.rb
Created October 2, 2010 18:08
Show Gist options
  • Save carols10cents/607851 to your computer and use it in GitHub Desktop.
Save carols10cents/607851 to your computer and use it in GitHub Desktop.
require "rubygems"
require "builder"
class Roster
def initialize
@members = []
@members_cache = []
@content = nil
end
attr_reader :members
def to_xml
if @members_cache == @members
@content ||= render_xml_roster
else
@content = render_xml_roster
@members_cache = @members
end
return @content
end
private
def render_xml_roster
builder = Builder::XmlMarkup.new
builder.roster do |r|
members.each do |m|
r.member(m)
end
end
end
end
r = Roster.new
r.members << "Gregory Brown"
r.members << "David Black"
r.members << "Jeremy McAnally"
puts r.to_xml
require 'roster'
describe "roster" do
before(:each) do
@r = Roster.new
@r << "Gregory Brown"
end
it "should cache if not modified between 1st and 2nd to_xml" do
xml_id = @r.to_xml.object_id
@r.to_xml.object_id.should eql(xml_id)
end
it "should update cache if modified between 1st and 2nd to_xml" do
xml_id = @r.to_xml.object_id
@r << "David Black"
@r.to_xml.object_id.should_not eql(xml_id)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment