<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -0,0 +1,51 @@
+= Shmemeter
+&lt;b&gt;Version 0.2.0 (21 Apr, 2008)&lt;/b&gt;
+
+Author::    Yossef Mendelssohn (ymendel@pobox.com)
+Copyright:: Copyright (c) 2008, Flawed Logic, OG Consulting, Yossef Mendelssohn
+License::   MIT License.  See MIT-LICENSE file for more details.
+
+Shmemeter is a Ruby on Rails plugin that improves delegation to allow for changing the method called on the receiver (something Forwardable gives you and Rails delegation doesn't) as well as setting a value to use if the receiver is missing.
+
+== Installation
+
+Unpack the shmemeter directory into vendor/plugins/ in your rails project.
+A definitive public revision control access point is forthcoming that will make it possible to install the plugin via script/plugin install.
+
+== Reasoning
+
+It can be hard to handle all those Law (or Suggestion) of Demeter cases when ActiveRecord and associations make it so tempting to just *know* what's going on a few method calls down the line. Write wrapper methods for every attribute or method you might care about on another object gets old, especially when some associations are optional and you need to guard against NoMethodError from calling methods on nil. You can only do so much before you throw up your hands in disgust and shout &quot;SCREW YOU, DEMETER!&quot;
+
+This plugin gives you an easier way. Use it and just mumble &quot;demeter shmemeter&quot; under your breath from time to time.
+
+== Using Shmemeter
+
+Shmemeter adds two extra options for delegation.
+
+You can still delegate normally
+
+    class User &lt; ActiveRecord::Base
+      delegate :username, :to =&gt; :login  # Easier than def username() login.username; end
+    end
+
+You can handle a missing target
+
+    class User &lt; ActiveRecord::Base
+      delegate :username, :to =&gt; :login, :missing_target =&gt; ''  # Easier than def username() if login then login.username else '' end; end
+    end
+
+You can call a different method on the target
+
+    class User &lt; ActiveRecord::Base
+      delegate :username, :to =&gt; :login, :as =&gt; :name  # Easier than def username() login.name; end
+    end
+
+And finally, you can call a different method on the target while handling a missing target
+
+    class User &lt; ActiveRecord::Base
+      delegate :username, :to =&gt; :login, :as =&gt; :name, :missing_target =&gt; ''  # Easier than def username() if login then login.name else '' end; end
+    end
+
+== Version history:
+
+  0.2.0 - Initial release</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -0,0 +1 @@
+require 'shmemeter'</diff>
      <filename>init.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>34feab8fbb2f408cb3972a51a95aae15704ecfdb</id>
    </parent>
  </parents>
  <author>
    <name>Yossef Mendelssohn</name>
    <email>ymendel@pobox.com</email>
  </author>
  <url>http://github.com/flogic/shmemeter/commit/18d9de5838fd4b29e87be5cf0374861cd97bbe5a</url>
  <id>18d9de5838fd4b29e87be5cf0374861cd97bbe5a</id>
  <committed-date>2008-04-21T10:28:11-07:00</committed-date>
  <authored-date>2008-04-21T10:28:11-07:00</authored-date>
  <message>Filled out README and init.</message>
  <tree>4452ae629e66ff11fa3c1a6184be1f477125a546</tree>
  <committer>
    <name>Yossef Mendelssohn</name>
    <email>ymendel@pobox.com</email>
  </committer>
</commit>
