activerecord 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (311) hide show
  1. data/CHANGELOG +4928 -3
  2. data/README +45 -46
  3. data/RUNNING_UNIT_TESTS +8 -11
  4. data/Rakefile +247 -0
  5. data/install.rb +8 -38
  6. data/lib/active_record/aggregations.rb +64 -49
  7. data/lib/active_record/associations/association_collection.rb +217 -47
  8. data/lib/active_record/associations/association_proxy.rb +159 -0
  9. data/lib/active_record/associations/belongs_to_association.rb +56 -0
  10. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +50 -0
  11. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +155 -37
  12. data/lib/active_record/associations/has_many_association.rb +145 -75
  13. data/lib/active_record/associations/has_many_through_association.rb +283 -0
  14. data/lib/active_record/associations/has_one_association.rb +96 -0
  15. data/lib/active_record/associations.rb +1537 -304
  16. data/lib/active_record/attribute_methods.rb +328 -0
  17. data/lib/active_record/base.rb +2001 -588
  18. data/lib/active_record/calculations.rb +269 -0
  19. data/lib/active_record/callbacks.rb +169 -165
  20. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +308 -0
  21. data/lib/active_record/connection_adapters/abstract/database_statements.rb +171 -0
  22. data/lib/active_record/connection_adapters/abstract/query_cache.rb +87 -0
  23. data/lib/active_record/connection_adapters/abstract/quoting.rb +69 -0
  24. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +472 -0
  25. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +306 -0
  26. data/lib/active_record/connection_adapters/abstract_adapter.rb +125 -279
  27. data/lib/active_record/connection_adapters/mysql_adapter.rb +442 -77
  28. data/lib/active_record/connection_adapters/postgresql_adapter.rb +805 -135
  29. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +34 -0
  30. data/lib/active_record/connection_adapters/sqlite_adapter.rb +353 -69
  31. data/lib/active_record/fixtures.rb +946 -100
  32. data/lib/active_record/locking/optimistic.rb +144 -0
  33. data/lib/active_record/locking/pessimistic.rb +77 -0
  34. data/lib/active_record/migration.rb +417 -0
  35. data/lib/active_record/observer.rb +142 -32
  36. data/lib/active_record/query_cache.rb +23 -0
  37. data/lib/active_record/reflection.rb +163 -70
  38. data/lib/active_record/schema.rb +58 -0
  39. data/lib/active_record/schema_dumper.rb +171 -0
  40. data/lib/active_record/serialization.rb +98 -0
  41. data/lib/active_record/serializers/json_serializer.rb +71 -0
  42. data/lib/active_record/serializers/xml_serializer.rb +315 -0
  43. data/lib/active_record/timestamp.rb +41 -0
  44. data/lib/active_record/transactions.rb +87 -57
  45. data/lib/active_record/validations.rb +909 -122
  46. data/lib/active_record/vendor/db2.rb +362 -0
  47. data/lib/active_record/vendor/mysql.rb +126 -29
  48. data/lib/active_record/version.rb +9 -0
  49. data/lib/active_record.rb +35 -7
  50. data/lib/activerecord.rb +1 -0
  51. data/test/aaa_create_tables_test.rb +72 -0
  52. data/test/abstract_unit.rb +73 -5
  53. data/test/active_schema_test_mysql.rb +43 -0
  54. data/test/adapter_test.rb +105 -0
  55. data/test/adapter_test_sqlserver.rb +95 -0
  56. data/test/aggregations_test.rb +110 -16
  57. data/test/all.sh +2 -2
  58. data/test/ar_schema_test.rb +33 -0
  59. data/test/association_inheritance_reload.rb +14 -0
  60. data/test/associations/ar_joins_test.rb +0 -0
  61. data/test/associations/callbacks_test.rb +147 -0
  62. data/test/associations/cascaded_eager_loading_test.rb +110 -0
  63. data/test/associations/eager_singularization_test.rb +145 -0
  64. data/test/associations/eager_test.rb +442 -0
  65. data/test/associations/extension_test.rb +47 -0
  66. data/test/associations/inner_join_association_test.rb +88 -0
  67. data/test/associations/join_model_test.rb +553 -0
  68. data/test/associations_test.rb +1930 -267
  69. data/test/attribute_methods_test.rb +146 -0
  70. data/test/base_test.rb +1316 -84
  71. data/test/binary_test.rb +32 -0
  72. data/test/calculations_test.rb +251 -0
  73. data/test/callbacks_test.rb +400 -0
  74. data/test/class_inheritable_attributes_test.rb +3 -4
  75. data/test/column_alias_test.rb +17 -0
  76. data/test/connection_test_firebird.rb +8 -0
  77. data/test/connection_test_mysql.rb +30 -0
  78. data/test/connections/native_db2/connection.rb +25 -0
  79. data/test/connections/native_firebird/connection.rb +26 -0
  80. data/test/connections/native_frontbase/connection.rb +27 -0
  81. data/test/connections/native_mysql/connection.rb +21 -18
  82. data/test/connections/native_openbase/connection.rb +21 -0
  83. data/test/connections/native_oracle/connection.rb +27 -0
  84. data/test/connections/native_postgresql/connection.rb +17 -18
  85. data/test/connections/native_sqlite/connection.rb +17 -16
  86. data/test/connections/native_sqlite3/connection.rb +25 -0
  87. data/test/connections/native_sqlite3/in_memory_connection.rb +18 -0
  88. data/test/connections/native_sybase/connection.rb +23 -0
  89. data/test/copy_table_test_sqlite.rb +69 -0
  90. data/test/datatype_test_postgresql.rb +203 -0
  91. data/test/date_time_test.rb +37 -0
  92. data/test/default_test_firebird.rb +16 -0
  93. data/test/defaults_test.rb +67 -0
  94. data/test/deprecated_finder_test.rb +30 -0
  95. data/test/finder_test.rb +607 -32
  96. data/test/fixtures/accounts.yml +28 -0
  97. data/test/fixtures/all/developers.yml +0 -0
  98. data/test/fixtures/all/people.csv +0 -0
  99. data/test/fixtures/all/tasks.yml +0 -0
  100. data/test/fixtures/author.rb +107 -0
  101. data/test/fixtures/author_favorites.yml +4 -0
  102. data/test/fixtures/authors.yml +7 -0
  103. data/test/fixtures/bad_fixtures/attr_with_numeric_first_char +1 -0
  104. data/test/fixtures/bad_fixtures/attr_with_spaces +1 -0
  105. data/test/fixtures/bad_fixtures/blank_line +3 -0
  106. data/test/fixtures/bad_fixtures/duplicate_attributes +3 -0
  107. data/test/fixtures/bad_fixtures/missing_value +1 -0
  108. data/test/fixtures/binaries.yml +132 -0
  109. data/test/fixtures/binary.rb +2 -0
  110. data/test/fixtures/book.rb +4 -0
  111. data/test/fixtures/books.yml +7 -0
  112. data/test/fixtures/categories/special_categories.yml +9 -0
  113. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  114. data/test/fixtures/categories.yml +14 -0
  115. data/test/fixtures/categories_ordered.yml +7 -0
  116. data/test/fixtures/categories_posts.yml +23 -0
  117. data/test/fixtures/categorization.rb +5 -0
  118. data/test/fixtures/categorizations.yml +17 -0
  119. data/test/fixtures/category.rb +26 -0
  120. data/test/fixtures/citation.rb +6 -0
  121. data/test/fixtures/comment.rb +23 -0
  122. data/test/fixtures/comments.yml +59 -0
  123. data/test/fixtures/companies.yml +55 -0
  124. data/test/fixtures/company.rb +81 -4
  125. data/test/fixtures/company_in_module.rb +32 -6
  126. data/test/fixtures/computer.rb +4 -0
  127. data/test/fixtures/computers.yml +4 -0
  128. data/test/fixtures/contact.rb +16 -0
  129. data/test/fixtures/courses.yml +7 -0
  130. data/test/fixtures/customer.rb +28 -3
  131. data/test/fixtures/customers.yml +17 -0
  132. data/test/fixtures/db_definitions/db2.drop.sql +33 -0
  133. data/test/fixtures/db_definitions/db2.sql +235 -0
  134. data/test/fixtures/db_definitions/db22.drop.sql +2 -0
  135. data/test/fixtures/db_definitions/db22.sql +5 -0
  136. data/test/fixtures/db_definitions/firebird.drop.sql +65 -0
  137. data/test/fixtures/db_definitions/firebird.sql +310 -0
  138. data/test/fixtures/db_definitions/firebird2.drop.sql +2 -0
  139. data/test/fixtures/db_definitions/firebird2.sql +6 -0
  140. data/test/fixtures/db_definitions/frontbase.drop.sql +33 -0
  141. data/test/fixtures/db_definitions/frontbase.sql +273 -0
  142. data/test/fixtures/db_definitions/frontbase2.drop.sql +1 -0
  143. data/test/fixtures/db_definitions/frontbase2.sql +4 -0
  144. data/test/fixtures/db_definitions/openbase.drop.sql +2 -0
  145. data/test/fixtures/db_definitions/openbase.sql +318 -0
  146. data/test/fixtures/db_definitions/openbase2.drop.sql +2 -0
  147. data/test/fixtures/db_definitions/openbase2.sql +7 -0
  148. data/test/fixtures/db_definitions/oracle.drop.sql +67 -0
  149. data/test/fixtures/db_definitions/oracle.sql +330 -0
  150. data/test/fixtures/db_definitions/oracle2.drop.sql +2 -0
  151. data/test/fixtures/db_definitions/oracle2.sql +6 -0
  152. data/test/fixtures/db_definitions/postgresql.drop.sql +44 -0
  153. data/test/fixtures/db_definitions/postgresql.sql +217 -38
  154. data/test/fixtures/db_definitions/postgresql2.drop.sql +2 -0
  155. data/test/fixtures/db_definitions/postgresql2.sql +2 -2
  156. data/test/fixtures/db_definitions/schema.rb +354 -0
  157. data/test/fixtures/db_definitions/schema2.rb +11 -0
  158. data/test/fixtures/db_definitions/sqlite.drop.sql +33 -0
  159. data/test/fixtures/db_definitions/sqlite.sql +139 -5
  160. data/test/fixtures/db_definitions/sqlite2.drop.sql +2 -0
  161. data/test/fixtures/db_definitions/sqlite2.sql +1 -0
  162. data/test/fixtures/db_definitions/sybase.drop.sql +35 -0
  163. data/test/fixtures/db_definitions/sybase.sql +222 -0
  164. data/test/fixtures/db_definitions/sybase2.drop.sql +4 -0
  165. data/test/fixtures/db_definitions/sybase2.sql +5 -0
  166. data/test/fixtures/developer.rb +70 -6
  167. data/test/fixtures/developers.yml +21 -0
  168. data/test/fixtures/developers_projects/david_action_controller +2 -1
  169. data/test/fixtures/developers_projects/david_active_record +2 -1
  170. data/test/fixtures/developers_projects.yml +17 -0
  171. data/test/fixtures/edge.rb +5 -0
  172. data/test/fixtures/edges.yml +6 -0
  173. data/test/fixtures/entrants.yml +14 -0
  174. data/test/fixtures/example.log +1 -0
  175. data/test/fixtures/fk_test_has_fk.yml +3 -0
  176. data/test/fixtures/fk_test_has_pk.yml +2 -0
  177. data/test/fixtures/flowers.jpg +0 -0
  178. data/test/fixtures/funny_jokes.yml +10 -0
  179. data/test/fixtures/item.rb +7 -0
  180. data/test/fixtures/items.yml +4 -0
  181. data/test/fixtures/joke.rb +3 -0
  182. data/test/fixtures/keyboard.rb +3 -0
  183. data/test/fixtures/legacy_thing.rb +3 -0
  184. data/test/fixtures/legacy_things.yml +3 -0
  185. data/test/fixtures/matey.rb +4 -0
  186. data/test/fixtures/mateys.yml +4 -0
  187. data/test/fixtures/migrations/1_people_have_last_names.rb +9 -0
  188. data/test/fixtures/migrations/2_we_need_reminders.rb +12 -0
  189. data/test/fixtures/migrations/3_innocent_jointable.rb +12 -0
  190. data/test/fixtures/migrations_with_decimal/1_give_me_big_numbers.rb +15 -0
  191. data/test/fixtures/migrations_with_duplicate/1_people_have_last_names.rb +9 -0
  192. data/test/fixtures/migrations_with_duplicate/2_we_need_reminders.rb +12 -0
  193. data/test/fixtures/migrations_with_duplicate/3_foo.rb +7 -0
  194. data/test/fixtures/migrations_with_duplicate/3_innocent_jointable.rb +12 -0
  195. data/test/fixtures/migrations_with_missing_versions/1000_people_have_middle_names.rb +9 -0
  196. data/test/fixtures/migrations_with_missing_versions/1_people_have_last_names.rb +9 -0
  197. data/test/fixtures/migrations_with_missing_versions/3_we_need_reminders.rb +12 -0
  198. data/test/fixtures/migrations_with_missing_versions/4_innocent_jointable.rb +12 -0
  199. data/test/fixtures/minimalistic.rb +2 -0
  200. data/test/fixtures/minimalistics.yml +2 -0
  201. data/test/fixtures/mixed_case_monkey.rb +3 -0
  202. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  203. data/test/fixtures/mixins.yml +29 -0
  204. data/test/fixtures/movies.yml +7 -0
  205. data/test/fixtures/naked/csv/accounts.csv +1 -0
  206. data/test/fixtures/naked/yml/accounts.yml +1 -0
  207. data/test/fixtures/naked/yml/companies.yml +1 -0
  208. data/test/fixtures/naked/yml/courses.yml +1 -0
  209. data/test/fixtures/order.rb +4 -0
  210. data/test/fixtures/parrot.rb +13 -0
  211. data/test/fixtures/parrots.yml +27 -0
  212. data/test/fixtures/parrots_pirates.yml +7 -0
  213. data/test/fixtures/people.yml +3 -0
  214. data/test/fixtures/person.rb +4 -0
  215. data/test/fixtures/pirate.rb +5 -0
  216. data/test/fixtures/pirates.yml +9 -0
  217. data/test/fixtures/post.rb +59 -0
  218. data/test/fixtures/posts.yml +48 -0
  219. data/test/fixtures/project.rb +27 -2
  220. data/test/fixtures/projects.yml +7 -0
  221. data/test/fixtures/reader.rb +4 -0
  222. data/test/fixtures/readers.yml +4 -0
  223. data/test/fixtures/reply.rb +18 -2
  224. data/test/fixtures/reserved_words/distinct.yml +5 -0
  225. data/test/fixtures/reserved_words/distincts_selects.yml +11 -0
  226. data/test/fixtures/reserved_words/group.yml +14 -0
  227. data/test/fixtures/reserved_words/select.yml +8 -0
  228. data/test/fixtures/reserved_words/values.yml +7 -0
  229. data/test/fixtures/ship.rb +3 -0
  230. data/test/fixtures/ships.yml +5 -0
  231. data/test/fixtures/subject.rb +4 -0
  232. data/test/fixtures/subscriber.rb +4 -3
  233. data/test/fixtures/tag.rb +7 -0
  234. data/test/fixtures/tagging.rb +10 -0
  235. data/test/fixtures/taggings.yml +25 -0
  236. data/test/fixtures/tags.yml +7 -0
  237. data/test/fixtures/task.rb +3 -0
  238. data/test/fixtures/tasks.yml +7 -0
  239. data/test/fixtures/topic.rb +20 -3
  240. data/test/fixtures/topics.yml +22 -0
  241. data/test/fixtures/treasure.rb +4 -0
  242. data/test/fixtures/treasures.yml +10 -0
  243. data/test/fixtures/vertex.rb +9 -0
  244. data/test/fixtures/vertices.yml +4 -0
  245. data/test/fixtures_test.rb +574 -8
  246. data/test/inheritance_test.rb +113 -27
  247. data/test/json_serialization_test.rb +180 -0
  248. data/test/lifecycle_test.rb +56 -29
  249. data/test/locking_test.rb +273 -0
  250. data/test/method_scoping_test.rb +416 -0
  251. data/test/migration_test.rb +933 -0
  252. data/test/migration_test_firebird.rb +124 -0
  253. data/test/mixin_test.rb +95 -0
  254. data/test/modules_test.rb +23 -10
  255. data/test/multiple_db_test.rb +17 -3
  256. data/test/pk_test.rb +59 -15
  257. data/test/query_cache_test.rb +104 -0
  258. data/test/readonly_test.rb +107 -0
  259. data/test/reflection_test.rb +124 -27
  260. data/test/reserved_word_test_mysql.rb +177 -0
  261. data/test/schema_authorization_test_postgresql.rb +75 -0
  262. data/test/schema_dumper_test.rb +131 -0
  263. data/test/schema_test_postgresql.rb +64 -0
  264. data/test/serialization_test.rb +47 -0
  265. data/test/synonym_test_oracle.rb +17 -0
  266. data/test/table_name_test_sqlserver.rb +23 -0
  267. data/test/threaded_connections_test.rb +48 -0
  268. data/test/transactions_test.rb +227 -29
  269. data/test/unconnected_test.rb +14 -6
  270. data/test/validations_test.rb +1293 -32
  271. data/test/xml_serialization_test.rb +202 -0
  272. metadata +347 -143
  273. data/dev-utils/eval_debugger.rb +0 -9
  274. data/examples/associations.rb +0 -87
  275. data/examples/shared_setup.rb +0 -15
  276. data/examples/validation.rb +0 -88
  277. data/lib/active_record/deprecated_associations.rb +0 -70
  278. data/lib/active_record/support/class_attribute_accessors.rb +0 -43
  279. data/lib/active_record/support/class_inheritable_attributes.rb +0 -37
  280. data/lib/active_record/support/clean_logger.rb +0 -10
  281. data/lib/active_record/support/inflector.rb +0 -70
  282. data/lib/active_record/vendor/simple.rb +0 -702
  283. data/lib/active_record/wrappers/yaml_wrapper.rb +0 -15
  284. data/lib/active_record/wrappings.rb +0 -59
  285. data/rakefile +0 -122
  286. data/test/deprecated_associations_test.rb +0 -336
  287. data/test/fixtures/accounts/signals37 +0 -3
  288. data/test/fixtures/accounts/unknown +0 -2
  289. data/test/fixtures/companies/first_client +0 -6
  290. data/test/fixtures/companies/first_firm +0 -4
  291. data/test/fixtures/companies/second_client +0 -6
  292. data/test/fixtures/courses/java +0 -2
  293. data/test/fixtures/courses/ruby +0 -2
  294. data/test/fixtures/customers/david +0 -6
  295. data/test/fixtures/db_definitions/mysql.sql +0 -96
  296. data/test/fixtures/db_definitions/mysql2.sql +0 -4
  297. data/test/fixtures/developers/david +0 -2
  298. data/test/fixtures/developers/jamis +0 -2
  299. data/test/fixtures/entrants/first +0 -3
  300. data/test/fixtures/entrants/second +0 -3
  301. data/test/fixtures/entrants/third +0 -3
  302. data/test/fixtures/fixture_database.sqlite +0 -0
  303. data/test/fixtures/fixture_database_2.sqlite +0 -0
  304. data/test/fixtures/movies/first +0 -2
  305. data/test/fixtures/movies/second +0 -2
  306. data/test/fixtures/projects/action_controller +0 -2
  307. data/test/fixtures/projects/active_record +0 -2
  308. data/test/fixtures/topics/first +0 -9
  309. data/test/fixtures/topics/second +0 -8
  310. data/test/inflector_test.rb +0 -104
  311. data/test/thread_safety_test.rb +0 -33
@@ -1,88 +0,0 @@
1
- require File.dirname(__FILE__) + '/shared_setup'
2
-
3
- logger = Logger.new(STDOUT)
4
-
5
- # Database setup ---------------
6
-
7
- logger.info "\nCreate tables"
8
-
9
- [ "DROP TABLE people",
10
- "CREATE TABLE people (id int(11) auto_increment, name varchar(100), pass varchar(100), email varchar(100), PRIMARY KEY (id))"
11
- ].each { |statement|
12
- begin; ActiveRecord::Base.connection.execute(statement); rescue ActiveRecord::StatementInvalid; end # Tables doesn't necessarily already exist
13
- }
14
-
15
-
16
- # Class setup ---------------
17
-
18
- class Person < ActiveRecord::Base
19
- # Active Record can only guess simple table names like Card/cards, Company/companies
20
- def self.table_name() "people" end
21
-
22
- # Using
23
- def self.authenticate(name, pass)
24
- # find_first "name = '#{name}' AND pass = '#{pass}'" would be open to sql-injection (in a web-app scenario)
25
- find_first [ "name = '%s' AND pass = '%s'", name, pass ]
26
- end
27
-
28
- def self.name_exists?(name, id = nil)
29
- if id.nil?
30
- condition = [ "name = '%s'", name ]
31
- else
32
- # Check if anyone else than the person identified by person_id has that user_name
33
- condition = [ "name = '%s' AND id <> %d", name, id ]
34
- end
35
-
36
- !find_first(condition).nil?
37
- end
38
-
39
- def email_address_with_name
40
- "\"#{name}\" <#{email}>"
41
- end
42
-
43
- protected
44
- def validate
45
- errors.add_on_empty(%w(name pass email))
46
- errors.add("email", "must be valid") unless email_address_valid?
47
- end
48
-
49
- def validate_on_create
50
- if attribute_present?("name") && Person.name_exists?(name)
51
- errors.add("name", "is already taken by another person")
52
- end
53
- end
54
-
55
- def validate_on_update
56
- if attribute_present?("name") && Person.name_exists?(name, id)
57
- errors.add("name", "is already taken by another person")
58
- end
59
- end
60
-
61
- private
62
- def email_address_valid?() email =~ /\w[-.\w]*\@[-\w]+[-.\w]*\.\w+/ end
63
- end
64
-
65
- # Usage ---------------
66
-
67
- logger.info "\nCreate fixtures"
68
- david = Person.new("name" => "David Heinemeier Hansson", "pass" => "", "email" => "")
69
- unless david.save
70
- puts "There was #{david.errors.count} error(s)"
71
- david.errors.each_full { |error| puts error }
72
- end
73
-
74
- david.pass = "something"
75
- david.email = "invalid_address"
76
- unless david.save
77
- puts "There was #{david.errors.count} error(s)"
78
- puts "It was email with: " + david.errors.on("email")
79
- end
80
-
81
- david.email = "david@loudthinking.com"
82
- if david.save then puts "David finally made it!" end
83
-
84
-
85
- another_david = Person.new("name" => "David Heinemeier Hansson", "pass" => "xc", "email" => "david@loudthinking")
86
- unless another_david.save
87
- puts "Error on name: " + another_david.errors.on("name")
88
- end
@@ -1,70 +0,0 @@
1
- module ActiveRecord
2
- module Associations # :nodoc:
3
- module ClassMethods
4
- def deprecated_collection_count_method(collection_name)# :nodoc:
5
- module_eval <<-"end_eval", __FILE__, __LINE__
6
- def #{collection_name}_count(force_reload = false)
7
- #{collection_name}.reload if force_reload
8
- #{collection_name}.size
9
- end
10
- end_eval
11
- end
12
-
13
- def deprecated_add_association_relation(association_name)# :nodoc:
14
- module_eval <<-"end_eval", __FILE__, __LINE__
15
- def add_#{association_name}(*items)
16
- #{association_name}.concat(items)
17
- end
18
- end_eval
19
- end
20
-
21
- def deprecated_remove_association_relation(association_name)# :nodoc:
22
- module_eval <<-"end_eval", __FILE__, __LINE__
23
- def remove_#{association_name}(items)
24
- #{association_name}.delete(items)
25
- end
26
- end_eval
27
- end
28
-
29
- def deprecated_has_collection_method(collection_name)# :nodoc:
30
- module_eval <<-"end_eval", __FILE__, __LINE__
31
- def has_#{collection_name}?(force_reload = false)
32
- !#{collection_name}(force_reload).empty?
33
- end
34
- end_eval
35
- end
36
-
37
- def deprecated_find_in_collection_method(collection_name)# :nodoc:
38
- module_eval <<-"end_eval", __FILE__, __LINE__
39
- def find_in_#{collection_name}(association_id)
40
- #{collection_name}.find(association_id)
41
- end
42
- end_eval
43
- end
44
-
45
- def deprecated_find_all_in_collection_method(collection_name)# :nodoc:
46
- module_eval <<-"end_eval", __FILE__, __LINE__
47
- def find_all_in_#{collection_name}(runtime_conditions = nil, orderings = nil, limit = nil, joins = nil)
48
- #{collection_name}.find_all(runtime_conditions, orderings, limit, joins)
49
- end
50
- end_eval
51
- end
52
-
53
- def deprecated_create_method(collection_name)# :nodoc:
54
- module_eval <<-"end_eval", __FILE__, __LINE__
55
- def create_in_#{collection_name}(attributes = {})
56
- #{collection_name}.create(attributes)
57
- end
58
- end_eval
59
- end
60
-
61
- def deprecated_build_method(collection_name)# :nodoc:
62
- module_eval <<-"end_eval", __FILE__, __LINE__
63
- def build_to_#{collection_name}(attributes = {})
64
- #{collection_name}.build(attributes)
65
- end
66
- end_eval
67
- end
68
- end
69
- end
70
- end
@@ -1,43 +0,0 @@
1
- # attr_* style accessors for class-variables that can accessed both on an instance and class level.
2
- class Class #:nodoc:
3
- def cattr_reader(*syms)
4
- syms.each do |sym|
5
- class_eval <<-EOS
6
- if ! defined? @@#{sym.id2name}
7
- @@#{sym.id2name} = nil
8
- end
9
-
10
- def self.#{sym.id2name}
11
- @@#{sym}
12
- end
13
-
14
- def #{sym.id2name}
15
- self.class.#{sym.id2name}
16
- end
17
- EOS
18
- end
19
- end
20
-
21
- def cattr_writer(*syms)
22
- syms.each do |sym|
23
- class_eval <<-EOS
24
- if ! defined? @@#{sym.id2name}
25
- @@#{sym.id2name} = nil
26
- end
27
-
28
- def self.#{sym.id2name}=(obj)
29
- @@#{sym.id2name} = obj
30
- end
31
-
32
- def #{sym.id2name}=(obj)
33
- self.class.#{sym.id2name}=(obj)
34
- end
35
- EOS
36
- end
37
- end
38
-
39
- def cattr_accessor(*syms)
40
- cattr_reader(*syms)
41
- cattr_writer(*syms)
42
- end
43
- end
@@ -1,37 +0,0 @@
1
- # Allows attributes to be shared within an inheritance hierarchy, but where each descentent gets a copy of
2
- # their parents' attributes, instead of just a pointer to the same. This means that the child can add elements
3
- # to, for example, an array without those additions being shared with either their parent, siblings, or
4
- # children, which is unlike the regular class-level attributes that are shared across the entire hierarchy.
5
- module ClassInheritableAttributes # :nodoc:
6
- def self.append_features(base)
7
- super
8
- base.extend(ClassMethods)
9
- end
10
-
11
- module ClassMethods # :nodoc:
12
- @@classes ||= {}
13
-
14
- def inheritable_attributes
15
- @@classes[self] ||= {}
16
- end
17
-
18
- def write_inheritable_attribute(key, value)
19
- inheritable_attributes[key] = value
20
- end
21
-
22
- def write_inheritable_array(key, elements)
23
- write_inheritable_attribute(key, []) if read_inheritable_attribute(key).nil?
24
- write_inheritable_attribute(key, read_inheritable_attribute(key) + elements)
25
- end
26
-
27
- def read_inheritable_attribute(key)
28
- inheritable_attributes[key]
29
- end
30
-
31
- private
32
- def inherited(child)
33
- @@classes[child] = inheritable_attributes.dup
34
- end
35
-
36
- end
37
- end
@@ -1,10 +0,0 @@
1
- require 'logger'
2
-
3
- class Logger #:nodoc:
4
- private
5
- remove_const "Format"
6
- Format = "%s\n"
7
- def format_message(severity, timestamp, msg, progname)
8
- Format % [msg]
9
- end
10
- end
@@ -1,70 +0,0 @@
1
- # The Inflector transforms words from singular to plural, class names to table names, modulized class names to ones without,
2
- # and class names to foreign keys.
3
- module Inflector
4
- extend self
5
-
6
- def pluralize(word)
7
- result = word.dup
8
- plural_rules.each do |(rule, replacement)|
9
- break if result.gsub!(rule, replacement)
10
- end
11
- return result
12
- end
13
-
14
- def singularize(word)
15
- result = word.dup
16
- singular_rules.each do |(rule, replacement)|
17
- break if result.gsub!(rule, replacement)
18
- end
19
- return result
20
- end
21
-
22
- def camelize(lower_case_and_underscored_word)
23
- lower_case_and_underscored_word.gsub(/(^|_)(.)/){$2.upcase}
24
- end
25
-
26
- def underscore(camel_cased_word)
27
- camel_cased_word.gsub(/([A-Z]+)([A-Z])/,'\1_\2').gsub(/([a-z])([A-Z])/,'\1_\2').downcase
28
- end
29
-
30
- def demodulize(class_name_in_module)
31
- class_name_in_module.gsub(/^.*::/, '')
32
- end
33
-
34
- def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
35
- Inflector.underscore(Inflector.demodulize(class_name)) +
36
- (separate_class_name_and_id_with_underscore ? "_id" : "id")
37
- end
38
-
39
- private
40
- def plural_rules #:doc:
41
- [
42
- [/(x|ch|ss)$/, '\1es'], # search, switch, fix, box, process, address
43
- [/([^aeiouy]|qu)y$/, '\1ies'], # query, ability, agency
44
- [/(?:([^f])fe|([lr])f)$/, '\1\2ves'], # half, safe, wife
45
- [/sis$/, 'ses'], # basis, diagnosis
46
- [/([ti])um$/, '\1a'], # datum, medium
47
- [/person$/, 'people'], # person, salesperson
48
- [/man$/, 'men'], # man, woman, spokesman
49
- [/child$/, 'children'], # child
50
- [/s$/, 's'], # no change (compatibility)
51
- [/$/, 's']
52
- ]
53
- end
54
-
55
- def singular_rules #:doc:
56
- [
57
- [/(x|ch|ss)es$/, '\1'],
58
- [/([^aeiouy]|qu)ies$/, '\1y'],
59
- [/([lr])ves$/, '\1f'],
60
- [/([^f])ves$/, '\1fe'],
61
- [/(analy|ba|diagno|parenthe|progno|synop|the)ses$/, '\1sis'],
62
- [/([ti])a$/, '\1um'],
63
- [/people$/, 'person'],
64
- [/men$/, 'man'],
65
- [/status$/, 'status'],
66
- [/children$/, 'child'],
67
- [/s$/, '']
68
- ]
69
- end
70
- end