activerecord 3.1.10 → 4.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (237) hide show
  1. checksums.yaml +6 -6
  2. data/CHANGELOG.md +1837 -338
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +39 -43
  5. data/examples/performance.rb +51 -20
  6. data/examples/simple.rb +4 -4
  7. data/lib/active_record/aggregations.rb +57 -43
  8. data/lib/active_record/association_relation.rb +35 -0
  9. data/lib/active_record/associations/alias_tracker.rb +47 -39
  10. data/lib/active_record/associations/association.rb +71 -85
  11. data/lib/active_record/associations/association_scope.rb +138 -89
  12. data/lib/active_record/associations/belongs_to_association.rb +65 -25
  13. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +9 -3
  14. data/lib/active_record/associations/builder/association.rb +125 -29
  15. data/lib/active_record/associations/builder/belongs_to.rb +91 -60
  16. data/lib/active_record/associations/builder/collection_association.rb +69 -49
  17. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +113 -42
  18. data/lib/active_record/associations/builder/has_many.rb +8 -64
  19. data/lib/active_record/associations/builder/has_one.rb +12 -52
  20. data/lib/active_record/associations/builder/singular_association.rb +22 -29
  21. data/lib/active_record/associations/collection_association.rb +294 -187
  22. data/lib/active_record/associations/collection_proxy.rb +961 -94
  23. data/lib/active_record/associations/foreign_association.rb +11 -0
  24. data/lib/active_record/associations/has_many_association.rb +118 -23
  25. data/lib/active_record/associations/has_many_through_association.rb +115 -45
  26. data/lib/active_record/associations/has_one_association.rb +57 -24
  27. data/lib/active_record/associations/has_one_through_association.rb +1 -1
  28. data/lib/active_record/associations/join_dependency/join_association.rb +76 -102
  29. data/lib/active_record/associations/join_dependency/join_base.rb +7 -9
  30. data/lib/active_record/associations/join_dependency/join_part.rb +30 -37
  31. data/lib/active_record/associations/join_dependency.rb +230 -156
  32. data/lib/active_record/associations/preloader/association.rb +96 -55
  33. data/lib/active_record/associations/preloader/collection_association.rb +3 -3
  34. data/lib/active_record/associations/preloader/has_many_through.rb +7 -3
  35. data/lib/active_record/associations/preloader/has_one.rb +1 -1
  36. data/lib/active_record/associations/preloader/singular_association.rb +3 -3
  37. data/lib/active_record/associations/preloader/through_association.rb +61 -32
  38. data/lib/active_record/associations/preloader.rb +113 -87
  39. data/lib/active_record/associations/singular_association.rb +29 -13
  40. data/lib/active_record/associations/through_association.rb +37 -19
  41. data/lib/active_record/associations.rb +505 -371
  42. data/lib/active_record/attribute.rb +163 -0
  43. data/lib/active_record/attribute_assignment.rb +212 -0
  44. data/lib/active_record/attribute_decorators.rb +66 -0
  45. data/lib/active_record/attribute_methods/before_type_cast.rb +52 -7
  46. data/lib/active_record/attribute_methods/dirty.rb +141 -51
  47. data/lib/active_record/attribute_methods/primary_key.rb +87 -36
  48. data/lib/active_record/attribute_methods/query.rb +5 -4
  49. data/lib/active_record/attribute_methods/read.rb +74 -117
  50. data/lib/active_record/attribute_methods/serialization.rb +70 -0
  51. data/lib/active_record/attribute_methods/time_zone_conversion.rb +49 -47
  52. data/lib/active_record/attribute_methods/write.rb +60 -21
  53. data/lib/active_record/attribute_methods.rb +409 -48
  54. data/lib/active_record/attribute_set/builder.rb +106 -0
  55. data/lib/active_record/attribute_set.rb +81 -0
  56. data/lib/active_record/attributes.rb +147 -0
  57. data/lib/active_record/autosave_association.rb +279 -232
  58. data/lib/active_record/base.rb +84 -1969
  59. data/lib/active_record/callbacks.rb +66 -28
  60. data/lib/active_record/coders/json.rb +13 -0
  61. data/lib/active_record/coders/yaml_column.rb +18 -21
  62. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +422 -243
  63. data/lib/active_record/connection_adapters/abstract/database_limits.rb +9 -0
  64. data/lib/active_record/connection_adapters/abstract/database_statements.rb +170 -194
  65. data/lib/active_record/connection_adapters/abstract/query_cache.rb +32 -19
  66. data/lib/active_record/connection_adapters/abstract/quoting.rb +79 -57
  67. data/lib/active_record/connection_adapters/abstract/savepoints.rb +21 -0
  68. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +125 -0
  69. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +273 -170
  70. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +50 -0
  71. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +731 -254
  72. data/lib/active_record/connection_adapters/abstract/transaction.rb +215 -0
  73. data/lib/active_record/connection_adapters/abstract_adapter.rb +339 -95
  74. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +946 -0
  75. data/lib/active_record/connection_adapters/column.rb +33 -221
  76. data/lib/active_record/connection_adapters/connection_specification.rb +275 -0
  77. data/lib/active_record/connection_adapters/mysql2_adapter.rb +140 -602
  78. data/lib/active_record/connection_adapters/mysql_adapter.rb +254 -756
  79. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +93 -0
  80. data/lib/active_record/connection_adapters/postgresql/column.rb +20 -0
  81. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +232 -0
  82. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +100 -0
  83. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +52 -0
  84. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +13 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +15 -0
  86. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +46 -0
  87. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +11 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
  89. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +13 -0
  90. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +19 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +21 -0
  92. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +59 -0
  93. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +13 -0
  94. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +13 -0
  95. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +11 -0
  96. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +35 -0
  97. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +23 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +43 -0
  99. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +43 -0
  100. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +79 -0
  101. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +19 -0
  102. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +11 -0
  103. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +109 -0
  104. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +21 -0
  105. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +26 -0
  106. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +28 -0
  107. data/lib/active_record/connection_adapters/postgresql/oid.rb +36 -0
  108. data/lib/active_record/connection_adapters/postgresql/quoting.rb +108 -0
  109. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +30 -0
  110. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +152 -0
  111. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +596 -0
  112. data/lib/active_record/connection_adapters/postgresql/utils.rb +77 -0
  113. data/lib/active_record/connection_adapters/postgresql_adapter.rb +445 -902
  114. data/lib/active_record/connection_adapters/schema_cache.rb +94 -0
  115. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +578 -25
  116. data/lib/active_record/connection_handling.rb +132 -0
  117. data/lib/active_record/core.rb +579 -0
  118. data/lib/active_record/counter_cache.rb +159 -102
  119. data/lib/active_record/dynamic_matchers.rb +140 -0
  120. data/lib/active_record/enum.rb +197 -0
  121. data/lib/active_record/errors.rb +102 -34
  122. data/lib/active_record/explain.rb +38 -0
  123. data/lib/active_record/explain_registry.rb +30 -0
  124. data/lib/active_record/explain_subscriber.rb +29 -0
  125. data/lib/active_record/fixture_set/file.rb +56 -0
  126. data/lib/active_record/fixtures.rb +318 -260
  127. data/lib/active_record/gem_version.rb +15 -0
  128. data/lib/active_record/inheritance.rb +247 -0
  129. data/lib/active_record/integration.rb +113 -0
  130. data/lib/active_record/legacy_yaml_adapter.rb +30 -0
  131. data/lib/active_record/locale/en.yml +8 -1
  132. data/lib/active_record/locking/optimistic.rb +80 -52
  133. data/lib/active_record/locking/pessimistic.rb +27 -5
  134. data/lib/active_record/log_subscriber.rb +25 -18
  135. data/lib/active_record/migration/command_recorder.rb +130 -38
  136. data/lib/active_record/migration/join_table.rb +15 -0
  137. data/lib/active_record/migration.rb +532 -201
  138. data/lib/active_record/model_schema.rb +342 -0
  139. data/lib/active_record/nested_attributes.rb +229 -139
  140. data/lib/active_record/no_touching.rb +52 -0
  141. data/lib/active_record/null_relation.rb +81 -0
  142. data/lib/active_record/persistence.rb +304 -99
  143. data/lib/active_record/query_cache.rb +25 -43
  144. data/lib/active_record/querying.rb +68 -0
  145. data/lib/active_record/railtie.rb +86 -45
  146. data/lib/active_record/railties/console_sandbox.rb +3 -4
  147. data/lib/active_record/railties/controller_runtime.rb +7 -4
  148. data/lib/active_record/railties/databases.rake +198 -377
  149. data/lib/active_record/railties/jdbcmysql_error.rb +2 -2
  150. data/lib/active_record/readonly_attributes.rb +23 -0
  151. data/lib/active_record/reflection.rb +516 -165
  152. data/lib/active_record/relation/batches.rb +96 -45
  153. data/lib/active_record/relation/calculations.rb +221 -144
  154. data/lib/active_record/relation/delegation.rb +140 -0
  155. data/lib/active_record/relation/finder_methods.rb +362 -243
  156. data/lib/active_record/relation/merger.rb +193 -0
  157. data/lib/active_record/relation/predicate_builder/array_handler.rb +48 -0
  158. data/lib/active_record/relation/predicate_builder/relation_handler.rb +13 -0
  159. data/lib/active_record/relation/predicate_builder.rb +135 -41
  160. data/lib/active_record/relation/query_methods.rb +982 -155
  161. data/lib/active_record/relation/spawn_methods.rb +50 -110
  162. data/lib/active_record/relation.rb +371 -180
  163. data/lib/active_record/result.rb +109 -12
  164. data/lib/active_record/runtime_registry.rb +22 -0
  165. data/lib/active_record/sanitization.rb +191 -0
  166. data/lib/active_record/schema.rb +19 -13
  167. data/lib/active_record/schema_dumper.rb +111 -61
  168. data/lib/active_record/schema_migration.rb +53 -0
  169. data/lib/active_record/scoping/default.rb +135 -0
  170. data/lib/active_record/scoping/named.rb +164 -0
  171. data/lib/active_record/scoping.rb +87 -0
  172. data/lib/active_record/serialization.rb +7 -45
  173. data/lib/active_record/serializers/xml_serializer.rb +14 -65
  174. data/lib/active_record/statement_cache.rb +111 -0
  175. data/lib/active_record/store.rb +205 -0
  176. data/lib/active_record/tasks/database_tasks.rb +299 -0
  177. data/lib/active_record/tasks/mysql_database_tasks.rb +159 -0
  178. data/lib/active_record/tasks/postgresql_database_tasks.rb +101 -0
  179. data/lib/active_record/tasks/sqlite_database_tasks.rb +55 -0
  180. data/lib/active_record/timestamp.rb +35 -14
  181. data/lib/active_record/transactions.rb +141 -74
  182. data/lib/active_record/translation.rb +22 -0
  183. data/lib/active_record/type/big_integer.rb +13 -0
  184. data/lib/active_record/type/binary.rb +50 -0
  185. data/lib/active_record/type/boolean.rb +31 -0
  186. data/lib/active_record/type/date.rb +50 -0
  187. data/lib/active_record/type/date_time.rb +54 -0
  188. data/lib/active_record/type/decimal.rb +64 -0
  189. data/lib/active_record/type/decimal_without_scale.rb +11 -0
  190. data/lib/active_record/type/decorator.rb +14 -0
  191. data/lib/active_record/type/float.rb +19 -0
  192. data/lib/active_record/type/hash_lookup_type_map.rb +23 -0
  193. data/lib/active_record/type/integer.rb +59 -0
  194. data/lib/active_record/type/mutable.rb +16 -0
  195. data/lib/active_record/type/numeric.rb +36 -0
  196. data/lib/active_record/type/serialized.rb +62 -0
  197. data/lib/active_record/type/string.rb +40 -0
  198. data/lib/active_record/type/text.rb +11 -0
  199. data/lib/active_record/type/time.rb +26 -0
  200. data/lib/active_record/type/time_value.rb +38 -0
  201. data/lib/active_record/type/type_map.rb +64 -0
  202. data/lib/active_record/type/unsigned_integer.rb +15 -0
  203. data/lib/active_record/type/value.rb +110 -0
  204. data/lib/active_record/type.rb +23 -0
  205. data/lib/active_record/validations/associated.rb +27 -18
  206. data/lib/active_record/validations/presence.rb +67 -0
  207. data/lib/active_record/validations/uniqueness.rb +125 -66
  208. data/lib/active_record/validations.rb +37 -30
  209. data/lib/active_record/version.rb +5 -7
  210. data/lib/active_record.rb +80 -25
  211. data/lib/rails/generators/active_record/migration/migration_generator.rb +54 -9
  212. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +19 -0
  213. data/lib/rails/generators/active_record/migration/templates/migration.rb +25 -11
  214. data/lib/rails/generators/active_record/migration.rb +11 -8
  215. data/lib/rails/generators/active_record/model/model_generator.rb +17 -4
  216. data/lib/rails/generators/active_record/model/templates/model.rb +5 -2
  217. data/lib/rails/generators/active_record/model/templates/module.rb +1 -1
  218. data/lib/rails/generators/active_record.rb +3 -11
  219. metadata +132 -53
  220. data/examples/associations.png +0 -0
  221. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +0 -62
  222. data/lib/active_record/associations/join_helper.rb +0 -55
  223. data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +0 -60
  224. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +0 -135
  225. data/lib/active_record/connection_adapters/sqlite_adapter.rb +0 -556
  226. data/lib/active_record/dynamic_finder_match.rb +0 -56
  227. data/lib/active_record/dynamic_scope_match.rb +0 -23
  228. data/lib/active_record/identity_map.rb +0 -163
  229. data/lib/active_record/named_scope.rb +0 -200
  230. data/lib/active_record/observer.rb +0 -121
  231. data/lib/active_record/session_store.rb +0 -358
  232. data/lib/active_record/test_case.rb +0 -69
  233. data/lib/rails/generators/active_record/model/templates/migration.rb +0 -17
  234. data/lib/rails/generators/active_record/observer/observer_generator.rb +0 -15
  235. data/lib/rails/generators/active_record/observer/templates/observer.rb +0 -4
  236. data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +0 -25
  237. data/lib/rails/generators/active_record/session_migration/templates/migration.rb +0 -16
@@ -2,23 +2,37 @@ class <%= migration_class_name %> < ActiveRecord::Migration
2
2
  <%- if migration_action == 'add' -%>
3
3
  def change
4
4
  <% attributes.each do |attribute| -%>
5
- add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %>
5
+ <%- if attribute.reference? -%>
6
+ add_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
7
+ <%- else -%>
8
+ add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
9
+ <%- if attribute.has_index? -%>
10
+ add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
11
+ <%- end -%>
12
+ <%- end -%>
6
13
  <%- end -%>
7
14
  end
15
+ <%- elsif migration_action == 'join' -%>
16
+ def change
17
+ create_join_table :<%= join_tables.first %>, :<%= join_tables.second %> do |t|
18
+ <%- attributes.each do |attribute| -%>
19
+ <%= '# ' unless attribute.has_index? -%>t.index <%= attribute.index_name %><%= attribute.inject_index_options %>
20
+ <%- end -%>
21
+ end
22
+ end
8
23
  <%- else -%>
9
- def up
24
+ def change
10
25
  <% attributes.each do |attribute| -%>
11
- <%- if migration_action -%>
12
- <%= migration_action %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'add' %>, :<%= attribute.type %><% end %>
26
+ <%- if migration_action -%>
27
+ <%- if attribute.reference? -%>
28
+ remove_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
29
+ <%- else -%>
30
+ <%- if attribute.has_index? -%>
31
+ remove_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
32
+ <%- end -%>
33
+ remove_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
13
34
  <%- end -%>
14
35
  <%- end -%>
15
- end
16
-
17
- def down
18
- <% attributes.reverse.each do |attribute| -%>
19
- <%- if migration_action -%>
20
- <%= migration_action == 'add' ? 'remove' : 'add' %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'remove' %>, :<%= attribute.type %><% end %>
21
- <%- end -%>
22
36
  <%- end -%>
23
37
  end
24
38
  <%- end -%>
@@ -1,13 +1,16 @@
1
+ require 'rails/generators/migration'
2
+
1
3
  module ActiveRecord
2
- module Generators
4
+ module Generators # :nodoc:
3
5
  module Migration
4
- # Implement the required interface for Rails::Generators::Migration.
5
- def next_migration_number(dirname) #:nodoc:
6
- next_migration_number = current_migration_number(dirname) + 1
7
- if ActiveRecord::Base.timestamped_migrations
8
- [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
9
- else
10
- "%.3d" % next_migration_number
6
+ extend ActiveSupport::Concern
7
+ include Rails::Generators::Migration
8
+
9
+ module ClassMethods
10
+ # Implement the required interface for Rails::Generators::Migration.
11
+ def next_migration_number(dirname)
12
+ next_migration_number = current_migration_number(dirname) + 1
13
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
11
14
  end
12
15
  end
13
16
  end
@@ -1,9 +1,9 @@
1
1
  require 'rails/generators/active_record'
2
2
 
3
3
  module ActiveRecord
4
- module Generators
5
- class ModelGenerator < Base
6
- argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
4
+ module Generators # :nodoc:
5
+ class ModelGenerator < Base # :nodoc:
6
+ argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"
7
7
 
8
8
  check_class_collision
9
9
 
@@ -12,9 +12,13 @@ module ActiveRecord
12
12
  class_option :parent, :type => :string, :desc => "The parent class for the generated model"
13
13
  class_option :indexes, :type => :boolean, :default => true, :desc => "Add indexes for references and belongs_to columns"
14
14
 
15
+
16
+ # creates the migration file for the model.
17
+
15
18
  def create_migration_file
16
19
  return unless options[:migration] && options[:parent].nil?
17
- migration_template "migration.rb", "db/migrate/create_#{table_name}.rb"
20
+ attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false
21
+ migration_template "../../migration/templates/create_table_migration.rb", "db/migrate/create_#{table_name}.rb"
18
22
  end
19
23
 
20
24
  def create_model_file
@@ -26,10 +30,19 @@ module ActiveRecord
26
30
  template 'module.rb', File.join('app/models', "#{class_path.join('/')}.rb") if behavior == :invoke
27
31
  end
28
32
 
33
+ def attributes_with_index
34
+ attributes.select { |a| !a.reference? && a.has_index? }
35
+ end
36
+
37
+ def accessible_attributes
38
+ attributes.reject(&:reference?)
39
+ end
40
+
29
41
  hook_for :test_framework
30
42
 
31
43
  protected
32
44
 
45
+ # Used by the migration template to determine the parent name of the model
33
46
  def parent_class_name
34
47
  options[:parent] || "ActiveRecord::Base"
35
48
  end
@@ -1,7 +1,10 @@
1
1
  <% module_namespacing do -%>
2
2
  class <%= class_name %> < <%= parent_class_name.classify %>
3
- <% attributes.select {|attr| attr.reference? }.each do |attribute| -%>
4
- belongs_to :<%= attribute.name %>
3
+ <% attributes.select(&:reference?).each do |attribute| -%>
4
+ belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', required: true' if attribute.required? %>
5
+ <% end -%>
6
+ <% if attributes.any?(&:password_digest?) -%>
7
+ has_secure_password
5
8
  <% end -%>
6
9
  end
7
10
  <% end -%>
@@ -1,7 +1,7 @@
1
1
  <% module_namespacing do -%>
2
2
  module <%= class_path.map(&:camelize).join('::') %>
3
3
  def self.table_name_prefix
4
- '<%= class_path.join('_') %>_'
4
+ '<%= namespaced? ? namespaced_class_path.join('_') : class_path.join('_') %>_'
5
5
  end
6
6
  end
7
7
  <% end -%>
@@ -1,25 +1,17 @@
1
1
  require 'rails/generators/named_base'
2
- require 'rails/generators/migration'
3
2
  require 'rails/generators/active_model'
4
3
  require 'rails/generators/active_record/migration'
5
4
  require 'active_record'
6
5
 
7
6
  module ActiveRecord
8
- module Generators
9
- class Base < Rails::Generators::NamedBase #:nodoc:
10
- include Rails::Generators::Migration
11
- extend ActiveRecord::Generators::Migration
7
+ module Generators # :nodoc:
8
+ class Base < Rails::Generators::NamedBase # :nodoc:
9
+ include ActiveRecord::Generators::Migration
12
10
 
13
11
  # Set the current directory as base for the inherited generators.
14
12
  def self.base_root
15
13
  File.dirname(__FILE__)
16
14
  end
17
-
18
- # Implement the required interface for Rails::Generators::Migration.
19
- def self.next_migration_number(dirname) #:nodoc:
20
- next_migration_number = current_migration_number(dirname) + 1
21
- ActiveRecord::Migration.next_migration_number(next_migration_number)
22
- end
23
15
  end
24
16
  end
25
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.10
4
+ version: 4.2.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-01-08 00:00:00.000000000 Z
11
+ date: 2018-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,56 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.10
19
+ version: 4.2.11
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.10
26
+ version: 4.2.11
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 3.1.10
33
+ version: 4.2.11
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 3.1.10
40
+ version: 4.2.11
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: arel
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.2.3
47
+ version: '6.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.2.3
55
- - !ruby/object:Gem::Dependency
56
- name: tzinfo
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.3.29
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.3.29
54
+ version: '6.0'
69
55
  description: Databases on Rails. Build a persistent domain model by mapping database
70
56
  tables to Ruby classes. Strong conventions for associations, validations, aggregations,
71
57
  migrations, and testing come baked-in.
@@ -78,10 +64,12 @@ files:
78
64
  - CHANGELOG.md
79
65
  - MIT-LICENSE
80
66
  - README.rdoc
81
- - examples/associations.png
82
67
  - examples/performance.rb
83
68
  - examples/simple.rb
69
+ - lib/active_record.rb
84
70
  - lib/active_record/aggregations.rb
71
+ - lib/active_record/association_relation.rb
72
+ - lib/active_record/associations.rb
85
73
  - lib/active_record/associations/alias_tracker.rb
86
74
  - lib/active_record/associations/association.rb
87
75
  - lib/active_record/associations/association_scope.rb
@@ -96,116 +84,207 @@ files:
96
84
  - lib/active_record/associations/builder/singular_association.rb
97
85
  - lib/active_record/associations/collection_association.rb
98
86
  - lib/active_record/associations/collection_proxy.rb
99
- - lib/active_record/associations/has_and_belongs_to_many_association.rb
87
+ - lib/active_record/associations/foreign_association.rb
100
88
  - lib/active_record/associations/has_many_association.rb
101
89
  - lib/active_record/associations/has_many_through_association.rb
102
90
  - lib/active_record/associations/has_one_association.rb
103
91
  - lib/active_record/associations/has_one_through_association.rb
92
+ - lib/active_record/associations/join_dependency.rb
104
93
  - lib/active_record/associations/join_dependency/join_association.rb
105
94
  - lib/active_record/associations/join_dependency/join_base.rb
106
95
  - lib/active_record/associations/join_dependency/join_part.rb
107
- - lib/active_record/associations/join_dependency.rb
108
- - lib/active_record/associations/join_helper.rb
96
+ - lib/active_record/associations/preloader.rb
109
97
  - lib/active_record/associations/preloader/association.rb
110
98
  - lib/active_record/associations/preloader/belongs_to.rb
111
99
  - lib/active_record/associations/preloader/collection_association.rb
112
- - lib/active_record/associations/preloader/has_and_belongs_to_many.rb
113
100
  - lib/active_record/associations/preloader/has_many.rb
114
101
  - lib/active_record/associations/preloader/has_many_through.rb
115
102
  - lib/active_record/associations/preloader/has_one.rb
116
103
  - lib/active_record/associations/preloader/has_one_through.rb
117
104
  - lib/active_record/associations/preloader/singular_association.rb
118
105
  - lib/active_record/associations/preloader/through_association.rb
119
- - lib/active_record/associations/preloader.rb
120
106
  - lib/active_record/associations/singular_association.rb
121
107
  - lib/active_record/associations/through_association.rb
122
- - lib/active_record/associations.rb
108
+ - lib/active_record/attribute.rb
109
+ - lib/active_record/attribute_assignment.rb
110
+ - lib/active_record/attribute_decorators.rb
111
+ - lib/active_record/attribute_methods.rb
123
112
  - lib/active_record/attribute_methods/before_type_cast.rb
124
113
  - lib/active_record/attribute_methods/dirty.rb
125
114
  - lib/active_record/attribute_methods/primary_key.rb
126
115
  - lib/active_record/attribute_methods/query.rb
127
116
  - lib/active_record/attribute_methods/read.rb
117
+ - lib/active_record/attribute_methods/serialization.rb
128
118
  - lib/active_record/attribute_methods/time_zone_conversion.rb
129
119
  - lib/active_record/attribute_methods/write.rb
130
- - lib/active_record/attribute_methods.rb
120
+ - lib/active_record/attribute_set.rb
121
+ - lib/active_record/attribute_set/builder.rb
122
+ - lib/active_record/attributes.rb
131
123
  - lib/active_record/autosave_association.rb
132
124
  - lib/active_record/base.rb
133
125
  - lib/active_record/callbacks.rb
126
+ - lib/active_record/coders/json.rb
134
127
  - lib/active_record/coders/yaml_column.rb
135
128
  - lib/active_record/connection_adapters/abstract/connection_pool.rb
136
- - lib/active_record/connection_adapters/abstract/connection_specification.rb
137
129
  - lib/active_record/connection_adapters/abstract/database_limits.rb
138
130
  - lib/active_record/connection_adapters/abstract/database_statements.rb
139
131
  - lib/active_record/connection_adapters/abstract/query_cache.rb
140
132
  - lib/active_record/connection_adapters/abstract/quoting.rb
133
+ - lib/active_record/connection_adapters/abstract/savepoints.rb
134
+ - lib/active_record/connection_adapters/abstract/schema_creation.rb
141
135
  - lib/active_record/connection_adapters/abstract/schema_definitions.rb
136
+ - lib/active_record/connection_adapters/abstract/schema_dumper.rb
142
137
  - lib/active_record/connection_adapters/abstract/schema_statements.rb
138
+ - lib/active_record/connection_adapters/abstract/transaction.rb
143
139
  - lib/active_record/connection_adapters/abstract_adapter.rb
140
+ - lib/active_record/connection_adapters/abstract_mysql_adapter.rb
144
141
  - lib/active_record/connection_adapters/column.rb
142
+ - lib/active_record/connection_adapters/connection_specification.rb
145
143
  - lib/active_record/connection_adapters/mysql2_adapter.rb
146
144
  - lib/active_record/connection_adapters/mysql_adapter.rb
145
+ - lib/active_record/connection_adapters/postgresql/array_parser.rb
146
+ - lib/active_record/connection_adapters/postgresql/column.rb
147
+ - lib/active_record/connection_adapters/postgresql/database_statements.rb
148
+ - lib/active_record/connection_adapters/postgresql/oid.rb
149
+ - lib/active_record/connection_adapters/postgresql/oid/array.rb
150
+ - lib/active_record/connection_adapters/postgresql/oid/bit.rb
151
+ - lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb
152
+ - lib/active_record/connection_adapters/postgresql/oid/bytea.rb
153
+ - lib/active_record/connection_adapters/postgresql/oid/cidr.rb
154
+ - lib/active_record/connection_adapters/postgresql/oid/date.rb
155
+ - lib/active_record/connection_adapters/postgresql/oid/date_time.rb
156
+ - lib/active_record/connection_adapters/postgresql/oid/decimal.rb
157
+ - lib/active_record/connection_adapters/postgresql/oid/enum.rb
158
+ - lib/active_record/connection_adapters/postgresql/oid/float.rb
159
+ - lib/active_record/connection_adapters/postgresql/oid/hstore.rb
160
+ - lib/active_record/connection_adapters/postgresql/oid/inet.rb
161
+ - lib/active_record/connection_adapters/postgresql/oid/infinity.rb
162
+ - lib/active_record/connection_adapters/postgresql/oid/integer.rb
163
+ - lib/active_record/connection_adapters/postgresql/oid/json.rb
164
+ - lib/active_record/connection_adapters/postgresql/oid/jsonb.rb
165
+ - lib/active_record/connection_adapters/postgresql/oid/money.rb
166
+ - lib/active_record/connection_adapters/postgresql/oid/point.rb
167
+ - lib/active_record/connection_adapters/postgresql/oid/range.rb
168
+ - lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb
169
+ - lib/active_record/connection_adapters/postgresql/oid/time.rb
170
+ - lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb
171
+ - lib/active_record/connection_adapters/postgresql/oid/uuid.rb
172
+ - lib/active_record/connection_adapters/postgresql/oid/vector.rb
173
+ - lib/active_record/connection_adapters/postgresql/oid/xml.rb
174
+ - lib/active_record/connection_adapters/postgresql/quoting.rb
175
+ - lib/active_record/connection_adapters/postgresql/referential_integrity.rb
176
+ - lib/active_record/connection_adapters/postgresql/schema_definitions.rb
177
+ - lib/active_record/connection_adapters/postgresql/schema_statements.rb
178
+ - lib/active_record/connection_adapters/postgresql/utils.rb
147
179
  - lib/active_record/connection_adapters/postgresql_adapter.rb
180
+ - lib/active_record/connection_adapters/schema_cache.rb
148
181
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
149
- - lib/active_record/connection_adapters/sqlite_adapter.rb
150
182
  - lib/active_record/connection_adapters/statement_pool.rb
183
+ - lib/active_record/connection_handling.rb
184
+ - lib/active_record/core.rb
151
185
  - lib/active_record/counter_cache.rb
152
- - lib/active_record/dynamic_finder_match.rb
153
- - lib/active_record/dynamic_scope_match.rb
186
+ - lib/active_record/dynamic_matchers.rb
187
+ - lib/active_record/enum.rb
154
188
  - lib/active_record/errors.rb
189
+ - lib/active_record/explain.rb
190
+ - lib/active_record/explain_registry.rb
191
+ - lib/active_record/explain_subscriber.rb
192
+ - lib/active_record/fixture_set/file.rb
155
193
  - lib/active_record/fixtures.rb
156
- - lib/active_record/identity_map.rb
194
+ - lib/active_record/gem_version.rb
195
+ - lib/active_record/inheritance.rb
196
+ - lib/active_record/integration.rb
197
+ - lib/active_record/legacy_yaml_adapter.rb
157
198
  - lib/active_record/locale/en.yml
158
199
  - lib/active_record/locking/optimistic.rb
159
200
  - lib/active_record/locking/pessimistic.rb
160
201
  - lib/active_record/log_subscriber.rb
161
- - lib/active_record/migration/command_recorder.rb
162
202
  - lib/active_record/migration.rb
163
- - lib/active_record/named_scope.rb
203
+ - lib/active_record/migration/command_recorder.rb
204
+ - lib/active_record/migration/join_table.rb
205
+ - lib/active_record/model_schema.rb
164
206
  - lib/active_record/nested_attributes.rb
165
- - lib/active_record/observer.rb
207
+ - lib/active_record/no_touching.rb
208
+ - lib/active_record/null_relation.rb
166
209
  - lib/active_record/persistence.rb
167
210
  - lib/active_record/query_cache.rb
211
+ - lib/active_record/querying.rb
168
212
  - lib/active_record/railtie.rb
169
213
  - lib/active_record/railties/console_sandbox.rb
170
214
  - lib/active_record/railties/controller_runtime.rb
171
215
  - lib/active_record/railties/databases.rake
172
216
  - lib/active_record/railties/jdbcmysql_error.rb
217
+ - lib/active_record/readonly_attributes.rb
173
218
  - lib/active_record/reflection.rb
219
+ - lib/active_record/relation.rb
174
220
  - lib/active_record/relation/batches.rb
175
221
  - lib/active_record/relation/calculations.rb
222
+ - lib/active_record/relation/delegation.rb
176
223
  - lib/active_record/relation/finder_methods.rb
224
+ - lib/active_record/relation/merger.rb
177
225
  - lib/active_record/relation/predicate_builder.rb
226
+ - lib/active_record/relation/predicate_builder/array_handler.rb
227
+ - lib/active_record/relation/predicate_builder/relation_handler.rb
178
228
  - lib/active_record/relation/query_methods.rb
179
229
  - lib/active_record/relation/spawn_methods.rb
180
- - lib/active_record/relation.rb
181
230
  - lib/active_record/result.rb
231
+ - lib/active_record/runtime_registry.rb
232
+ - lib/active_record/sanitization.rb
182
233
  - lib/active_record/schema.rb
183
234
  - lib/active_record/schema_dumper.rb
235
+ - lib/active_record/schema_migration.rb
236
+ - lib/active_record/scoping.rb
237
+ - lib/active_record/scoping/default.rb
238
+ - lib/active_record/scoping/named.rb
184
239
  - lib/active_record/serialization.rb
185
240
  - lib/active_record/serializers/xml_serializer.rb
186
- - lib/active_record/session_store.rb
187
- - lib/active_record/test_case.rb
241
+ - lib/active_record/statement_cache.rb
242
+ - lib/active_record/store.rb
243
+ - lib/active_record/tasks/database_tasks.rb
244
+ - lib/active_record/tasks/mysql_database_tasks.rb
245
+ - lib/active_record/tasks/postgresql_database_tasks.rb
246
+ - lib/active_record/tasks/sqlite_database_tasks.rb
188
247
  - lib/active_record/timestamp.rb
189
248
  - lib/active_record/transactions.rb
249
+ - lib/active_record/translation.rb
250
+ - lib/active_record/type.rb
251
+ - lib/active_record/type/big_integer.rb
252
+ - lib/active_record/type/binary.rb
253
+ - lib/active_record/type/boolean.rb
254
+ - lib/active_record/type/date.rb
255
+ - lib/active_record/type/date_time.rb
256
+ - lib/active_record/type/decimal.rb
257
+ - lib/active_record/type/decimal_without_scale.rb
258
+ - lib/active_record/type/decorator.rb
259
+ - lib/active_record/type/float.rb
260
+ - lib/active_record/type/hash_lookup_type_map.rb
261
+ - lib/active_record/type/integer.rb
262
+ - lib/active_record/type/mutable.rb
263
+ - lib/active_record/type/numeric.rb
264
+ - lib/active_record/type/serialized.rb
265
+ - lib/active_record/type/string.rb
266
+ - lib/active_record/type/text.rb
267
+ - lib/active_record/type/time.rb
268
+ - lib/active_record/type/time_value.rb
269
+ - lib/active_record/type/type_map.rb
270
+ - lib/active_record/type/unsigned_integer.rb
271
+ - lib/active_record/type/value.rb
272
+ - lib/active_record/validations.rb
190
273
  - lib/active_record/validations/associated.rb
274
+ - lib/active_record/validations/presence.rb
191
275
  - lib/active_record/validations/uniqueness.rb
192
- - lib/active_record/validations.rb
193
276
  - lib/active_record/version.rb
194
- - lib/active_record.rb
277
+ - lib/rails/generators/active_record.rb
278
+ - lib/rails/generators/active_record/migration.rb
195
279
  - lib/rails/generators/active_record/migration/migration_generator.rb
280
+ - lib/rails/generators/active_record/migration/templates/create_table_migration.rb
196
281
  - lib/rails/generators/active_record/migration/templates/migration.rb
197
- - lib/rails/generators/active_record/migration.rb
198
282
  - lib/rails/generators/active_record/model/model_generator.rb
199
- - lib/rails/generators/active_record/model/templates/migration.rb
200
283
  - lib/rails/generators/active_record/model/templates/model.rb
201
284
  - lib/rails/generators/active_record/model/templates/module.rb
202
- - lib/rails/generators/active_record/observer/observer_generator.rb
203
- - lib/rails/generators/active_record/observer/templates/observer.rb
204
- - lib/rails/generators/active_record/session_migration/session_migration_generator.rb
205
- - lib/rails/generators/active_record/session_migration/templates/migration.rb
206
- - lib/rails/generators/active_record.rb
207
285
  homepage: http://www.rubyonrails.org
208
- licenses: []
286
+ licenses:
287
+ - MIT
209
288
  metadata: {}
210
289
  post_install_message:
211
290
  rdoc_options:
@@ -217,7 +296,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
296
  requirements:
218
297
  - - ">="
219
298
  - !ruby/object:Gem::Version
220
- version: 1.8.7
299
+ version: 1.9.3
221
300
  required_rubygems_version: !ruby/object:Gem::Requirement
222
301
  requirements:
223
302
  - - ">="
@@ -225,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
304
  version: '0'
226
305
  requirements: []
227
306
  rubyforge_project:
228
- rubygems_version: 2.0.0.preview3
307
+ rubygems_version: 2.7.6
229
308
  signing_key:
230
309
  specification_version: 4
231
310
  summary: Object-relational mapper framework (part of Rails).
Binary file
@@ -1,62 +0,0 @@
1
- module ActiveRecord
2
- # = Active Record Has And Belongs To Many Association
3
- module Associations
4
- class HasAndBelongsToManyAssociation < CollectionAssociation #:nodoc:
5
- attr_reader :join_table
6
-
7
- def initialize(owner, reflection)
8
- @join_table = Arel::Table.new(reflection.options[:join_table])
9
- super
10
- end
11
-
12
- def insert_record(record, validate = true, raise = false)
13
- if record.new_record?
14
- if raise
15
- record.save!(:validate => validate)
16
- else
17
- return unless record.save(:validate => validate)
18
- end
19
- end
20
-
21
- if options[:insert_sql]
22
- owner.connection.insert(interpolate(options[:insert_sql], record))
23
- else
24
- stmt = join_table.compile_insert(
25
- join_table[reflection.foreign_key] => owner.id,
26
- join_table[reflection.association_foreign_key] => record.id
27
- )
28
-
29
- owner.connection.insert stmt
30
- end
31
-
32
- record
33
- end
34
-
35
- # ActiveRecord::Relation#delete_all needs to support joins before we can use a
36
- # SQL-only implementation.
37
- alias delete_all_on_destroy delete_all
38
-
39
- private
40
-
41
- def count_records
42
- load_target.size
43
- end
44
-
45
- def delete_records(records, method)
46
- if sql = options[:delete_sql]
47
- records.each { |record| owner.connection.delete(interpolate(sql, record)) }
48
- else
49
- relation = join_table
50
- stmt = relation.where(relation[reflection.foreign_key].eq(owner.id).
51
- and(relation[reflection.association_foreign_key].in(records.map { |x| x.id }.compact))
52
- ).compile_delete
53
- owner.connection.delete stmt
54
- end
55
- end
56
-
57
- def invertible_for?(record)
58
- false
59
- end
60
- end
61
- end
62
- end
@@ -1,55 +0,0 @@
1
- module ActiveRecord
2
- module Associations
3
- # Helper class module which gets mixed into JoinDependency::JoinAssociation and AssociationScope
4
- module JoinHelper #:nodoc:
5
-
6
- def join_type
7
- Arel::InnerJoin
8
- end
9
-
10
- private
11
-
12
- def construct_tables
13
- tables = []
14
- chain.each do |reflection|
15
- tables << alias_tracker.aliased_table_for(
16
- table_name_for(reflection),
17
- table_alias_for(reflection, reflection != self.reflection)
18
- )
19
-
20
- if reflection.source_macro == :has_and_belongs_to_many
21
- tables << alias_tracker.aliased_table_for(
22
- (reflection.source_reflection || reflection).options[:join_table],
23
- table_alias_for(reflection, true)
24
- )
25
- end
26
- end
27
- tables
28
- end
29
-
30
- def table_name_for(reflection)
31
- reflection.table_name
32
- end
33
-
34
- def table_alias_for(reflection, join = false)
35
- name = "#{reflection.plural_name}_#{alias_suffix}"
36
- name << "_join" if join
37
- name
38
- end
39
-
40
- def join(table, constraint)
41
- table.create_join(table, table.create_on(constraint), join_type)
42
- end
43
-
44
- def sanitize(conditions, table)
45
- conditions = conditions.map do |condition|
46
- condition = active_record.send(:sanitize_sql, interpolate(condition), table.table_alias || table.name)
47
- condition = Arel.sql(condition) unless condition.is_a?(Arel::Node)
48
- condition
49
- end
50
-
51
- conditions.length == 1 ? conditions.first : Arel::Nodes::And.new(conditions)
52
- end
53
- end
54
- end
55
- end