<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,23 +1,73 @@
-Version 1.4
+==========================
+Version 1.5 (October 25th)
+==========================
 
-
-  * Support for Twitter-style JSON callbacks, allowing read-only remote site support for sites which offer this.  This method does not use Prototype or AJAX, but inserts a &lt;script&gt; tag.  Thus, find() calls *must* be made asynchronously, and *only* submitting a function as a callback argument (instead of a Prototype options hash).  Example:
+  Release post:
+  http://giantrobots.thoughtbot.com/2007/10/25/jester-1-5-universal-rest
+  
+  NOTICE: This release is not backwards compatible with earlier versions.
+  
+  * Total rewrite of the object hierarchy and Resource.model function.
+      Objects returned from User.find(1) are now instances of the User class, not Base.
+  
+  * Renamed Base to Resource.  If &quot;Resource&quot; still conflicts with other libraries you are working with, you can refer to it as Jester.Resource.
+  
+  * Support for Twitter-style JSON callbacks (aka &quot;JSONP&quot;), allowing read-only remote site support for sites which offer this.  This method does not use Prototype or AJAX, but inserts a &lt;script&gt; tag.  Thus, find() calls *must* be made asynchronously, and *only* submitting a function as a callback argument (instead of a Prototype options hash).  Example:
       
-      User.find(1, {}, function(user) { ... })
+      Resource.model(&quot;User&quot;, {
+        format: &quot;json&quot;,
+        prefix: &quot;http://externaldomain.com&quot;
+      })
+      // fetches http://externaldomain.com/users/1.xml?json=jesterCallback and calls myCallback with the loaded User
+      User.find(1, myCallback)
    
-    Objects returned can be modified, but save(), destroy(), create(), and updateAttributes() will all return false.
+    Objects returned can be modified, but save(), destroy(), create(), and updateAttributes() will all return false, as no POSTs can be made.
     
   * Basic path prefixes are supported, using ActiveResource syntax to denote prefix options.  Values for these options can be mixed in with the parameters hash argument of a find() call.  For example, to find all posts by the User with ID 1, at /users/1/posts.xml:
     
-      Base.model(&quot;Post&quot;, {prefix: &quot;/users/:user_id&quot;})
+      Resource.model(&quot;Post&quot;, {prefix: &quot;/users/:user_id&quot;})
       
       // request to /users/1/posts.xml
       posts = Post.find(&quot;all&quot;, {user_id: 1})
       
       // request to /users/1/posts.xml?key=value
       posts = Post.find(&quot;all&quot;, {user_id: 1, key: value})
-
-
+  
+  * All API URLs for a model can be accessed individually.  
+  Accepted URLs are: show, list, new, create, update, index, destroy.
+    URLs for &quot;show&quot;, &quot;list&quot;, and &quot;new&quot; will be set by default based on the model name.
+    &quot;create&quot; and &quot;index&quot; will default to the value set for &quot;list&quot;.
+    &quot;destroy&quot; and &quot;update&quot; will default to the value set for &quot;show&quot;.
+  If needed, each URL can be accessed through a helper method of the style &quot;_show_url()&quot;.  It can be called on either the class or the instance, and will interpolate a hash of arguments.  Example:
+  
+      User._show_url() =&gt; &quot;http://domain.com/users/:id.xml&quot;
+      User._show_url(1) =&gt; &quot;http://domain.com/users/1.xml&quot;
+      User.find(1)._show_url({admin: true}) =&gt; &quot;http://domain.com/users/1.xml?admin=true&quot;
+  
+  * All API URLs for a model can be customized individually.  For example, a Twitter model customized to Twitter's non-standard API:
+      
+      Resource.model(&quot;Twitter&quot;, {
+        format: &quot;json&quot;, 
+        prefix: &quot;http://twitter.com&quot;,
+        urls: {
+          show: &quot;/statuses/show/:id.json&quot;,
+          list: &quot;/statuses/user_timeline/:username.json&quot;
+        }
+      })
+      // request to load http://twitter.com/statuses/user_timeline/jesterjs.json?callback=jesterCallback
+      // and call myCallback with the array of Twitter objects
+      Twitter.find(&quot;all&quot;, {username: &quot;jesterjs&quot;}, myCallback)
+  
+  * If your controller supports the &quot;new&quot; action, to provide an object skeleton, you can instruct the model to fetch this skeleton.  It will be fetched once, when the resource is modeled.  This replaces the old method, where the checkNew argument was passed on each call to build, which was silly.  Example:
+      
+      Resource.model(&quot;User&quot;, {checkNew: true})
+      
+    This operation is (now) asynchronous by default, &quot;checkNew&quot; is still a silly name for the option, I'm open to better ideas.
+  
+  * Some littler things:
+    - For JSON requests, autotransform any field ending in &quot;_at&quot; or &quot;_on&quot; into a date (not just created/updated_at/on).
+    - Only instantiate ObjTree if a model is defined that uses the XML format.
+    - Various bugfixes, including major one where CamelCased models names weren't handled correctly.
 
 ========================
 Version 1.3 (June 10th)</diff>
      <filename>CHANGELOG</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>6bf5006c7872b3137cab44d077ea1240102c5f4b</id>
    </parent>
  </parents>
  <author>
    <name>emill</name>
    <email>emill@d7758119-aa2c-0410-afcd-b700fbd0d0b3</email>
  </author>
  <url>http://github.com/thoughtbot/jester/commit/3b1cbe56bb19c0355362df7b40003d06a4bafec6</url>
  <id>3b1cbe56bb19c0355362df7b40003d06a4bafec6</id>
  <committed-date>2007-10-25T11:06:42-07:00</committed-date>
  <authored-date>2007-10-25T11:06:42-07:00</authored-date>
  <message>Added 1.5 details to CHANGELOG.

git-svn-id: https://svn.thoughtbot.com/jester/trunk@113 d7758119-aa2c-0410-afcd-b700fbd0d0b3</message>
  <tree>b6ca74e1cc6d0cfa21a83a2a15f81eff02c4dbe1</tree>
  <committer>
    <name>emill</name>
    <email>emill@d7758119-aa2c-0410-afcd-b700fbd0d0b3</email>
  </committer>
</commit>
