<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.gitignore</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,4 +1,8 @@
-== 1.0.1
+== 1.1.1
+
+* Clean up code to use recursion and allow fields to be specified like: [:street1, :street2, [:city, [:state, :zip]], :country]. Which is the standard american way of displaying address. Which looks like: [street1, street2, &quot;#{city}, #{state} #{zip}&quot;, country]
+
+== 1.1.0
 
 * Changed inclusion method to use apply_addresslogic instead of include Addresslogic. This allows you to pass options and specify alternate fields.
 </diff>
      <filename>CHANGELOG.rdoc</filename>
    </modified>
    <modified>
      <diff>@@ -41,39 +41,30 @@ module Addresslogic
     #
     # * &lt;tt&gt;only:&lt;/tt&gt; fields you want included in the result
     # * &lt;tt&gt;except:&lt;/tt&gt; any fields you want excluded from the result
-    def address_parts(options = {})
+    def address_parts(*args)
+      options = args.extract_options!
       options[:only] = [options[:only]] if options[:only] &amp;&amp; !options[:only].is_a?(Array)
       options[:except] = [options[:except]] if options[:except] &amp;&amp; !options[:except].is_a?(Array)
-    
+      fields = args[0] || address_parts_fields
+      level = args[1] || 0
+      
       parts = []
-      address_parts_fields.each do |part|
-        if part.is_a?(Array)
-          # We only want to allow 2d arrays
-          subparts = []
-          part.flatten.each do |subpart|
-            next if !respond_to?(subpart)
-            value = send(subpart)
-            next if value.to_s.blank? || (options[:only] &amp;&amp; !options[:only].include?(subpart)) || (options[:except] &amp;&amp; options[:except].include?(subpart))
-            subparts &lt;&lt; value
-          end
-          parts &lt;&lt; subparts unless subparts.compact.empty?
+      fields.each do |field|
+        if field.is_a?(Array)
+          has_sub_array = field.find { |item| item.is_a?(Array) }
+          separator = has_sub_array ? &quot;, &quot; : &quot; &quot;
+          sub_parts = address_parts(field, level + 1, options).join(separator)
+          next if sub_parts.blank?
+          parts &lt;&lt; sub_parts
         else
-          next if !respond_to?(part)
-          value = send(part)
-          next if value.to_s.strip == &quot;&quot; || (options[:only] &amp;&amp; !options[:only].include?(part)) || (options[:except] &amp;&amp; options[:except].include?(part))
+          next if !respond_to?(field)
+          value = send(field)
+          next if value.to_s.strip == &quot;&quot; || (options[:only] &amp;&amp; !options[:only].include?(field)) || (options[:except] &amp;&amp; options[:except].include?(field))
           parts &lt;&lt; value
         end
       end
       
-      result = parts.collect do |part|
-        if part.is_a?(Array)
-          part.collect{|sub| sub.to_s.strip.blank? ? nil : sub}.join(&quot; &quot;)
-        else
-          part.to_s.strip.blank? ? nil : part
-        end
-      end
-      
-      return result.compact
+      parts
     end
     
     private</diff>
      <filename>lib/addresslogic.rb</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,7 @@ module Addresslogic
 
     MAJOR = 1
     MINOR = 1
-    TINY  = 0
+    TINY  = 1
 
     # The current version as a Version instance
     CURRENT = new(MAJOR, MINOR, TINY)</diff>
      <filename>lib/addresslogic/version.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,41 +1,75 @@
 require File.dirname(__FILE__) + '/test_helper.rb'
 
-class TestAddresslogix &lt; Test::Unit::TestCase
-  def test_address_parts
-    assert_equal [&quot;12 Fancy House&quot;, &quot;Bond Street&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], address.address_parts
+class TestAddresslogic &lt; Test::Unit::TestCase
+  def test_uk_uk_address_parts
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Bond Street&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], uk_address.address_parts
     
-    address.street2 = &quot;&quot;
-    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], address.address_parts
+    uk_address.street2 = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], uk_address.address_parts
     
-    address.country = &quot;&quot;
-    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;], address.address_parts
+    uk_address.country = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;], uk_address.address_parts
     
-    address.city = &quot;&quot;
-    assert_equal [&quot;12 Fancy House&quot;, &quot;W1 8AJ&quot;], address.address_parts
+    uk_address.city = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;W1 8AJ&quot;], uk_address.address_parts
     
-    address.street1 = &quot;&quot;
-    assert_equal [&quot;W1 8AJ&quot;], address.address_parts
+    uk_address.street1 = &quot;&quot;
+    assert_equal [&quot;W1 8AJ&quot;], uk_address.address_parts
     
-    address.zip = &quot;&quot;
-    assert_equal [], address.address_parts
+    uk_address.zip = &quot;&quot;
+    assert_equal [], uk_address.address_parts
+  end
+  
+  def test_american_address_parts
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Bond Street&quot;, &quot;Tampa, Florida 45334&quot;, &quot;United States&quot;], american_address.address_parts
+    
+    american_address.street2 = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Tampa, Florida 45334&quot;, &quot;United States&quot;], american_address.address_parts
+    
+    american_address.country = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Tampa, Florida 45334&quot;], american_address.address_parts
+    
+    american_address.city = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Florida 45334&quot;], american_address.address_parts
+    
+    american_address.state = &quot;&quot;
+    assert_equal [&quot;12 Fancy House&quot;, &quot;45334&quot;], american_address.address_parts
+
+    american_address.street1 = &quot;&quot;
+    assert_equal [&quot;45334&quot;], american_address.address_parts
+    
+    american_address.zip = &quot;&quot;
+    assert_equal [], american_address.address_parts
   end
   
   def test_options
-    assert_equal [&quot;Bond Street&quot;], address.address_parts(:only =&gt; :street2)
-    assert_equal [&quot;12 Fancy House&quot;, &quot;Bond Street&quot;], address.address_parts(:only =&gt; [:street1, :street2])
-    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], address.address_parts(:except =&gt; :street2)
-    assert_equal [&quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], address.address_parts(:except =&gt; [:street1, :street2])
+    assert_equal [&quot;Bond Street&quot;], uk_address.address_parts(:only =&gt; :street2)
+    assert_equal [&quot;12 Fancy House&quot;, &quot;Bond Street&quot;], uk_address.address_parts(:only =&gt; [:street1, :street2])
+    assert_equal [&quot;12 Fancy House&quot;, &quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], uk_address.address_parts(:except =&gt; :street2)
+    assert_equal [&quot;London W1 8AJ&quot;, &quot;United Kingdom&quot;], uk_address.address_parts(:except =&gt; [:street1, :street2])
   end
   
   private
-    def address
-      return @address if @address
-      @address = Address.new
-      @address.street1 = &quot;12 Fancy House&quot;
-      @address.street2 = &quot;Bond Street&quot;
-      @address.city = &quot;London&quot;
-      @address.zip = &quot;W1 8AJ&quot;
-      @address.country = &quot;United Kingdom&quot;
-      @address
+    def uk_address
+      return @uk_address if @uk_address
+      @uk_address = UKAddress.new
+      @uk_address.street1 = &quot;12 Fancy House&quot;
+      @uk_address.street2 = &quot;Bond Street&quot;
+      @uk_address.city = &quot;London&quot;
+      @uk_address.zip = &quot;W1 8AJ&quot;
+      @uk_address.country = &quot;United Kingdom&quot;
+      @uk_address
+    end
+    
+    def american_address
+      return @american_address if @american_address
+      @american_address = AmericanAddress.new
+      @american_address.street1 = &quot;12 Fancy House&quot;
+      @american_address.street2 = &quot;Bond Street&quot;
+      @american_address.city = &quot;Tampa&quot;
+      @american_address.zip = &quot;45334&quot;
+      @american_address.state = &quot;Florida&quot;
+      @american_address.country = &quot;United States&quot;
+      @american_address
     end
 end
\ No newline at end of file</diff>
      <filename>test/test_addresslogic.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,14 @@ require &quot;rubygems&quot;
 require &quot;ruby-debug&quot;
 require File.dirname(__FILE__) + &quot;/../lib/addresslogic&quot;
 
-class Address
+class UKAddress
   attr_accessor :street1, :street2, :city, :zip, :country
   include Addresslogic
   apply_addresslogic :fields =&gt; [:street1, :street2, [:city, :zip], :country]
+end
+
+class AmericanAddress
+  attr_accessor :street1, :street2, :city, :state, :zip, :country
+  include Addresslogic
+  apply_addresslogic :fields =&gt; [:street1, :street2, [:city, [:state, :zip]], :country]
 end
\ No newline at end of file</diff>
      <filename>test/test_helper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c98beb0b6476963f2622283d66ec7085a588f0dc</id>
    </parent>
  </parents>
  <author>
    <name>binarylogic</name>
    <email>bjohnson@binarylogic.com</email>
  </author>
  <url>http://github.com/binarylogic/addresslogic/commit/997bd339a7467fa7c4540f12c120c41086558b2b</url>
  <id>997bd339a7467fa7c4540f12c120c41086558b2b</id>
  <committed-date>2009-05-14T10:29:16-07:00</committed-date>
  <authored-date>2009-05-14T10:29:16-07:00</authored-date>
  <message>Release v1.1.1</message>
  <tree>8bdd5869edb7c34f319c90b4de315b86f99d89d4</tree>
  <committer>
    <name>binarylogic</name>
    <email>bjohnson@binarylogic.com</email>
  </committer>
</commit>
