simply_stated 0.0.3 → 0.0.4

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.
Files changed (908) hide show
  1. data/.gitignore +7 -0
  2. data/Gemfile +6 -0
  3. data/README.textile +42 -0
  4. data/Rakefile +3 -4
  5. data/VERSION +1 -1
  6. data/bin/convert_to_should_syntax +3 -0
  7. data/lib/simply_stated.rb +4 -6
  8. data/simply_stated.gemspec +914 -9
  9. data/test/database.yml +3 -0
  10. data/test/models/two_state_rule.rb +10 -0
  11. data/test/models/user.rb +3 -0
  12. data/test/schema.rb +9 -0
  13. data/test/simply_stated_test.rb +66 -0
  14. data/test/test_helper.rb +33 -0
  15. data/vendor/gems/ruby/1.8/cache/activerecord-2.3.5.gem +0 -0
  16. data/vendor/gems/ruby/1.8/cache/activesupport-2.3.5.gem +0 -0
  17. data/vendor/gems/ruby/1.8/cache/freighthopper-0.1.2.gem +0 -0
  18. data/vendor/gems/ruby/1.8/cache/shoulda-2.10.3.gem +0 -0
  19. data/vendor/gems/ruby/1.8/cache/test-rig-0.0.3.gem +0 -0
  20. data/vendor/gems/ruby/1.8/environment.rb +111 -0
  21. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/CHANGELOG +5858 -0
  22. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/README +351 -0
  23. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/RUNNING_UNIT_TESTS +36 -0
  24. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/Rakefile +270 -0
  25. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/examples/associations.png +0 -0
  26. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/examples/performance.rb +162 -0
  27. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/install.rb +30 -0
  28. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/aggregations.rb +261 -0
  29. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/association_preload.rb +389 -0
  30. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb +475 -0
  31. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_proxy.rb +278 -0
  32. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/belongs_to_association.rb +76 -0
  33. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/belongs_to_polymorphic_association.rb +53 -0
  34. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_and_belongs_to_many_association.rb +143 -0
  35. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_many_association.rb +122 -0
  36. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_many_through_association.rb +266 -0
  37. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_one_association.rb +133 -0
  38. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_one_through_association.rb +37 -0
  39. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/associations.rb +2241 -0
  40. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb +388 -0
  41. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/autosave_association.rb +364 -0
  42. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb +3165 -0
  43. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/batches.rb +81 -0
  44. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/calculations.rb +311 -0
  45. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/callbacks.rb +360 -0
  46. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_pool.rb +371 -0
  47. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/connection_specification.rb +139 -0
  48. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/database_statements.rb +289 -0
  49. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/query_cache.rb +94 -0
  50. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/quoting.rb +69 -0
  51. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/schema_definitions.rb +722 -0
  52. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract/schema_statements.rb +434 -0
  53. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb +241 -0
  54. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/mysql_adapter.rb +630 -0
  55. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/postgresql_adapter.rb +1113 -0
  56. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite3_adapter.rb +34 -0
  57. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/sqlite_adapter.rb +453 -0
  58. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/dirty.rb +183 -0
  59. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/dynamic_finder_match.rb +41 -0
  60. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/dynamic_scope_match.rb +25 -0
  61. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/fixtures.rb +996 -0
  62. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/i18n_interpolation_deprecation.rb +26 -0
  63. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/locale/en.yml +58 -0
  64. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/locking/optimistic.rb +148 -0
  65. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/locking/pessimistic.rb +55 -0
  66. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb +566 -0
  67. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb +192 -0
  68. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/nested_attributes.rb +392 -0
  69. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/observer.rb +197 -0
  70. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/query_cache.rb +33 -0
  71. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb +320 -0
  72. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/schema.rb +51 -0
  73. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/schema_dumper.rb +182 -0
  74. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/serialization.rb +101 -0
  75. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/serializers/json_serializer.rb +91 -0
  76. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/serializers/xml_serializer.rb +357 -0
  77. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/session_store.rb +326 -0
  78. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/test_case.rb +66 -0
  79. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/timestamp.rb +71 -0
  80. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/transactions.rb +235 -0
  81. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/validations.rb +1135 -0
  82. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record/version.rb +9 -0
  83. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/active_record.rb +84 -0
  84. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/lib/activerecord.rb +2 -0
  85. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/assets/example.log +1 -0
  86. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/assets/flowers.jpg +0 -0
  87. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/aaa_create_tables_test.rb +24 -0
  88. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/active_schema_test_mysql.rb +100 -0
  89. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/active_schema_test_postgresql.rb +24 -0
  90. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/adapter_test.rb +145 -0
  91. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/aggregations_test.rb +167 -0
  92. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/ar_schema_test.rb +32 -0
  93. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/belongs_to_associations_test.rb +425 -0
  94. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/callbacks_test.rb +161 -0
  95. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/cascaded_eager_loading_test.rb +131 -0
  96. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
  97. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/eager_load_nested_include_test.rb +130 -0
  98. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/eager_singularization_test.rb +145 -0
  99. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/eager_test.rb +834 -0
  100. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/extension_test.rb +62 -0
  101. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/habtm_join_table_test.rb +56 -0
  102. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/has_and_belongs_to_many_associations_test.rb +822 -0
  103. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/has_many_associations_test.rb +1134 -0
  104. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/has_many_through_associations_test.rb +346 -0
  105. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/has_one_associations_test.rb +330 -0
  106. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/has_one_through_associations_test.rb +209 -0
  107. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/inner_join_association_test.rb +93 -0
  108. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations/join_model_test.rb +712 -0
  109. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/associations_test.rb +262 -0
  110. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/attribute_methods_test.rb +305 -0
  111. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/autosave_association_test.rb +1142 -0
  112. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/base_test.rb +2154 -0
  113. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/batches_test.rb +61 -0
  114. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/binary_test.rb +30 -0
  115. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/calculations_test.rb +348 -0
  116. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/callbacks_observers_test.rb +38 -0
  117. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/callbacks_test.rb +438 -0
  118. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/class_inheritable_attributes_test.rb +32 -0
  119. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/column_alias_test.rb +17 -0
  120. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/column_definition_test.rb +70 -0
  121. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/connection_pool_test.rb +25 -0
  122. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/connection_test_firebird.rb +8 -0
  123. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/connection_test_mysql.rb +64 -0
  124. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/copy_table_test_sqlite.rb +80 -0
  125. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/database_statements_test.rb +12 -0
  126. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/datatype_test_postgresql.rb +204 -0
  127. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/date_time_test.rb +37 -0
  128. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/default_test_firebird.rb +16 -0
  129. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/defaults_test.rb +111 -0
  130. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/deprecated_finder_test.rb +30 -0
  131. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/dirty_test.rb +316 -0
  132. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/finder_respond_to_test.rb +76 -0
  133. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/finder_test.rb +1054 -0
  134. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/fixtures_test.rb +656 -0
  135. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/helper.rb +68 -0
  136. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/i18n_test.rb +46 -0
  137. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/inheritance_test.rb +262 -0
  138. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/invalid_date_test.rb +24 -0
  139. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/json_serialization_test.rb +205 -0
  140. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/lifecycle_test.rb +193 -0
  141. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/locking_test.rb +304 -0
  142. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/method_scoping_test.rb +704 -0
  143. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/migration_test.rb +1523 -0
  144. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/migration_test_firebird.rb +124 -0
  145. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/mixin_test.rb +96 -0
  146. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/modules_test.rb +81 -0
  147. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/multiple_db_test.rb +85 -0
  148. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/named_scope_test.rb +361 -0
  149. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/nested_attributes_test.rb +581 -0
  150. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/pk_test.rb +119 -0
  151. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/pooled_connections_test.rb +103 -0
  152. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/query_cache_test.rb +123 -0
  153. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/readonly_test.rb +107 -0
  154. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/reflection_test.rb +194 -0
  155. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/reload_models_test.rb +22 -0
  156. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/repair_helper.rb +50 -0
  157. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/reserved_word_test_mysql.rb +176 -0
  158. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/sanitize_test.rb +25 -0
  159. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/schema_authorization_test_postgresql.rb +75 -0
  160. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/schema_dumper_test.rb +211 -0
  161. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/schema_test_postgresql.rb +178 -0
  162. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/serialization_test.rb +47 -0
  163. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/synonym_test_oracle.rb +17 -0
  164. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/timestamp_test.rb +75 -0
  165. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/transactions_test.rb +522 -0
  166. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/unconnected_test.rb +32 -0
  167. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/validations_i18n_test.rb +955 -0
  168. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/validations_test.rb +1640 -0
  169. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/cases/xml_serialization_test.rb +240 -0
  170. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/config.rb +5 -0
  171. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbcderby/connection.rb +18 -0
  172. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbch2/connection.rb +18 -0
  173. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbchsqldb/connection.rb +18 -0
  174. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbcmysql/connection.rb +26 -0
  175. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbcpostgresql/connection.rb +26 -0
  176. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/jdbc_jdbcsqlite3/connection.rb +25 -0
  177. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_db2/connection.rb +25 -0
  178. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_firebird/connection.rb +26 -0
  179. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_frontbase/connection.rb +27 -0
  180. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_mysql/connection.rb +25 -0
  181. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_openbase/connection.rb +21 -0
  182. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_oracle/connection.rb +27 -0
  183. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_postgresql/connection.rb +21 -0
  184. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_sqlite/connection.rb +25 -0
  185. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_sqlite3/connection.rb +25 -0
  186. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
  187. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/connections/native_sybase/connection.rb +23 -0
  188. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/accounts.yml +29 -0
  189. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/all/developers.yml +0 -0
  190. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/all/people.csv +0 -0
  191. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/all/tasks.yml +0 -0
  192. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/author_addresses.yml +5 -0
  193. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/author_favorites.yml +4 -0
  194. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/authors.yml +9 -0
  195. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/binaries.yml +132 -0
  196. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/books.yml +7 -0
  197. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categories/special_categories.yml +9 -0
  198. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  199. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categories.yml +14 -0
  200. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categories_ordered.yml +7 -0
  201. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categories_posts.yml +23 -0
  202. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/categorizations.yml +17 -0
  203. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/clubs.yml +6 -0
  204. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/comments.yml +59 -0
  205. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/companies.yml +56 -0
  206. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/computers.yml +4 -0
  207. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/courses.yml +7 -0
  208. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/customers.yml +26 -0
  209. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/developers.yml +21 -0
  210. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/developers_projects.yml +17 -0
  211. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/edges.yml +6 -0
  212. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/entrants.yml +14 -0
  213. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/fixture_database.sqlite +0 -0
  214. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/fixture_database_2.sqlite +0 -0
  215. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/fk_test_has_fk.yml +3 -0
  216. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/fk_test_has_pk.yml +2 -0
  217. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/funny_jokes.yml +10 -0
  218. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/items.yml +4 -0
  219. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/jobs.yml +7 -0
  220. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/legacy_things.yml +3 -0
  221. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/mateys.yml +4 -0
  222. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/member_types.yml +6 -0
  223. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/members.yml +6 -0
  224. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/memberships.yml +20 -0
  225. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/minimalistics.yml +2 -0
  226. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/mixed_case_monkeys.yml +6 -0
  227. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/mixins.yml +29 -0
  228. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/movies.yml +7 -0
  229. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/naked/csv/accounts.csv +1 -0
  230. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/naked/yml/accounts.yml +1 -0
  231. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/naked/yml/companies.yml +1 -0
  232. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/naked/yml/courses.yml +1 -0
  233. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/organizations.yml +5 -0
  234. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/owners.yml +7 -0
  235. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/parrots.yml +27 -0
  236. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/parrots_pirates.yml +7 -0
  237. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/people.yml +15 -0
  238. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/pets.yml +14 -0
  239. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/pirates.yml +9 -0
  240. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/posts.yml +52 -0
  241. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/price_estimates.yml +7 -0
  242. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/projects.yml +7 -0
  243. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/readers.yml +9 -0
  244. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/references.yml +17 -0
  245. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/reserved_words/distinct.yml +5 -0
  246. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/reserved_words/distincts_selects.yml +11 -0
  247. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/reserved_words/group.yml +14 -0
  248. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/reserved_words/select.yml +8 -0
  249. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/reserved_words/values.yml +7 -0
  250. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/ships.yml +5 -0
  251. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/sponsors.yml +9 -0
  252. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/subscribers.yml +7 -0
  253. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/subscriptions.yml +12 -0
  254. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/taggings.yml +28 -0
  255. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/tags.yml +7 -0
  256. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/tasks.yml +7 -0
  257. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/topics.yml +42 -0
  258. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/toys.yml +4 -0
  259. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/treasures.yml +10 -0
  260. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/vertices.yml +4 -0
  261. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/fixtures/warehouse-things.yml +3 -0
  262. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/broken/100_migration_that_raises_exception.rb +10 -0
  263. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
  264. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate/1_people_have_last_names.rb +9 -0
  265. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate/2_we_need_reminders.rb +12 -0
  266. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate/3_foo.rb +7 -0
  267. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate/3_innocent_jointable.rb +12 -0
  268. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate_names/20080507052938_chunky.rb +7 -0
  269. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/duplicate_names/20080507053028_chunky.rb +7 -0
  270. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +12 -0
  271. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +9 -0
  272. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +12 -0
  273. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +9 -0
  274. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +8 -0
  275. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +12 -0
  276. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
  277. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/missing/1_people_have_last_names.rb +9 -0
  278. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/missing/3_we_need_reminders.rb +12 -0
  279. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/missing/4_innocent_jointable.rb +12 -0
  280. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/valid/1_people_have_last_names.rb +9 -0
  281. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/valid/2_we_need_reminders.rb +12 -0
  282. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/migrations/valid/3_innocent_jointable.rb +12 -0
  283. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/author.rb +146 -0
  284. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/auto_id.rb +4 -0
  285. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/binary.rb +2 -0
  286. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/bird.rb +3 -0
  287. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/book.rb +4 -0
  288. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/categorization.rb +5 -0
  289. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/category.rb +34 -0
  290. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/citation.rb +6 -0
  291. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/club.rb +13 -0
  292. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/column_name.rb +3 -0
  293. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/comment.rb +29 -0
  294. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/company.rb +171 -0
  295. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/company_in_module.rb +61 -0
  296. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/computer.rb +3 -0
  297. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/contact.rb +16 -0
  298. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/contract.rb +5 -0
  299. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/course.rb +3 -0
  300. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/customer.rb +73 -0
  301. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/default.rb +2 -0
  302. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/developer.rb +101 -0
  303. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/edge.rb +5 -0
  304. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/entrant.rb +3 -0
  305. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/essay.rb +3 -0
  306. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/event.rb +3 -0
  307. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/guid.rb +2 -0
  308. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/item.rb +7 -0
  309. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/job.rb +5 -0
  310. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/joke.rb +3 -0
  311. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/keyboard.rb +3 -0
  312. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/legacy_thing.rb +3 -0
  313. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/matey.rb +4 -0
  314. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/member.rb +12 -0
  315. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/member_detail.rb +5 -0
  316. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/member_type.rb +3 -0
  317. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/membership.rb +9 -0
  318. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/minimalistic.rb +2 -0
  319. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/mixed_case_monkey.rb +3 -0
  320. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/movie.rb +5 -0
  321. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/order.rb +4 -0
  322. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/organization.rb +6 -0
  323. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/owner.rb +5 -0
  324. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/parrot.rb +16 -0
  325. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/person.rb +16 -0
  326. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/pet.rb +5 -0
  327. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/pirate.rb +70 -0
  328. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/post.rb +100 -0
  329. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/price_estimate.rb +3 -0
  330. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/project.rb +30 -0
  331. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/reader.rb +4 -0
  332. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/reference.rb +4 -0
  333. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/reply.rb +46 -0
  334. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/ship.rb +10 -0
  335. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/ship_part.rb +5 -0
  336. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/sponsor.rb +4 -0
  337. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/subject.rb +4 -0
  338. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/subscriber.rb +8 -0
  339. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/subscription.rb +4 -0
  340. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/tag.rb +7 -0
  341. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/tagging.rb +10 -0
  342. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/task.rb +3 -0
  343. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/topic.rb +80 -0
  344. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/toy.rb +6 -0
  345. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/treasure.rb +8 -0
  346. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/vertex.rb +9 -0
  347. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/models/warehouse_thing.rb +5 -0
  348. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/schema/mysql_specific_schema.rb +24 -0
  349. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/schema/postgresql_specific_schema.rb +114 -0
  350. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/schema/schema.rb +493 -0
  351. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/schema/schema2.rb +6 -0
  352. data/vendor/gems/ruby/1.8/gems/activerecord-2.3.5/test/schema/sqlite_specific_schema.rb +25 -0
  353. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/CHANGELOG +1330 -0
  354. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/README +43 -0
  355. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/all.rb +8 -0
  356. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/backtrace_cleaner.rb +72 -0
  357. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/base64.rb +33 -0
  358. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/basic_object.rb +24 -0
  359. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/buffered_logger.rb +127 -0
  360. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/compressed_mem_cache_store.rb +20 -0
  361. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/drb_store.rb +14 -0
  362. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/file_store.rb +72 -0
  363. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/mem_cache_store.rb +143 -0
  364. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/memory_store.rb +52 -0
  365. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/strategy/local_cache.rb +104 -0
  366. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache/synchronized_memory_store.rb +47 -0
  367. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/cache.rb +248 -0
  368. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/callbacks.rb +279 -0
  369. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/access.rb +53 -0
  370. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/conversions.rb +197 -0
  371. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/extract_options.rb +20 -0
  372. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/grouping.rb +106 -0
  373. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/random_access.rb +12 -0
  374. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array/wrapper.rb +24 -0
  375. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/array.rb +15 -0
  376. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/base64/encoding.rb +16 -0
  377. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/base64.rb +4 -0
  378. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/benchmark.rb +19 -0
  379. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/bigdecimal/conversions.rb +37 -0
  380. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/bigdecimal.rb +6 -0
  381. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/blank.rb +2 -0
  382. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb +23 -0
  383. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/cgi.rb +5 -0
  384. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/class/attribute_accessors.rb +54 -0
  385. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/class/delegating_attributes.rb +47 -0
  386. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/class/inheritable_attributes.rb +140 -0
  387. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/class/removal.rb +50 -0
  388. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/class.rb +4 -0
  389. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date/behavior.rb +42 -0
  390. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date/calculations.rb +231 -0
  391. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date/conversions.rb +107 -0
  392. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date.rb +10 -0
  393. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date_time/calculations.rb +126 -0
  394. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date_time/conversions.rb +96 -0
  395. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/date_time.rb +12 -0
  396. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/duplicable.rb +43 -0
  397. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb +114 -0
  398. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/exception.rb +45 -0
  399. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/file/atomic.rb +46 -0
  400. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/file.rb +5 -0
  401. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/float/rounding.rb +24 -0
  402. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/float/time.rb +27 -0
  403. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/float.rb +7 -0
  404. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/conversions.rb +247 -0
  405. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/deep_merge.rb +23 -0
  406. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/diff.rb +19 -0
  407. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/except.rb +25 -0
  408. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/indifferent_access.rb +143 -0
  409. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/keys.rb +52 -0
  410. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/reverse_merge.rb +35 -0
  411. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/slice.rb +40 -0
  412. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash.rb +14 -0
  413. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/integer/even_odd.rb +29 -0
  414. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/integer/inflections.rb +20 -0
  415. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/integer/time.rb +45 -0
  416. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/integer.rb +9 -0
  417. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/agnostics.rb +11 -0
  418. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/daemonizing.rb +7 -0
  419. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/debugger.rb +16 -0
  420. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/reporting.rb +59 -0
  421. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/requires.rb +24 -0
  422. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel.rb +5 -0
  423. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/load_error.rb +38 -0
  424. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/logger.rb +145 -0
  425. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/aliasing.rb +74 -0
  426. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/attr_accessor_with_default.rb +31 -0
  427. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/attr_internal.rb +32 -0
  428. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/attribute_accessors.rb +60 -0
  429. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/delegation.rb +135 -0
  430. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/inclusion.rb +30 -0
  431. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/introspection.rb +90 -0
  432. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/loading.rb +23 -0
  433. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/model_naming.rb +25 -0
  434. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module/synchronization.rb +39 -0
  435. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/module.rb +23 -0
  436. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/name_error.rb +19 -0
  437. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/numeric/bytes.rb +50 -0
  438. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/numeric/conversions.rb +19 -0
  439. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/numeric/time.rb +81 -0
  440. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/numeric.rb +9 -0
  441. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/blank.rb +58 -0
  442. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/conversions.rb +15 -0
  443. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/extending.rb +80 -0
  444. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/instance_variables.rb +74 -0
  445. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/metaclass.rb +13 -0
  446. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object/misc.rb +90 -0
  447. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/object.rb +6 -0
  448. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/pathname/clean_within.rb +14 -0
  449. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/pathname.rb +7 -0
  450. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/proc.rb +12 -0
  451. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/process/daemon.rb +25 -0
  452. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/process.rb +1 -0
  453. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/range/blockless_step.rb +32 -0
  454. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/range/conversions.rb +27 -0
  455. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/range/include_range.rb +30 -0
  456. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/range/overlaps.rb +15 -0
  457. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/range.rb +11 -0
  458. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/rexml.rb +41 -0
  459. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/access.rb +106 -0
  460. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/behavior.rb +13 -0
  461. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/bytesize.rb +5 -0
  462. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/conversions.rb +28 -0
  463. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/filters.rb +26 -0
  464. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/inflections.rb +167 -0
  465. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/iterators.rb +23 -0
  466. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/multibyte.rb +81 -0
  467. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/output_safety.rb +48 -0
  468. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/starts_ends_with.rb +35 -0
  469. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string/xchar.rb +11 -0
  470. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/string.rb +25 -0
  471. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/symbol.rb +14 -0
  472. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/time/behavior.rb +13 -0
  473. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/time/calculations.rb +304 -0
  474. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/time/conversions.rb +90 -0
  475. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/time/zones.rb +86 -0
  476. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/time.rb +42 -0
  477. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/try.rb +36 -0
  478. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/uri.rb +16 -0
  479. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext.rb +8 -0
  480. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb +625 -0
  481. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/deprecation.rb +196 -0
  482. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/duration.rb +100 -0
  483. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/gzip.rb +25 -0
  484. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/inflections.rb +56 -0
  485. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/inflector.rb +406 -0
  486. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/backends/jsongem.rb +37 -0
  487. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/backends/yaml.rb +84 -0
  488. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/decoding.rb +35 -0
  489. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/date.rb +22 -0
  490. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/date_time.rb +22 -0
  491. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/enumerable.rb +17 -0
  492. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/false_class.rb +7 -0
  493. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/hash.rb +56 -0
  494. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/nil_class.rb +7 -0
  495. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/numeric.rb +21 -0
  496. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/object.rb +10 -0
  497. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/regexp.rb +9 -0
  498. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/string.rb +9 -0
  499. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/symbol.rb +5 -0
  500. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/time.rb +22 -0
  501. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoders/true_class.rb +7 -0
  502. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/encoding.rb +102 -0
  503. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json/variable.rb +10 -0
  504. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/json.rb +2 -0
  505. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/locale/en.yml +33 -0
  506. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/memoizable.rb +100 -0
  507. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/message_encryptor.rb +70 -0
  508. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/message_verifier.rb +79 -0
  509. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/multibyte/chars.rb +707 -0
  510. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/multibyte/exceptions.rb +8 -0
  511. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/multibyte/unicode_database.rb +71 -0
  512. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/multibyte/utils.rb +61 -0
  513. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/multibyte.rb +57 -0
  514. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/option_merger.rb +23 -0
  515. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/ordered_hash.rb +141 -0
  516. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/ordered_options.rb +19 -0
  517. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/rescuable.rb +108 -0
  518. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/secure_random.rb +199 -0
  519. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/string_inquirer.rb +21 -0
  520. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/test_case.rb +40 -0
  521. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/assertions.rb +65 -0
  522. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/declarative.rb +21 -0
  523. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/default.rb +9 -0
  524. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/deprecation.rb +57 -0
  525. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/performance.rb +452 -0
  526. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/testing/setup_and_teardown.rb +91 -0
  527. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/time_with_zone.rb +335 -0
  528. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/values/time_zone.rb +404 -0
  529. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/values/unicode_tables.dat +0 -0
  530. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/blankslate.rb +113 -0
  531. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/blankslate.rb +20 -0
  532. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/css.rb +250 -0
  533. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb +115 -0
  534. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/xmlbase.rb +139 -0
  535. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/xmlevents.rb +63 -0
  536. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder/xmlmarkup.rb +328 -0
  537. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/builder-2.1.2/builder.rb +13 -0
  538. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/MIT-LICENSE +20 -0
  539. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/README.textile +20 -0
  540. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/Rakefile +5 -0
  541. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/i18n.gemspec +27 -0
  542. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib/i18n/backend/simple.rb +214 -0
  543. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib/i18n/exceptions.rb +53 -0
  544. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib/i18n.rb +199 -0
  545. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/all.rb +5 -0
  546. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/i18n_exceptions_test.rb +99 -0
  547. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/i18n_test.rb +124 -0
  548. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/locale/en.rb +1 -0
  549. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/locale/en.yml +3 -0
  550. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/test/simple_backend_test.rb +567 -0
  551. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb +1107 -0
  552. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone.rb +47 -0
  553. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/data_timezone_info.rb +228 -0
  554. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Algiers.rb +55 -0
  555. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Cairo.rb +219 -0
  556. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Casablanca.rb +40 -0
  557. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Harare.rb +18 -0
  558. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Johannesburg.rb +25 -0
  559. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Monrovia.rb +22 -0
  560. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Africa/Nairobi.rb +23 -0
  561. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb +166 -0
  562. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/San_Juan.rb +86 -0
  563. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Bogota.rb +23 -0
  564. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Caracas.rb +23 -0
  565. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chicago.rb +283 -0
  566. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Chihuahua.rb +136 -0
  567. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Denver.rb +204 -0
  568. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Godthab.rb +161 -0
  569. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Guatemala.rb +27 -0
  570. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Halifax.rb +274 -0
  571. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Indiana/Indianapolis.rb +149 -0
  572. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Juneau.rb +194 -0
  573. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/La_Paz.rb +22 -0
  574. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Lima.rb +35 -0
  575. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Los_Angeles.rb +232 -0
  576. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mazatlan.rb +139 -0
  577. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Mexico_City.rb +144 -0
  578. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Monterrey.rb +131 -0
  579. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/New_York.rb +282 -0
  580. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Phoenix.rb +30 -0
  581. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Regina.rb +74 -0
  582. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Santiago.rb +205 -0
  583. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Sao_Paulo.rb +171 -0
  584. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/St_Johns.rb +288 -0
  585. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Tijuana.rb +196 -0
  586. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Almaty.rb +67 -0
  587. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baghdad.rb +73 -0
  588. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Baku.rb +161 -0
  589. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Bangkok.rb +20 -0
  590. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Chongqing.rb +33 -0
  591. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Colombo.rb +30 -0
  592. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Dhaka.rb +27 -0
  593. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Hong_Kong.rb +87 -0
  594. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Irkutsk.rb +165 -0
  595. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jakarta.rb +30 -0
  596. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Jerusalem.rb +163 -0
  597. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kabul.rb +20 -0
  598. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kamchatka.rb +163 -0
  599. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Karachi.rb +30 -0
  600. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Katmandu.rb +20 -0
  601. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kolkata.rb +25 -0
  602. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Krasnoyarsk.rb +163 -0
  603. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuala_Lumpur.rb +31 -0
  604. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Kuwait.rb +18 -0
  605. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Magadan.rb +163 -0
  606. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Muscat.rb +18 -0
  607. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Novosibirsk.rb +164 -0
  608. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Rangoon.rb +24 -0
  609. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Riyadh.rb +18 -0
  610. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Seoul.rb +34 -0
  611. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Shanghai.rb +35 -0
  612. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Singapore.rb +33 -0
  613. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Taipei.rb +59 -0
  614. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tashkent.rb +47 -0
  615. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tbilisi.rb +78 -0
  616. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tehran.rb +121 -0
  617. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Tokyo.rb +30 -0
  618. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Ulaanbaatar.rb +65 -0
  619. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Urumqi.rb +33 -0
  620. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Vladivostok.rb +164 -0
  621. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yakutsk.rb +163 -0
  622. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yekaterinburg.rb +165 -0
  623. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Asia/Yerevan.rb +165 -0
  624. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Azores.rb +270 -0
  625. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/Cape_Verde.rb +23 -0
  626. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Atlantic/South_Georgia.rb +18 -0
  627. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Adelaide.rb +187 -0
  628. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Brisbane.rb +35 -0
  629. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Darwin.rb +29 -0
  630. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Hobart.rb +193 -0
  631. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Melbourne.rb +185 -0
  632. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Perth.rb +37 -0
  633. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Australia/Sydney.rb +185 -0
  634. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Etc/UTC.rb +16 -0
  635. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Amsterdam.rb +228 -0
  636. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Athens.rb +185 -0
  637. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Belgrade.rb +163 -0
  638. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Berlin.rb +188 -0
  639. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bratislava.rb +13 -0
  640. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Brussels.rb +232 -0
  641. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Bucharest.rb +181 -0
  642. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Budapest.rb +197 -0
  643. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Copenhagen.rb +179 -0
  644. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Dublin.rb +276 -0
  645. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Helsinki.rb +163 -0
  646. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Istanbul.rb +218 -0
  647. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Kiev.rb +168 -0
  648. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Lisbon.rb +268 -0
  649. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Ljubljana.rb +13 -0
  650. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/London.rb +288 -0
  651. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Madrid.rb +211 -0
  652. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Minsk.rb +170 -0
  653. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Moscow.rb +181 -0
  654. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Paris.rb +232 -0
  655. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Prague.rb +187 -0
  656. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Riga.rb +176 -0
  657. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Rome.rb +215 -0
  658. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sarajevo.rb +13 -0
  659. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Skopje.rb +13 -0
  660. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Sofia.rb +173 -0
  661. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Stockholm.rb +165 -0
  662. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Tallinn.rb +172 -0
  663. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vienna.rb +183 -0
  664. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Vilnius.rb +170 -0
  665. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Warsaw.rb +212 -0
  666. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Europe/Zagreb.rb +13 -0
  667. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Auckland.rb +202 -0
  668. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Fiji.rb +23 -0
  669. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Guam.rb +22 -0
  670. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Honolulu.rb +28 -0
  671. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Majuro.rb +20 -0
  672. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Midway.rb +25 -0
  673. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Noumea.rb +25 -0
  674. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Pago_Pago.rb +26 -0
  675. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Port_Moresby.rb +20 -0
  676. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/Pacific/Tongatapu.rb +27 -0
  677. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/info_timezone.rb +52 -0
  678. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone.rb +51 -0
  679. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/linked_timezone_info.rb +44 -0
  680. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/offset_rationals.rb +98 -0
  681. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/ruby_core_support.rb +56 -0
  682. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/time_or_datetime.rb +292 -0
  683. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone.rb +508 -0
  684. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_definition.rb +56 -0
  685. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_info.rb +40 -0
  686. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_offset_info.rb +94 -0
  687. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_period.rb +198 -0
  688. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/timezone_transition_info.rb +129 -0
  689. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo.rb +33 -0
  690. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/vendor.rb +28 -0
  691. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/version.rb +9 -0
  692. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb +64 -0
  693. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/jdom.rb +162 -0
  694. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/libxml.rb +133 -0
  695. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/nokogiri.rb +69 -0
  696. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/rexml.rb +108 -0
  697. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini.rb +31 -0
  698. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support.rb +59 -0
  699. data/vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/activesupport.rb +2 -0
  700. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/.gitignore +7 -0
  701. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/Gemfile +4 -0
  702. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/LICENSE +20 -0
  703. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/README +0 -0
  704. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/Rakefile +29 -0
  705. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/VERSION +1 -0
  706. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/bin/convert_to_should_syntax +3 -0
  707. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/freighthopper.gemspec +75 -0
  708. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/init.rb +1 -0
  709. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/lib/freighthopper.rb +132 -0
  710. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/array_test.rb +48 -0
  711. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/define_and_alias_test.rb +48 -0
  712. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/float_test.rb +18 -0
  713. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/hash_test.rb +27 -0
  714. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/kernel_test.rb +34 -0
  715. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/lazy_alias_test.rb +34 -0
  716. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/object_test.rb +68 -0
  717. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/string_test.rb +58 -0
  718. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/test/test_helper.rb +17 -0
  719. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/vendor/gems/cache/shoulda-2.10.2.gem +0 -0
  720. data/vendor/gems/ruby/1.8/gems/freighthopper-0.1.2/vendor/gems/cache/test-rig-0.0.1.gem +0 -0
  721. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/CONTRIBUTION_GUIDELINES.rdoc +10 -0
  722. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/MIT-LICENSE +22 -0
  723. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/README.rdoc +171 -0
  724. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/Rakefile +72 -0
  725. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/bin/convert_to_should_syntax +42 -0
  726. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/macros.rb +240 -0
  727. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/assign_to_matcher.rb +109 -0
  728. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/filter_param_matcher.rb +57 -0
  729. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/render_with_layout_matcher.rb +81 -0
  730. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +74 -0
  731. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/respond_with_matcher.rb +81 -0
  732. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/route_matcher.rb +93 -0
  733. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/set_session_matcher.rb +87 -0
  734. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers/set_the_flash_matcher.rb +85 -0
  735. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller/matchers.rb +37 -0
  736. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_controller.rb +26 -0
  737. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_mailer/assertions.rb +38 -0
  738. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_mailer.rb +10 -0
  739. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_view/macros.rb +61 -0
  740. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/action_view.rb +10 -0
  741. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/assertions.rb +69 -0
  742. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/helpers.rb +27 -0
  743. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/macros.rb +512 -0
  744. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +83 -0
  745. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/allow_value_matcher.rb +102 -0
  746. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/association_matcher.rb +226 -0
  747. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/ensure_inclusion_of_matcher.rb +87 -0
  748. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/ensure_length_of_matcher.rb +141 -0
  749. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/have_db_column_matcher.rb +169 -0
  750. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/have_db_index_matcher.rb +112 -0
  751. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +128 -0
  752. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/have_readonly_attribute_matcher.rb +59 -0
  753. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validate_acceptance_of_matcher.rb +41 -0
  754. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +67 -0
  755. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validate_numericality_of_matcher.rb +39 -0
  756. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validate_presence_of_matcher.rb +60 -0
  757. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validate_uniqueness_of_matcher.rb +148 -0
  758. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers/validation_matcher.rb +57 -0
  759. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record/matchers.rb +43 -0
  760. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/active_record.rb +16 -0
  761. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/assertions.rb +71 -0
  762. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/autoload_macros.rb +46 -0
  763. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/context.rb +413 -0
  764. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/helpers.rb +8 -0
  765. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/macros.rb +133 -0
  766. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/private_helpers.rb +13 -0
  767. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/proc_extensions.rb +14 -0
  768. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/rails.rb +13 -0
  769. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/rspec.rb +11 -0
  770. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/tasks/list_tests.rake +29 -0
  771. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/tasks/yaml_to_shoulda.rake +28 -0
  772. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/tasks.rb +3 -0
  773. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda/test_unit.rb +22 -0
  774. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/lib/shoulda.rb +9 -0
  775. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/rails/init.rb +7 -0
  776. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/README +36 -0
  777. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fail_macros.rb +39 -0
  778. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/addresses.yml +3 -0
  779. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/friendships.yml +0 -0
  780. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/posts.yml +5 -0
  781. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/products.yml +0 -0
  782. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/taggings.yml +0 -0
  783. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/tags.yml +9 -0
  784. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/fixtures/users.yml +6 -0
  785. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/functional/posts_controller_test.rb +121 -0
  786. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/functional/users_controller_test.rb +19 -0
  787. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +68 -0
  788. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/allow_value_matcher_test.rb +64 -0
  789. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/association_matcher_test.rb +263 -0
  790. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +80 -0
  791. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/ensure_length_of_matcher_test.rb +158 -0
  792. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/have_db_column_matcher_test.rb +169 -0
  793. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/have_db_index_matcher_test.rb +91 -0
  794. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/have_named_scope_matcher_test.rb +65 -0
  795. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +29 -0
  796. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +44 -0
  797. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/validate_format_of_matcher_test.rb +39 -0
  798. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/validate_numericality_of_matcher_test.rb +52 -0
  799. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/validate_presence_of_matcher_test.rb +86 -0
  800. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +147 -0
  801. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/assign_to_matcher_test.rb +35 -0
  802. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/filter_param_matcher_test.rb +32 -0
  803. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/render_with_layout_matcher_test.rb +33 -0
  804. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/respond_with_content_type_matcher_test.rb +32 -0
  805. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/respond_with_matcher_test.rb +106 -0
  806. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/route_matcher_test.rb +75 -0
  807. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/set_session_matcher_test.rb +38 -0
  808. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/matchers/controller/set_the_flash_matcher.rb +41 -0
  809. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/model_builder.rb +106 -0
  810. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/autoload_macro_test.rb +18 -0
  811. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/context_test.rb +203 -0
  812. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/convert_to_should_syntax_test.rb +63 -0
  813. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/helpers_test.rb +340 -0
  814. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/private_helpers_test.rb +32 -0
  815. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/other/should_test.rb +271 -0
  816. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/controllers/application_controller.rb +25 -0
  817. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/controllers/posts_controller.rb +87 -0
  818. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/controllers/users_controller.rb +84 -0
  819. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/helpers/application_helper.rb +3 -0
  820. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/helpers/posts_helper.rb +2 -0
  821. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/helpers/users_helper.rb +2 -0
  822. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/address.rb +7 -0
  823. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/flea.rb +3 -0
  824. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/friendship.rb +4 -0
  825. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/pets/cat.rb +7 -0
  826. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/pets/dog.rb +10 -0
  827. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/post.rb +12 -0
  828. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/product.rb +12 -0
  829. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/profile.rb +2 -0
  830. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/registration.rb +2 -0
  831. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/tag.rb +8 -0
  832. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/tagging.rb +4 -0
  833. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/treat.rb +3 -0
  834. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/models/user.rb +32 -0
  835. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/layouts/posts.rhtml +19 -0
  836. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/layouts/users.rhtml +17 -0
  837. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/layouts/wide.html.erb +1 -0
  838. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/posts/edit.rhtml +27 -0
  839. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/posts/index.rhtml +25 -0
  840. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/posts/new.rhtml +26 -0
  841. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/posts/show.rhtml +18 -0
  842. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/users/edit.rhtml +22 -0
  843. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/users/index.rhtml +22 -0
  844. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/users/new.rhtml +21 -0
  845. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/app/views/users/show.rhtml +13 -0
  846. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/boot.rb +110 -0
  847. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/database.yml +4 -0
  848. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/environment.rb +18 -0
  849. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/environments/test.rb +0 -0
  850. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/initializers/new_rails_defaults.rb +15 -0
  851. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/initializers/shoulda.rb +8 -0
  852. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/config/routes.rb +6 -0
  853. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/001_create_users.rb +19 -0
  854. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/002_create_posts.rb +13 -0
  855. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/003_create_taggings.rb +12 -0
  856. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/004_create_tags.rb +11 -0
  857. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/005_create_dogs.rb +12 -0
  858. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/006_create_addresses.rb +14 -0
  859. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/007_create_fleas.rb +11 -0
  860. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/008_create_dogs_fleas.rb +12 -0
  861. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/009_create_products.rb +17 -0
  862. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/010_create_friendships.rb +14 -0
  863. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/011_create_treats.rb +12 -0
  864. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  865. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  866. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/migrate/20090513104502_create_cats.rb +12 -0
  867. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/db/schema.rb +0 -0
  868. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/public/404.html +30 -0
  869. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/public/422.html +30 -0
  870. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/public/500.html +30 -0
  871. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/script/console +3 -0
  872. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/script/generate +3 -0
  873. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/test/shoulda_macros/custom_macro.rb +6 -0
  874. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +6 -0
  875. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +6 -0
  876. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/rspec_test.rb +207 -0
  877. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/test_helper.rb +28 -0
  878. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/address_test.rb +10 -0
  879. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/cat_test.rb +7 -0
  880. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/dog_test.rb +9 -0
  881. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/flea_test.rb +6 -0
  882. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/friendship_test.rb +6 -0
  883. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/post_test.rb +19 -0
  884. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/product_test.rb +23 -0
  885. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/tag_test.rb +15 -0
  886. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/tagging_test.rb +6 -0
  887. data/vendor/gems/ruby/1.8/gems/shoulda-2.10.3/test/unit/user_test.rb +80 -0
  888. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/.document +5 -0
  889. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/.gitignore +5 -0
  890. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/LICENSE +20 -0
  891. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/README.textile +140 -0
  892. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/Rakefile +56 -0
  893. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/VERSION +1 -0
  894. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/lib/test_rig/dynamic_assertions.rb +38 -0
  895. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/lib/test_rig/smarter_message.rb +69 -0
  896. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/lib/test_rig.rb +11 -0
  897. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/test/dynamic_assertions_test.rb +65 -0
  898. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/test/smarter_message_test.rb +51 -0
  899. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/test/test_helper.rb +13 -0
  900. data/vendor/gems/ruby/1.8/gems/test-rig-0.0.3/test-rig.gemspec +55 -0
  901. data/vendor/gems/ruby/1.8/specifications/activerecord-2.3.5.gemspec +34 -0
  902. data/vendor/gems/ruby/1.8/specifications/activesupport-2.3.5.gemspec +28 -0
  903. data/vendor/gems/ruby/1.8/specifications/freighthopper-0.1.2.gemspec +32 -0
  904. data/vendor/gems/ruby/1.8/specifications/shoulda-2.10.3.gemspec +31 -0
  905. data/vendor/gems/ruby/1.8/specifications/test-rig-0.0.3.gemspec +30 -0
  906. metadata +920 -10
  907. data/test/helper.rb +0 -10
  908. data/test/test_simply_stated.rb +0 -5
@@ -0,0 +1,1054 @@
1
+ require "cases/helper"
2
+ require 'models/post'
3
+ require 'models/author'
4
+ require 'models/categorization'
5
+ require 'models/comment'
6
+ require 'models/company'
7
+ require 'models/topic'
8
+ require 'models/reply'
9
+ require 'models/entrant'
10
+ require 'models/developer'
11
+ require 'models/customer'
12
+ require 'models/job'
13
+ require 'models/categorization'
14
+
15
+ class DynamicFinderMatchTest < ActiveRecord::TestCase
16
+ def test_find_no_match
17
+ assert_nil ActiveRecord::DynamicFinderMatch.match("not_a_finder")
18
+ end
19
+
20
+ def test_find_by
21
+ match = ActiveRecord::DynamicFinderMatch.match("find_by_age_and_sex_and_location")
22
+ assert_not_nil match
23
+ assert match.finder?
24
+ assert_equal :first, match.finder
25
+ assert_equal %w(age sex location), match.attribute_names
26
+ end
27
+
28
+ def find_by_bang
29
+ match = ActiveRecord::DynamicFinderMatch.match("find_by_age_and_sex_and_location!")
30
+ assert_not_nil match
31
+ assert match.finder?
32
+ assert match.bang?
33
+ assert_equal :first, match.finder
34
+ assert_equal %w(age sex location), match.attribute_names
35
+ end
36
+
37
+ def test_find_all_by
38
+ match = ActiveRecord::DynamicFinderMatch.match("find_all_by_age_and_sex_and_location")
39
+ assert_not_nil match
40
+ assert match.finder?
41
+ assert_equal :all, match.finder
42
+ assert_equal %w(age sex location), match.attribute_names
43
+ end
44
+
45
+ def test_find_or_initialize_by
46
+ match = ActiveRecord::DynamicFinderMatch.match("find_or_initialize_by_age_and_sex_and_location")
47
+ assert_not_nil match
48
+ assert !match.finder?
49
+ assert match.instantiator?
50
+ assert_equal :first, match.finder
51
+ assert_equal :new, match.instantiator
52
+ assert_equal %w(age sex location), match.attribute_names
53
+ end
54
+
55
+ def test_find_or_create_by
56
+ match = ActiveRecord::DynamicFinderMatch.match("find_or_create_by_age_and_sex_and_location")
57
+ assert_not_nil match
58
+ assert !match.finder?
59
+ assert match.instantiator?
60
+ assert_equal :first, match.finder
61
+ assert_equal :create, match.instantiator
62
+ assert_equal %w(age sex location), match.attribute_names
63
+ end
64
+ end
65
+
66
+ class FinderTest < ActiveRecord::TestCase
67
+ fixtures :companies, :topics, :entrants, :developers, :developers_projects, :posts, :comments, :accounts, :authors, :customers
68
+
69
+ def test_find
70
+ assert_equal(topics(:first).title, Topic.find(1).title)
71
+ end
72
+
73
+ # find should handle strings that come from URLs
74
+ # (example: Category.find(params[:id]))
75
+ def test_find_with_string
76
+ assert_equal(Topic.find(1).title,Topic.find("1").title)
77
+ end
78
+
79
+ def test_exists
80
+ assert Topic.exists?(1)
81
+ assert Topic.exists?("1")
82
+ assert Topic.exists?(:author_name => "David")
83
+ assert Topic.exists?(:author_name => "Mary", :approved => true)
84
+ assert Topic.exists?(["parent_id = ?", 1])
85
+ assert !Topic.exists?(45)
86
+
87
+ begin
88
+ assert !Topic.exists?("foo")
89
+ rescue ActiveRecord::StatementInvalid
90
+ # PostgreSQL complains about string comparison with integer field
91
+ rescue Exception
92
+ flunk
93
+ end
94
+
95
+ assert_raise(NoMethodError) { Topic.exists?([1,2]) }
96
+ end
97
+
98
+ def test_exists_returns_true_with_one_record_and_no_args
99
+ assert Topic.exists?
100
+ end
101
+
102
+ def test_does_not_exist_with_empty_table_and_no_args_given
103
+ Topic.delete_all
104
+ assert !Topic.exists?
105
+ end
106
+
107
+ def test_exists_with_aggregate_having_three_mappings
108
+ existing_address = customers(:david).address
109
+ assert Customer.exists?(:address => existing_address)
110
+ end
111
+
112
+ def test_exists_with_aggregate_having_three_mappings_with_one_difference
113
+ existing_address = customers(:david).address
114
+ assert !Customer.exists?(:address =>
115
+ Address.new(existing_address.street, existing_address.city, existing_address.country + "1"))
116
+ assert !Customer.exists?(:address =>
117
+ Address.new(existing_address.street, existing_address.city + "1", existing_address.country))
118
+ assert !Customer.exists?(:address =>
119
+ Address.new(existing_address.street + "1", existing_address.city, existing_address.country))
120
+ end
121
+
122
+ def test_exists_with_scoped_include
123
+ Developer.with_scope(:find => { :include => :projects, :order => "projects.name" }) do
124
+ assert Developer.exists?
125
+ end
126
+ end
127
+
128
+ def test_find_by_array_of_one_id
129
+ assert_kind_of(Array, Topic.find([ 1 ]))
130
+ assert_equal(1, Topic.find([ 1 ]).length)
131
+ end
132
+
133
+ def test_find_by_ids
134
+ assert_equal 2, Topic.find(1, 2).size
135
+ assert_equal topics(:second).title, Topic.find([2]).first.title
136
+ end
137
+
138
+ def test_find_by_ids_with_limit_and_offset
139
+ assert_equal 2, Entrant.find([1,3,2], :limit => 2).size
140
+ assert_equal 1, Entrant.find([1,3,2], :limit => 3, :offset => 2).size
141
+
142
+ # Also test an edge case: If you have 11 results, and you set a
143
+ # limit of 3 and offset of 9, then you should find that there
144
+ # will be only 2 results, regardless of the limit.
145
+ devs = Developer.find :all
146
+ last_devs = Developer.find devs.map(&:id), :limit => 3, :offset => 9
147
+ assert_equal 2, last_devs.size
148
+ end
149
+
150
+ def test_find_an_empty_array
151
+ assert_equal [], Topic.find([])
152
+ end
153
+
154
+ def test_find_by_ids_missing_one
155
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, 2, 45) }
156
+ end
157
+
158
+ def test_find_all_with_limit
159
+ assert_equal(2, Entrant.find(:all, :limit => 2).size)
160
+ assert_equal(0, Entrant.find(:all, :limit => 0).size)
161
+ end
162
+
163
+ def test_find_all_with_prepared_limit_and_offset
164
+ entrants = Entrant.find(:all, :order => "id ASC", :limit => 2, :offset => 1)
165
+
166
+ assert_equal(2, entrants.size)
167
+ assert_equal(entrants(:second).name, entrants.first.name)
168
+
169
+ assert_equal 3, Entrant.count
170
+ entrants = Entrant.find(:all, :order => "id ASC", :limit => 2, :offset => 2)
171
+ assert_equal(1, entrants.size)
172
+ assert_equal(entrants(:third).name, entrants.first.name)
173
+ end
174
+
175
+ def test_find_all_with_limit_and_offset_and_multiple_order_clauses
176
+ first_three_posts = Post.find :all, :order => 'author_id, id', :limit => 3, :offset => 0
177
+ second_three_posts = Post.find :all, :order => ' author_id,id ', :limit => 3, :offset => 3
178
+ last_posts = Post.find :all, :order => ' author_id, id ', :limit => 3, :offset => 6
179
+
180
+ assert_equal [[0,3],[1,1],[1,2]], first_three_posts.map { |p| [p.author_id, p.id] }
181
+ assert_equal [[1,4],[1,5],[1,6]], second_three_posts.map { |p| [p.author_id, p.id] }
182
+ assert_equal [[2,7]], last_posts.map { |p| [p.author_id, p.id] }
183
+ end
184
+
185
+
186
+ def test_find_with_group
187
+ developers = Developer.find(:all, :group => "salary", :select => "salary")
188
+ assert_equal 4, developers.size
189
+ assert_equal 4, developers.map(&:salary).uniq.size
190
+ end
191
+
192
+ def test_find_with_group_and_having
193
+ developers = Developer.find(:all, :group => "salary", :having => "sum(salary) > 10000", :select => "salary")
194
+ assert_equal 3, developers.size
195
+ assert_equal 3, developers.map(&:salary).uniq.size
196
+ assert developers.all? { |developer| developer.salary > 10000 }
197
+ end
198
+
199
+ def test_find_with_group_and_sanitized_having
200
+ developers = Developer.find(:all, :group => "salary", :having => ["sum(salary) > ?", 10000], :select => "salary")
201
+ assert_equal 3, developers.size
202
+ assert_equal 3, developers.map(&:salary).uniq.size
203
+ assert developers.all? { |developer| developer.salary > 10000 }
204
+ end
205
+
206
+ def test_find_with_entire_select_statement
207
+ topics = Topic.find_by_sql "SELECT * FROM topics WHERE author_name = 'Mary'"
208
+
209
+ assert_equal(1, topics.size)
210
+ assert_equal(topics(:second).title, topics.first.title)
211
+ end
212
+
213
+ def test_find_with_prepared_select_statement
214
+ topics = Topic.find_by_sql ["SELECT * FROM topics WHERE author_name = ?", "Mary"]
215
+
216
+ assert_equal(1, topics.size)
217
+ assert_equal(topics(:second).title, topics.first.title)
218
+ end
219
+
220
+ def test_find_by_sql_with_sti_on_joined_table
221
+ accounts = Account.find_by_sql("SELECT * FROM accounts INNER JOIN companies ON companies.id = accounts.firm_id")
222
+ assert_equal [Account], accounts.collect(&:class).uniq
223
+ end
224
+
225
+ def test_find_first
226
+ first = Topic.find(:first, :conditions => "title = 'The First Topic'")
227
+ assert_equal(topics(:first).title, first.title)
228
+ end
229
+
230
+ def test_find_first_failing
231
+ first = Topic.find(:first, :conditions => "title = 'The First Topic!'")
232
+ assert_nil(first)
233
+ end
234
+
235
+ def test_first
236
+ assert_equal topics(:second).title, Topic.first(:conditions => "title = 'The Second Topic of the day'").title
237
+ end
238
+
239
+ def test_first_failing
240
+ assert_nil Topic.first(:conditions => "title = 'The Second Topic of the day!'")
241
+ end
242
+
243
+ def test_unexisting_record_exception_handling
244
+ assert_raise(ActiveRecord::RecordNotFound) {
245
+ Topic.find(1).parent
246
+ }
247
+
248
+ Topic.find(2).topic
249
+ end
250
+
251
+ def test_find_only_some_columns
252
+ topic = Topic.find(1, :select => "author_name")
253
+ assert_raise(ActiveRecord::MissingAttributeError) {topic.title}
254
+ assert_equal "David", topic.author_name
255
+ assert !topic.attribute_present?("title")
256
+ #assert !topic.respond_to?("title")
257
+ assert topic.attribute_present?("author_name")
258
+ assert topic.respond_to?("author_name")
259
+ end
260
+
261
+ def test_find_on_blank_conditions
262
+ [nil, " ", [], {}].each do |blank|
263
+ assert_nothing_raised { Topic.find(:first, :conditions => blank) }
264
+ end
265
+ end
266
+
267
+ def test_find_on_blank_bind_conditions
268
+ [ [""], ["",{}] ].each do |blank|
269
+ assert_nothing_raised { Topic.find(:first, :conditions => blank) }
270
+ end
271
+ end
272
+
273
+ def test_find_on_array_conditions
274
+ assert Topic.find(1, :conditions => ["approved = ?", false])
275
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => ["approved = ?", true]) }
276
+ end
277
+
278
+ def test_find_on_hash_conditions
279
+ assert Topic.find(1, :conditions => { :approved => false })
280
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :approved => true }) }
281
+ end
282
+
283
+ def test_find_on_hash_conditions_with_explicit_table_name
284
+ assert Topic.find(1, :conditions => { 'topics.approved' => false })
285
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { 'topics.approved' => true }) }
286
+ end
287
+
288
+ def test_find_on_hash_conditions_with_hashed_table_name
289
+ assert Topic.find(1, :conditions => {:topics => { :approved => false }})
290
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => {:topics => { :approved => true }}) }
291
+ end
292
+
293
+ def test_find_with_hash_conditions_on_joined_table
294
+ firms = Firm.all :joins => :account, :conditions => {:accounts => { :credit_limit => 50 }}
295
+ assert_equal 1, firms.size
296
+ assert_equal companies(:first_firm), firms.first
297
+ end
298
+
299
+ def test_find_with_hash_conditions_on_joined_table_and_with_range
300
+ firms = DependentFirm.all :joins => :account, :conditions => {:name => 'RailsCore', :accounts => { :credit_limit => 55..60 }}
301
+ assert_equal 1, firms.size
302
+ assert_equal companies(:rails_core), firms.first
303
+ end
304
+
305
+ def test_find_on_hash_conditions_with_explicit_table_name_and_aggregate
306
+ david = customers(:david)
307
+ assert Customer.find(david.id, :conditions => { 'customers.name' => david.name, :address => david.address })
308
+ assert_raise(ActiveRecord::RecordNotFound) {
309
+ Customer.find(david.id, :conditions => { 'customers.name' => david.name + "1", :address => david.address })
310
+ }
311
+ end
312
+
313
+ def test_find_on_association_proxy_conditions
314
+ assert_equal [1, 2, 3, 5, 6, 7, 8, 9, 10], Comment.find_all_by_post_id(authors(:david).posts).map(&:id).sort
315
+ end
316
+
317
+ def test_find_on_hash_conditions_with_range
318
+ assert_equal [1,2], Topic.find(:all, :conditions => { :id => 1..2 }).map(&:id).sort
319
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :id => 2..3 }) }
320
+ end
321
+
322
+ def test_find_on_hash_conditions_with_end_exclusive_range
323
+ assert_equal [1,2,3], Topic.find(:all, :conditions => { :id => 1..3 }).map(&:id).sort
324
+ assert_equal [1,2], Topic.find(:all, :conditions => { :id => 1...3 }).map(&:id).sort
325
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(3, :conditions => { :id => 2...3 }) }
326
+ end
327
+
328
+ def test_find_on_hash_conditions_with_multiple_ranges
329
+ assert_equal [1,2,3], Comment.find(:all, :conditions => { :id => 1..3, :post_id => 1..2 }).map(&:id).sort
330
+ assert_equal [1], Comment.find(:all, :conditions => { :id => 1..1, :post_id => 1..10 }).map(&:id).sort
331
+ end
332
+
333
+ def test_find_on_multiple_hash_conditions
334
+ assert Topic.find(1, :conditions => { :author_name => "David", :title => "The First Topic", :replies_count => 1, :approved => false })
335
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :author_name => "David", :title => "The First Topic", :replies_count => 1, :approved => true }) }
336
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :author_name => "David", :title => "HHC", :replies_count => 1, :approved => false }) }
337
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => { :author_name => "David", :title => "The First Topic", :replies_count => 1, :approved => true }) }
338
+ end
339
+
340
+ def test_condition_interpolation
341
+ assert_kind_of Firm, Company.find(:first, :conditions => ["name = '%s'", "37signals"])
342
+ assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!"])
343
+ assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!' OR 1=1"])
344
+ assert_kind_of Time, Topic.find(:first, :conditions => ["id = %d", 1]).written_on
345
+ end
346
+
347
+ def test_condition_array_interpolation
348
+ assert_kind_of Firm, Company.find(:first, :conditions => ["name = '%s'", "37signals"])
349
+ assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!"])
350
+ assert_nil Company.find(:first, :conditions => ["name = '%s'", "37signals!' OR 1=1"])
351
+ assert_kind_of Time, Topic.find(:first, :conditions => ["id = %d", 1]).written_on
352
+ end
353
+
354
+ def test_condition_hash_interpolation
355
+ assert_kind_of Firm, Company.find(:first, :conditions => { :name => "37signals"})
356
+ assert_nil Company.find(:first, :conditions => { :name => "37signals!"})
357
+ assert_kind_of Time, Topic.find(:first, :conditions => {:id => 1}).written_on
358
+ end
359
+
360
+ def test_hash_condition_find_malformed
361
+ assert_raise(ActiveRecord::StatementInvalid) {
362
+ Company.find(:first, :conditions => { :id => 2, :dhh => true })
363
+ }
364
+ end
365
+
366
+ def test_hash_condition_find_with_escaped_characters
367
+ Company.create("name" => "Ain't noth'n like' \#stuff")
368
+ assert Company.find(:first, :conditions => { :name => "Ain't noth'n like' \#stuff" })
369
+ end
370
+
371
+ def test_hash_condition_find_with_array
372
+ p1, p2 = Post.find(:all, :limit => 2, :order => 'id asc')
373
+ assert_equal [p1, p2], Post.find(:all, :conditions => { :id => [p1, p2] }, :order => 'id asc')
374
+ assert_equal [p1, p2], Post.find(:all, :conditions => { :id => [p1, p2.id] }, :order => 'id asc')
375
+ end
376
+
377
+ def test_hash_condition_find_with_nil
378
+ topic = Topic.find(:first, :conditions => { :last_read => nil } )
379
+ assert_not_nil topic
380
+ assert_nil topic.last_read
381
+ end
382
+
383
+ def test_hash_condition_find_with_aggregate_having_one_mapping
384
+ balance = customers(:david).balance
385
+ assert_kind_of Money, balance
386
+ found_customer = Customer.find(:first, :conditions => {:balance => balance})
387
+ assert_equal customers(:david), found_customer
388
+ end
389
+
390
+ def test_hash_condition_find_with_aggregate_attribute_having_same_name_as_field_and_key_value_being_aggregate
391
+ gps_location = customers(:david).gps_location
392
+ assert_kind_of GpsLocation, gps_location
393
+ found_customer = Customer.find(:first, :conditions => {:gps_location => gps_location})
394
+ assert_equal customers(:david), found_customer
395
+ end
396
+
397
+ def test_hash_condition_find_with_aggregate_having_one_mapping_and_key_value_being_attribute_value
398
+ balance = customers(:david).balance
399
+ assert_kind_of Money, balance
400
+ found_customer = Customer.find(:first, :conditions => {:balance => balance.amount})
401
+ assert_equal customers(:david), found_customer
402
+ end
403
+
404
+ def test_hash_condition_find_with_aggregate_attribute_having_same_name_as_field_and_key_value_being_attribute_value
405
+ gps_location = customers(:david).gps_location
406
+ assert_kind_of GpsLocation, gps_location
407
+ found_customer = Customer.find(:first, :conditions => {:gps_location => gps_location.gps_location})
408
+ assert_equal customers(:david), found_customer
409
+ end
410
+
411
+ def test_hash_condition_find_with_aggregate_having_three_mappings
412
+ address = customers(:david).address
413
+ assert_kind_of Address, address
414
+ found_customer = Customer.find(:first, :conditions => {:address => address})
415
+ assert_equal customers(:david), found_customer
416
+ end
417
+
418
+ def test_hash_condition_find_with_one_condition_being_aggregate_and_another_not
419
+ address = customers(:david).address
420
+ assert_kind_of Address, address
421
+ found_customer = Customer.find(:first, :conditions => {:address => address, :name => customers(:david).name})
422
+ assert_equal customers(:david), found_customer
423
+ end
424
+
425
+ def test_bind_variables
426
+ assert_kind_of Firm, Company.find(:first, :conditions => ["name = ?", "37signals"])
427
+ assert_nil Company.find(:first, :conditions => ["name = ?", "37signals!"])
428
+ assert_nil Company.find(:first, :conditions => ["name = ?", "37signals!' OR 1=1"])
429
+ assert_kind_of Time, Topic.find(:first, :conditions => ["id = ?", 1]).written_on
430
+ assert_raise(ActiveRecord::PreparedStatementInvalid) {
431
+ Company.find(:first, :conditions => ["id=? AND name = ?", 2])
432
+ }
433
+ assert_raise(ActiveRecord::PreparedStatementInvalid) {
434
+ Company.find(:first, :conditions => ["id=?", 2, 3, 4])
435
+ }
436
+ end
437
+
438
+ def test_bind_variables_with_quotes
439
+ Company.create("name" => "37signals' go'es agains")
440
+ assert Company.find(:first, :conditions => ["name = ?", "37signals' go'es agains"])
441
+ end
442
+
443
+ def test_named_bind_variables_with_quotes
444
+ Company.create("name" => "37signals' go'es agains")
445
+ assert Company.find(:first, :conditions => ["name = :name", {:name => "37signals' go'es agains"}])
446
+ end
447
+
448
+ def test_bind_arity
449
+ assert_nothing_raised { bind '' }
450
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '', 1 }
451
+
452
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '?' }
453
+ assert_nothing_raised { bind '?', 1 }
454
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '?', 1, 1 }
455
+ end
456
+
457
+ def test_named_bind_variables
458
+ assert_equal '1', bind(':a', :a => 1) # ' ruby-mode
459
+ assert_equal '1 1', bind(':a :a', :a => 1) # ' ruby-mode
460
+
461
+ assert_nothing_raised { bind("'+00:00'", :foo => "bar") }
462
+
463
+ assert_kind_of Firm, Company.find(:first, :conditions => ["name = :name", { :name => "37signals" }])
464
+ assert_nil Company.find(:first, :conditions => ["name = :name", { :name => "37signals!" }])
465
+ assert_nil Company.find(:first, :conditions => ["name = :name", { :name => "37signals!' OR 1=1" }])
466
+ assert_kind_of Time, Topic.find(:first, :conditions => ["id = :id", { :id => 1 }]).written_on
467
+ end
468
+
469
+ def test_bind_enumerable
470
+ quoted_abc = %(#{ActiveRecord::Base.connection.quote('a')},#{ActiveRecord::Base.connection.quote('b')},#{ActiveRecord::Base.connection.quote('c')})
471
+
472
+ assert_equal '1,2,3', bind('?', [1, 2, 3])
473
+ assert_equal quoted_abc, bind('?', %w(a b c))
474
+
475
+ assert_equal '1,2,3', bind(':a', :a => [1, 2, 3])
476
+ assert_equal quoted_abc, bind(':a', :a => %w(a b c)) # '
477
+
478
+ require 'set'
479
+ assert_equal '1,2,3', bind('?', Set.new([1, 2, 3]))
480
+ assert_equal quoted_abc, bind('?', Set.new(%w(a b c)))
481
+
482
+ assert_equal '1,2,3', bind(':a', :a => Set.new([1, 2, 3]))
483
+ assert_equal quoted_abc, bind(':a', :a => Set.new(%w(a b c))) # '
484
+ end
485
+
486
+ def test_bind_empty_enumerable
487
+ quoted_nil = ActiveRecord::Base.connection.quote(nil)
488
+ assert_equal quoted_nil, bind('?', [])
489
+ assert_equal " in (#{quoted_nil})", bind(' in (?)', [])
490
+ assert_equal "foo in (#{quoted_nil})", bind('foo in (?)', [])
491
+ end
492
+
493
+ def test_bind_string
494
+ assert_equal ActiveRecord::Base.connection.quote(''), bind('?', '')
495
+ end
496
+
497
+ def test_bind_chars
498
+ quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
499
+ quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote("Bambi\nand\nThumper")
500
+ assert_equal "name=#{quoted_bambi}", bind('name=?', "Bambi")
501
+ assert_equal "name=#{quoted_bambi_and_thumper}", bind('name=?', "Bambi\nand\nThumper")
502
+ assert_equal "name=#{quoted_bambi}", bind('name=?', "Bambi".mb_chars)
503
+ assert_equal "name=#{quoted_bambi_and_thumper}", bind('name=?', "Bambi\nand\nThumper".mb_chars)
504
+ end
505
+
506
+ def test_bind_record
507
+ o = Struct.new(:quoted_id).new(1)
508
+ assert_equal '1', bind('?', o)
509
+
510
+ os = [o] * 3
511
+ assert_equal '1,1,1', bind('?', os)
512
+ end
513
+
514
+ def test_named_bind_with_postgresql_type_casts
515
+ l = Proc.new { bind(":a::integer '2009-01-01'::date", :a => '10') }
516
+ assert_nothing_raised(&l)
517
+ assert_equal "#{ActiveRecord::Base.quote_value('10')}::integer '2009-01-01'::date", l.call
518
+ end
519
+
520
+ def test_string_sanitation
521
+ assert_not_equal "#{ActiveRecord::Base.connection.quoted_string_prefix}'something ' 1=1'", ActiveRecord::Base.sanitize("something ' 1=1")
522
+ assert_equal "#{ActiveRecord::Base.connection.quoted_string_prefix}'something; select table'", ActiveRecord::Base.sanitize("something; select table")
523
+ end
524
+
525
+ def test_count
526
+ assert_equal(0, Entrant.count(:conditions => "id > 3"))
527
+ assert_equal(1, Entrant.count(:conditions => ["id > ?", 2]))
528
+ assert_equal(2, Entrant.count(:conditions => ["id > ?", 1]))
529
+ end
530
+
531
+ def test_count_by_sql
532
+ assert_equal(0, Entrant.count_by_sql("SELECT COUNT(*) FROM entrants WHERE id > 3"))
533
+ assert_equal(1, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 2]))
534
+ assert_equal(2, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 1]))
535
+ end
536
+
537
+ def test_dynamic_finders_should_go_through_the_find_class_method
538
+ Topic.expects(:find).with(:first, :conditions => { :title => 'The First Topic!' })
539
+ Topic.find_by_title("The First Topic!")
540
+
541
+ Topic.expects(:find).with(:last, :conditions => { :title => 'The Last Topic!' })
542
+ Topic.find_last_by_title("The Last Topic!")
543
+
544
+ Topic.expects(:find).with(:all, :conditions => { :title => 'A Topic.' })
545
+ Topic.find_all_by_title("A Topic.")
546
+
547
+ Topic.expects(:find).with(:first, :conditions => { :title => 'Does not exist yet for sure!' }).times(2)
548
+ Topic.find_or_initialize_by_title('Does not exist yet for sure!')
549
+ Topic.find_or_create_by_title('Does not exist yet for sure!')
550
+ end
551
+
552
+ def test_find_by_one_attribute
553
+ assert_equal topics(:first), Topic.find_by_title("The First Topic")
554
+ assert_nil Topic.find_by_title("The First Topic!")
555
+ end
556
+
557
+ def test_find_by_one_attribute_bang
558
+ assert_equal topics(:first), Topic.find_by_title!("The First Topic")
559
+ assert_raise(ActiveRecord::RecordNotFound) { Topic.find_by_title!("The First Topic!") }
560
+ end
561
+
562
+ def test_find_by_one_attribute_caches_dynamic_finder
563
+ # ensure this test can run independently of order
564
+ class << Topic; self; end.send(:remove_method, :find_by_title) if Topic.public_methods.any? { |m| m.to_s == 'find_by_title' }
565
+ assert !Topic.public_methods.any? { |m| m.to_s == 'find_by_title' }
566
+ t = Topic.find_by_title("The First Topic")
567
+ assert Topic.public_methods.any? { |m| m.to_s == 'find_by_title' }
568
+ end
569
+
570
+ def test_dynamic_finder_returns_same_results_after_caching
571
+ # ensure this test can run independently of order
572
+ class << Topic; self; end.send(:remove_method, :find_by_title) if Topic.public_method_defined?(:find_by_title)
573
+ t = Topic.find_by_title("The First Topic")
574
+ assert_equal t, Topic.find_by_title("The First Topic") # find_by_title has been cached
575
+ end
576
+
577
+ def test_find_by_one_attribute_with_order_option
578
+ assert_equal accounts(:signals37), Account.find_by_credit_limit(50, :order => 'id')
579
+ assert_equal accounts(:rails_core_account), Account.find_by_credit_limit(50, :order => 'id DESC')
580
+ end
581
+
582
+ def test_find_by_one_attribute_with_conditions
583
+ assert_equal accounts(:rails_core_account), Account.find_by_credit_limit(50, :conditions => ['firm_id = ?', 6])
584
+ end
585
+
586
+ def test_find_by_one_attribute_that_is_an_aggregate
587
+ address = customers(:david).address
588
+ assert_kind_of Address, address
589
+ found_customer = Customer.find_by_address(address)
590
+ assert_equal customers(:david), found_customer
591
+ end
592
+
593
+ def test_find_by_one_attribute_that_is_an_aggregate_with_one_attribute_difference
594
+ address = customers(:david).address
595
+ assert_kind_of Address, address
596
+ missing_address = Address.new(address.street, address.city, address.country + "1")
597
+ assert_nil Customer.find_by_address(missing_address)
598
+ missing_address = Address.new(address.street, address.city + "1", address.country)
599
+ assert_nil Customer.find_by_address(missing_address)
600
+ missing_address = Address.new(address.street + "1", address.city, address.country)
601
+ assert_nil Customer.find_by_address(missing_address)
602
+ end
603
+
604
+ def test_find_by_two_attributes_that_are_both_aggregates
605
+ balance = customers(:david).balance
606
+ address = customers(:david).address
607
+ assert_kind_of Money, balance
608
+ assert_kind_of Address, address
609
+ found_customer = Customer.find_by_balance_and_address(balance, address)
610
+ assert_equal customers(:david), found_customer
611
+ end
612
+
613
+ def test_find_by_two_attributes_with_one_being_an_aggregate
614
+ balance = customers(:david).balance
615
+ assert_kind_of Money, balance
616
+ found_customer = Customer.find_by_balance_and_name(balance, customers(:david).name)
617
+ assert_equal customers(:david), found_customer
618
+ end
619
+
620
+ def test_dynamic_finder_on_one_attribute_with_conditions_caches_method
621
+ # ensure this test can run independently of order
622
+ class << Account; self; end.send(:remove_method, :find_by_credit_limit) if Account.public_methods.any? { |m| m.to_s == 'find_by_credit_limit' }
623
+ assert !Account.public_methods.any? { |m| m.to_s == 'find_by_credit_limit' }
624
+ a = Account.find_by_credit_limit(50, :conditions => ['firm_id = ?', 6])
625
+ assert Account.public_methods.any? { |m| m.to_s == 'find_by_credit_limit' }
626
+ end
627
+
628
+ def test_dynamic_finder_on_one_attribute_with_conditions_returns_same_results_after_caching
629
+ # ensure this test can run independently of order
630
+ class << Account; self; end.send(:remove_method, :find_by_credit_limit) if Account.public_methods.any? { |m| m.to_s == 'find_by_credit_limit' }
631
+ a = Account.find_by_credit_limit(50, :conditions => ['firm_id = ?', 6])
632
+ assert_equal a, Account.find_by_credit_limit(50, :conditions => ['firm_id = ?', 6]) # find_by_credit_limit has been cached
633
+ end
634
+
635
+ def test_find_by_one_attribute_with_several_options
636
+ assert_equal accounts(:unknown), Account.find_by_credit_limit(50, :order => 'id DESC', :conditions => ['id != ?', 3])
637
+ end
638
+
639
+ def test_find_by_one_missing_attribute
640
+ assert_raise(NoMethodError) { Topic.find_by_undertitle("The First Topic!") }
641
+ end
642
+
643
+ def test_find_by_invalid_method_syntax
644
+ assert_raise(NoMethodError) { Topic.fail_to_find_by_title("The First Topic") }
645
+ assert_raise(NoMethodError) { Topic.find_by_title?("The First Topic") }
646
+ assert_raise(NoMethodError) { Topic.fail_to_find_or_create_by_title("Nonexistent Title") }
647
+ assert_raise(NoMethodError) { Topic.find_or_create_by_title?("Nonexistent Title") }
648
+ end
649
+
650
+ def test_find_by_two_attributes
651
+ assert_equal topics(:first), Topic.find_by_title_and_author_name("The First Topic", "David")
652
+ assert_nil Topic.find_by_title_and_author_name("The First Topic", "Mary")
653
+ end
654
+
655
+ def test_find_last_by_one_attribute
656
+ assert_equal Topic.last, Topic.find_last_by_title(Topic.last.title)
657
+ assert_nil Topic.find_last_by_title("A title with no matches")
658
+ end
659
+
660
+ def test_find_last_by_one_attribute_caches_dynamic_finder
661
+ # ensure this test can run independently of order
662
+ class << Topic; self; end.send(:remove_method, :find_last_by_title) if Topic.public_methods.any? { |m| m.to_s == 'find_last_by_title' }
663
+ assert !Topic.public_methods.any? { |m| m.to_s == 'find_last_by_title' }
664
+ t = Topic.find_last_by_title(Topic.last.title)
665
+ assert Topic.public_methods.any? { |m| m.to_s == 'find_last_by_title' }
666
+ end
667
+
668
+ def test_find_last_by_invalid_method_syntax
669
+ assert_raise(NoMethodError) { Topic.fail_to_find_last_by_title("The First Topic") }
670
+ assert_raise(NoMethodError) { Topic.find_last_by_title?("The First Topic") }
671
+ end
672
+
673
+ def test_find_last_by_one_attribute_with_several_options
674
+ assert_equal accounts(:signals37), Account.find_last_by_credit_limit(50, :order => 'id DESC', :conditions => ['id != ?', 3])
675
+ end
676
+
677
+ def test_find_last_by_one_missing_attribute
678
+ assert_raise(NoMethodError) { Topic.find_last_by_undertitle("The Last Topic!") }
679
+ end
680
+
681
+ def test_find_last_by_two_attributes
682
+ topic = Topic.last
683
+ assert_equal topic, Topic.find_last_by_title_and_author_name(topic.title, topic.author_name)
684
+ assert_nil Topic.find_last_by_title_and_author_name(topic.title, "Anonymous")
685
+ end
686
+
687
+ def test_find_all_by_one_attribute
688
+ topics = Topic.find_all_by_content("Have a nice day")
689
+ assert_equal 2, topics.size
690
+ assert topics.include?(topics(:first))
691
+
692
+ assert_equal [], Topic.find_all_by_title("The First Topic!!")
693
+ end
694
+
695
+ def test_find_all_by_one_attribute_that_is_an_aggregate
696
+ balance = customers(:david).balance
697
+ assert_kind_of Money, balance
698
+ found_customers = Customer.find_all_by_balance(balance)
699
+ assert_equal 1, found_customers.size
700
+ assert_equal customers(:david), found_customers.first
701
+ end
702
+
703
+ def test_find_all_by_two_attributes_that_are_both_aggregates
704
+ balance = customers(:david).balance
705
+ address = customers(:david).address
706
+ assert_kind_of Money, balance
707
+ assert_kind_of Address, address
708
+ found_customers = Customer.find_all_by_balance_and_address(balance, address)
709
+ assert_equal 1, found_customers.size
710
+ assert_equal customers(:david), found_customers.first
711
+ end
712
+
713
+ def test_find_all_by_two_attributes_with_one_being_an_aggregate
714
+ balance = customers(:david).balance
715
+ assert_kind_of Money, balance
716
+ found_customers = Customer.find_all_by_balance_and_name(balance, customers(:david).name)
717
+ assert_equal 1, found_customers.size
718
+ assert_equal customers(:david), found_customers.first
719
+ end
720
+
721
+ def test_find_all_by_one_attribute_with_options
722
+ topics = Topic.find_all_by_content("Have a nice day", :order => "id DESC")
723
+ assert topics(:first), topics.last
724
+
725
+ topics = Topic.find_all_by_content("Have a nice day", :order => "id")
726
+ assert topics(:first), topics.first
727
+ end
728
+
729
+ def test_find_all_by_array_attribute
730
+ assert_equal 2, Topic.find_all_by_title(["The First Topic", "The Second Topic of the day"]).size
731
+ end
732
+
733
+ def test_find_all_by_boolean_attribute
734
+ topics = Topic.find_all_by_approved(false)
735
+ assert_equal 1, topics.size
736
+ assert topics.include?(topics(:first))
737
+
738
+ topics = Topic.find_all_by_approved(true)
739
+ assert_equal 3, topics.size
740
+ assert topics.include?(topics(:second))
741
+ end
742
+
743
+ def test_find_by_nil_attribute
744
+ topic = Topic.find_by_last_read nil
745
+ assert_not_nil topic
746
+ assert_nil topic.last_read
747
+ end
748
+
749
+ def test_find_all_by_nil_attribute
750
+ topics = Topic.find_all_by_last_read nil
751
+ assert_equal 3, topics.size
752
+ assert topics.collect(&:last_read).all?(&:nil?)
753
+ end
754
+
755
+ def test_find_by_nil_and_not_nil_attributes
756
+ topic = Topic.find_by_last_read_and_author_name nil, "Mary"
757
+ assert_equal "Mary", topic.author_name
758
+ end
759
+
760
+ def test_find_all_by_nil_and_not_nil_attributes
761
+ topics = Topic.find_all_by_last_read_and_author_name nil, "Mary"
762
+ assert_equal 1, topics.size
763
+ assert_equal "Mary", topics[0].author_name
764
+ end
765
+
766
+ def test_find_or_create_from_one_attribute
767
+ number_of_companies = Company.count
768
+ sig38 = Company.find_or_create_by_name("38signals")
769
+ assert_equal number_of_companies + 1, Company.count
770
+ assert_equal sig38, Company.find_or_create_by_name("38signals")
771
+ assert !sig38.new_record?
772
+ end
773
+
774
+ def test_find_or_create_from_two_attributes
775
+ number_of_topics = Topic.count
776
+ another = Topic.find_or_create_by_title_and_author_name("Another topic","John")
777
+ assert_equal number_of_topics + 1, Topic.count
778
+ assert_equal another, Topic.find_or_create_by_title_and_author_name("Another topic", "John")
779
+ assert !another.new_record?
780
+ end
781
+
782
+ def test_find_or_create_from_two_attributes_with_one_being_an_aggregate
783
+ number_of_customers = Customer.count
784
+ created_customer = Customer.find_or_create_by_balance_and_name(Money.new(123), "Elizabeth")
785
+ assert_equal number_of_customers + 1, Customer.count
786
+ assert_equal created_customer, Customer.find_or_create_by_balance(Money.new(123), "Elizabeth")
787
+ assert !created_customer.new_record?
788
+ end
789
+
790
+ def test_find_or_create_from_one_attribute_and_hash
791
+ number_of_companies = Company.count
792
+ sig38 = Company.find_or_create_by_name({:name => "38signals", :firm_id => 17, :client_of => 23})
793
+ assert_equal number_of_companies + 1, Company.count
794
+ assert_equal sig38, Company.find_or_create_by_name({:name => "38signals", :firm_id => 17, :client_of => 23})
795
+ assert !sig38.new_record?
796
+ assert_equal "38signals", sig38.name
797
+ assert_equal 17, sig38.firm_id
798
+ assert_equal 23, sig38.client_of
799
+ end
800
+
801
+ def test_find_or_create_from_one_aggregate_attribute
802
+ number_of_customers = Customer.count
803
+ created_customer = Customer.find_or_create_by_balance(Money.new(123))
804
+ assert_equal number_of_customers + 1, Customer.count
805
+ assert_equal created_customer, Customer.find_or_create_by_balance(Money.new(123))
806
+ assert !created_customer.new_record?
807
+ end
808
+
809
+ def test_find_or_create_from_one_aggregate_attribute_and_hash
810
+ number_of_customers = Customer.count
811
+ balance = Money.new(123)
812
+ name = "Elizabeth"
813
+ created_customer = Customer.find_or_create_by_balance({:balance => balance, :name => name})
814
+ assert_equal number_of_customers + 1, Customer.count
815
+ assert_equal created_customer, Customer.find_or_create_by_balance({:balance => balance, :name => name})
816
+ assert !created_customer.new_record?
817
+ assert_equal balance, created_customer.balance
818
+ assert_equal name, created_customer.name
819
+ end
820
+
821
+ def test_find_or_initialize_from_one_attribute
822
+ sig38 = Company.find_or_initialize_by_name("38signals")
823
+ assert_equal "38signals", sig38.name
824
+ assert sig38.new_record?
825
+ end
826
+
827
+ def test_find_or_initialize_from_one_aggregate_attribute
828
+ new_customer = Customer.find_or_initialize_by_balance(Money.new(123))
829
+ assert_equal 123, new_customer.balance.amount
830
+ assert new_customer.new_record?
831
+ end
832
+
833
+ def test_find_or_initialize_from_one_attribute_should_not_set_attribute_even_when_protected
834
+ c = Company.find_or_initialize_by_name({:name => "Fortune 1000", :rating => 1000})
835
+ assert_equal "Fortune 1000", c.name
836
+ assert_not_equal 1000, c.rating
837
+ assert c.valid?
838
+ assert c.new_record?
839
+ end
840
+
841
+ def test_find_or_create_from_one_attribute_should_set_not_attribute_even_when_protected
842
+ c = Company.find_or_create_by_name({:name => "Fortune 1000", :rating => 1000})
843
+ assert_equal "Fortune 1000", c.name
844
+ assert_not_equal 1000, c.rating
845
+ assert c.valid?
846
+ assert !c.new_record?
847
+ end
848
+
849
+ def test_find_or_initialize_from_one_attribute_should_set_attribute_even_when_protected
850
+ c = Company.find_or_initialize_by_name_and_rating("Fortune 1000", 1000)
851
+ assert_equal "Fortune 1000", c.name
852
+ assert_equal 1000, c.rating
853
+ assert c.valid?
854
+ assert c.new_record?
855
+ end
856
+
857
+ def test_find_or_create_from_one_attribute_should_set_attribute_even_when_protected
858
+ c = Company.find_or_create_by_name_and_rating("Fortune 1000", 1000)
859
+ assert_equal "Fortune 1000", c.name
860
+ assert_equal 1000, c.rating
861
+ assert c.valid?
862
+ assert !c.new_record?
863
+ end
864
+
865
+ def test_find_or_initialize_should_set_protected_attributes_if_given_as_block
866
+ c = Company.find_or_initialize_by_name(:name => "Fortune 1000") { |f| f.rating = 1000 }
867
+ assert_equal "Fortune 1000", c.name
868
+ assert_equal 1000.to_f, c.rating.to_f
869
+ assert c.valid?
870
+ assert c.new_record?
871
+ end
872
+
873
+ def test_find_or_create_should_set_protected_attributes_if_given_as_block
874
+ c = Company.find_or_create_by_name(:name => "Fortune 1000") { |f| f.rating = 1000 }
875
+ assert_equal "Fortune 1000", c.name
876
+ assert_equal 1000.to_f, c.rating.to_f
877
+ assert c.valid?
878
+ assert !c.new_record?
879
+ end
880
+
881
+ def test_find_or_create_should_work_with_block_on_first_call
882
+ class << Company
883
+ undef_method(:find_or_create_by_name) if method_defined?(:find_or_create_by_name)
884
+ end
885
+ c = Company.find_or_create_by_name(:name => "Fortune 1000") { |f| f.rating = 1000 }
886
+ assert_equal "Fortune 1000", c.name
887
+ assert_equal 1000.to_f, c.rating.to_f
888
+ assert c.valid?
889
+ assert !c.new_record?
890
+ end
891
+
892
+ def test_dynamic_find_or_initialize_from_one_attribute_caches_method
893
+ class << Company; self; end.send(:remove_method, :find_or_initialize_by_name) if Company.public_methods.any? { |m| m.to_s == 'find_or_initialize_by_name' }
894
+ assert !Company.public_methods.any? { |m| m.to_s == 'find_or_initialize_by_name' }
895
+ sig38 = Company.find_or_initialize_by_name("38signals")
896
+ assert Company.public_methods.any? { |m| m.to_s == 'find_or_initialize_by_name' }
897
+ end
898
+
899
+ def test_find_or_initialize_from_two_attributes
900
+ another = Topic.find_or_initialize_by_title_and_author_name("Another topic","John")
901
+ assert_equal "Another topic", another.title
902
+ assert_equal "John", another.author_name
903
+ assert another.new_record?
904
+ end
905
+
906
+ def test_find_or_initialize_from_one_aggregate_attribute_and_one_not
907
+ new_customer = Customer.find_or_initialize_by_balance_and_name(Money.new(123), "Elizabeth")
908
+ assert_equal 123, new_customer.balance.amount
909
+ assert_equal "Elizabeth", new_customer.name
910
+ assert new_customer.new_record?
911
+ end
912
+
913
+ def test_find_or_initialize_from_one_attribute_and_hash
914
+ sig38 = Company.find_or_initialize_by_name({:name => "38signals", :firm_id => 17, :client_of => 23})
915
+ assert_equal "38signals", sig38.name
916
+ assert_equal 17, sig38.firm_id
917
+ assert_equal 23, sig38.client_of
918
+ assert sig38.new_record?
919
+ end
920
+
921
+ def test_find_or_initialize_from_one_aggregate_attribute_and_hash
922
+ balance = Money.new(123)
923
+ name = "Elizabeth"
924
+ new_customer = Customer.find_or_initialize_by_balance({:balance => balance, :name => name})
925
+ assert_equal balance, new_customer.balance
926
+ assert_equal name, new_customer.name
927
+ assert new_customer.new_record?
928
+ end
929
+
930
+ def test_find_with_bad_sql
931
+ assert_raise(ActiveRecord::StatementInvalid) { Topic.find_by_sql "select 1 from badtable" }
932
+ end
933
+
934
+ def test_find_with_invalid_params
935
+ assert_raise(ArgumentError) { Topic.find :first, :join => "It should be `joins'" }
936
+ assert_raise(ArgumentError) { Topic.find :first, :conditions => '1 = 1', :join => "It should be `joins'" }
937
+ end
938
+
939
+ def test_dynamic_finder_with_invalid_params
940
+ assert_raise(ArgumentError) { Topic.find_by_title 'No Title', :join => "It should be `joins'" }
941
+ end
942
+
943
+ def test_find_all_with_join
944
+ developers_on_project_one = Developer.find(
945
+ :all,
946
+ :joins => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
947
+ :conditions => 'project_id=1'
948
+ )
949
+ assert_equal 3, developers_on_project_one.length
950
+ developer_names = developers_on_project_one.map { |d| d.name }
951
+ assert developer_names.include?('David')
952
+ assert developer_names.include?('Jamis')
953
+ end
954
+
955
+ def test_joins_dont_clobber_id
956
+ first = Firm.find(
957
+ :first,
958
+ :joins => 'INNER JOIN companies AS clients ON clients.firm_id = companies.id',
959
+ :conditions => 'companies.id = 1'
960
+ )
961
+ assert_equal 1, first.id
962
+ end
963
+
964
+ def test_joins_with_string_array
965
+ person_with_reader_and_post = Post.find(
966
+ :all,
967
+ :joins => [
968
+ "INNER JOIN categorizations ON categorizations.post_id = posts.id",
969
+ "INNER JOIN categories ON categories.id = categorizations.category_id AND categories.type = 'SpecialCategory'"
970
+ ]
971
+ )
972
+ assert_equal 1, person_with_reader_and_post.size
973
+ end
974
+
975
+ def test_find_by_id_with_conditions_with_or
976
+ assert_nothing_raised do
977
+ Post.find([1,2,3],
978
+ :conditions => "posts.id <= 3 OR posts.#{QUOTED_TYPE} = 'Post'")
979
+ end
980
+ end
981
+
982
+ # http://dev.rubyonrails.org/ticket/6778
983
+ def test_find_ignores_previously_inserted_record
984
+ post = Post.create!(:title => 'test', :body => 'it out')
985
+ assert_equal [], Post.find_all_by_id(nil)
986
+ end
987
+
988
+ def test_find_by_empty_ids
989
+ assert_equal [], Post.find([])
990
+ end
991
+
992
+ def test_find_by_empty_in_condition
993
+ assert_equal [], Post.find(:all, :conditions => ['id in (?)', []])
994
+ end
995
+
996
+ def test_find_by_records
997
+ p1, p2 = Post.find(:all, :limit => 2, :order => 'id asc')
998
+ assert_equal [p1, p2], Post.find(:all, :conditions => ['id in (?)', [p1, p2]], :order => 'id asc')
999
+ assert_equal [p1, p2], Post.find(:all, :conditions => ['id in (?)', [p1, p2.id]], :order => 'id asc')
1000
+ end
1001
+
1002
+ def test_select_value
1003
+ assert_equal "37signals", Company.connection.select_value("SELECT name FROM companies WHERE id = 1")
1004
+ assert_nil Company.connection.select_value("SELECT name FROM companies WHERE id = -1")
1005
+ # make sure we didn't break count...
1006
+ assert_equal 0, Company.count_by_sql("SELECT COUNT(*) FROM companies WHERE name = 'Halliburton'")
1007
+ assert_equal 1, Company.count_by_sql("SELECT COUNT(*) FROM companies WHERE name = '37signals'")
1008
+ end
1009
+
1010
+ def test_select_values
1011
+ assert_equal ["1","2","3","4","5","6","7","8","9"], Company.connection.select_values("SELECT id FROM companies ORDER BY id").map! { |i| i.to_s }
1012
+ assert_equal ["37signals","Summit","Microsoft", "Flamboyant Software", "Ex Nihilo", "RailsCore", "Leetsoft", "Jadedpixel", "Odegy"], Company.connection.select_values("SELECT name FROM companies ORDER BY id")
1013
+ end
1014
+
1015
+ def test_select_rows
1016
+ assert_equal(
1017
+ [["1", nil, nil, "37signals"],
1018
+ ["2", "1", "2", "Summit"],
1019
+ ["3", "1", "1", "Microsoft"]],
1020
+ Company.connection.select_rows("SELECT id, firm_id, client_of, name FROM companies WHERE id IN (1,2,3) ORDER BY id").map! {|i| i.map! {|j| j.to_s unless j.nil?}})
1021
+ assert_equal [["1", "37signals"], ["2", "Summit"], ["3", "Microsoft"]],
1022
+ Company.connection.select_rows("SELECT id, name FROM companies WHERE id IN (1,2,3) ORDER BY id").map! {|i| i.map! {|j| j.to_s unless j.nil?}}
1023
+ end
1024
+
1025
+ def test_find_with_order_on_included_associations_with_construct_finder_sql_for_association_limiting_and_is_distinct
1026
+ assert_equal 2, Post.find(:all, :include => { :authors => :author_address }, :order => ' author_addresses.id DESC ', :limit => 2).size
1027
+
1028
+ assert_equal 3, Post.find(:all, :include => { :author => :author_address, :authors => :author_address},
1029
+ :order => ' author_addresses_authors.id DESC ', :limit => 3).size
1030
+ end
1031
+
1032
+ def test_with_limiting_with_custom_select
1033
+ posts = Post.find(:all, :include => :author, :select => ' posts.*, authors.id as "author_id"', :limit => 3, :order => 'posts.id')
1034
+ assert_equal 3, posts.size
1035
+ assert_equal [0, 1, 1], posts.map(&:author_id).sort
1036
+ end
1037
+
1038
+ def test_finder_with_scoped_from
1039
+ all_topics = Topic.all
1040
+
1041
+ Topic.with_scope(:find => { :from => 'fake_topics' }) do
1042
+ assert_equal all_topics, Topic.all(:from => 'topics')
1043
+ end
1044
+ end
1045
+
1046
+ protected
1047
+ def bind(statement, *vars)
1048
+ if vars.first.is_a?(Hash)
1049
+ ActiveRecord::Base.send(:replace_named_bind_variables, statement, vars.first)
1050
+ else
1051
+ ActiveRecord::Base.send(:replace_bind_variables, statement, vars)
1052
+ end
1053
+ end
1054
+ end