<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>spec/resourceful/response_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,19 @@
+Version 0.7.0
+=============
+ * Multiple values in a single header field are treated the same as repeated header fields. (Peter Williams)
+
+Compatibility issues
+--------------------
+
+ * The semantics of the Resourceful::Header API have changed slightly.
+   Previously multiple values in a single header field 
+   (e.g. `Accept: application/xml, application/json`) where treated 
+   differently from multiple values occurring in multiple fields (e.g 
+   `Accept: application/xml\n\rAccept: application/json`).  This lead 
+   to some unfortunate complexity when interacting with multi-valued 
+   fields.
+
+
 Version 0.6.0
 =============
 </diff>
      <filename>History.txt</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,6 @@ end
 
 # Resourceful is a library that provides a high level HTTP interface.
 module Resourceful
-  VERSION = &quot;0.6.0&quot;
+  VERSION = &quot;0.7.0&quot;
   RESOURCEFUL_USER_AGENT_TOKEN = &quot;Resourceful/#{VERSION}(Ruby/#{RUBY_VERSION})&quot;
 end</diff>
      <filename>lib/resourceful.rb</filename>
    </modified>
    <modified>
      <diff>@@ -53,6 +53,7 @@ module Resourceful
     def has_key?(k)
       field_def(k).exists_in?(@raw_fields)
     end
+    alias has_field? has_key?
 
     def each(&amp;blk)
       @raw_fields.each(&amp;blk)
@@ -126,8 +127,8 @@ module Resourceful
       end
 
       def set_to(value, raw_fields_hash)
-        raw_fields_hash[name] = if repeatable?
-                                  Array(value)
+        raw_fields_hash[name] = if multivalued?
+                                  Array(value).map{|v| v.split(/,\s*/)}.flatten
                                 elsif value.kind_of?(Array)
                                   raise ArgumentError, &quot;#{name} field may only have one value&quot; if value.size &gt; 1
                                   value.first</diff>
      <filename>lib/resourceful/header.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,11 +23,10 @@ module Resourceful
     #
     # @return true|false
     def expired?
-      if header['Cache-Control'] and header['Cache-Control'].first.include?('max-age')
-        max_age = header['Cache-Control'].first.split(',').grep(/max-age/).first.split('=').last.to_i
-        return true if current_age &gt; max_age
-      elsif header['Expires']
-        return true if Time.httpdate(header['Expires']) &lt; Time.now
+      if header.cache_control and m_age_str = header.cache_control.find{|cc| /^max-age=/ === cc}
+        return current_age &gt; m_age_str[/\d+/].to_i
+      elsif header.expires
+        return Time.httpdate(header.expires) &lt; Time.now
       end
 
       false
@@ -38,10 +37,8 @@ module Resourceful
     # @return true|false
     def stale?
       return true if expired?
-      if header['Cache-Control']
-        return true if header['Cache-Control'].include?('must-revalidate')
-        return true if header['Cache-Control'].include?('no-cache')
-      end
+      return false unless header.has_field?(Header::CACHE_CONTROL)
+      return true if header.cache_control.any?{|cc| /must-revalidate|no-cache/ === cc}
 
       false
     end
@@ -75,8 +72,8 @@ module Resourceful
 
     # Algorithm taken from RCF2616#13.2.3
     def current_age
-      age_value   = header['Age'] || 0
-      date_value  = Time.httpdate(header['Date'])
+      age_value   = header.age.to_i
+      date_value  = Time.httpdate(header.date)
       now         = Time.now
 
       apparent_age = [0, response_time - date_value].max</diff>
      <filename>lib/resourceful/response.rb</filename>
    </modified>
    <modified>
      <diff>@@ -54,7 +54,7 @@ describe &quot;Caching&quot; do
 
       resp = @resource.get
       resp.headers['X-Updateme'].should == [&quot;bar&quot;]
-      resp.headers['Cache-Control'].should == [&quot;private,max-age=0&quot;]
+      resp.headers['Cache-Control'].should == [&quot;private&quot;, &quot;max-age=0&quot;]
     end
 
   end</diff>
      <filename>spec/caching_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -112,8 +112,12 @@ module Resourceful
           accept.should eql(['application/foo', 'application/bar'])
       end
 
+      it &quot;should be instantiatable w/ repeated multi-valued header fields w/ multiple values&quot; do
+        Header.new('Accept' =&gt; ['application/foo, application/bar', 'text/plain']).
+          accept.should eql(['application/foo', 'application/bar', 'text/plain'])
+      end
+
       it &quot;should be instantiatable w/ multi-valued header fields w/ multiple values&quot; do
-        pending
         Header.new('Accept' =&gt; 'application/foo, application/bar').
           accept.should eql(['application/foo', 'application/bar'])
       end</diff>
      <filename>spec/resourceful/header_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,10 +2,12 @@ require 'rubygems'
 require 'spec'
 require 'pp'
 
-$LOAD_PATH &lt;&lt; File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;)
+__DIR__ = File.dirname(__FILE__)
+
+$LOAD_PATH &lt;&lt; File.join(__DIR__, &quot;..&quot;, &quot;lib&quot;)
 require 'resourceful'
 
-$LOAD_PATH &lt;&lt; File.dirname(__FILE__) # ./spec
+$LOAD_PATH &lt;&lt; __DIR__ # ./spec
 
 # Spawn the server in another process
 </diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3af11e776cbece6e32c9a5b217c304e13fba5f63</id>
    </parent>
  </parents>
  <author>
    <name>Peter Williams</name>
    <email>pezra@youthful-indiscretion.local</email>
  </author>
  <url>http://github.com/paul/resourceful/commit/5ef819fe245861aa75005b480b5d4f57189d335e</url>
  <id>5ef819fe245861aa75005b480b5d4f57189d335e</id>
  <committed-date>2009-08-23T22:42:49-07:00</committed-date>
  <authored-date>2009-08-23T22:42:49-07:00</authored-date>
  <message>improved handling of multivalue header fields when the values occur in a single field in the message</message>
  <tree>417e6873f4a222833b820e2fffcb09e5848761b0</tree>
  <committer>
    <name>Peter Williams</name>
    <email>pezra@youthful-indiscretion.local</email>
  </committer>
</commit>
