<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -12,6 +12,7 @@ module Immutable
     def immutable_method(*args)
       # Initialize variables
       @immutable_methods = [] if @immutable_methods.nil?
+      @silent_immutable_methods = [] if @silent_immutable_methods.nil?
       instance_variable_set(&quot;@#{UNIQ}_in_method_added&quot;, false)
 
       opts = args.last.is_a?(Hash) ? args.pop : {}
@@ -22,6 +23,7 @@ module Immutable
       
       # Build list of immutable methods
       @immutable_methods += args
+      @silent_immutable_methods += args if opts[:silent]
 
       @opts = opts
       module_eval do
@@ -29,7 +31,7 @@ module Immutable
           if @immutable_methods
             @immutable_methods.each do |method|
               if method &amp;&amp; sym == method.to_sym &amp;&amp; !in_method_added?
-                unless @opts[:silent]
+                unless @silent_immutable_methods.include?(method)
                   raise CannotOverrideMethod, &quot;Cannot override the immutable method: #{sym}&quot;
                 end
                 </diff>
      <filename>lib/immutable.rb</filename>
    </modified>
    <modified>
      <diff>@@ -176,6 +176,11 @@ module Boo
     :fast
   end
 
+  def boofoo
+    :boofoo_fast
+  end
+
+  immutable_method :boofoo, :silent =&gt; true
   immutable_method :boo
 end
 
@@ -187,6 +192,11 @@ describe &quot;Exceptions&quot; do
       end.should raise_error(Immutable::CannotOverrideMethod, /Cannot override the immutable method: boo$/)
     end
   end
+
+  it &quot;should not raise if :silent =&gt; true&quot; do
+    redefine(Boo, :boofoo)
+    test_it(Boo, :boofoo, :boofoo_fast)
+  end
 end
 
 #########
@@ -208,10 +218,15 @@ module Bear
     :baz_fast
   end
 
+  def boo
+    :boo_fast
+  end
+
   # Make sure we can make independent calls to immutable_method
   immutable_method :foo
   immutable_method :bar
-  immutable_method :baz
+  immutable_method :baz, :silent =&gt; true
+  immutable_method :boo
 end
 
 describe &quot;Multiple independent calls to immutable_method()&quot; do
@@ -228,9 +243,14 @@ describe &quot;Multiple independent calls to immutable_method()&quot; do
   end
 
   it &quot;should still recognize baz() is immutable&quot; do
+    redefine(Bear, :baz)
+    test_it(Bear, :baz, :baz_fast)
+  end
+
+  it &quot;should still recognize boo() is immutable&quot; do
     lambda do 
-      redefine(Bear, :baz)
-    end.should raise_error(Immutable::CannotOverrideMethod, /Cannot override the immutable method: baz$/)
+      redefine(Bear, :boo)
+    end.should raise_error(Immutable::CannotOverrideMethod, /Cannot override the immutable method: boo$/)
   end
 end
 </diff>
      <filename>spec/immutable_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>637efc92a98862efbb9ba6d99af522b40ddd4160</id>
    </parent>
  </parents>
  <author>
    <name>Garry Dolley</name>
    <email>gdolley@arpnetworks.com</email>
  </author>
  <url>http://github.com/up_the_irons/immutable/commit/fdaf6080c73e337b6a332da4f6e6c69e41ae94f9</url>
  <id>fdaf6080c73e337b6a332da4f6e6c69e41ae94f9</id>
  <committed-date>2008-09-27T18:27:24-07:00</committed-date>
  <authored-date>2008-09-27T18:27:24-07:00</authored-date>
  <message>Allow some immutable methods to be silent, while others still raise exception</message>
  <tree>627d6ce299e3db0ebde7d74b148b3a0cfb5b207d</tree>
  <committer>
    <name>Garry Dolley</name>
    <email>gdolley@arpnetworks.com</email>
  </committer>
</commit>
