activerecord 2.3.18 → 3.2.22
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1014 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +222 -0
- data/examples/performance.rb +100 -126
- data/examples/simple.rb +14 -0
- data/lib/active_record/aggregations.rb +93 -99
- data/lib/active_record/associations/alias_tracker.rb +76 -0
- data/lib/active_record/associations/association.rb +247 -0
- data/lib/active_record/associations/association_scope.rb +134 -0
- data/lib/active_record/associations/belongs_to_association.rb +54 -61
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +17 -59
- data/lib/active_record/associations/builder/association.rb +55 -0
- data/lib/active_record/associations/builder/belongs_to.rb +88 -0
- data/lib/active_record/associations/builder/collection_association.rb +75 -0
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +57 -0
- data/lib/active_record/associations/builder/has_many.rb +71 -0
- data/lib/active_record/associations/builder/has_one.rb +62 -0
- data/lib/active_record/associations/builder/singular_association.rb +32 -0
- data/lib/active_record/associations/collection_association.rb +580 -0
- data/lib/active_record/associations/collection_proxy.rb +133 -0
- data/lib/active_record/associations/has_and_belongs_to_many_association.rb +39 -119
- data/lib/active_record/associations/has_many_association.rb +60 -79
- data/lib/active_record/associations/has_many_through_association.rb +127 -206
- data/lib/active_record/associations/has_one_association.rb +55 -114
- data/lib/active_record/associations/has_one_through_association.rb +25 -26
- data/lib/active_record/associations/join_dependency/join_association.rb +159 -0
- data/lib/active_record/associations/join_dependency/join_base.rb +24 -0
- data/lib/active_record/associations/join_dependency/join_part.rb +78 -0
- data/lib/active_record/associations/join_dependency.rb +214 -0
- data/lib/active_record/associations/join_helper.rb +55 -0
- data/lib/active_record/associations/preloader/association.rb +125 -0
- data/lib/active_record/associations/preloader/belongs_to.rb +17 -0
- data/lib/active_record/associations/preloader/collection_association.rb +24 -0
- data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +60 -0
- data/lib/active_record/associations/preloader/has_many.rb +17 -0
- data/lib/active_record/associations/preloader/has_many_through.rb +15 -0
- data/lib/active_record/associations/preloader/has_one.rb +23 -0
- data/lib/active_record/associations/preloader/has_one_through.rb +9 -0
- data/lib/active_record/associations/preloader/singular_association.rb +21 -0
- data/lib/active_record/associations/preloader/through_association.rb +67 -0
- data/lib/active_record/associations/preloader.rb +181 -0
- data/lib/active_record/associations/singular_association.rb +64 -0
- data/lib/active_record/associations/through_association.rb +87 -0
- data/lib/active_record/associations.rb +693 -1337
- data/lib/active_record/attribute_assignment.rb +221 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +31 -0
- data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +32 -0
- data/lib/active_record/attribute_methods/dirty.rb +111 -0
- data/lib/active_record/attribute_methods/primary_key.rb +114 -0
- data/lib/active_record/attribute_methods/query.rb +39 -0
- data/lib/active_record/attribute_methods/read.rb +136 -0
- data/lib/active_record/attribute_methods/serialization.rb +120 -0
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -0
- data/lib/active_record/attribute_methods/write.rb +70 -0
- data/lib/active_record/attribute_methods.rb +211 -339
- data/lib/active_record/autosave_association.rb +179 -149
- data/lib/active_record/base.rb +401 -2907
- data/lib/active_record/callbacks.rb +91 -176
- data/lib/active_record/coders/yaml_column.rb +41 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +236 -119
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +110 -58
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +12 -11
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +175 -74
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +31 -35
- data/lib/active_record/connection_adapters/abstract/quoting.rb +71 -21
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +81 -311
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +194 -78
- data/lib/active_record/connection_adapters/abstract_adapter.rb +130 -83
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +676 -0
- data/lib/active_record/connection_adapters/column.rb +296 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +280 -0
- data/lib/active_record/connection_adapters/mysql_adapter.rb +272 -493
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +650 -405
- data/lib/active_record/connection_adapters/schema_cache.rb +69 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +30 -9
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +276 -147
- data/lib/active_record/connection_adapters/statement_pool.rb +40 -0
- data/lib/active_record/counter_cache.rb +123 -0
- data/lib/active_record/dynamic_finder_match.rb +41 -14
- data/lib/active_record/dynamic_matchers.rb +84 -0
- data/lib/active_record/dynamic_scope_match.rb +13 -15
- data/lib/active_record/errors.rb +195 -0
- data/lib/active_record/explain.rb +86 -0
- data/lib/active_record/explain_subscriber.rb +25 -0
- data/lib/active_record/fixtures/file.rb +65 -0
- data/lib/active_record/fixtures.rb +695 -770
- data/lib/active_record/identity_map.rb +162 -0
- data/lib/active_record/inheritance.rb +174 -0
- data/lib/active_record/integration.rb +60 -0
- data/lib/active_record/locale/en.yml +9 -27
- data/lib/active_record/locking/optimistic.rb +76 -73
- data/lib/active_record/locking/pessimistic.rb +32 -10
- data/lib/active_record/log_subscriber.rb +72 -0
- data/lib/active_record/migration/command_recorder.rb +105 -0
- data/lib/active_record/migration.rb +415 -205
- data/lib/active_record/model_schema.rb +368 -0
- data/lib/active_record/nested_attributes.rb +153 -63
- data/lib/active_record/observer.rb +27 -103
- data/lib/active_record/persistence.rb +376 -0
- data/lib/active_record/query_cache.rb +49 -8
- data/lib/active_record/querying.rb +58 -0
- data/lib/active_record/railtie.rb +131 -0
- data/lib/active_record/railties/console_sandbox.rb +6 -0
- data/lib/active_record/railties/controller_runtime.rb +49 -0
- data/lib/active_record/railties/databases.rake +659 -0
- data/lib/active_record/railties/jdbcmysql_error.rb +16 -0
- data/lib/active_record/readonly_attributes.rb +26 -0
- data/lib/active_record/reflection.rb +269 -120
- data/lib/active_record/relation/batches.rb +90 -0
- data/lib/active_record/relation/calculations.rb +372 -0
- data/lib/active_record/relation/delegation.rb +49 -0
- data/lib/active_record/relation/finder_methods.rb +402 -0
- data/lib/active_record/relation/predicate_builder.rb +63 -0
- data/lib/active_record/relation/query_methods.rb +417 -0
- data/lib/active_record/relation/spawn_methods.rb +180 -0
- data/lib/active_record/relation.rb +537 -0
- data/lib/active_record/result.rb +40 -0
- data/lib/active_record/sanitization.rb +194 -0
- data/lib/active_record/schema.rb +9 -6
- data/lib/active_record/schema_dumper.rb +55 -32
- data/lib/active_record/scoping/default.rb +142 -0
- data/lib/active_record/scoping/named.rb +200 -0
- data/lib/active_record/scoping.rb +152 -0
- data/lib/active_record/serialization.rb +8 -91
- data/lib/active_record/serializers/xml_serializer.rb +43 -197
- data/lib/active_record/session_store.rb +129 -103
- data/lib/active_record/store.rb +52 -0
- data/lib/active_record/test_case.rb +30 -23
- data/lib/active_record/timestamp.rb +95 -52
- data/lib/active_record/transactions.rb +212 -66
- data/lib/active_record/translation.rb +22 -0
- data/lib/active_record/validations/associated.rb +43 -0
- data/lib/active_record/validations/uniqueness.rb +180 -0
- data/lib/active_record/validations.rb +43 -1106
- data/lib/active_record/version.rb +5 -4
- data/lib/active_record.rb +121 -48
- data/lib/rails/generators/active_record/migration/migration_generator.rb +25 -0
- data/lib/rails/generators/active_record/migration/templates/migration.rb +34 -0
- data/lib/rails/generators/active_record/migration.rb +15 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +47 -0
- data/lib/rails/generators/active_record/model/templates/migration.rb +15 -0
- data/lib/rails/generators/active_record/model/templates/model.rb +12 -0
- data/lib/rails/generators/active_record/model/templates/module.rb +7 -0
- data/lib/rails/generators/active_record/observer/observer_generator.rb +15 -0
- data/lib/rails/generators/active_record/observer/templates/observer.rb +4 -0
- data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +25 -0
- data/lib/rails/generators/active_record/session_migration/templates/migration.rb +12 -0
- data/lib/rails/generators/active_record.rb +25 -0
- metadata +187 -363
- data/CHANGELOG +0 -5904
- data/README +0 -351
- data/RUNNING_UNIT_TESTS +0 -36
- data/Rakefile +0 -268
- data/install.rb +0 -30
- data/lib/active_record/association_preload.rb +0 -406
- data/lib/active_record/associations/association_collection.rb +0 -533
- data/lib/active_record/associations/association_proxy.rb +0 -288
- data/lib/active_record/batches.rb +0 -85
- data/lib/active_record/calculations.rb +0 -321
- data/lib/active_record/dirty.rb +0 -183
- data/lib/active_record/named_scope.rb +0 -197
- data/lib/active_record/serializers/json_serializer.rb +0 -91
- data/lib/activerecord.rb +0 -2
- data/test/assets/example.log +0 -1
- data/test/assets/flowers.jpg +0 -0
- data/test/cases/aaa_create_tables_test.rb +0 -24
- data/test/cases/active_schema_test_mysql.rb +0 -122
- data/test/cases/active_schema_test_postgresql.rb +0 -24
- data/test/cases/adapter_test.rb +0 -144
- data/test/cases/aggregations_test.rb +0 -167
- data/test/cases/ar_schema_test.rb +0 -32
- data/test/cases/associations/belongs_to_associations_test.rb +0 -438
- data/test/cases/associations/callbacks_test.rb +0 -161
- data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
- data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
- data/test/cases/associations/eager_singularization_test.rb +0 -145
- data/test/cases/associations/eager_test.rb +0 -852
- data/test/cases/associations/extension_test.rb +0 -62
- data/test/cases/associations/habtm_join_table_test.rb +0 -56
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
- data/test/cases/associations/has_many_associations_test.rb +0 -1273
- data/test/cases/associations/has_many_through_associations_test.rb +0 -360
- data/test/cases/associations/has_one_associations_test.rb +0 -330
- data/test/cases/associations/has_one_through_associations_test.rb +0 -209
- data/test/cases/associations/inner_join_association_test.rb +0 -93
- data/test/cases/associations/inverse_associations_test.rb +0 -566
- data/test/cases/associations/join_model_test.rb +0 -712
- data/test/cases/associations_test.rb +0 -282
- data/test/cases/attribute_methods_test.rb +0 -305
- data/test/cases/autosave_association_test.rb +0 -1218
- data/test/cases/base_test.rb +0 -2166
- data/test/cases/batches_test.rb +0 -81
- data/test/cases/binary_test.rb +0 -30
- data/test/cases/calculations_test.rb +0 -360
- data/test/cases/callbacks_observers_test.rb +0 -38
- data/test/cases/callbacks_test.rb +0 -438
- data/test/cases/class_inheritable_attributes_test.rb +0 -32
- data/test/cases/column_alias_test.rb +0 -17
- data/test/cases/column_definition_test.rb +0 -70
- data/test/cases/connection_pool_test.rb +0 -25
- data/test/cases/connection_test_firebird.rb +0 -8
- data/test/cases/connection_test_mysql.rb +0 -65
- data/test/cases/copy_table_test_sqlite.rb +0 -80
- data/test/cases/counter_cache_test.rb +0 -84
- data/test/cases/database_statements_test.rb +0 -12
- data/test/cases/datatype_test_postgresql.rb +0 -204
- data/test/cases/date_time_test.rb +0 -37
- data/test/cases/default_test_firebird.rb +0 -16
- data/test/cases/defaults_test.rb +0 -111
- data/test/cases/deprecated_finder_test.rb +0 -30
- data/test/cases/dirty_test.rb +0 -316
- data/test/cases/finder_respond_to_test.rb +0 -76
- data/test/cases/finder_test.rb +0 -1098
- data/test/cases/fixtures_test.rb +0 -661
- data/test/cases/helper.rb +0 -68
- data/test/cases/i18n_test.rb +0 -46
- data/test/cases/inheritance_test.rb +0 -262
- data/test/cases/invalid_date_test.rb +0 -24
- data/test/cases/json_serialization_test.rb +0 -219
- data/test/cases/lifecycle_test.rb +0 -193
- data/test/cases/locking_test.rb +0 -350
- data/test/cases/method_scoping_test.rb +0 -704
- data/test/cases/migration_test.rb +0 -1649
- data/test/cases/migration_test_firebird.rb +0 -124
- data/test/cases/mixin_test.rb +0 -96
- data/test/cases/modules_test.rb +0 -109
- data/test/cases/multiple_db_test.rb +0 -85
- data/test/cases/named_scope_test.rb +0 -372
- data/test/cases/nested_attributes_test.rb +0 -840
- data/test/cases/pk_test.rb +0 -119
- data/test/cases/pooled_connections_test.rb +0 -103
- data/test/cases/query_cache_test.rb +0 -129
- data/test/cases/readonly_test.rb +0 -107
- data/test/cases/reflection_test.rb +0 -234
- data/test/cases/reload_models_test.rb +0 -22
- data/test/cases/repair_helper.rb +0 -50
- data/test/cases/reserved_word_test_mysql.rb +0 -176
- data/test/cases/sanitize_test.rb +0 -25
- data/test/cases/schema_authorization_test_postgresql.rb +0 -75
- data/test/cases/schema_dumper_test.rb +0 -211
- data/test/cases/schema_test_postgresql.rb +0 -178
- data/test/cases/serialization_test.rb +0 -47
- data/test/cases/sp_test_mysql.rb +0 -16
- data/test/cases/synonym_test_oracle.rb +0 -17
- data/test/cases/timestamp_test.rb +0 -75
- data/test/cases/transactions_test.rb +0 -543
- data/test/cases/unconnected_test.rb +0 -32
- data/test/cases/validations_i18n_test.rb +0 -925
- data/test/cases/validations_test.rb +0 -1684
- data/test/cases/xml_serialization_test.rb +0 -240
- data/test/cases/yaml_serialization_test.rb +0 -11
- data/test/config.rb +0 -5
- data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
- data/test/connections/jdbc_jdbch2/connection.rb +0 -18
- data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
- data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
- data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
- data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
- data/test/connections/native_db2/connection.rb +0 -25
- data/test/connections/native_firebird/connection.rb +0 -26
- data/test/connections/native_frontbase/connection.rb +0 -27
- data/test/connections/native_mysql/connection.rb +0 -25
- data/test/connections/native_openbase/connection.rb +0 -21
- data/test/connections/native_oracle/connection.rb +0 -27
- data/test/connections/native_postgresql/connection.rb +0 -21
- data/test/connections/native_sqlite/connection.rb +0 -25
- data/test/connections/native_sqlite3/connection.rb +0 -25
- data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
- data/test/connections/native_sybase/connection.rb +0 -23
- data/test/fixtures/accounts.yml +0 -29
- 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_addresses.yml +0 -5
- data/test/fixtures/author_favorites.yml +0 -4
- data/test/fixtures/authors.yml +0 -9
- data/test/fixtures/binaries.yml +0 -132
- data/test/fixtures/books.yml +0 -7
- data/test/fixtures/categories/special_categories.yml +0 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
- data/test/fixtures/categories.yml +0 -14
- data/test/fixtures/categories_ordered.yml +0 -7
- data/test/fixtures/categories_posts.yml +0 -23
- data/test/fixtures/categorizations.yml +0 -17
- data/test/fixtures/clubs.yml +0 -6
- data/test/fixtures/comments.yml +0 -59
- data/test/fixtures/companies.yml +0 -56
- data/test/fixtures/computers.yml +0 -4
- data/test/fixtures/courses.yml +0 -7
- data/test/fixtures/customers.yml +0 -26
- data/test/fixtures/developers.yml +0 -21
- data/test/fixtures/developers_projects.yml +0 -17
- data/test/fixtures/edges.yml +0 -6
- data/test/fixtures/entrants.yml +0 -14
- data/test/fixtures/faces.yml +0 -11
- data/test/fixtures/fk_test_has_fk.yml +0 -3
- data/test/fixtures/fk_test_has_pk.yml +0 -2
- data/test/fixtures/funny_jokes.yml +0 -10
- data/test/fixtures/interests.yml +0 -33
- data/test/fixtures/items.yml +0 -4
- data/test/fixtures/jobs.yml +0 -7
- data/test/fixtures/legacy_things.yml +0 -3
- data/test/fixtures/mateys.yml +0 -4
- data/test/fixtures/member_types.yml +0 -6
- data/test/fixtures/members.yml +0 -6
- data/test/fixtures/memberships.yml +0 -20
- data/test/fixtures/men.yml +0 -5
- data/test/fixtures/minimalistics.yml +0 -2
- data/test/fixtures/mixed_case_monkeys.yml +0 -6
- data/test/fixtures/mixins.yml +0 -29
- data/test/fixtures/movies.yml +0 -7
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/fixtures/naked/yml/accounts.yml +0 -1
- data/test/fixtures/naked/yml/companies.yml +0 -1
- data/test/fixtures/naked/yml/courses.yml +0 -1
- data/test/fixtures/organizations.yml +0 -5
- data/test/fixtures/owners.yml +0 -7
- data/test/fixtures/parrots.yml +0 -27
- data/test/fixtures/parrots_pirates.yml +0 -7
- data/test/fixtures/people.yml +0 -15
- data/test/fixtures/pets.yml +0 -14
- data/test/fixtures/pirates.yml +0 -9
- data/test/fixtures/polymorphic_designs.yml +0 -19
- data/test/fixtures/polymorphic_prices.yml +0 -19
- data/test/fixtures/posts.yml +0 -52
- data/test/fixtures/price_estimates.yml +0 -7
- data/test/fixtures/projects.yml +0 -7
- data/test/fixtures/readers.yml +0 -9
- data/test/fixtures/references.yml +0 -17
- data/test/fixtures/reserved_words/distinct.yml +0 -5
- data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
- data/test/fixtures/reserved_words/group.yml +0 -14
- data/test/fixtures/reserved_words/select.yml +0 -8
- data/test/fixtures/reserved_words/values.yml +0 -7
- data/test/fixtures/ships.yml +0 -5
- data/test/fixtures/sponsors.yml +0 -9
- data/test/fixtures/subscribers.yml +0 -7
- data/test/fixtures/subscriptions.yml +0 -12
- data/test/fixtures/taggings.yml +0 -28
- data/test/fixtures/tags.yml +0 -7
- data/test/fixtures/tasks.yml +0 -7
- data/test/fixtures/tees.yml +0 -4
- data/test/fixtures/ties.yml +0 -4
- data/test/fixtures/topics.yml +0 -42
- data/test/fixtures/toys.yml +0 -4
- data/test/fixtures/treasures.yml +0 -10
- data/test/fixtures/vertices.yml +0 -4
- data/test/fixtures/warehouse-things.yml +0 -3
- data/test/fixtures/zines.yml +0 -5
- data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
- data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
- data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
- data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
- data/test/migrations/duplicate/3_foo.rb +0 -7
- data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
- data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
- data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
- data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
- data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
- data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
- data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
- data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
- data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
- data/test/migrations/missing/1_people_have_last_names.rb +0 -9
- data/test/migrations/missing/3_we_need_reminders.rb +0 -12
- data/test/migrations/missing/4_innocent_jointable.rb +0 -12
- data/test/migrations/valid/1_people_have_last_names.rb +0 -9
- data/test/migrations/valid/2_we_need_reminders.rb +0 -12
- data/test/migrations/valid/3_innocent_jointable.rb +0 -12
- data/test/models/author.rb +0 -151
- data/test/models/auto_id.rb +0 -4
- data/test/models/binary.rb +0 -2
- data/test/models/bird.rb +0 -9
- data/test/models/book.rb +0 -4
- data/test/models/categorization.rb +0 -5
- data/test/models/category.rb +0 -34
- data/test/models/citation.rb +0 -6
- data/test/models/club.rb +0 -13
- data/test/models/column_name.rb +0 -3
- data/test/models/comment.rb +0 -29
- data/test/models/company.rb +0 -173
- data/test/models/company_in_module.rb +0 -78
- data/test/models/computer.rb +0 -3
- data/test/models/contact.rb +0 -16
- data/test/models/contract.rb +0 -5
- data/test/models/course.rb +0 -3
- data/test/models/customer.rb +0 -73
- data/test/models/default.rb +0 -2
- data/test/models/developer.rb +0 -101
- data/test/models/edge.rb +0 -5
- data/test/models/entrant.rb +0 -3
- data/test/models/essay.rb +0 -3
- data/test/models/event.rb +0 -3
- data/test/models/event_author.rb +0 -8
- data/test/models/face.rb +0 -7
- data/test/models/guid.rb +0 -2
- data/test/models/interest.rb +0 -5
- data/test/models/invoice.rb +0 -4
- data/test/models/item.rb +0 -7
- data/test/models/job.rb +0 -5
- data/test/models/joke.rb +0 -3
- data/test/models/keyboard.rb +0 -3
- data/test/models/legacy_thing.rb +0 -3
- data/test/models/line_item.rb +0 -3
- data/test/models/man.rb +0 -9
- data/test/models/matey.rb +0 -4
- data/test/models/member.rb +0 -12
- data/test/models/member_detail.rb +0 -5
- data/test/models/member_type.rb +0 -3
- data/test/models/membership.rb +0 -9
- data/test/models/minimalistic.rb +0 -2
- data/test/models/mixed_case_monkey.rb +0 -3
- data/test/models/movie.rb +0 -5
- data/test/models/order.rb +0 -4
- data/test/models/organization.rb +0 -6
- data/test/models/owner.rb +0 -5
- data/test/models/parrot.rb +0 -22
- data/test/models/person.rb +0 -16
- data/test/models/pet.rb +0 -5
- data/test/models/pirate.rb +0 -80
- data/test/models/polymorphic_design.rb +0 -3
- data/test/models/polymorphic_price.rb +0 -3
- data/test/models/post.rb +0 -102
- data/test/models/price_estimate.rb +0 -3
- data/test/models/project.rb +0 -30
- data/test/models/reader.rb +0 -4
- data/test/models/reference.rb +0 -4
- data/test/models/reply.rb +0 -46
- data/test/models/ship.rb +0 -19
- data/test/models/ship_part.rb +0 -7
- data/test/models/sponsor.rb +0 -4
- data/test/models/subject.rb +0 -4
- data/test/models/subscriber.rb +0 -8
- data/test/models/subscription.rb +0 -4
- data/test/models/tag.rb +0 -7
- data/test/models/tagging.rb +0 -10
- data/test/models/task.rb +0 -3
- data/test/models/tee.rb +0 -4
- data/test/models/tie.rb +0 -4
- data/test/models/topic.rb +0 -80
- data/test/models/toy.rb +0 -6
- data/test/models/treasure.rb +0 -8
- data/test/models/vertex.rb +0 -9
- data/test/models/warehouse_thing.rb +0 -5
- data/test/models/zine.rb +0 -3
- data/test/schema/mysql_specific_schema.rb +0 -31
- data/test/schema/postgresql_specific_schema.rb +0 -114
- data/test/schema/schema.rb +0 -550
- data/test/schema/schema2.rb +0 -6
- data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,372 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/post'
|
3
|
-
require 'models/topic'
|
4
|
-
require 'models/comment'
|
5
|
-
require 'models/reply'
|
6
|
-
require 'models/author'
|
7
|
-
require 'models/developer'
|
8
|
-
|
9
|
-
class NamedScopeTest < ActiveRecord::TestCase
|
10
|
-
fixtures :posts, :authors, :topics, :comments, :author_addresses
|
11
|
-
|
12
|
-
def test_named_scope_with_STI
|
13
|
-
assert_equal 5,Post.with_type_self.count
|
14
|
-
assert_equal 1,SpecialPost.with_type_self.count
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_implements_enumerable
|
18
|
-
assert !Topic.find(:all).empty?
|
19
|
-
|
20
|
-
assert_equal Topic.find(:all), Topic.base
|
21
|
-
assert_equal Topic.find(:all), Topic.base.to_a
|
22
|
-
assert_equal Topic.find(:first), Topic.base.first
|
23
|
-
assert_equal Topic.find(:all), Topic.base.map { |i| i }
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_found_items_are_cached
|
27
|
-
Topic.columns
|
28
|
-
all_posts = Topic.base
|
29
|
-
|
30
|
-
assert_queries(1) do
|
31
|
-
all_posts.collect
|
32
|
-
all_posts.collect
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_reload_expires_cache_of_found_items
|
37
|
-
all_posts = Topic.base
|
38
|
-
all_posts.inspect
|
39
|
-
|
40
|
-
new_post = Topic.create!
|
41
|
-
assert !all_posts.include?(new_post)
|
42
|
-
assert all_posts.reload.include?(new_post)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_delegates_finds_and_calculations_to_the_base_class
|
46
|
-
assert !Topic.find(:all).empty?
|
47
|
-
|
48
|
-
assert_equal Topic.find(:all), Topic.base.find(:all)
|
49
|
-
assert_equal Topic.find(:first), Topic.base.find(:first)
|
50
|
-
assert_equal Topic.count, Topic.base.count
|
51
|
-
assert_equal Topic.average(:replies_count), Topic.base.average(:replies_count)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_scope_should_respond_to_own_methods_and_methods_of_the_proxy
|
55
|
-
assert Topic.approved.respond_to?(:proxy_found)
|
56
|
-
assert Topic.approved.respond_to?(:count)
|
57
|
-
assert Topic.approved.respond_to?(:length)
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_respond_to_respects_include_private_parameter
|
61
|
-
assert !Topic.approved.respond_to?(:load_found)
|
62
|
-
assert Topic.approved.respond_to?(:load_found, true)
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_subclasses_inherit_scopes
|
66
|
-
assert Topic.scopes.include?(:base)
|
67
|
-
|
68
|
-
assert Reply.scopes.include?(:base)
|
69
|
-
assert_equal Reply.find(:all), Reply.base
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_scopes_with_options_limit_finds_to_those_matching_the_criteria_specified
|
73
|
-
assert !Topic.find(:all, :conditions => {:approved => true}).empty?
|
74
|
-
|
75
|
-
assert_equal Topic.find(:all, :conditions => {:approved => true}), Topic.approved
|
76
|
-
assert_equal Topic.count(:conditions => {:approved => true}), Topic.approved.count
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_scopes_with_string_name_can_be_composed
|
80
|
-
# NOTE that scopes defined with a string as a name worked on their own
|
81
|
-
# but when called on another scope the other scope was completely replaced
|
82
|
-
assert_equal Topic.replied.approved, Topic.replied.approved_as_string
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_scopes_can_be_specified_with_deep_hash_conditions
|
86
|
-
assert_equal Topic.replied.approved, Topic.replied.approved_as_hash_condition
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_scopes_are_composable
|
90
|
-
assert_equal (approved = Topic.find(:all, :conditions => {:approved => true})), Topic.approved
|
91
|
-
assert_equal (replied = Topic.find(:all, :conditions => 'replies_count > 0')), Topic.replied
|
92
|
-
assert !(approved == replied)
|
93
|
-
assert !(approved & replied).empty?
|
94
|
-
|
95
|
-
assert_equal approved & replied, Topic.approved.replied
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_procedural_scopes
|
99
|
-
topics_written_before_the_third = Topic.find(:all, :conditions => ['written_on < ?', topics(:third).written_on])
|
100
|
-
topics_written_before_the_second = Topic.find(:all, :conditions => ['written_on < ?', topics(:second).written_on])
|
101
|
-
assert_not_equal topics_written_before_the_second, topics_written_before_the_third
|
102
|
-
|
103
|
-
assert_equal topics_written_before_the_third, Topic.written_before(topics(:third).written_on)
|
104
|
-
assert_equal topics_written_before_the_second, Topic.written_before(topics(:second).written_on)
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_procedural_scopes_returning_nil
|
108
|
-
all_topics = Topic.find(:all)
|
109
|
-
|
110
|
-
assert_equal all_topics, Topic.written_before(nil)
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_scopes_with_joins
|
114
|
-
address = author_addresses(:david_address)
|
115
|
-
posts_with_authors_at_address = Post.find(
|
116
|
-
:all, :joins => 'JOIN authors ON authors.id = posts.author_id',
|
117
|
-
:conditions => [ 'authors.author_address_id = ?', address.id ]
|
118
|
-
)
|
119
|
-
assert_equal posts_with_authors_at_address, Post.with_authors_at_address(address)
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_scopes_with_joins_respects_custom_select
|
123
|
-
address = author_addresses(:david_address)
|
124
|
-
posts_with_authors_at_address_titles = Post.find(:all,
|
125
|
-
:select => 'title',
|
126
|
-
:joins => 'JOIN authors ON authors.id = posts.author_id',
|
127
|
-
:conditions => [ 'authors.author_address_id = ?', address.id ]
|
128
|
-
)
|
129
|
-
assert_equal posts_with_authors_at_address_titles, Post.with_authors_at_address(address).find(:all, :select => 'title')
|
130
|
-
end
|
131
|
-
|
132
|
-
def test_extensions
|
133
|
-
assert_equal 1, Topic.anonymous_extension.one
|
134
|
-
assert_equal 2, Topic.named_extension.two
|
135
|
-
end
|
136
|
-
|
137
|
-
def test_multiple_extensions
|
138
|
-
assert_equal 2, Topic.multiple_extensions.extension_two
|
139
|
-
assert_equal 1, Topic.multiple_extensions.extension_one
|
140
|
-
end
|
141
|
-
|
142
|
-
def test_has_many_associations_have_access_to_named_scopes
|
143
|
-
assert_not_equal Post.containing_the_letter_a, authors(:david).posts
|
144
|
-
assert !Post.containing_the_letter_a.empty?
|
145
|
-
|
146
|
-
assert_equal authors(:david).posts & Post.containing_the_letter_a, authors(:david).posts.containing_the_letter_a
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_nested_named_scopes_doesnt_duplicate_conditions_on_child_scopes
|
150
|
-
comments_scope = posts(:welcome).comments.send(:construct_sql)
|
151
|
-
named_scope_sql_conditions = posts(:welcome).comments.containing_the_letter_e.send(:current_scoped_methods)[:find][:conditions]
|
152
|
-
assert_no_match /#{comments_scope}.*#{comments_scope}/i, named_scope_sql_conditions
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_has_many_through_associations_have_access_to_named_scopes
|
156
|
-
assert_not_equal Comment.containing_the_letter_e, authors(:david).comments
|
157
|
-
assert !Comment.containing_the_letter_e.empty?
|
158
|
-
|
159
|
-
assert_equal authors(:david).comments & Comment.containing_the_letter_e, authors(:david).comments.containing_the_letter_e
|
160
|
-
end
|
161
|
-
|
162
|
-
def test_named_scopes_honor_current_scopes_from_when_defined
|
163
|
-
assert !Post.ranked_by_comments.limit(5).empty?
|
164
|
-
assert !authors(:david).posts.ranked_by_comments.limit(5).empty?
|
165
|
-
assert_not_equal Post.ranked_by_comments.limit(5), authors(:david).posts.ranked_by_comments.limit(5)
|
166
|
-
assert_not_equal Post.top(5), authors(:david).posts.top(5)
|
167
|
-
assert_equal authors(:david).posts.ranked_by_comments.limit(5), authors(:david).posts.top(5)
|
168
|
-
assert_equal Post.ranked_by_comments.limit(5), Post.top(5)
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_active_records_have_scope_named__all__
|
172
|
-
assert !Topic.find(:all).empty?
|
173
|
-
|
174
|
-
assert_equal Topic.find(:all), Topic.base
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_active_records_have_scope_named__scoped__
|
178
|
-
assert !Topic.find(:all, scope = {:conditions => "content LIKE '%Have%'"}).empty?
|
179
|
-
|
180
|
-
assert_equal Topic.find(:all, scope), Topic.scoped(scope)
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_proxy_options
|
184
|
-
expected_proxy_options = { :conditions => { :approved => true } }
|
185
|
-
assert_equal expected_proxy_options, Topic.approved.proxy_options
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_first_and_last_should_support_find_options
|
189
|
-
assert_equal Topic.base.first(:order => 'title'), Topic.base.find(:first, :order => 'title')
|
190
|
-
assert_equal Topic.base.last(:order => 'title'), Topic.base.find(:last, :order => 'title')
|
191
|
-
end
|
192
|
-
|
193
|
-
def test_first_and_last_should_allow_integers_for_limit
|
194
|
-
assert_equal Topic.base.first(2), Topic.base.to_a.first(2)
|
195
|
-
assert_equal Topic.base.last(2), Topic.base.to_a.last(2)
|
196
|
-
end
|
197
|
-
|
198
|
-
def test_first_and_last_should_not_use_query_when_results_are_loaded
|
199
|
-
topics = Topic.base
|
200
|
-
topics.reload # force load
|
201
|
-
assert_no_queries do
|
202
|
-
topics.first
|
203
|
-
topics.last
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
def test_first_and_last_find_options_should_use_query_when_results_are_loaded
|
208
|
-
topics = Topic.base
|
209
|
-
topics.reload # force load
|
210
|
-
assert_queries(2) do
|
211
|
-
topics.first(:order => 'title')
|
212
|
-
topics.last(:order => 'title')
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
def test_empty_should_not_load_results
|
217
|
-
topics = Topic.base
|
218
|
-
assert_queries(2) do
|
219
|
-
topics.empty? # use count query
|
220
|
-
topics.collect # force load
|
221
|
-
topics.empty? # use loaded (no query)
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_any_should_not_load_results
|
226
|
-
topics = Topic.base
|
227
|
-
assert_queries(2) do
|
228
|
-
topics.any? # use count query
|
229
|
-
topics.collect # force load
|
230
|
-
topics.any? # use loaded (no query)
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
def test_any_should_call_proxy_found_if_using_a_block
|
235
|
-
topics = Topic.base
|
236
|
-
assert_queries(1) do
|
237
|
-
topics.expects(:empty?).never
|
238
|
-
topics.any? { true }
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
def test_any_should_not_fire_query_if_named_scope_loaded
|
243
|
-
topics = Topic.base
|
244
|
-
topics.collect # force load
|
245
|
-
assert_no_queries { assert topics.any? }
|
246
|
-
end
|
247
|
-
|
248
|
-
def test_should_build_with_proxy_options
|
249
|
-
topic = Topic.approved.build({})
|
250
|
-
assert topic.approved
|
251
|
-
end
|
252
|
-
|
253
|
-
def test_should_build_new_with_proxy_options
|
254
|
-
topic = Topic.approved.new
|
255
|
-
assert topic.approved
|
256
|
-
end
|
257
|
-
|
258
|
-
def test_should_create_with_proxy_options
|
259
|
-
topic = Topic.approved.create({})
|
260
|
-
assert topic.approved
|
261
|
-
end
|
262
|
-
|
263
|
-
def test_should_create_with_bang_with_proxy_options
|
264
|
-
topic = Topic.approved.create!({})
|
265
|
-
assert topic.approved
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_should_build_with_proxy_options_chained
|
269
|
-
topic = Topic.approved.by_lifo.build({})
|
270
|
-
assert topic.approved
|
271
|
-
assert_equal 'lifo', topic.author_name
|
272
|
-
end
|
273
|
-
|
274
|
-
def test_find_all_should_behave_like_select
|
275
|
-
assert_equal Topic.base.select(&:approved), Topic.base.find_all(&:approved)
|
276
|
-
end
|
277
|
-
|
278
|
-
def test_rand_should_select_a_random_object_from_proxy
|
279
|
-
assert Topic.approved.sample.is_a?(Topic)
|
280
|
-
end
|
281
|
-
|
282
|
-
def test_should_use_where_in_query_for_named_scope
|
283
|
-
assert_equal Developer.find_all_by_name('Jamis').to_set, Developer.find_all_by_id(Developer.jamises).to_set
|
284
|
-
end
|
285
|
-
|
286
|
-
def test_size_should_use_count_when_results_are_not_loaded
|
287
|
-
topics = Topic.base
|
288
|
-
assert_queries(1) do
|
289
|
-
assert_sql(/COUNT/i) { topics.size }
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
def test_size_should_use_length_when_results_are_loaded
|
294
|
-
topics = Topic.base
|
295
|
-
topics.reload # force load
|
296
|
-
assert_no_queries do
|
297
|
-
topics.size # use loaded (no query)
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
def test_chaining_with_duplicate_joins
|
302
|
-
join = "INNER JOIN comments ON comments.post_id = posts.id"
|
303
|
-
post = Post.find(1)
|
304
|
-
assert_equal post.comments.size, Post.scoped(:joins => join).scoped(:joins => join, :conditions => "posts.id = #{post.id}").size
|
305
|
-
end
|
306
|
-
|
307
|
-
def test_chaining_should_use_latest_conditions_when_creating
|
308
|
-
post = Topic.rejected.new
|
309
|
-
assert !post.approved?
|
310
|
-
|
311
|
-
post = Topic.rejected.approved.new
|
312
|
-
assert post.approved?
|
313
|
-
|
314
|
-
post = Topic.approved.rejected.new
|
315
|
-
assert !post.approved?
|
316
|
-
|
317
|
-
post = Topic.approved.rejected.approved.new
|
318
|
-
assert post.approved?
|
319
|
-
end
|
320
|
-
|
321
|
-
def test_chaining_should_use_latest_conditions_when_searching
|
322
|
-
# Normal hash conditions
|
323
|
-
assert_equal Topic.all(:conditions => {:approved => true}), Topic.rejected.approved.all
|
324
|
-
assert_equal Topic.all(:conditions => {:approved => false}), Topic.approved.rejected.all
|
325
|
-
|
326
|
-
# Nested hash conditions with same keys
|
327
|
-
assert_equal [posts(:sti_comments)], Post.with_special_comments.with_very_special_comments.all
|
328
|
-
|
329
|
-
# Nested hash conditions with different keys
|
330
|
-
assert_equal [posts(:sti_comments)], Post.with_special_comments.with_post(4).all.uniq
|
331
|
-
end
|
332
|
-
|
333
|
-
def test_named_scopes_batch_finders
|
334
|
-
assert_equal 3, Topic.approved.count
|
335
|
-
|
336
|
-
assert_queries(4) do
|
337
|
-
Topic.approved.find_each(:batch_size => 1) {|t| assert t.approved? }
|
338
|
-
end
|
339
|
-
|
340
|
-
assert_queries(2) do
|
341
|
-
Topic.approved.find_in_batches(:batch_size => 2) do |group|
|
342
|
-
group.each {|t| assert t.approved? }
|
343
|
-
end
|
344
|
-
end
|
345
|
-
end
|
346
|
-
|
347
|
-
def test_table_names_for_chaining_scopes_with_and_without_table_name_included
|
348
|
-
assert_nothing_raised do
|
349
|
-
Comment.for_first_post.for_first_author.all
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
class DynamicScopeMatchTest < ActiveRecord::TestCase
|
355
|
-
def test_scoped_by_no_match
|
356
|
-
assert_nil ActiveRecord::DynamicScopeMatch.match("not_scoped_at_all")
|
357
|
-
end
|
358
|
-
|
359
|
-
def test_scoped_by
|
360
|
-
match = ActiveRecord::DynamicScopeMatch.match("scoped_by_age_and_sex_and_location")
|
361
|
-
assert_not_nil match
|
362
|
-
assert match.scope?
|
363
|
-
assert_equal %w(age sex location), match.attribute_names
|
364
|
-
end
|
365
|
-
end
|
366
|
-
|
367
|
-
class DynamicScopeTest < ActiveRecord::TestCase
|
368
|
-
def test_dynamic_scope
|
369
|
-
assert_equal Post.scoped_by_author_id(1).find(1), Post.find(1)
|
370
|
-
assert_equal Post.scoped_by_author_id_and_title(1, "Welcome to the weblog").first, Post.find(:first, :conditions => { :author_id => 1, :title => "Welcome to the weblog"})
|
371
|
-
end
|
372
|
-
end
|