activerecord 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- data/CHANGELOG +4928 -3
 - data/README +45 -46
 - data/RUNNING_UNIT_TESTS +8 -11
 - data/Rakefile +247 -0
 - data/install.rb +8 -38
 - data/lib/active_record/aggregations.rb +64 -49
 - data/lib/active_record/associations/association_collection.rb +217 -47
 - data/lib/active_record/associations/association_proxy.rb +159 -0
 - data/lib/active_record/associations/belongs_to_association.rb +56 -0
 - data/lib/active_record/associations/belongs_to_polymorphic_association.rb +50 -0
 - data/lib/active_record/associations/has_and_belongs_to_many_association.rb +155 -37
 - data/lib/active_record/associations/has_many_association.rb +145 -75
 - data/lib/active_record/associations/has_many_through_association.rb +283 -0
 - data/lib/active_record/associations/has_one_association.rb +96 -0
 - data/lib/active_record/associations.rb +1537 -304
 - data/lib/active_record/attribute_methods.rb +328 -0
 - data/lib/active_record/base.rb +2001 -588
 - data/lib/active_record/calculations.rb +269 -0
 - data/lib/active_record/callbacks.rb +169 -165
 - data/lib/active_record/connection_adapters/abstract/connection_specification.rb +308 -0
 - data/lib/active_record/connection_adapters/abstract/database_statements.rb +171 -0
 - data/lib/active_record/connection_adapters/abstract/query_cache.rb +87 -0
 - data/lib/active_record/connection_adapters/abstract/quoting.rb +69 -0
 - data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +472 -0
 - data/lib/active_record/connection_adapters/abstract/schema_statements.rb +306 -0
 - data/lib/active_record/connection_adapters/abstract_adapter.rb +125 -279
 - data/lib/active_record/connection_adapters/mysql_adapter.rb +442 -77
 - data/lib/active_record/connection_adapters/postgresql_adapter.rb +805 -135
 - data/lib/active_record/connection_adapters/sqlite3_adapter.rb +34 -0
 - data/lib/active_record/connection_adapters/sqlite_adapter.rb +353 -69
 - data/lib/active_record/fixtures.rb +946 -100
 - data/lib/active_record/locking/optimistic.rb +144 -0
 - data/lib/active_record/locking/pessimistic.rb +77 -0
 - data/lib/active_record/migration.rb +417 -0
 - data/lib/active_record/observer.rb +142 -32
 - data/lib/active_record/query_cache.rb +23 -0
 - data/lib/active_record/reflection.rb +163 -70
 - data/lib/active_record/schema.rb +58 -0
 - data/lib/active_record/schema_dumper.rb +171 -0
 - data/lib/active_record/serialization.rb +98 -0
 - data/lib/active_record/serializers/json_serializer.rb +71 -0
 - data/lib/active_record/serializers/xml_serializer.rb +315 -0
 - data/lib/active_record/timestamp.rb +41 -0
 - data/lib/active_record/transactions.rb +87 -57
 - data/lib/active_record/validations.rb +909 -122
 - data/lib/active_record/vendor/db2.rb +362 -0
 - data/lib/active_record/vendor/mysql.rb +126 -29
 - data/lib/active_record/version.rb +9 -0
 - data/lib/active_record.rb +35 -7
 - data/lib/activerecord.rb +1 -0
 - data/test/aaa_create_tables_test.rb +72 -0
 - data/test/abstract_unit.rb +73 -5
 - data/test/active_schema_test_mysql.rb +43 -0
 - data/test/adapter_test.rb +105 -0
 - data/test/adapter_test_sqlserver.rb +95 -0
 - data/test/aggregations_test.rb +110 -16
 - data/test/all.sh +2 -2
 - data/test/ar_schema_test.rb +33 -0
 - data/test/association_inheritance_reload.rb +14 -0
 - data/test/associations/ar_joins_test.rb +0 -0
 - data/test/associations/callbacks_test.rb +147 -0
 - data/test/associations/cascaded_eager_loading_test.rb +110 -0
 - data/test/associations/eager_singularization_test.rb +145 -0
 - data/test/associations/eager_test.rb +442 -0
 - data/test/associations/extension_test.rb +47 -0
 - data/test/associations/inner_join_association_test.rb +88 -0
 - data/test/associations/join_model_test.rb +553 -0
 - data/test/associations_test.rb +1930 -267
 - data/test/attribute_methods_test.rb +146 -0
 - data/test/base_test.rb +1316 -84
 - data/test/binary_test.rb +32 -0
 - data/test/calculations_test.rb +251 -0
 - data/test/callbacks_test.rb +400 -0
 - data/test/class_inheritable_attributes_test.rb +3 -4
 - data/test/column_alias_test.rb +17 -0
 - data/test/connection_test_firebird.rb +8 -0
 - data/test/connection_test_mysql.rb +30 -0
 - data/test/connections/native_db2/connection.rb +25 -0
 - data/test/connections/native_firebird/connection.rb +26 -0
 - data/test/connections/native_frontbase/connection.rb +27 -0
 - data/test/connections/native_mysql/connection.rb +21 -18
 - data/test/connections/native_openbase/connection.rb +21 -0
 - data/test/connections/native_oracle/connection.rb +27 -0
 - data/test/connections/native_postgresql/connection.rb +17 -18
 - data/test/connections/native_sqlite/connection.rb +17 -16
 - data/test/connections/native_sqlite3/connection.rb +25 -0
 - data/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
 - data/test/connections/native_sybase/connection.rb +23 -0
 - data/test/copy_table_test_sqlite.rb +69 -0
 - data/test/datatype_test_postgresql.rb +203 -0
 - data/test/date_time_test.rb +37 -0
 - data/test/default_test_firebird.rb +16 -0
 - data/test/defaults_test.rb +67 -0
 - data/test/deprecated_finder_test.rb +30 -0
 - data/test/finder_test.rb +607 -32
 - data/test/fixtures/accounts.yml +28 -0
 - data/test/fixtures/all/developers.yml +0 -0
 - data/test/fixtures/all/people.csv +0 -0
 - data/test/fixtures/all/tasks.yml +0 -0
 - data/test/fixtures/author.rb +107 -0
 - data/test/fixtures/author_favorites.yml +4 -0
 - data/test/fixtures/authors.yml +7 -0
 - data/test/fixtures/bad_fixtures/attr_with_numeric_first_char +1 -0
 - data/test/fixtures/bad_fixtures/attr_with_spaces +1 -0
 - data/test/fixtures/bad_fixtures/blank_line +3 -0
 - data/test/fixtures/bad_fixtures/duplicate_attributes +3 -0
 - data/test/fixtures/bad_fixtures/missing_value +1 -0
 - data/test/fixtures/binaries.yml +132 -0
 - data/test/fixtures/binary.rb +2 -0
 - data/test/fixtures/book.rb +4 -0
 - data/test/fixtures/books.yml +7 -0
 - data/test/fixtures/categories/special_categories.yml +9 -0
 - data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
 - data/test/fixtures/categories.yml +14 -0
 - data/test/fixtures/categories_ordered.yml +7 -0
 - data/test/fixtures/categories_posts.yml +23 -0
 - data/test/fixtures/categorization.rb +5 -0
 - data/test/fixtures/categorizations.yml +17 -0
 - data/test/fixtures/category.rb +26 -0
 - data/test/fixtures/citation.rb +6 -0
 - data/test/fixtures/comment.rb +23 -0
 - data/test/fixtures/comments.yml +59 -0
 - data/test/fixtures/companies.yml +55 -0
 - data/test/fixtures/company.rb +81 -4
 - data/test/fixtures/company_in_module.rb +32 -6
 - data/test/fixtures/computer.rb +4 -0
 - data/test/fixtures/computers.yml +4 -0
 - data/test/fixtures/contact.rb +16 -0
 - data/test/fixtures/courses.yml +7 -0
 - data/test/fixtures/customer.rb +28 -3
 - data/test/fixtures/customers.yml +17 -0
 - data/test/fixtures/db_definitions/db2.drop.sql +33 -0
 - data/test/fixtures/db_definitions/db2.sql +235 -0
 - data/test/fixtures/db_definitions/db22.drop.sql +2 -0
 - data/test/fixtures/db_definitions/db22.sql +5 -0
 - data/test/fixtures/db_definitions/firebird.drop.sql +65 -0
 - data/test/fixtures/db_definitions/firebird.sql +310 -0
 - data/test/fixtures/db_definitions/firebird2.drop.sql +2 -0
 - data/test/fixtures/db_definitions/firebird2.sql +6 -0
 - data/test/fixtures/db_definitions/frontbase.drop.sql +33 -0
 - data/test/fixtures/db_definitions/frontbase.sql +273 -0
 - data/test/fixtures/db_definitions/frontbase2.drop.sql +1 -0
 - data/test/fixtures/db_definitions/frontbase2.sql +4 -0
 - data/test/fixtures/db_definitions/openbase.drop.sql +2 -0
 - data/test/fixtures/db_definitions/openbase.sql +318 -0
 - data/test/fixtures/db_definitions/openbase2.drop.sql +2 -0
 - data/test/fixtures/db_definitions/openbase2.sql +7 -0
 - data/test/fixtures/db_definitions/oracle.drop.sql +67 -0
 - data/test/fixtures/db_definitions/oracle.sql +330 -0
 - data/test/fixtures/db_definitions/oracle2.drop.sql +2 -0
 - data/test/fixtures/db_definitions/oracle2.sql +6 -0
 - data/test/fixtures/db_definitions/postgresql.drop.sql +44 -0
 - data/test/fixtures/db_definitions/postgresql.sql +217 -38
 - data/test/fixtures/db_definitions/postgresql2.drop.sql +2 -0
 - data/test/fixtures/db_definitions/postgresql2.sql +2 -2
 - data/test/fixtures/db_definitions/schema.rb +354 -0
 - data/test/fixtures/db_definitions/schema2.rb +11 -0
 - data/test/fixtures/db_definitions/sqlite.drop.sql +33 -0
 - data/test/fixtures/db_definitions/sqlite.sql +139 -5
 - data/test/fixtures/db_definitions/sqlite2.drop.sql +2 -0
 - data/test/fixtures/db_definitions/sqlite2.sql +1 -0
 - data/test/fixtures/db_definitions/sybase.drop.sql +35 -0
 - data/test/fixtures/db_definitions/sybase.sql +222 -0
 - data/test/fixtures/db_definitions/sybase2.drop.sql +4 -0
 - data/test/fixtures/db_definitions/sybase2.sql +5 -0
 - data/test/fixtures/developer.rb +70 -6
 - data/test/fixtures/developers.yml +21 -0
 - data/test/fixtures/developers_projects/david_action_controller +2 -1
 - data/test/fixtures/developers_projects/david_active_record +2 -1
 - data/test/fixtures/developers_projects.yml +17 -0
 - data/test/fixtures/edge.rb +5 -0
 - data/test/fixtures/edges.yml +6 -0
 - data/test/fixtures/entrants.yml +14 -0
 - data/test/fixtures/example.log +1 -0
 - data/test/fixtures/fk_test_has_fk.yml +3 -0
 - data/test/fixtures/fk_test_has_pk.yml +2 -0
 - data/test/fixtures/flowers.jpg +0 -0
 - data/test/fixtures/funny_jokes.yml +10 -0
 - data/test/fixtures/item.rb +7 -0
 - data/test/fixtures/items.yml +4 -0
 - data/test/fixtures/joke.rb +3 -0
 - data/test/fixtures/keyboard.rb +3 -0
 - data/test/fixtures/legacy_thing.rb +3 -0
 - data/test/fixtures/legacy_things.yml +3 -0
 - data/test/fixtures/matey.rb +4 -0
 - data/test/fixtures/mateys.yml +4 -0
 - data/test/fixtures/migrations/1_people_have_last_names.rb +9 -0
 - data/test/fixtures/migrations/2_we_need_reminders.rb +12 -0
 - data/test/fixtures/migrations/3_innocent_jointable.rb +12 -0
 - data/test/fixtures/migrations_with_decimal/1_give_me_big_numbers.rb +15 -0
 - data/test/fixtures/migrations_with_duplicate/1_people_have_last_names.rb +9 -0
 - data/test/fixtures/migrations_with_duplicate/2_we_need_reminders.rb +12 -0
 - data/test/fixtures/migrations_with_duplicate/3_foo.rb +7 -0
 - data/test/fixtures/migrations_with_duplicate/3_innocent_jointable.rb +12 -0
 - data/test/fixtures/migrations_with_missing_versions/1000_people_have_middle_names.rb +9 -0
 - data/test/fixtures/migrations_with_missing_versions/1_people_have_last_names.rb +9 -0
 - data/test/fixtures/migrations_with_missing_versions/3_we_need_reminders.rb +12 -0
 - data/test/fixtures/migrations_with_missing_versions/4_innocent_jointable.rb +12 -0
 - data/test/fixtures/minimalistic.rb +2 -0
 - data/test/fixtures/minimalistics.yml +2 -0
 - data/test/fixtures/mixed_case_monkey.rb +3 -0
 - data/test/fixtures/mixed_case_monkeys.yml +6 -0
 - data/test/fixtures/mixins.yml +29 -0
 - data/test/fixtures/movies.yml +7 -0
 - data/test/fixtures/naked/csv/accounts.csv +1 -0
 - data/test/fixtures/naked/yml/accounts.yml +1 -0
 - data/test/fixtures/naked/yml/companies.yml +1 -0
 - data/test/fixtures/naked/yml/courses.yml +1 -0
 - data/test/fixtures/order.rb +4 -0
 - data/test/fixtures/parrot.rb +13 -0
 - data/test/fixtures/parrots.yml +27 -0
 - data/test/fixtures/parrots_pirates.yml +7 -0
 - data/test/fixtures/people.yml +3 -0
 - data/test/fixtures/person.rb +4 -0
 - data/test/fixtures/pirate.rb +5 -0
 - data/test/fixtures/pirates.yml +9 -0
 - data/test/fixtures/post.rb +59 -0
 - data/test/fixtures/posts.yml +48 -0
 - data/test/fixtures/project.rb +27 -2
 - data/test/fixtures/projects.yml +7 -0
 - data/test/fixtures/reader.rb +4 -0
 - data/test/fixtures/readers.yml +4 -0
 - data/test/fixtures/reply.rb +18 -2
 - data/test/fixtures/reserved_words/distinct.yml +5 -0
 - data/test/fixtures/reserved_words/distincts_selects.yml +11 -0
 - data/test/fixtures/reserved_words/group.yml +14 -0
 - data/test/fixtures/reserved_words/select.yml +8 -0
 - data/test/fixtures/reserved_words/values.yml +7 -0
 - data/test/fixtures/ship.rb +3 -0
 - data/test/fixtures/ships.yml +5 -0
 - data/test/fixtures/subject.rb +4 -0
 - data/test/fixtures/subscriber.rb +4 -3
 - data/test/fixtures/tag.rb +7 -0
 - data/test/fixtures/tagging.rb +10 -0
 - data/test/fixtures/taggings.yml +25 -0
 - data/test/fixtures/tags.yml +7 -0
 - data/test/fixtures/task.rb +3 -0
 - data/test/fixtures/tasks.yml +7 -0
 - data/test/fixtures/topic.rb +20 -3
 - data/test/fixtures/topics.yml +22 -0
 - data/test/fixtures/treasure.rb +4 -0
 - data/test/fixtures/treasures.yml +10 -0
 - data/test/fixtures/vertex.rb +9 -0
 - data/test/fixtures/vertices.yml +4 -0
 - data/test/fixtures_test.rb +574 -8
 - data/test/inheritance_test.rb +113 -27
 - data/test/json_serialization_test.rb +180 -0
 - data/test/lifecycle_test.rb +56 -29
 - data/test/locking_test.rb +273 -0
 - data/test/method_scoping_test.rb +416 -0
 - data/test/migration_test.rb +933 -0
 - data/test/migration_test_firebird.rb +124 -0
 - data/test/mixin_test.rb +95 -0
 - data/test/modules_test.rb +23 -10
 - data/test/multiple_db_test.rb +17 -3
 - data/test/pk_test.rb +59 -15
 - data/test/query_cache_test.rb +104 -0
 - data/test/readonly_test.rb +107 -0
 - data/test/reflection_test.rb +124 -27
 - data/test/reserved_word_test_mysql.rb +177 -0
 - data/test/schema_authorization_test_postgresql.rb +75 -0
 - data/test/schema_dumper_test.rb +131 -0
 - data/test/schema_test_postgresql.rb +64 -0
 - data/test/serialization_test.rb +47 -0
 - data/test/synonym_test_oracle.rb +17 -0
 - data/test/table_name_test_sqlserver.rb +23 -0
 - data/test/threaded_connections_test.rb +48 -0
 - data/test/transactions_test.rb +227 -29
 - data/test/unconnected_test.rb +14 -6
 - data/test/validations_test.rb +1293 -32
 - data/test/xml_serialization_test.rb +202 -0
 - metadata +347 -143
 - data/dev-utils/eval_debugger.rb +0 -9
 - data/examples/associations.rb +0 -87
 - data/examples/shared_setup.rb +0 -15
 - data/examples/validation.rb +0 -88
 - data/lib/active_record/deprecated_associations.rb +0 -70
 - data/lib/active_record/support/class_attribute_accessors.rb +0 -43
 - data/lib/active_record/support/class_inheritable_attributes.rb +0 -37
 - data/lib/active_record/support/clean_logger.rb +0 -10
 - data/lib/active_record/support/inflector.rb +0 -70
 - data/lib/active_record/vendor/simple.rb +0 -702
 - data/lib/active_record/wrappers/yaml_wrapper.rb +0 -15
 - data/lib/active_record/wrappings.rb +0 -59
 - data/rakefile +0 -122
 - data/test/deprecated_associations_test.rb +0 -336
 - data/test/fixtures/accounts/signals37 +0 -3
 - data/test/fixtures/accounts/unknown +0 -2
 - data/test/fixtures/companies/first_client +0 -6
 - data/test/fixtures/companies/first_firm +0 -4
 - data/test/fixtures/companies/second_client +0 -6
 - data/test/fixtures/courses/java +0 -2
 - data/test/fixtures/courses/ruby +0 -2
 - data/test/fixtures/customers/david +0 -6
 - data/test/fixtures/db_definitions/mysql.sql +0 -96
 - data/test/fixtures/db_definitions/mysql2.sql +0 -4
 - data/test/fixtures/developers/david +0 -2
 - data/test/fixtures/developers/jamis +0 -2
 - data/test/fixtures/entrants/first +0 -3
 - data/test/fixtures/entrants/second +0 -3
 - data/test/fixtures/entrants/third +0 -3
 - data/test/fixtures/fixture_database.sqlite +0 -0
 - data/test/fixtures/fixture_database_2.sqlite +0 -0
 - data/test/fixtures/movies/first +0 -2
 - data/test/fixtures/movies/second +0 -2
 - data/test/fixtures/projects/action_controller +0 -2
 - data/test/fixtures/projects/active_record +0 -2
 - data/test/fixtures/topics/first +0 -9
 - data/test/fixtures/topics/second +0 -8
 - data/test/inflector_test.rb +0 -104
 - data/test/thread_safety_test.rb +0 -33
 
    
        data/README
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            = Active Record -- Object-relation mapping put on rails
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Active Record connects business objects and database tables to create a persistable
         
     | 
| 
       4 
     | 
    
         
            -
            domain model where logic and data  
     | 
| 
      
 4 
     | 
    
         
            +
            domain model where logic and data are presented in one wrapping. It's an implementation 
         
     | 
| 
       5 
5 
     | 
    
         
             
            of the object-relational mapping (ORM) pattern[http://www.martinfowler.com/eaaCatalog/activeRecord.html] 
         
     | 
| 
       6 
6 
     | 
    
         
             
            by the same name as described by Martin Fowler:
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              "An object that wraps a row in a database table or view, encapsulates 
         
     | 
| 
       9 
9 
     | 
    
         
             
                   the database access, and adds domain logic on that data."
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            Active  
     | 
| 
      
 11 
     | 
    
         
            +
            Active Record's main contribution to the pattern is to relieve the original of two stunting problems:
         
     | 
| 
       12 
12 
     | 
    
         
             
            lack of associations and inheritance. By adding a simple domain language-like set of macros to describe
         
     | 
| 
       13 
13 
     | 
    
         
             
            the former and integrating the Single Table Inheritance pattern for the latter, Active Record narrows the
         
     | 
| 
       14 
14 
     | 
    
         
             
            gap of functionality between the data mapper and active record approach.
         
     | 
| 
         @@ -29,7 +29,7 @@ A short rundown of the major features: 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
               ...which again gives Product#name and Product#name=(new_name) 
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 32 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Base.html]
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
            * Associations between objects controlled by simple meta-programming macros. 
         
     | 
| 
         @@ -40,7 +40,7 @@ A short rundown of the major features: 
     | 
|
| 
       40 
40 
     | 
    
         
             
                 belongs_to :conglomorate
         
     | 
| 
       41 
41 
     | 
    
         
             
               end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 43 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Associations/ClassMethods.html]
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            * Aggregations of value objects controlled by simple meta-programming macros. 
         
     | 
| 
         @@ -52,23 +52,33 @@ A short rundown of the major features: 
     | 
|
| 
       52 
52 
     | 
    
         
             
                             :mapping => [%w(address_street street), %w(address_city city)]
         
     | 
| 
       53 
53 
     | 
    
         
             
               end
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 55 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Aggregations/ClassMethods.html]
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            * Validation rules that can differ for new or existing objects.
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 60 
     | 
    
         
            +
                class Account < ActiveRecord::Base
         
     | 
| 
      
 61 
     | 
    
         
            +
                  validates_presence_of     :subdomain, :name, :email_address, :password
         
     | 
| 
      
 62 
     | 
    
         
            +
                  validates_uniqueness_of   :subdomain
         
     | 
| 
      
 63 
     | 
    
         
            +
                  validates_acceptance_of   :terms_of_service, :on => :create
         
     | 
| 
      
 64 
     | 
    
         
            +
                  validates_confirmation_of :password, :email_address, :on => :create
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Validations.html]
         
     | 
| 
       64 
68 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                 def validate_on_update
         
     | 
| 
       66 
     | 
    
         
            -
                   errors.add_on_empty "password"
         
     | 
| 
       67 
     | 
    
         
            -
                 end
         
     | 
| 
       68 
     | 
    
         
            -
               end
         
     | 
| 
       69 
69 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
      
 70 
     | 
    
         
            +
            * Acts that can make records work as lists or trees:
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
                class Item < ActiveRecord::Base
         
     | 
| 
      
 73 
     | 
    
         
            +
                  belongs_to   :list
         
     | 
| 
      
 74 
     | 
    
         
            +
                  acts_as_list :scope => :list
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
                
         
     | 
| 
      
 77 
     | 
    
         
            +
                item.move_higher
         
     | 
| 
      
 78 
     | 
    
         
            +
                item.move_to_bottom
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
              Learn about {acts_as_list}[link:classes/ActiveRecord/Acts/List/ClassMethods.html], {the instance methods acts_as_list provides}[link:classes/ActiveRecord/Acts/List/InstanceMethods.html], and
         
     | 
| 
      
 81 
     | 
    
         
            +
              {acts_as_tree}[link:classes/ActiveRecord/Acts/Tree/ClassMethods.html]
         
     | 
| 
       72 
82 
     | 
    
         | 
| 
       73 
83 
     | 
    
         
             
            * Callbacks as methods or queues on the entire lifecycle (instantiation, saving, destroying, validating, etc).
         
     | 
| 
       74 
84 
     | 
    
         | 
| 
         @@ -82,18 +92,18 @@ A short rundown of the major features: 
     | 
|
| 
       82 
92 
     | 
    
         
             
                 after_find :eager_load, 'self.class.announce(#{id})'
         
     | 
| 
       83 
93 
     | 
    
         
             
               end
         
     | 
| 
       84 
94 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 95 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Callbacks.html]
         
     | 
| 
       86 
96 
     | 
    
         | 
| 
       87 
97 
     | 
    
         | 
| 
       88 
98 
     | 
    
         
             
            * Observers for the entire lifecycle
         
     | 
| 
       89 
99 
     | 
    
         | 
| 
       90 
100 
     | 
    
         
             
               class CommentObserver < ActiveRecord::Observer
         
     | 
| 
       91 
101 
     | 
    
         
             
                 def after_create(comment) # is called just after Comment#save
         
     | 
| 
       92 
     | 
    
         
            -
                    
     | 
| 
      
 102 
     | 
    
         
            +
                   Notifications.deliver_new_comment("david@loudthinking.com", comment)
         
     | 
| 
       93 
103 
     | 
    
         
             
                 end
         
     | 
| 
       94 
104 
     | 
    
         
             
               end
         
     | 
| 
       95 
105 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 106 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Observer.html]
         
     | 
| 
       97 
107 
     | 
    
         | 
| 
       98 
108 
     | 
    
         | 
| 
       99 
109 
     | 
    
         
             
            * Inheritance hierarchies 
         
     | 
| 
         @@ -103,11 +113,11 @@ A short rundown of the major features: 
     | 
|
| 
       103 
113 
     | 
    
         
             
               class Client < Company; end
         
     | 
| 
       104 
114 
     | 
    
         
             
               class PriorityClient < Client; end
         
     | 
| 
       105 
115 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 116 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Base.html]
         
     | 
| 
       107 
117 
     | 
    
         | 
| 
       108 
118 
     | 
    
         | 
| 
       109 
119 
     | 
    
         
             
            * Transaction support on both a database and object level. The latter is implemented 
         
     | 
| 
       110 
     | 
    
         
            -
              by using Transaction::Simple[http:// 
     | 
| 
      
 120 
     | 
    
         
            +
              by using Transaction::Simple[http://railsmanual.com/module/Transaction::Simple]
         
     | 
| 
       111 
121 
     | 
    
         | 
| 
       112 
122 
     | 
    
         
             
                # Just database transaction
         
     | 
| 
       113 
123 
     | 
    
         
             
                Account.transaction do
         
     | 
| 
         @@ -121,7 +131,7 @@ A short rundown of the major features: 
     | 
|
| 
       121 
131 
     | 
    
         
             
                  mary.deposit(100)
         
     | 
| 
       122 
132 
     | 
    
         
             
                end
         
     | 
| 
       123 
133 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 134 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Transactions/ClassMethods.html]
         
     | 
| 
       125 
135 
     | 
    
         | 
| 
       126 
136 
     | 
    
         | 
| 
       127 
137 
     | 
    
         
             
            * Reflections on columns, associations, and aggregations
         
     | 
| 
         @@ -130,7 +140,7 @@ A short rundown of the major features: 
     | 
|
| 
       130 
140 
     | 
    
         
             
                reflection.klass # => Client (class)
         
     | 
| 
       131 
141 
     | 
    
         
             
                Firm.columns # Returns an array of column descriptors for the firms table
         
     | 
| 
       132 
142 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 143 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Reflection/ClassMethods.html]
         
     | 
| 
       134 
144 
     | 
    
         | 
| 
       135 
145 
     | 
    
         | 
| 
       136 
146 
     | 
    
         
             
            * Direct manipulation (instead of service invocation)
         
     | 
| 
         @@ -147,15 +157,15 @@ A short rundown of the major features: 
     | 
|
| 
       147 
157 
     | 
    
         | 
| 
       148 
158 
     | 
    
         
             
                 pkId = 1234
         
     | 
| 
       149 
159 
     | 
    
         
             
                 cat = Cat.find(pkId)
         
     | 
| 
       150 
     | 
    
         
            -
                 # something even more interesting involving  
     | 
| 
      
 160 
     | 
    
         
            +
                 # something even more interesting involving the same cat...
         
     | 
| 
       151 
161 
     | 
    
         
             
                 cat.save
         
     | 
| 
       152 
162 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 163 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Base.html]
         
     | 
| 
       154 
164 
     | 
    
         | 
| 
       155 
165 
     | 
    
         | 
| 
       156 
166 
     | 
    
         
             
            * Database abstraction through simple adapters (~100 lines) with a shared connector
         
     | 
| 
       157 
167 
     | 
    
         | 
| 
       158 
     | 
    
         
            -
               ActiveRecord::Base.establish_connection(:adapter => "sqlite", : 
     | 
| 
      
 168 
     | 
    
         
            +
               ActiveRecord::Base.establish_connection(:adapter => "sqlite", :database => "dbfile")
         
     | 
| 
       159 
169 
     | 
    
         | 
| 
       160 
170 
     | 
    
         
             
               ActiveRecord::Base.establish_connection(
         
     | 
| 
       161 
171 
     | 
    
         
             
                 :adapter  => "mysql", 
         
     | 
| 
         @@ -165,7 +175,8 @@ A short rundown of the major features: 
     | 
|
| 
       165 
175 
     | 
    
         
             
                 :database => "activerecord"
         
     | 
| 
       166 
176 
     | 
    
         
             
               )
         
     | 
| 
       167 
177 
     | 
    
         | 
| 
       168 
     | 
    
         
            -
              Learn more 
     | 
| 
      
 178 
     | 
    
         
            +
              {Learn more}[link:classes/ActiveRecord/Base.html#M000081] and read about the built-in support for
         
     | 
| 
      
 179 
     | 
    
         
            +
              MySQL[link:classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html], PostgreSQL[link:classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html], SQLite[link:classes/ActiveRecord/ConnectionAdapters/SQLiteAdapter.html], Oracle[link:classes/ActiveRecord/ConnectionAdapters/OracleAdapter.html], SQLServer[link:classes/ActiveRecord/ConnectionAdapters/SQLServerAdapter.html], and DB2[link:classes/ActiveRecord/ConnectionAdapters/DB2Adapter.html].
         
     | 
| 
       169 
180 
     | 
    
         | 
| 
       170 
181 
     | 
    
         | 
| 
       171 
182 
     | 
    
         
             
            * Logging support for Log4r[http://log4r.sourceforge.net] and Logger[http://www.ruby-doc.org/stdlib/libdoc/logger/rdoc]
         
     | 
| 
         @@ -178,7 +189,7 @@ A short rundown of the major features: 
     | 
|
| 
       178 
189 
     | 
    
         | 
| 
       179 
190 
     | 
    
         
             
            Data definitions are specified only in the database. Active Record queries the database for 
         
     | 
| 
       180 
191 
     | 
    
         
             
            the column names (that then serves to determine which attributes are valid) on regular
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
      
 192 
     | 
    
         
            +
            object instantiation through the new constructor and relies on the column names in the rows
         
     | 
| 
       182 
193 
     | 
    
         
             
            with the finders.
         
     | 
| 
       183 
194 
     | 
    
         | 
| 
       184 
195 
     | 
    
         
             
               # CREATE TABLE companies (
         
     | 
| 
         @@ -224,7 +235,7 @@ Active Record will also automatically link the "Person" object to the "people" t 
     | 
|
| 
       224 
235 
     | 
    
         | 
| 
       225 
236 
     | 
    
         
             
            == Simple example (2/2): Using the domain
         
     | 
| 
       226 
237 
     | 
    
         | 
| 
       227 
     | 
    
         
            -
            Picking a database connection for all the  
     | 
| 
      
 238 
     | 
    
         
            +
            Picking a database connection for all the Active Records
         
     | 
| 
       228 
239 
     | 
    
         | 
| 
       229 
240 
     | 
    
         
             
               ActiveRecord::Base.establish_connection(
         
     | 
| 
       230 
241 
     | 
    
         
             
                 :adapter  => "mysql", 
         
     | 
| 
         @@ -253,7 +264,7 @@ Lots of different finders 
     | 
|
| 
       253 
264 
     | 
    
         
             
               next_angle = Firm.find(1)    
         
     | 
| 
       254 
265 
     | 
    
         | 
| 
       255 
266 
     | 
    
         
             
               # SQL: SELECT * FROM companies WHERE id = 1 AND name = 'Next Angle'
         
     | 
| 
       256 
     | 
    
         
            -
               next_angle = Company. 
     | 
| 
      
 267 
     | 
    
         
            +
               next_angle = Company.find(:first, :conditions => "name = 'Next Angle'")
         
     | 
| 
       257 
268 
     | 
    
         | 
| 
       258 
269 
     | 
    
         
             
               next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
         
     | 
| 
       259 
270 
     | 
    
         | 
| 
         @@ -287,22 +298,11 @@ the examples themselves. 
     | 
|
| 
       287 
298 
     | 
    
         
             
            It's also highly recommended to have a look at the unit tests. Read more in link:files/RUNNING_UNIT_TESTS.html
         
     | 
| 
       288 
299 
     | 
    
         | 
| 
       289 
300 
     | 
    
         | 
| 
       290 
     | 
    
         
            -
            == Database support
         
     | 
| 
       291 
     | 
    
         
            -
             
     | 
| 
       292 
     | 
    
         
            -
            Active Record ships with adapters for MySQL/Ruby[http://www.tmtm.org/en/mysql/ruby/] 
         
     | 
| 
       293 
     | 
    
         
            -
            (compatible with Ruby/MySQL[http://www.tmtm.org/ruby/mysql/README_en.html]), 
         
     | 
| 
       294 
     | 
    
         
            -
            PostgreSQL[http://www.postgresql.jp/interfaces/ruby/], and 
         
     | 
| 
       295 
     | 
    
         
            -
            SQLite[http://rubyforge.org/projects/sqlite-ruby/] (needs SQLite 2.8.13+ and SQLite-Ruby 1.1.2+).
         
     | 
| 
       296 
     | 
    
         
            -
            The adapters are around 100 lines of code fulfilling the interface specified by 
         
     | 
| 
       297 
     | 
    
         
            -
            ActiveRecord::ConnectionAdapters::AbstractAdapter. Writing a new adapter should be a small task --
         
     | 
| 
       298 
     | 
    
         
            -
            especially considering the extensive test suite that'll make sure you're fulfilling the contract.
         
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
             
     | 
| 
       301 
301 
     | 
    
         
             
            == Philosophy 
         
     | 
| 
       302 
302 
     | 
    
         | 
| 
       303 
     | 
    
         
            -
            Active Record attempts to provide a coherent  
     | 
| 
      
 303 
     | 
    
         
            +
            Active Record attempts to provide a coherent wrapper as a solution for the inconvenience that is 
         
     | 
| 
       304 
304 
     | 
    
         
             
            object-relational mapping. The prime directive for this mapping has been to minimize
         
     | 
| 
       305 
     | 
    
         
            -
            the amount of code needed to  
     | 
| 
      
 305 
     | 
    
         
            +
            the amount of code needed to build a real-world domain model. This is made possible
         
     | 
| 
       306 
306 
     | 
    
         
             
            by relying on a number of conventions that make it easy for Active Record to infer
         
     | 
| 
       307 
307 
     | 
    
         
             
            complex relations and structures from a minimal amount of explicit direction.
         
     | 
| 
       308 
308 
     | 
    
         | 
| 
         @@ -324,7 +324,7 @@ The latest version of Active Record can be found at 
     | 
|
| 
       324 
324 
     | 
    
         | 
| 
       325 
325 
     | 
    
         
             
            Documentation can be found at 
         
     | 
| 
       326 
326 
     | 
    
         | 
| 
       327 
     | 
    
         
            -
            * http://ar.rubyonrails. 
     | 
| 
      
 327 
     | 
    
         
            +
            * http://ar.rubyonrails.com
         
     | 
| 
       328 
328 
     | 
    
         | 
| 
       329 
329 
     | 
    
         | 
| 
       330 
330 
     | 
    
         
             
            == Installation
         
     | 
| 
         @@ -333,7 +333,7 @@ The prefered method of installing Active Record is through its GEM file. You'll 
     | 
|
| 
       333 
333 
     | 
    
         
             
            RubyGems[http://rubygems.rubyforge.org/wiki/wiki.pl] installed for that, though. If you have,
         
     | 
| 
       334 
334 
     | 
    
         
             
            then use:
         
     | 
| 
       335 
335 
     | 
    
         | 
| 
       336 
     | 
    
         
            -
              % [sudo] gem install activerecord- 
     | 
| 
      
 336 
     | 
    
         
            +
              % [sudo] gem install activerecord-1.10.0.gem
         
     | 
| 
       337 
337 
     | 
    
         | 
| 
       338 
338 
     | 
    
         
             
            You can also install Active Record the old-fashion way with the following command:
         
     | 
| 
       339 
339 
     | 
    
         | 
| 
         @@ -344,12 +344,12 @@ from its distribution directory. 
     | 
|
| 
       344 
344 
     | 
    
         | 
| 
       345 
345 
     | 
    
         
             
            == License
         
     | 
| 
       346 
346 
     | 
    
         | 
| 
       347 
     | 
    
         
            -
            Active Record is released under the  
     | 
| 
      
 347 
     | 
    
         
            +
            Active Record is released under the MIT license.
         
     | 
| 
       348 
348 
     | 
    
         | 
| 
       349 
349 
     | 
    
         | 
| 
       350 
350 
     | 
    
         
             
            == Support
         
     | 
| 
       351 
351 
     | 
    
         | 
| 
       352 
     | 
    
         
            -
            The Active Record homepage is http:// 
     | 
| 
      
 352 
     | 
    
         
            +
            The Active Record homepage is http://www.rubyonrails.com. You can find the Active Record
         
     | 
| 
       353 
353 
     | 
    
         
             
            RubyForge page at http://rubyforge.org/projects/activerecord. And as Jim from Rake says:
         
     | 
| 
       354 
354 
     | 
    
         | 
| 
       355 
355 
     | 
    
         
             
               Feel free to submit commits or feature requests.  If you send a patch,
         
     | 
| 
         @@ -358,4 +358,3 @@ RubyForge page at http://rubyforge.org/projects/activerecord. And as Jim from Ra 
     | 
|
| 
       358 
358 
     | 
    
         | 
| 
       359 
359 
     | 
    
         
             
            For other information, feel free to ask on the ruby-talk mailing list
         
     | 
| 
       360 
360 
     | 
    
         
             
            (which is mirrored to comp.lang.ruby) or contact mailto:david@loudthinking.com.
         
     | 
| 
       361 
     | 
    
         
            -
             
     | 
    
        data/RUNNING_UNIT_TESTS
    CHANGED
    
    | 
         @@ -7,30 +7,27 @@ test/connections/<your database>/connection.rb. 
     | 
|
| 
       7 
7 
     | 
    
         
             
            When you have the database online, you can import the fixture tables with 
         
     | 
| 
       8 
8 
     | 
    
         
             
            the test/fixtures/db_definitions/*.sql files.
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            Make sure that you create database objects with the same user that you specified in  
     | 
| 
       11 
     | 
    
         
            -
            connection.rb otherwise (on Postgres, at least) tests for default values will fail
         
     | 
| 
       12 
     | 
    
         
            -
            (see http://dev.rubyonrails.org/trac.cgi/ticket/118)
         
     | 
| 
      
 10 
     | 
    
         
            +
            Make sure that you create database objects with the same user that you specified in 
         
     | 
| 
      
 11 
     | 
    
         
            +
            connection.rb otherwise (on Postgres, at least) tests for default values will fail.
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
13 
     | 
    
         
             
            == Running with Rake
         
     | 
| 
       15 
14 
     | 
    
         | 
| 
       16 
15 
     | 
    
         
             
            The easiest way to run the unit tests is through Rake. The default task runs
         
     | 
| 
       17 
16 
     | 
    
         
             
            the entire test suite for all the adapters. You can also run the suite on just
         
     | 
| 
       18 
     | 
    
         
            -
            one adapter by using the tasks  
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
            one adapter by using the tasks test_mysql, test_sqlite, test_postgresql or any
         
     | 
| 
      
 18 
     | 
    
         
            +
            of the other test_ tasks. For more information, checkout the full array of rake
         
     | 
| 
      
 19 
     | 
    
         
            +
            tasks with "rake -T"
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            Rake can be found at http://rake.rubyforge.org
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            == Running by hand
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            Unit tests are located in test directory. If you only want to run a single test suite, 
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
            you can do so with:
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                
     | 
| 
      
 28 
     | 
    
         
            +
               rake test_mysql TEST=base_test.rb
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
            That'll run the base suite using the MySQL-Ruby adapter. 
     | 
| 
       31 
     | 
    
         
            -
            and test suite name as needed.
         
     | 
| 
      
 30 
     | 
    
         
            +
            That'll run the base suite using the MySQL-Ruby adapter.
         
     | 
| 
       32 
31 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
            You can also run all the suites on a specific adapter with:
         
     | 
| 
       34 
32 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
               cd test; all.sh "connections/native_mysql"
         
     | 
| 
       36 
33 
     | 
    
         | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,247 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rake/testtask'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rake/rdoctask'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'rake/packagetask'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'rake/gempackagetask'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'rake/contrib/rubyforgepublisher'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), 'lib', 'active_record', 'version')
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            PKG_BUILD     = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
         
     | 
| 
      
 11 
     | 
    
         
            +
            PKG_NAME      = 'activerecord'
         
     | 
| 
      
 12 
     | 
    
         
            +
            PKG_VERSION   = ActiveRecord::VERSION::STRING + PKG_BUILD
         
     | 
| 
      
 13 
     | 
    
         
            +
            PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            RELEASE_NAME  = "REL #{PKG_VERSION}"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            RUBY_FORGE_PROJECT = "activerecord"
         
     | 
| 
      
 18 
     | 
    
         
            +
            RUBY_FORGE_USER    = "webster132"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            PKG_FILES = FileList[
         
     | 
| 
      
 21 
     | 
    
         
            +
                "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "Rakefile"
         
     | 
| 
      
 22 
     | 
    
         
            +
            ].exclude(/\bCVS\b|~$/)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            desc 'Run mysql, sqlite, and postgresql tests by default'
         
     | 
| 
      
 26 
     | 
    
         
            +
            task :default => :test
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            desc 'Run mysql, sqlite, and postgresql tests'
         
     | 
| 
      
 29 
     | 
    
         
            +
            task :test => %w(test_mysql test_sqlite test_sqlite3 test_postgresql)
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            for adapter in %w( mysql postgresql sqlite sqlite3 firebird db2 oracle sybase openbase frontbase )
         
     | 
| 
      
 32 
     | 
    
         
            +
              Rake::TestTask.new("test_#{adapter}") { |t|
         
     | 
| 
      
 33 
     | 
    
         
            +
                t.libs << "test" << "test/connections/native_#{adapter}"
         
     | 
| 
      
 34 
     | 
    
         
            +
                adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z]+/]
         
     | 
| 
      
 35 
     | 
    
         
            +
                t.pattern = "test/**/*_test{,_#{adapter_short}}.rb"
         
     | 
| 
      
 36 
     | 
    
         
            +
                t.verbose = true
         
     | 
| 
      
 37 
     | 
    
         
            +
              }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              namespace adapter do
         
     | 
| 
      
 40 
     | 
    
         
            +
                task :test => "test_#{adapter}"
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            SCHEMA_PATH = File.join(File.dirname(__FILE__), *%w(test fixtures db_definitions))
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            namespace :mysql do
         
     | 
| 
      
 47 
     | 
    
         
            +
              desc 'Build the MySQL test databases'
         
     | 
| 
      
 48 
     | 
    
         
            +
              task :build_databases do
         
     | 
| 
      
 49 
     | 
    
         
            +
                %x( mysqladmin  create activerecord_unittest )
         
     | 
| 
      
 50 
     | 
    
         
            +
                %x( mysqladmin  create activerecord_unittest2 )
         
     | 
| 
      
 51 
     | 
    
         
            +
                %x( mysql -e "grant all on activerecord_unittest.* to rails@localhost" )
         
     | 
| 
      
 52 
     | 
    
         
            +
                %x( mysql -e "grant all on activerecord_unittest2.* to rails@localhost" )
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              desc 'Drop the MySQL test databases'
         
     | 
| 
      
 56 
     | 
    
         
            +
              task :drop_databases do
         
     | 
| 
      
 57 
     | 
    
         
            +
                %x( mysqladmin -f drop activerecord_unittest )
         
     | 
| 
      
 58 
     | 
    
         
            +
                %x( mysqladmin -f drop activerecord_unittest2 )
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              desc 'Rebuild the MySQL test databases'
         
     | 
| 
      
 62 
     | 
    
         
            +
              task :rebuild_databases => [:drop_databases, :build_databases]
         
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            task :build_mysql_databases => 'mysql:build_databases'
         
     | 
| 
      
 66 
     | 
    
         
            +
            task :drop_mysql_databases => 'mysql:drop_databases'
         
     | 
| 
      
 67 
     | 
    
         
            +
            task :rebuild_mysql_databases => 'mysql:rebuild_databases'
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            namespace :postgresql do
         
     | 
| 
      
 71 
     | 
    
         
            +
              desc 'Build the PostgreSQL test databases'
         
     | 
| 
      
 72 
     | 
    
         
            +
              task :build_databases do
         
     | 
| 
      
 73 
     | 
    
         
            +
                %x( createdb -U postgres activerecord_unittest )
         
     | 
| 
      
 74 
     | 
    
         
            +
                %x( createdb -U postgres activerecord_unittest2 )
         
     | 
| 
      
 75 
     | 
    
         
            +
                %x( psql activerecord_unittest -f #{File.join(SCHEMA_PATH, 'postgresql.sql')} postgres )
         
     | 
| 
      
 76 
     | 
    
         
            +
                %x( psql activerecord_unittest2 -f #{File.join(SCHEMA_PATH, 'postgresql2.sql')}  postgres )
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
              desc 'Drop the PostgreSQL test databases'
         
     | 
| 
      
 80 
     | 
    
         
            +
              task :drop_databases do
         
     | 
| 
      
 81 
     | 
    
         
            +
                %x( dropdb -U postgres activerecord_unittest )
         
     | 
| 
      
 82 
     | 
    
         
            +
                %x( dropdb -U postgres activerecord_unittest2 )
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
              desc 'Rebuild the PostgreSQL test databases'
         
     | 
| 
      
 86 
     | 
    
         
            +
              task :rebuild_databases => [:drop_databases, :build_databases]
         
     | 
| 
      
 87 
     | 
    
         
            +
            end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            task :build_postgresql_databases => 'postgresql:build_databases'
         
     | 
| 
      
 90 
     | 
    
         
            +
            task :drop_postgresql_databases => 'postgresql:drop_databases'
         
     | 
| 
      
 91 
     | 
    
         
            +
            task :rebuild_postgresql_databases => 'postgresql:rebuild_databases'
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            namespace :frontbase do
         
     | 
| 
      
 95 
     | 
    
         
            +
              desc 'Build the FrontBase test databases'
         
     | 
| 
      
 96 
     | 
    
         
            +
              task :build_databases => :rebuild_frontbase_databases
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
              desc 'Rebuild the FrontBase test databases'
         
     | 
| 
      
 99 
     | 
    
         
            +
              task :rebuild_databases do
         
     | 
| 
      
 100 
     | 
    
         
            +
                build_frontbase_database = Proc.new do |db_name, sql_definition_file|
         
     | 
| 
      
 101 
     | 
    
         
            +
                  %(
         
     | 
| 
      
 102 
     | 
    
         
            +
                    STOP DATABASE #{db_name};
         
     | 
| 
      
 103 
     | 
    
         
            +
                    DELETE DATABASE #{db_name};
         
     | 
| 
      
 104 
     | 
    
         
            +
                    CREATE DATABASE #{db_name};
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                    CONNECT TO #{db_name} AS SESSION_NAME USER _SYSTEM;
         
     | 
| 
      
 107 
     | 
    
         
            +
                    SET COMMIT FALSE;
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                    CREATE USER RAILS;
         
     | 
| 
      
 110 
     | 
    
         
            +
                    CREATE SCHEMA RAILS AUTHORIZATION RAILS;
         
     | 
| 
      
 111 
     | 
    
         
            +
                    COMMIT;
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                    SET SESSION AUTHORIZATION RAILS;
         
     | 
| 
      
 114 
     | 
    
         
            +
                    SCRIPT '#{sql_definition_file}';
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                    COMMIT;
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                    DISCONNECT ALL;
         
     | 
| 
      
 119 
     | 
    
         
            +
                  )
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
                create_activerecord_unittest  = build_frontbase_database['activerecord_unittest',  File.join(SCHEMA_PATH, 'frontbase.sql')]
         
     | 
| 
      
 122 
     | 
    
         
            +
                create_activerecord_unittest2 = build_frontbase_database['activerecord_unittest2', File.join(SCHEMA_PATH, 'frontbase2.sql')]
         
     | 
| 
      
 123 
     | 
    
         
            +
                execute_frontbase_sql = Proc.new do |sql|
         
     | 
| 
      
 124 
     | 
    
         
            +
                  system(<<-SHELL)
         
     | 
| 
      
 125 
     | 
    
         
            +
                  /Library/FrontBase/bin/sql92 <<-SQL
         
     | 
| 
      
 126 
     | 
    
         
            +
                  #{sql}
         
     | 
| 
      
 127 
     | 
    
         
            +
                  SQL
         
     | 
| 
      
 128 
     | 
    
         
            +
                  SHELL
         
     | 
| 
      
 129 
     | 
    
         
            +
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
                execute_frontbase_sql[create_activerecord_unittest]
         
     | 
| 
      
 131 
     | 
    
         
            +
                execute_frontbase_sql[create_activerecord_unittest2]
         
     | 
| 
      
 132 
     | 
    
         
            +
              end
         
     | 
| 
      
 133 
     | 
    
         
            +
            end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            task :build_frontbase_databases => 'frontbase:build_databases'
         
     | 
| 
      
 136 
     | 
    
         
            +
            task :rebuild_frontbase_databases => 'frontbase:rebuild_databases'
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
            # Generate the RDoc documentation
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
            Rake::RDocTask.new { |rdoc|
         
     | 
| 
      
 142 
     | 
    
         
            +
              rdoc.rdoc_dir = 'doc'
         
     | 
| 
      
 143 
     | 
    
         
            +
              rdoc.title    = "Active Record -- Object-relation mapping put on rails"
         
     | 
| 
      
 144 
     | 
    
         
            +
              rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
         
     | 
| 
      
 145 
     | 
    
         
            +
              rdoc.options << '--charset' << 'utf-8'
         
     | 
| 
      
 146 
     | 
    
         
            +
              rdoc.template = "#{ENV['template']}.rb" if ENV['template']
         
     | 
| 
      
 147 
     | 
    
         
            +
              rdoc.rdoc_files.include('README', 'RUNNING_UNIT_TESTS', 'CHANGELOG')
         
     | 
| 
      
 148 
     | 
    
         
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         
     | 
| 
      
 149 
     | 
    
         
            +
              rdoc.rdoc_files.exclude('lib/active_record/vendor/*')
         
     | 
| 
      
 150 
     | 
    
         
            +
              rdoc.rdoc_files.include('dev-utils/*.rb')
         
     | 
| 
      
 151 
     | 
    
         
            +
            }
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
            # Enhance rdoc task to copy referenced images also
         
     | 
| 
      
 154 
     | 
    
         
            +
            task :rdoc do
         
     | 
| 
      
 155 
     | 
    
         
            +
              FileUtils.mkdir_p "doc/files/examples/"
         
     | 
| 
      
 156 
     | 
    
         
            +
              FileUtils.copy "examples/associations.png", "doc/files/examples/associations.png"
         
     | 
| 
      
 157 
     | 
    
         
            +
            end
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            # Create compressed packages
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
            dist_dirs = [ "lib", "test", "examples" ]
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            spec = Gem::Specification.new do |s|
         
     | 
| 
      
 165 
     | 
    
         
            +
              s.name = PKG_NAME
         
     | 
| 
      
 166 
     | 
    
         
            +
              s.version = PKG_VERSION
         
     | 
| 
      
 167 
     | 
    
         
            +
              s.summary = "Implements the ActiveRecord pattern for ORM."
         
     | 
| 
      
 168 
     | 
    
         
            +
              s.description = %q{Implements the ActiveRecord pattern (Fowler, PoEAA) for ORM. It ties database tables and classes together for business objects, like Customer or Subscription, that can find, save, and destroy themselves without resorting to manual SQL.}
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
              s.files = [ "Rakefile", "install.rb", "README", "RUNNING_UNIT_TESTS", "CHANGELOG" ]
         
     | 
| 
      
 171 
     | 
    
         
            +
              dist_dirs.each do |dir|
         
     | 
| 
      
 172 
     | 
    
         
            +
                s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
         
     | 
| 
      
 173 
     | 
    
         
            +
              end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
              s.add_dependency('activesupport', '= 2.0.0' + PKG_BUILD)
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
              s.files.delete "test/fixtures/fixture_database.sqlite"
         
     | 
| 
      
 178 
     | 
    
         
            +
              s.files.delete "test/fixtures/fixture_database_2.sqlite"
         
     | 
| 
      
 179 
     | 
    
         
            +
              s.files.delete "test/fixtures/fixture_database.sqlite3"
         
     | 
| 
      
 180 
     | 
    
         
            +
              s.files.delete "test/fixtures/fixture_database_2.sqlite3"
         
     | 
| 
      
 181 
     | 
    
         
            +
              s.require_path = 'lib'
         
     | 
| 
      
 182 
     | 
    
         
            +
              s.autorequire = 'active_record'
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
              s.has_rdoc = true
         
     | 
| 
      
 185 
     | 
    
         
            +
              s.extra_rdoc_files = %w( README )
         
     | 
| 
      
 186 
     | 
    
         
            +
              s.rdoc_options.concat ['--main',  'README']
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
              s.author = "David Heinemeier Hansson"
         
     | 
| 
      
 189 
     | 
    
         
            +
              s.email = "david@loudthinking.com"
         
     | 
| 
      
 190 
     | 
    
         
            +
              s.homepage = "http://www.rubyonrails.org"
         
     | 
| 
      
 191 
     | 
    
         
            +
              s.rubyforge_project = "activerecord"
         
     | 
| 
      
 192 
     | 
    
         
            +
            end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            Rake::GemPackageTask.new(spec) do |p|
         
     | 
| 
      
 195 
     | 
    
         
            +
              p.gem_spec = spec
         
     | 
| 
      
 196 
     | 
    
         
            +
              p.need_tar = true
         
     | 
| 
      
 197 
     | 
    
         
            +
              p.need_zip = true
         
     | 
| 
      
 198 
     | 
    
         
            +
            end
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
            task :lines do
         
     | 
| 
      
 201 
     | 
    
         
            +
              lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
              for file_name in FileList["lib/active_record/**/*.rb"]
         
     | 
| 
      
 204 
     | 
    
         
            +
                next if file_name =~ /vendor/
         
     | 
| 
      
 205 
     | 
    
         
            +
                f = File.open(file_name)
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                while line = f.gets
         
     | 
| 
      
 208 
     | 
    
         
            +
                  lines += 1
         
     | 
| 
      
 209 
     | 
    
         
            +
                  next if line =~ /^\s*$/
         
     | 
| 
      
 210 
     | 
    
         
            +
                  next if line =~ /^\s*#/
         
     | 
| 
      
 211 
     | 
    
         
            +
                  codelines += 1
         
     | 
| 
      
 212 
     | 
    
         
            +
                end
         
     | 
| 
      
 213 
     | 
    
         
            +
                puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                total_lines     += lines
         
     | 
| 
      
 216 
     | 
    
         
            +
                total_codelines += codelines
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
                lines, codelines = 0, 0
         
     | 
| 
      
 219 
     | 
    
         
            +
              end
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
              puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
         
     | 
| 
      
 222 
     | 
    
         
            +
            end
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            # Publishing ------------------------------------------------------
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
            desc "Publish the beta gem"
         
     | 
| 
      
 228 
     | 
    
         
            +
            task :pgem => [:package] do
         
     | 
| 
      
 229 
     | 
    
         
            +
              Rake::SshFilePublisher.new("davidhh@wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
         
     | 
| 
      
 230 
     | 
    
         
            +
              `ssh davidhh@wrath.rubyonrails.org './gemupdate.sh'`
         
     | 
| 
      
 231 
     | 
    
         
            +
            end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
            desc "Publish the API documentation"
         
     | 
| 
      
 234 
     | 
    
         
            +
            task :pdoc => [:rdoc] do
         
     | 
| 
      
 235 
     | 
    
         
            +
              Rake::SshDirPublisher.new("davidhh@wrath.rubyonrails.org", "public_html/ar", "doc").upload
         
     | 
| 
      
 236 
     | 
    
         
            +
            end
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
            desc "Publish the release files to RubyForge."
         
     | 
| 
      
 239 
     | 
    
         
            +
            task :release => [ :package ] do
         
     | 
| 
      
 240 
     | 
    
         
            +
              require 'rubyforge'
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
              packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
              rubyforge = RubyForge.new
         
     | 
| 
      
 245 
     | 
    
         
            +
              rubyforge.login
         
     | 
| 
      
 246 
     | 
    
         
            +
              rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
         
     | 
| 
      
 247 
     | 
    
         
            +
            end
         
     | 
    
        data/install.rb
    CHANGED
    
    | 
         @@ -18,43 +18,13 @@ unless $sitedir 
     | 
|
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
19 
     | 
    
         
             
            end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            makedirs.each {|f| File::makedirs(File.join($sitedir, *f.split(/\//)))}
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            # deprecated files that should be removed
         
     | 
| 
       25 
     | 
    
         
            -
            # deprecated = %w{ }
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            # files to install in library path
         
     | 
| 
       28 
     | 
    
         
            -
            files = %w-
         
     | 
| 
       29 
     | 
    
         
            -
             active_record.rb
         
     | 
| 
       30 
     | 
    
         
            -
             active_record/aggregations.rb
         
     | 
| 
       31 
     | 
    
         
            -
             active_record/associations.rb
         
     | 
| 
       32 
     | 
    
         
            -
             active_record/associations/association_collection.rb
         
     | 
| 
       33 
     | 
    
         
            -
             active_record/associations/has_and_belongs_to_many_association.rb
         
     | 
| 
       34 
     | 
    
         
            -
             active_record/associations/has_many_association.rb
         
     | 
| 
       35 
     | 
    
         
            -
             active_record/base.rb
         
     | 
| 
       36 
     | 
    
         
            -
             active_record/callbacks.rb
         
     | 
| 
       37 
     | 
    
         
            -
             active_record/connection_adapters/abstract_adapter.rb
         
     | 
| 
       38 
     | 
    
         
            -
             active_record/connection_adapters/mysql_adapter.rb
         
     | 
| 
       39 
     | 
    
         
            -
             active_record/connection_adapters/postgresql_adapter.rb
         
     | 
| 
       40 
     | 
    
         
            -
             active_record/connection_adapters/sqlite_adapter.rb
         
     | 
| 
       41 
     | 
    
         
            -
             active_record/deprecated_associations.rb
         
     | 
| 
       42 
     | 
    
         
            -
             active_record/fixtures.rb
         
     | 
| 
       43 
     | 
    
         
            -
             active_record/observer.rb
         
     | 
| 
       44 
     | 
    
         
            -
             active_record/reflection.rb
         
     | 
| 
       45 
     | 
    
         
            -
             active_record/support/class_attribute_accessors.rb
         
     | 
| 
       46 
     | 
    
         
            -
             active_record/support/class_inheritable_attributes.rb
         
     | 
| 
       47 
     | 
    
         
            -
             active_record/support/clean_logger.rb
         
     | 
| 
       48 
     | 
    
         
            -
             active_record/support/inflector.rb
         
     | 
| 
       49 
     | 
    
         
            -
             active_record/transactions.rb
         
     | 
| 
       50 
     | 
    
         
            -
             active_record/validations.rb
         
     | 
| 
       51 
     | 
    
         
            -
             active_record/vendor/mysql.rb
         
     | 
| 
       52 
     | 
    
         
            -
             active_record/vendor/simple.rb
         
     | 
| 
       53 
     | 
    
         
            -
            -
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
            # the acual gruntwork
         
     | 
| 
      
 21 
     | 
    
         
            +
            # the actual gruntwork
         
     | 
| 
       56 
22 
     | 
    
         
             
            Dir.chdir("lib")
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
               
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            Find.find("active_record", "active_record.rb") { |f|
         
     | 
| 
      
 25 
     | 
    
         
            +
              if f[-3..-1] == ".rb"
         
     | 
| 
      
 26 
     | 
    
         
            +
                File::install(f, File.join($sitedir, *f.split(/\//)), 0644, true)
         
     | 
| 
      
 27 
     | 
    
         
            +
              else
         
     | 
| 
      
 28 
     | 
    
         
            +
                File::makedirs(File.join($sitedir, *f.split(/\//)))
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
       60 
30 
     | 
    
         
             
            }
         
     |