<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,5 @@
+task :default =&gt; :test
+
 task :test do
 	sh &quot;ruby test.rb&quot;
 end</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -60,8 +60,15 @@ module DefaultValuePlugin
 	module InstanceMethods
 		def initialize_with_defaults(attrs = nil)
 			initialize_without_defaults(attrs) do
+				if attrs
+					stringified_attrs = attrs.stringify_keys!
+					safe_attrs = remove_attributes_protected_from_mass_assignment(stringified_attrs)
+					safe_attribute_names = safe_attrs.keys.map do |x|
+						x.to_s
+					end
+				end
 				self.class._default_attribute_values.each_pair do |attribute, container|
-					if attrs.nil? || !attrs.keys.map(&amp;:to_s).include?(attribute)
+					if safe_attribute_names.nil? || !safe_attribute_names.include?(attribute)
 						__send__(&quot;#{attribute}=&quot;, container.evaluate)
 					end
 				end</diff>
      <filename>init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,8 @@ else
 end
 
 File.unlink('test.sqlite3') rescue nil
+ActiveRecord::Base.logger = Logger.new(STDERR)
+ActiveRecord::Base.logger.level = Logger::WARN
 ActiveRecord::Base.establish_connection(
 	:adapter =&gt; database_adapter,
 	:database =&gt; 'test.sqlite3'
@@ -47,12 +49,14 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 		Object.send(:remove_const, name) rescue nil
 		eval(&quot;class #{name} &lt; #{parent_class_name}; end&quot;, TOPLEVEL_BINDING)
 		klass = eval(name, TOPLEVEL_BINDING)
+		klass.class_eval do
+			set_table_name 'numbers'
+		end
 		klass.class_eval(&amp;block) if block_given?
 	end
 	
 	def test_default_value_can_be_passed_as_argument
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for(:number, 1234)
 		end
 		object = TestClass.new
@@ -61,7 +65,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_default_value_can_be_passed_as_block
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for(:number) { 1234 }
 		end
 		object = TestClass.new
@@ -70,7 +73,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_overwrites_db_default
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for :count, 1234
 		end
 		object = TestClass.new
@@ -79,7 +81,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_doesnt_overwrite_values_provided_by_mass_assignment
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for :number, 1234
 		end
 		object = TestClass.new(:number =&gt; 1, :count =&gt; 2)
@@ -88,7 +89,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_doesnt_overwrite_values_provided_by_constructor_block
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for :number, 1234
 		end
 		object = TestClass.new do |x|
@@ -100,7 +100,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_doesnt_overwrite_explicitly_provided_nil_values_in_mass_assignment
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for :number, 1234
 		end
 		object = TestClass.new(:number =&gt; nil)
@@ -109,7 +108,6 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_default_values_are_inherited
 		define_model_class(&quot;TestSuperClass&quot;) do
-			set_table_name 'numbers'
 			default_value_for :number, 1234
 		end
 		define_model_class(&quot;TestClass&quot;, &quot;TestSuperClass&quot;)
@@ -119,9 +117,27 @@ class DefaultValuePluginTest &lt; Test::Unit::TestCase
 	
 	def test_doesnt_set_default_on_saved_records
 		define_model_class do
-			set_table_name 'numbers'
 			default_value_for :number, 1234
 		end
 		assert_equal 9876, TestClass.find(:first).number
 	end
+	
+	def test_also_works_with_attributes_that_arent_database_columns
+		define_model_class do
+			default_value_for :hello, &quot;hi&quot;
+			attr_accessor :hello
+		end
+		object = TestClass.new
+		assert_equal 'hi', object.hello
+	end
+	
+	def test_constructor_ignores_forbidden_mass_assignment_attributes
+		define_model_class do
+			default_value_for :number, 1234
+			attr_protected :number
+		end
+		object = TestClass.new(:number =&gt; 5678, :count =&gt; 987)
+		assert_equal 1234, object.number
+		assert_equal 987, object.count
+	end
 end</diff>
      <filename>test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ed7d6bad31584691a8d56e03be9caba34dcf19de</id>
    </parent>
  </parents>
  <author>
    <name>Hongli Lai (Phusion)</name>
    <email>hongli@phusion.nl</email>
  </author>
  <url>http://github.com/FooBarWidget/default_value_for/commit/d5cd9809ec5ab623ce800e91637ff3696e6d168c</url>
  <id>d5cd9809ec5ab623ce800e91637ff3696e6d168c</id>
  <committed-date>2008-09-22T08:50:22-07:00</committed-date>
  <authored-date>2008-09-22T08:50:22-07:00</authored-date>
  <message>Various improvements.

- Clean up some test cases.
- Add more test cases.
- Always assign default value for attributes that are protected by
  attr_protected or attr_accessible.</message>
  <tree>311675816c0136b79fa97eea2a8410d48e6a0753</tree>
  <committer>
    <name>Hongli Lai (Phusion)</name>
    <email>hongli@phusion.nl</email>
  </committer>
</commit>
