activerecord 4.2.0 → 5.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 (249) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1537 -789
  3. data/MIT-LICENSE +2 -2
  4. data/README.rdoc +7 -8
  5. data/examples/performance.rb +2 -3
  6. data/examples/simple.rb +0 -1
  7. data/lib/active_record/aggregations.rb +37 -23
  8. data/lib/active_record/association_relation.rb +16 -3
  9. data/lib/active_record/associations/alias_tracker.rb +19 -16
  10. data/lib/active_record/associations/association.rb +23 -9
  11. data/lib/active_record/associations/association_scope.rb +74 -102
  12. data/lib/active_record/associations/belongs_to_association.rb +26 -29
  13. data/lib/active_record/associations/builder/association.rb +28 -34
  14. data/lib/active_record/associations/builder/belongs_to.rb +43 -18
  15. data/lib/active_record/associations/builder/collection_association.rb +12 -20
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +22 -15
  17. data/lib/active_record/associations/builder/has_many.rb +4 -4
  18. data/lib/active_record/associations/builder/has_one.rb +11 -6
  19. data/lib/active_record/associations/builder/singular_association.rb +3 -10
  20. data/lib/active_record/associations/collection_association.rb +61 -33
  21. data/lib/active_record/associations/collection_proxy.rb +81 -35
  22. data/lib/active_record/associations/foreign_association.rb +11 -0
  23. data/lib/active_record/associations/has_many_association.rb +21 -57
  24. data/lib/active_record/associations/has_many_through_association.rb +15 -45
  25. data/lib/active_record/associations/has_one_association.rb +13 -5
  26. data/lib/active_record/associations/join_dependency/join_association.rb +20 -8
  27. data/lib/active_record/associations/join_dependency.rb +37 -21
  28. data/lib/active_record/associations/preloader/association.rb +51 -53
  29. data/lib/active_record/associations/preloader/collection_association.rb +0 -6
  30. data/lib/active_record/associations/preloader/has_many_through.rb +1 -1
  31. data/lib/active_record/associations/preloader/has_one.rb +0 -8
  32. data/lib/active_record/associations/preloader/through_association.rb +27 -14
  33. data/lib/active_record/associations/preloader.rb +18 -8
  34. data/lib/active_record/associations/singular_association.rb +8 -8
  35. data/lib/active_record/associations/through_association.rb +22 -9
  36. data/lib/active_record/associations.rb +321 -212
  37. data/lib/active_record/attribute/user_provided_default.rb +28 -0
  38. data/lib/active_record/attribute.rb +79 -15
  39. data/lib/active_record/attribute_assignment.rb +20 -141
  40. data/lib/active_record/attribute_decorators.rb +6 -5
  41. data/lib/active_record/attribute_methods/before_type_cast.rb +6 -1
  42. data/lib/active_record/attribute_methods/dirty.rb +51 -81
  43. data/lib/active_record/attribute_methods/primary_key.rb +2 -2
  44. data/lib/active_record/attribute_methods/query.rb +2 -2
  45. data/lib/active_record/attribute_methods/read.rb +31 -59
  46. data/lib/active_record/attribute_methods/serialization.rb +13 -16
  47. data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -14
  48. data/lib/active_record/attribute_methods/write.rb +14 -38
  49. data/lib/active_record/attribute_methods.rb +70 -45
  50. data/lib/active_record/attribute_mutation_tracker.rb +70 -0
  51. data/lib/active_record/attribute_set/builder.rb +37 -15
  52. data/lib/active_record/attribute_set.rb +34 -3
  53. data/lib/active_record/attributes.rb +199 -73
  54. data/lib/active_record/autosave_association.rb +73 -25
  55. data/lib/active_record/base.rb +35 -27
  56. data/lib/active_record/callbacks.rb +39 -43
  57. data/lib/active_record/coders/json.rb +1 -1
  58. data/lib/active_record/coders/yaml_column.rb +20 -8
  59. data/lib/active_record/collection_cache_key.rb +40 -0
  60. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +457 -181
  61. data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
  62. data/lib/active_record/connection_adapters/abstract/database_statements.rb +83 -59
  63. data/lib/active_record/connection_adapters/abstract/query_cache.rb +3 -3
  64. data/lib/active_record/connection_adapters/abstract/quoting.rb +74 -9
  65. data/lib/active_record/connection_adapters/abstract/savepoints.rb +4 -4
  66. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +61 -39
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +246 -185
  68. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +72 -17
  69. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +438 -136
  70. data/lib/active_record/connection_adapters/abstract/transaction.rb +53 -40
  71. data/lib/active_record/connection_adapters/abstract_adapter.rb +166 -66
  72. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +429 -335
  73. data/lib/active_record/connection_adapters/column.rb +28 -43
  74. data/lib/active_record/connection_adapters/connection_specification.rb +15 -27
  75. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +22 -0
  76. data/lib/active_record/connection_adapters/mysql/column.rb +50 -0
  77. data/lib/active_record/connection_adapters/mysql/database_statements.rb +125 -0
  78. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +70 -0
  79. data/lib/active_record/connection_adapters/mysql/quoting.rb +51 -0
  80. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +67 -0
  81. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +93 -0
  82. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -0
  83. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +32 -0
  84. data/lib/active_record/connection_adapters/mysql2_adapter.rb +26 -177
  85. data/lib/active_record/connection_adapters/postgresql/column.rb +5 -10
  86. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +11 -73
  87. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +42 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +27 -56
  89. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -2
  90. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +2 -1
  91. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -1
  92. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +7 -13
  93. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +3 -1
  94. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
  95. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
  96. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
  97. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -4
  98. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
  99. data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
  100. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +31 -17
  101. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +17 -5
  102. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
  103. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
  104. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
  105. data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
  106. data/lib/active_record/connection_adapters/postgresql/quoting.rb +26 -18
  107. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
  108. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
  109. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +47 -0
  110. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +248 -154
  111. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
  112. data/lib/active_record/connection_adapters/postgresql_adapter.rb +258 -170
  113. data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
  114. data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
  115. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +19 -0
  116. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +48 -0
  117. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
  118. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +150 -209
  119. data/lib/active_record/connection_adapters/statement_pool.rb +31 -12
  120. data/lib/active_record/connection_handling.rb +38 -15
  121. data/lib/active_record/core.rb +109 -114
  122. data/lib/active_record/counter_cache.rb +14 -25
  123. data/lib/active_record/dynamic_matchers.rb +1 -20
  124. data/lib/active_record/enum.rb +115 -79
  125. data/lib/active_record/errors.rb +88 -48
  126. data/lib/active_record/explain_registry.rb +1 -1
  127. data/lib/active_record/explain_subscriber.rb +2 -2
  128. data/lib/active_record/fixture_set/file.rb +26 -5
  129. data/lib/active_record/fixtures.rb +84 -46
  130. data/lib/active_record/gem_version.rb +2 -2
  131. data/lib/active_record/inheritance.rb +32 -40
  132. data/lib/active_record/integration.rb +4 -4
  133. data/lib/active_record/internal_metadata.rb +56 -0
  134. data/lib/active_record/legacy_yaml_adapter.rb +46 -0
  135. data/lib/active_record/locale/en.yml +3 -2
  136. data/lib/active_record/locking/optimistic.rb +27 -25
  137. data/lib/active_record/locking/pessimistic.rb +1 -1
  138. data/lib/active_record/log_subscriber.rb +43 -21
  139. data/lib/active_record/migration/command_recorder.rb +59 -18
  140. data/lib/active_record/migration/compatibility.rb +126 -0
  141. data/lib/active_record/migration.rb +372 -114
  142. data/lib/active_record/model_schema.rb +128 -38
  143. data/lib/active_record/nested_attributes.rb +71 -32
  144. data/lib/active_record/no_touching.rb +1 -1
  145. data/lib/active_record/null_relation.rb +16 -8
  146. data/lib/active_record/persistence.rb +124 -80
  147. data/lib/active_record/query_cache.rb +15 -18
  148. data/lib/active_record/querying.rb +10 -9
  149. data/lib/active_record/railtie.rb +28 -19
  150. data/lib/active_record/railties/controller_runtime.rb +1 -1
  151. data/lib/active_record/railties/databases.rake +67 -51
  152. data/lib/active_record/readonly_attributes.rb +1 -1
  153. data/lib/active_record/reflection.rb +318 -139
  154. data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
  155. data/lib/active_record/relation/batches.rb +139 -34
  156. data/lib/active_record/relation/calculations.rb +80 -102
  157. data/lib/active_record/relation/delegation.rb +7 -20
  158. data/lib/active_record/relation/finder_methods.rb +167 -97
  159. data/lib/active_record/relation/from_clause.rb +32 -0
  160. data/lib/active_record/relation/merger.rb +38 -41
  161. data/lib/active_record/relation/predicate_builder/array_handler.rb +12 -16
  162. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +88 -0
  163. data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
  164. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
  165. data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
  166. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +57 -0
  167. data/lib/active_record/relation/predicate_builder/range_handler.rb +33 -0
  168. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
  169. data/lib/active_record/relation/predicate_builder.rb +124 -82
  170. data/lib/active_record/relation/query_attribute.rb +19 -0
  171. data/lib/active_record/relation/query_methods.rb +323 -257
  172. data/lib/active_record/relation/record_fetch_warning.rb +49 -0
  173. data/lib/active_record/relation/spawn_methods.rb +11 -10
  174. data/lib/active_record/relation/where_clause.rb +174 -0
  175. data/lib/active_record/relation/where_clause_factory.rb +38 -0
  176. data/lib/active_record/relation.rb +176 -115
  177. data/lib/active_record/result.rb +4 -3
  178. data/lib/active_record/runtime_registry.rb +1 -1
  179. data/lib/active_record/sanitization.rb +95 -66
  180. data/lib/active_record/schema.rb +26 -22
  181. data/lib/active_record/schema_dumper.rb +62 -38
  182. data/lib/active_record/schema_migration.rb +11 -17
  183. data/lib/active_record/scoping/default.rb +24 -9
  184. data/lib/active_record/scoping/named.rb +49 -28
  185. data/lib/active_record/scoping.rb +32 -15
  186. data/lib/active_record/secure_token.rb +38 -0
  187. data/lib/active_record/serialization.rb +2 -4
  188. data/lib/active_record/statement_cache.rb +16 -14
  189. data/lib/active_record/store.rb +8 -3
  190. data/lib/active_record/suppressor.rb +58 -0
  191. data/lib/active_record/table_metadata.rb +68 -0
  192. data/lib/active_record/tasks/database_tasks.rb +59 -42
  193. data/lib/active_record/tasks/mysql_database_tasks.rb +32 -26
  194. data/lib/active_record/tasks/postgresql_database_tasks.rb +29 -9
  195. data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
  196. data/lib/active_record/timestamp.rb +20 -9
  197. data/lib/active_record/touch_later.rb +58 -0
  198. data/lib/active_record/transactions.rb +159 -67
  199. data/lib/active_record/type/adapter_specific_registry.rb +130 -0
  200. data/lib/active_record/type/date.rb +2 -41
  201. data/lib/active_record/type/date_time.rb +2 -38
  202. data/lib/active_record/type/hash_lookup_type_map.rb +8 -2
  203. data/lib/active_record/type/internal/abstract_json.rb +29 -0
  204. data/lib/active_record/type/internal/timezone.rb +15 -0
  205. data/lib/active_record/type/serialized.rb +21 -14
  206. data/lib/active_record/type/time.rb +10 -16
  207. data/lib/active_record/type/type_map.rb +4 -4
  208. data/lib/active_record/type.rb +66 -17
  209. data/lib/active_record/type_caster/connection.rb +29 -0
  210. data/lib/active_record/type_caster/map.rb +19 -0
  211. data/lib/active_record/type_caster.rb +7 -0
  212. data/lib/active_record/validations/absence.rb +23 -0
  213. data/lib/active_record/validations/associated.rb +10 -3
  214. data/lib/active_record/validations/length.rb +24 -0
  215. data/lib/active_record/validations/presence.rb +11 -12
  216. data/lib/active_record/validations/uniqueness.rb +29 -18
  217. data/lib/active_record/validations.rb +33 -32
  218. data/lib/active_record.rb +9 -2
  219. data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
  220. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -6
  221. data/lib/rails/generators/active_record/migration/templates/migration.rb +8 -7
  222. data/lib/rails/generators/active_record/migration.rb +7 -0
  223. data/lib/rails/generators/active_record/model/model_generator.rb +32 -15
  224. data/lib/rails/generators/active_record/model/templates/application_record.rb +5 -0
  225. data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
  226. metadata +60 -34
  227. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
  228. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  229. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
  230. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  231. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  232. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
  233. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  234. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  235. data/lib/active_record/type/big_integer.rb +0 -13
  236. data/lib/active_record/type/binary.rb +0 -50
  237. data/lib/active_record/type/boolean.rb +0 -30
  238. data/lib/active_record/type/decimal.rb +0 -40
  239. data/lib/active_record/type/decimal_without_scale.rb +0 -11
  240. data/lib/active_record/type/decorator.rb +0 -14
  241. data/lib/active_record/type/float.rb +0 -19
  242. data/lib/active_record/type/integer.rb +0 -55
  243. data/lib/active_record/type/mutable.rb +0 -16
  244. data/lib/active_record/type/numeric.rb +0 -36
  245. data/lib/active_record/type/string.rb +0 -36
  246. data/lib/active_record/type/text.rb +0 -11
  247. data/lib/active_record/type/time_value.rb +0 -38
  248. data/lib/active_record/type/unsigned_integer.rb +0 -15
  249. data/lib/active_record/type/value.rb +0 -101
data/lib/active_record.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2004-2014 David Heinemeier Hansson
2
+ # Copyright (c) 2004-2016 David Heinemeier Hansson
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -40,18 +40,23 @@ module ActiveRecord
40
40
  autoload :CounterCache
41
41
  autoload :DynamicMatchers
42
42
  autoload :Enum
43
+ autoload :InternalMetadata
43
44
  autoload :Explain
44
45
  autoload :Inheritance
45
46
  autoload :Integration
47
+ autoload :LegacyYamlAdapter
46
48
  autoload :Migration
47
49
  autoload :Migrator, 'active_record/migration'
48
50
  autoload :ModelSchema
49
51
  autoload :NestedAttributes
50
52
  autoload :NoTouching
53
+ autoload :TouchLater
51
54
  autoload :Persistence
52
55
  autoload :QueryCache
53
56
  autoload :Querying
57
+ autoload :CollectionCacheKey
54
58
  autoload :ReadonlyAttributes
59
+ autoload :RecordInvalid, 'active_record/validations'
55
60
  autoload :Reflection
56
61
  autoload :RuntimeRegistry
57
62
  autoload :Sanitization
@@ -62,10 +67,13 @@ module ActiveRecord
62
67
  autoload :Serialization
63
68
  autoload :StatementCache
64
69
  autoload :Store
70
+ autoload :Suppressor
71
+ autoload :TableMetadata
65
72
  autoload :Timestamp
66
73
  autoload :Transactions
67
74
  autoload :Translation
68
75
  autoload :Validations
76
+ autoload :SecureToken
69
77
 
70
78
  eager_autoload do
71
79
  autoload :ActiveRecordError, 'active_record/errors'
@@ -129,7 +137,6 @@ module ActiveRecord
129
137
 
130
138
  eager_autoload do
131
139
  autoload :AbstractAdapter
132
- autoload :ConnectionManagement, "active_record/connection_adapters/abstract/connection_pool"
133
140
  end
134
141
  end
135
142
 
@@ -5,6 +5,8 @@ module ActiveRecord
5
5
  class MigrationGenerator < Base # :nodoc:
6
6
  argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"
7
7
 
8
+ class_option :primary_key_type, type: :string, desc: "The type for primary key"
9
+
8
10
  def create_migration_file
9
11
  set_local_assigns!
10
12
  validate_file_name!
@@ -14,10 +16,9 @@ module ActiveRecord
14
16
  protected
15
17
  attr_reader :migration_action, :join_tables
16
18
 
17
- # sets the default migration template that is being used for the generation of the migration
18
- # depending on the arguments which would be sent out in the command line, the migration template
19
- # and the table name instance variables are setup.
20
-
19
+ # Sets the default migration template that is being used for the generation of the migration.
20
+ # Depending on command line arguments, the migration template and the table name instance
21
+ # variables are set up.
21
22
  def set_local_assigns!
22
23
  @migration_template = "migration.rb"
23
24
  case file_name
@@ -56,6 +57,8 @@ module ActiveRecord
56
57
  attributes.select { |a| !a.reference? && a.has_index? }
57
58
  end
58
59
 
60
+ # A migration file name can only contain underscores (_), lowercase characters,
61
+ # and numbers 0-9. Any other file name will raise an IllegalMigrationNameError.
59
62
  def validate_file_name!
60
63
  unless file_name =~ /^[_a-z0-9]+$/
61
64
  raise IllegalMigrationNameError.new(file_name)
@@ -1,22 +1,24 @@
1
- class <%= migration_class_name %> < ActiveRecord::Migration
1
+ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
2
  def change
3
- create_table :<%= table_name %> do |t|
3
+ create_table :<%= table_name %><%= primary_key_type %> do |t|
4
4
  <% attributes.each do |attribute| -%>
5
5
  <% if attribute.password_digest? -%>
6
6
  t.string :password_digest<%= attribute.inject_options %>
7
+ <% elsif attribute.token? -%>
8
+ t.string :<%= attribute.name %><%= attribute.inject_options %>
7
9
  <% else -%>
8
10
  t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
9
11
  <% end -%>
10
12
  <% end -%>
11
13
  <% if options[:timestamps] %>
12
- t.timestamps null: false
14
+ t.timestamps
13
15
  <% end -%>
14
16
  end
17
+ <% attributes.select(&:token?).each do |attribute| -%>
18
+ add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>, unique: true
19
+ <% end -%>
15
20
  <% attributes_with_index.each do |attribute| -%>
16
21
  add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
17
- <% end -%>
18
- <% attributes.select(&:reference?).reject(&:polymorphic?).each do |attribute| -%>
19
- add_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
20
22
  <% end -%>
21
23
  end
22
24
  end
@@ -1,12 +1,12 @@
1
- class <%= migration_class_name %> < ActiveRecord::Migration
1
+ class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
2
  <%- if migration_action == 'add' -%>
3
3
  def change
4
4
  <% attributes.each do |attribute| -%>
5
5
  <%- if attribute.reference? -%>
6
6
  add_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
7
- <%- unless attribute.polymorphic? -%>
8
- add_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
9
- <%- end -%>
7
+ <%- elsif attribute.token? -%>
8
+ add_column :<%= table_name %>, :<%= attribute.name %>, :string<%= attribute.inject_options %>
9
+ add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>, unique: true
10
10
  <%- else -%>
11
11
  add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
12
12
  <%- if attribute.has_index? -%>
@@ -19,7 +19,11 @@ class <%= migration_class_name %> < ActiveRecord::Migration
19
19
  def change
20
20
  create_join_table :<%= join_tables.first %>, :<%= join_tables.second %> do |t|
21
21
  <%- attributes.each do |attribute| -%>
22
+ <%- if attribute.reference? -%>
23
+ t.references :<%= attribute.name %><%= attribute.inject_options %>
24
+ <%- else -%>
22
25
  <%= '# ' unless attribute.has_index? -%>t.index <%= attribute.index_name %><%= attribute.inject_index_options %>
26
+ <%- end -%>
23
27
  <%- end -%>
24
28
  end
25
29
  end
@@ -29,9 +33,6 @@ class <%= migration_class_name %> < ActiveRecord::Migration
29
33
  <%- if migration_action -%>
30
34
  <%- if attribute.reference? -%>
31
35
  remove_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
32
- <%- unless attribute.polymorphic? -%>
33
- remove_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
34
- <%- end -%>
35
36
  <%- else -%>
36
37
  <%- if attribute.has_index? -%>
37
38
  remove_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
@@ -13,6 +13,13 @@ module ActiveRecord
13
13
  ActiveRecord::Migration.next_migration_number(next_migration_number)
14
14
  end
15
15
  end
16
+
17
+ private
18
+
19
+ def primary_key_type
20
+ key_type = options[:primary_key_type]
21
+ ", id: :#{key_type}" if key_type
22
+ end
16
23
  end
17
24
  end
18
25
  end
@@ -7,14 +7,13 @@ module ActiveRecord
7
7
 
8
8
  check_class_collision
9
9
 
10
- class_option :migration, :type => :boolean
11
- class_option :timestamps, :type => :boolean
12
- class_option :parent, :type => :string, :desc => "The parent class for the generated model"
13
- class_option :indexes, :type => :boolean, :default => true, :desc => "Add indexes for references and belongs_to columns"
10
+ class_option :migration, type: :boolean
11
+ class_option :timestamps, type: :boolean
12
+ class_option :parent, type: :string, desc: "The parent class for the generated model"
13
+ class_option :indexes, type: :boolean, default: true, desc: "Add indexes for references and belongs_to columns"
14
+ class_option :primary_key_type, type: :string, desc: "The type for primary key"
14
15
 
15
-
16
16
  # creates the migration file for the model.
17
-
18
17
  def create_migration_file
19
18
  return unless options[:migration] && options[:parent].nil?
20
19
  attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false
@@ -22,31 +21,49 @@ module ActiveRecord
22
21
  end
23
22
 
24
23
  def create_model_file
24
+ generate_application_record
25
25
  template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
26
26
  end
27
27
 
28
28
  def create_module_file
29
29
  return if regular_class_path.empty?
30
+ generate_application_record
30
31
  template 'module.rb', File.join('app/models', "#{class_path.join('/')}.rb") if behavior == :invoke
31
32
  end
32
33
 
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
-
41
34
  hook_for :test_framework
42
35
 
43
36
  protected
44
37
 
38
+ def attributes_with_index
39
+ attributes.select { |a| !a.reference? && a.has_index? }
40
+ end
41
+
42
+ # FIXME: Change this file to a symlink once RubyGems 2.5.0 is required.
43
+ def generate_application_record
44
+ if self.behavior == :invoke && !application_record_exist?
45
+ template 'application_record.rb', application_record_file_name
46
+ end
47
+ end
48
+
45
49
  # Used by the migration template to determine the parent name of the model
46
50
  def parent_class_name
47
- options[:parent] || "ActiveRecord::Base"
51
+ options[:parent] || 'ApplicationRecord'
48
52
  end
49
53
 
54
+ def application_record_exist?
55
+ file_exist = nil
56
+ in_root { file_exist = File.exist?(application_record_file_name) }
57
+ file_exist
58
+ end
59
+
60
+ def application_record_file_name
61
+ @application_record_file_name ||= if mountable_engine?
62
+ "app/models/#{namespaced_path}/application_record.rb"
63
+ else
64
+ 'app/models/application_record.rb'
65
+ end
66
+ end
50
67
  end
51
68
  end
52
69
  end
@@ -0,0 +1,5 @@
1
+ <% module_namespacing do -%>
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ <% end -%>
@@ -3,6 +3,9 @@ class <%= class_name %> < <%= parent_class_name.classify %>
3
3
  <% attributes.select(&:reference?).each do |attribute| -%>
4
4
  belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', required: true' if attribute.required? %>
5
5
  <% end -%>
6
+ <% attributes.select(&:token?).each do |attribute| -%>
7
+ has_secure_token<% if attribute.name != "token" %> :<%= attribute.name %><% end %>
8
+ <% end -%>
6
9
  <% if attributes.any?(&:password_digest?) -%>
7
10
  has_secure_password
8
11
  <% 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: 4.2.0
4
+ version: 5.0.0
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: 2014-12-20 00:00:00.000000000 Z
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
19
+ version: 5.0.0
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: 4.2.0
26
+ version: 5.0.0
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: 4.2.0
33
+ version: 5.0.0
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: 4.2.0
40
+ version: 5.0.0
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: '6.0'
47
+ version: '7.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: '6.0'
54
+ version: '7.0'
55
55
  description: Databases on Rails. Build a persistent domain model by mapping database
56
56
  tables to Ruby classes. Strong conventions for associations, validations, aggregations,
57
57
  migrations, and testing come baked-in.
@@ -84,6 +84,7 @@ files:
84
84
  - lib/active_record/associations/builder/singular_association.rb
85
85
  - lib/active_record/associations/collection_association.rb
86
86
  - lib/active_record/associations/collection_proxy.rb
87
+ - lib/active_record/associations/foreign_association.rb
87
88
  - lib/active_record/associations/has_many_association.rb
88
89
  - lib/active_record/associations/has_many_through_association.rb
89
90
  - lib/active_record/associations/has_one_association.rb
@@ -105,6 +106,7 @@ files:
105
106
  - lib/active_record/associations/singular_association.rb
106
107
  - lib/active_record/associations/through_association.rb
107
108
  - lib/active_record/attribute.rb
109
+ - lib/active_record/attribute/user_provided_default.rb
108
110
  - lib/active_record/attribute_assignment.rb
109
111
  - lib/active_record/attribute_decorators.rb
110
112
  - lib/active_record/attribute_methods.rb
@@ -116,6 +118,7 @@ files:
116
118
  - lib/active_record/attribute_methods/serialization.rb
117
119
  - lib/active_record/attribute_methods/time_zone_conversion.rb
118
120
  - lib/active_record/attribute_methods/write.rb
121
+ - lib/active_record/attribute_mutation_tracker.rb
119
122
  - lib/active_record/attribute_set.rb
120
123
  - lib/active_record/attribute_set/builder.rb
121
124
  - lib/active_record/attributes.rb
@@ -124,6 +127,7 @@ files:
124
127
  - lib/active_record/callbacks.rb
125
128
  - lib/active_record/coders/json.rb
126
129
  - lib/active_record/coders/yaml_column.rb
130
+ - lib/active_record/collection_cache_key.rb
127
131
  - lib/active_record/connection_adapters/abstract/connection_pool.rb
128
132
  - lib/active_record/connection_adapters/abstract/database_limits.rb
129
133
  - lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -139,33 +143,37 @@ files:
139
143
  - lib/active_record/connection_adapters/abstract_mysql_adapter.rb
140
144
  - lib/active_record/connection_adapters/column.rb
141
145
  - lib/active_record/connection_adapters/connection_specification.rb
146
+ - lib/active_record/connection_adapters/determine_if_preparable_visitor.rb
147
+ - lib/active_record/connection_adapters/mysql/column.rb
148
+ - lib/active_record/connection_adapters/mysql/database_statements.rb
149
+ - lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb
150
+ - lib/active_record/connection_adapters/mysql/quoting.rb
151
+ - lib/active_record/connection_adapters/mysql/schema_creation.rb
152
+ - lib/active_record/connection_adapters/mysql/schema_definitions.rb
153
+ - lib/active_record/connection_adapters/mysql/schema_dumper.rb
154
+ - lib/active_record/connection_adapters/mysql/type_metadata.rb
142
155
  - lib/active_record/connection_adapters/mysql2_adapter.rb
143
- - lib/active_record/connection_adapters/mysql_adapter.rb
144
- - lib/active_record/connection_adapters/postgresql/array_parser.rb
145
156
  - lib/active_record/connection_adapters/postgresql/column.rb
146
157
  - lib/active_record/connection_adapters/postgresql/database_statements.rb
158
+ - lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb
147
159
  - lib/active_record/connection_adapters/postgresql/oid.rb
148
160
  - lib/active_record/connection_adapters/postgresql/oid/array.rb
149
161
  - lib/active_record/connection_adapters/postgresql/oid/bit.rb
150
162
  - lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb
151
163
  - lib/active_record/connection_adapters/postgresql/oid/bytea.rb
152
164
  - lib/active_record/connection_adapters/postgresql/oid/cidr.rb
153
- - lib/active_record/connection_adapters/postgresql/oid/date.rb
154
165
  - lib/active_record/connection_adapters/postgresql/oid/date_time.rb
155
166
  - lib/active_record/connection_adapters/postgresql/oid/decimal.rb
156
167
  - lib/active_record/connection_adapters/postgresql/oid/enum.rb
157
- - lib/active_record/connection_adapters/postgresql/oid/float.rb
158
168
  - lib/active_record/connection_adapters/postgresql/oid/hstore.rb
159
169
  - lib/active_record/connection_adapters/postgresql/oid/inet.rb
160
- - lib/active_record/connection_adapters/postgresql/oid/infinity.rb
161
- - lib/active_record/connection_adapters/postgresql/oid/integer.rb
162
170
  - lib/active_record/connection_adapters/postgresql/oid/json.rb
163
171
  - lib/active_record/connection_adapters/postgresql/oid/jsonb.rb
164
172
  - lib/active_record/connection_adapters/postgresql/oid/money.rb
165
173
  - lib/active_record/connection_adapters/postgresql/oid/point.rb
174
+ - lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb
166
175
  - lib/active_record/connection_adapters/postgresql/oid/range.rb
167
176
  - lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb
168
- - lib/active_record/connection_adapters/postgresql/oid/time.rb
169
177
  - lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb
170
178
  - lib/active_record/connection_adapters/postgresql/oid/uuid.rb
171
179
  - lib/active_record/connection_adapters/postgresql/oid/vector.rb
@@ -173,10 +181,16 @@ files:
173
181
  - lib/active_record/connection_adapters/postgresql/quoting.rb
174
182
  - lib/active_record/connection_adapters/postgresql/referential_integrity.rb
175
183
  - lib/active_record/connection_adapters/postgresql/schema_definitions.rb
184
+ - lib/active_record/connection_adapters/postgresql/schema_dumper.rb
176
185
  - lib/active_record/connection_adapters/postgresql/schema_statements.rb
186
+ - lib/active_record/connection_adapters/postgresql/type_metadata.rb
177
187
  - lib/active_record/connection_adapters/postgresql/utils.rb
178
188
  - lib/active_record/connection_adapters/postgresql_adapter.rb
179
189
  - lib/active_record/connection_adapters/schema_cache.rb
190
+ - lib/active_record/connection_adapters/sql_type_metadata.rb
191
+ - lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb
192
+ - lib/active_record/connection_adapters/sqlite3/quoting.rb
193
+ - lib/active_record/connection_adapters/sqlite3/schema_creation.rb
180
194
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
181
195
  - lib/active_record/connection_adapters/statement_pool.rb
182
196
  - lib/active_record/connection_handling.rb
@@ -193,12 +207,15 @@ files:
193
207
  - lib/active_record/gem_version.rb
194
208
  - lib/active_record/inheritance.rb
195
209
  - lib/active_record/integration.rb
210
+ - lib/active_record/internal_metadata.rb
211
+ - lib/active_record/legacy_yaml_adapter.rb
196
212
  - lib/active_record/locale/en.yml
197
213
  - lib/active_record/locking/optimistic.rb
198
214
  - lib/active_record/locking/pessimistic.rb
199
215
  - lib/active_record/log_subscriber.rb
200
216
  - lib/active_record/migration.rb
201
217
  - lib/active_record/migration/command_recorder.rb
218
+ - lib/active_record/migration/compatibility.rb
202
219
  - lib/active_record/migration/join_table.rb
203
220
  - lib/active_record/model_schema.rb
204
221
  - lib/active_record/nested_attributes.rb
@@ -216,15 +233,27 @@ files:
216
233
  - lib/active_record/reflection.rb
217
234
  - lib/active_record/relation.rb
218
235
  - lib/active_record/relation/batches.rb
236
+ - lib/active_record/relation/batches/batch_enumerator.rb
219
237
  - lib/active_record/relation/calculations.rb
220
238
  - lib/active_record/relation/delegation.rb
221
239
  - lib/active_record/relation/finder_methods.rb
240
+ - lib/active_record/relation/from_clause.rb
222
241
  - lib/active_record/relation/merger.rb
223
242
  - lib/active_record/relation/predicate_builder.rb
224
243
  - lib/active_record/relation/predicate_builder/array_handler.rb
244
+ - lib/active_record/relation/predicate_builder/association_query_handler.rb
245
+ - lib/active_record/relation/predicate_builder/base_handler.rb
246
+ - lib/active_record/relation/predicate_builder/basic_object_handler.rb
247
+ - lib/active_record/relation/predicate_builder/class_handler.rb
248
+ - lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb
249
+ - lib/active_record/relation/predicate_builder/range_handler.rb
225
250
  - lib/active_record/relation/predicate_builder/relation_handler.rb
251
+ - lib/active_record/relation/query_attribute.rb
226
252
  - lib/active_record/relation/query_methods.rb
253
+ - lib/active_record/relation/record_fetch_warning.rb
227
254
  - lib/active_record/relation/spawn_methods.rb
255
+ - lib/active_record/relation/where_clause.rb
256
+ - lib/active_record/relation/where_clause_factory.rb
228
257
  - lib/active_record/result.rb
229
258
  - lib/active_record/runtime_registry.rb
230
259
  - lib/active_record/sanitization.rb
@@ -234,41 +263,37 @@ files:
234
263
  - lib/active_record/scoping.rb
235
264
  - lib/active_record/scoping/default.rb
236
265
  - lib/active_record/scoping/named.rb
266
+ - lib/active_record/secure_token.rb
237
267
  - lib/active_record/serialization.rb
238
- - lib/active_record/serializers/xml_serializer.rb
239
268
  - lib/active_record/statement_cache.rb
240
269
  - lib/active_record/store.rb
270
+ - lib/active_record/suppressor.rb
271
+ - lib/active_record/table_metadata.rb
241
272
  - lib/active_record/tasks/database_tasks.rb
242
273
  - lib/active_record/tasks/mysql_database_tasks.rb
243
274
  - lib/active_record/tasks/postgresql_database_tasks.rb
244
275
  - lib/active_record/tasks/sqlite_database_tasks.rb
245
276
  - lib/active_record/timestamp.rb
277
+ - lib/active_record/touch_later.rb
246
278
  - lib/active_record/transactions.rb
247
279
  - lib/active_record/translation.rb
248
280
  - lib/active_record/type.rb
249
- - lib/active_record/type/big_integer.rb
250
- - lib/active_record/type/binary.rb
251
- - lib/active_record/type/boolean.rb
281
+ - lib/active_record/type/adapter_specific_registry.rb
252
282
  - lib/active_record/type/date.rb
253
283
  - lib/active_record/type/date_time.rb
254
- - lib/active_record/type/decimal.rb
255
- - lib/active_record/type/decimal_without_scale.rb
256
- - lib/active_record/type/decorator.rb
257
- - lib/active_record/type/float.rb
258
284
  - lib/active_record/type/hash_lookup_type_map.rb
259
- - lib/active_record/type/integer.rb
260
- - lib/active_record/type/mutable.rb
261
- - lib/active_record/type/numeric.rb
285
+ - lib/active_record/type/internal/abstract_json.rb
286
+ - lib/active_record/type/internal/timezone.rb
262
287
  - lib/active_record/type/serialized.rb
263
- - lib/active_record/type/string.rb
264
- - lib/active_record/type/text.rb
265
288
  - lib/active_record/type/time.rb
266
- - lib/active_record/type/time_value.rb
267
289
  - lib/active_record/type/type_map.rb
268
- - lib/active_record/type/unsigned_integer.rb
269
- - lib/active_record/type/value.rb
290
+ - lib/active_record/type_caster.rb
291
+ - lib/active_record/type_caster/connection.rb
292
+ - lib/active_record/type_caster/map.rb
270
293
  - lib/active_record/validations.rb
294
+ - lib/active_record/validations/absence.rb
271
295
  - lib/active_record/validations/associated.rb
296
+ - lib/active_record/validations/length.rb
272
297
  - lib/active_record/validations/presence.rb
273
298
  - lib/active_record/validations/uniqueness.rb
274
299
  - lib/active_record/version.rb
@@ -278,9 +303,10 @@ files:
278
303
  - lib/rails/generators/active_record/migration/templates/create_table_migration.rb
279
304
  - lib/rails/generators/active_record/migration/templates/migration.rb
280
305
  - lib/rails/generators/active_record/model/model_generator.rb
306
+ - lib/rails/generators/active_record/model/templates/application_record.rb
281
307
  - lib/rails/generators/active_record/model/templates/model.rb
282
308
  - lib/rails/generators/active_record/model/templates/module.rb
283
- homepage: http://www.rubyonrails.org
309
+ homepage: http://rubyonrails.org
284
310
  licenses:
285
311
  - MIT
286
312
  metadata: {}
@@ -294,7 +320,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
294
320
  requirements:
295
321
  - - ">="
296
322
  - !ruby/object:Gem::Version
297
- version: 1.9.3
323
+ version: 2.2.2
298
324
  required_rubygems_version: !ruby/object:Gem::Requirement
299
325
  requirements:
300
326
  - - ">="
@@ -302,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
328
  version: '0'
303
329
  requirements: []
304
330
  rubyforge_project:
305
- rubygems_version: 2.2.2
331
+ rubygems_version: 2.6.4
306
332
  signing_key:
307
333
  specification_version: 4
308
334
  summary: Object-relational mapper framework (part of Rails).