From 02ba03509c6a0f3e0fde99f0172a0125c83e43ce Mon Sep 17 00:00:00 2001
From: David Heinemeier Hansson <david@loudthinking.com>
Date: Tue, 1 Mar 2005 23:52:36 +0000
Subject: Added better defaults for composed_of, so statements like composed_of
 :time_zone, :mapping => %w( time_zone time_zone ) can be written without the
 mapping part (it's now assumed)

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@821 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 activerecord/test/aggregations_test.rb             | 22 ++++++++++++++++++----
 activerecord/test/fixtures/customer.rb             | 17 +++++++++++++++++
 activerecord/test/fixtures/customers.yml           |  1 +
 activerecord/test/fixtures/db_definitions/db2.sql  |  1 +
 .../test/fixtures/db_definitions/mysql.sql         |  1 +
 activerecord/test/fixtures/db_definitions/oci.sql  |  1 +
 .../test/fixtures/db_definitions/postgresql.sql    |  1 +
 .../test/fixtures/db_definitions/sqlite.sql        |  3 ++-
 .../test/fixtures/db_definitions/sqlserver.sql     |  1 +
 9 files changed, 43 insertions(+), 5 deletions(-)

(limited to 'activerecord/test')

diff --git a/activerecord/test/aggregations_test.rb b/activerecord/test/aggregations_test.rb
index 99b7b72684..94830862b5 100644
--- a/activerecord/test/aggregations_test.rb
+++ b/activerecord/test/aggregations_test.rb
@@ -2,10 +2,7 @@ require 'abstract_unit'
 require 'fixtures/customer'
 
 class AggregationsTest < Test::Unit::TestCase
-  def setup
-    @customers = create_fixtures "customers"
-    @david = Customer.find(1)
-  end
+  fixtures :customers
 
   def test_find_single_value_object
     assert_equal 50, @david.balance.amount
@@ -30,4 +27,21 @@ class AggregationsTest < Test::Unit::TestCase
     @david.balance = Money.new(100)
     assert_raises(TypeError) {  @david.balance.instance_eval { @amount = 20 } }
   end  
+  
+  def test_inferred_mapping
+    assert_equal "35.544623640962634", @david.gps_location.latitude
+    assert_equal "-105.9309951055148", @david.gps_location.longitude
+    
+    @david.gps_location = GpsLocation.new("39x-110")
+
+    assert_equal "39", @david.gps_location.latitude
+    assert_equal "-110", @david.gps_location.longitude
+    
+    @david.save
+    
+    @david.reload
+
+    assert_equal "39", @david.gps_location.latitude
+    assert_equal "-110", @david.gps_location.longitude
+  end
 end
\ No newline at end of file
diff --git a/activerecord/test/fixtures/customer.rb b/activerecord/test/fixtures/customer.rb
index 5275a5209d..c36d4d33a8 100644
--- a/activerecord/test/fixtures/customer.rb
+++ b/activerecord/test/fixtures/customer.rb
@@ -1,6 +1,7 @@
 class Customer < ActiveRecord::Base
   composed_of :address, :mapping => [ %w(address_street street), %w(address_city city), %w(address_country country) ]
   composed_of :balance, :class_name => "Money", :mapping => %w(balance amount)
+  composed_of :gps_location
 end
 
 class Address
@@ -27,4 +28,20 @@ class Money
   def exchange_to(other_currency)
     Money.new((amount * EXCHANGE_RATES["#{currency}_TO_#{other_currency}"]).floor, other_currency)
   end
+end
+
+class GpsLocation
+  attr_reader :gps_location
+  
+  def initialize(gps_location)
+    @gps_location = gps_location
+  end
+  
+  def latitude
+    gps_location.split("x").first
+  end
+  
+  def longitude
+    gps_location.split("x").last
+  end
 end
\ No newline at end of file
diff --git a/activerecord/test/fixtures/customers.yml b/activerecord/test/fixtures/customers.yml
index 1a83a54a9c..9169d7d413 100644
--- a/activerecord/test/fixtures/customers.yml
+++ b/activerecord/test/fixtures/customers.yml
@@ -5,3 +5,4 @@ david:
   address_street: Funny Street
   address_city: Scary Town
   address_country: Loony Land
+  gps_location: 35.544623640962634x-105.9309951055148
diff --git a/activerecord/test/fixtures/db_definitions/db2.sql b/activerecord/test/fixtures/db_definitions/db2.sql
index 46e326d504..07569c27ed 100644
--- a/activerecord/test/fixtures/db_definitions/db2.sql
+++ b/activerecord/test/fixtures/db_definitions/db2.sql
@@ -58,6 +58,7 @@ CREATE TABLE customers (
   address_street varchar(100) default NULL,
   address_city varchar(100) default NULL,
   address_country varchar(100) default NULL,
+  gps_location varchar(100) default NULL,
   PRIMARY KEY (id)
 );
 
diff --git a/activerecord/test/fixtures/db_definitions/mysql.sql b/activerecord/test/fixtures/db_definitions/mysql.sql
index 1064373f7f..c864074dbd 100755
--- a/activerecord/test/fixtures/db_definitions/mysql.sql
+++ b/activerecord/test/fixtures/db_definitions/mysql.sql
@@ -59,6 +59,7 @@ CREATE TABLE `customers` (
   `address_street` varchar(100) default NULL,
   `address_city` varchar(100) default NULL,
   `address_country` varchar(100) default NULL,
+  `gps_location` varchar(100) default NULL,
   PRIMARY KEY  (`id`)
 );
 
diff --git a/activerecord/test/fixtures/db_definitions/oci.sql b/activerecord/test/fixtures/db_definitions/oci.sql
index 86d7a03165..16d6e660a2 100644
--- a/activerecord/test/fixtures/db_definitions/oci.sql
+++ b/activerecord/test/fixtures/db_definitions/oci.sql
@@ -83,6 +83,7 @@ create table customers (
     address_street varchar(100) default null,
     address_city varchar(100) default null,
     address_country varchar(100) default null,
+    gps_location varchar(100) default null,
     primary key (id)
 );
 
diff --git a/activerecord/test/fixtures/db_definitions/postgresql.sql b/activerecord/test/fixtures/db_definitions/postgresql.sql
index f779027286..ab392c5688 100644
--- a/activerecord/test/fixtures/db_definitions/postgresql.sql
+++ b/activerecord/test/fixtures/db_definitions/postgresql.sql
@@ -65,6 +65,7 @@ CREATE TABLE customers (
     address_street character varying,
     address_city character varying,
     address_country character varying,
+    gps_location character varying,
     PRIMARY KEY (id)
 );
 SELECT setval('customers_id_seq', 100);
diff --git a/activerecord/test/fixtures/db_definitions/sqlite.sql b/activerecord/test/fixtures/db_definitions/sqlite.sql
index 988973b0ff..d57c3889e0 100644
--- a/activerecord/test/fixtures/db_definitions/sqlite.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlite.sql
@@ -53,7 +53,8 @@ CREATE TABLE 'customers' (
   'balance' INTEGER DEFAULT 0,
   'address_street' TEXT DEFAULT NULL,
   'address_city' TEXT DEFAULT NULL,
-  'address_country' TEXT DEFAULT NULL
+  'address_country' TEXT DEFAULT NULL,
+  'gps_location' TEXT DEFAULT NULL
 );
 
 CREATE TABLE 'movies' (
diff --git a/activerecord/test/fixtures/db_definitions/sqlserver.sql b/activerecord/test/fixtures/db_definitions/sqlserver.sql
index 743a5383fe..d658b6266d 100644
--- a/activerecord/test/fixtures/db_definitions/sqlserver.sql
+++ b/activerecord/test/fixtures/db_definitions/sqlserver.sql
@@ -57,6 +57,7 @@ CREATE TABLE customers (
   address_street varchar(100) default NULL,
   address_city varchar(100) default NULL,
   address_country varchar(100) default NULL,
+  gps_location varchar(100) default NULL,
   PRIMARY KEY  (id)
 );
 
-- 
cgit v1.2.3