activerecord 4.2.6 → 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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1307 -1105
  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 +3 -3
  9. data/lib/active_record/associations/alias_tracker.rb +19 -16
  10. data/lib/active_record/associations/association.rb +11 -9
  11. data/lib/active_record/associations/association_scope.rb +73 -102
  12. data/lib/active_record/associations/belongs_to_association.rb +21 -32
  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 +7 -19
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +14 -11
  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 +50 -31
  21. data/lib/active_record/associations/collection_proxy.rb +69 -29
  22. data/lib/active_record/associations/foreign_association.rb +1 -1
  23. data/lib/active_record/associations/has_many_association.rb +20 -71
  24. data/lib/active_record/associations/has_many_through_association.rb +8 -47
  25. data/lib/active_record/associations/has_one_association.rb +12 -5
  26. data/lib/active_record/associations/join_dependency/join_association.rb +20 -8
  27. data/lib/active_record/associations/join_dependency.rb +29 -19
  28. data/lib/active_record/associations/preloader/association.rb +46 -52
  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 +14 -4
  34. data/lib/active_record/associations/singular_association.rb +7 -1
  35. data/lib/active_record/associations/through_association.rb +11 -3
  36. data/lib/active_record/associations.rb +317 -209
  37. data/lib/active_record/attribute/user_provided_default.rb +28 -0
  38. data/lib/active_record/attribute.rb +68 -18
  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 +1 -1
  42. data/lib/active_record/attribute_methods/dirty.rb +46 -86
  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 +61 -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 +6 -4
  52. data/lib/active_record/attribute_set.rb +30 -3
  53. data/lib/active_record/attributes.rb +199 -80
  54. data/lib/active_record/autosave_association.rb +49 -16
  55. data/lib/active_record/base.rb +32 -23
  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 +452 -182
  61. data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
  62. data/lib/active_record/connection_adapters/abstract/database_statements.rb +65 -61
  63. data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -2
  64. data/lib/active_record/connection_adapters/abstract/quoting.rb +74 -9
  65. data/lib/active_record/connection_adapters/abstract/savepoints.rb +3 -3
  66. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +61 -39
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +236 -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 +378 -140
  70. data/lib/active_record/connection_adapters/abstract/transaction.rb +51 -34
  71. data/lib/active_record/connection_adapters/abstract_adapter.rb +153 -59
  72. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +405 -362
  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 +25 -176
  85. data/lib/active_record/connection_adapters/postgresql/column.rb +5 -10
  86. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +10 -72
  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 +1 -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 -22
  93. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
  94. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
  95. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
  96. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -4
  97. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
  98. data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
  99. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +31 -17
  100. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +0 -4
  101. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
  102. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
  103. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
  104. data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
  105. data/lib/active_record/connection_adapters/postgresql/quoting.rb +26 -18
  106. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
  107. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
  108. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +47 -0
  109. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +234 -148
  110. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
  111. data/lib/active_record/connection_adapters/postgresql_adapter.rb +248 -160
  112. data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
  113. data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
  114. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +19 -0
  115. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +48 -0
  116. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
  117. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +148 -203
  118. data/lib/active_record/connection_adapters/statement_pool.rb +31 -12
  119. data/lib/active_record/connection_handling.rb +37 -14
  120. data/lib/active_record/core.rb +89 -107
  121. data/lib/active_record/counter_cache.rb +13 -24
  122. data/lib/active_record/dynamic_matchers.rb +1 -20
  123. data/lib/active_record/enum.rb +113 -76
  124. data/lib/active_record/errors.rb +87 -48
  125. data/lib/active_record/explain_registry.rb +1 -1
  126. data/lib/active_record/explain_subscriber.rb +1 -1
  127. data/lib/active_record/fixture_set/file.rb +26 -5
  128. data/lib/active_record/fixtures.rb +76 -40
  129. data/lib/active_record/gem_version.rb +3 -3
  130. data/lib/active_record/inheritance.rb +32 -40
  131. data/lib/active_record/integration.rb +4 -4
  132. data/lib/active_record/internal_metadata.rb +56 -0
  133. data/lib/active_record/legacy_yaml_adapter.rb +18 -2
  134. data/lib/active_record/locale/en.yml +3 -2
  135. data/lib/active_record/locking/optimistic.rb +15 -15
  136. data/lib/active_record/locking/pessimistic.rb +1 -1
  137. data/lib/active_record/log_subscriber.rb +43 -21
  138. data/lib/active_record/migration/command_recorder.rb +59 -18
  139. data/lib/active_record/migration/compatibility.rb +126 -0
  140. data/lib/active_record/migration.rb +364 -109
  141. data/lib/active_record/model_schema.rb +128 -38
  142. data/lib/active_record/nested_attributes.rb +58 -29
  143. data/lib/active_record/null_relation.rb +16 -8
  144. data/lib/active_record/persistence.rb +121 -80
  145. data/lib/active_record/query_cache.rb +15 -18
  146. data/lib/active_record/querying.rb +10 -9
  147. data/lib/active_record/railtie.rb +27 -18
  148. data/lib/active_record/railties/controller_runtime.rb +1 -1
  149. data/lib/active_record/railties/databases.rake +58 -45
  150. data/lib/active_record/readonly_attributes.rb +1 -1
  151. data/lib/active_record/reflection.rb +282 -115
  152. data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
  153. data/lib/active_record/relation/batches.rb +139 -34
  154. data/lib/active_record/relation/calculations.rb +80 -102
  155. data/lib/active_record/relation/delegation.rb +7 -20
  156. data/lib/active_record/relation/finder_methods.rb +163 -81
  157. data/lib/active_record/relation/from_clause.rb +32 -0
  158. data/lib/active_record/relation/merger.rb +16 -42
  159. data/lib/active_record/relation/predicate_builder/array_handler.rb +11 -15
  160. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +88 -0
  161. data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
  162. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
  163. data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
  164. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +57 -0
  165. data/lib/active_record/relation/predicate_builder/range_handler.rb +33 -0
  166. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
  167. data/lib/active_record/relation/predicate_builder.rb +120 -107
  168. data/lib/active_record/relation/query_attribute.rb +19 -0
  169. data/lib/active_record/relation/query_methods.rb +308 -244
  170. data/lib/active_record/relation/record_fetch_warning.rb +49 -0
  171. data/lib/active_record/relation/spawn_methods.rb +4 -7
  172. data/lib/active_record/relation/where_clause.rb +174 -0
  173. data/lib/active_record/relation/where_clause_factory.rb +38 -0
  174. data/lib/active_record/relation.rb +176 -116
  175. data/lib/active_record/result.rb +4 -3
  176. data/lib/active_record/runtime_registry.rb +1 -1
  177. data/lib/active_record/sanitization.rb +95 -66
  178. data/lib/active_record/schema.rb +26 -22
  179. data/lib/active_record/schema_dumper.rb +62 -38
  180. data/lib/active_record/schema_migration.rb +11 -17
  181. data/lib/active_record/scoping/default.rb +23 -9
  182. data/lib/active_record/scoping/named.rb +49 -28
  183. data/lib/active_record/scoping.rb +32 -15
  184. data/lib/active_record/secure_token.rb +38 -0
  185. data/lib/active_record/serialization.rb +2 -4
  186. data/lib/active_record/statement_cache.rb +16 -14
  187. data/lib/active_record/store.rb +8 -3
  188. data/lib/active_record/suppressor.rb +58 -0
  189. data/lib/active_record/table_metadata.rb +68 -0
  190. data/lib/active_record/tasks/database_tasks.rb +58 -41
  191. data/lib/active_record/tasks/mysql_database_tasks.rb +16 -20
  192. data/lib/active_record/tasks/postgresql_database_tasks.rb +11 -2
  193. data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
  194. data/lib/active_record/timestamp.rb +20 -9
  195. data/lib/active_record/touch_later.rb +58 -0
  196. data/lib/active_record/transactions.rb +138 -56
  197. data/lib/active_record/type/adapter_specific_registry.rb +130 -0
  198. data/lib/active_record/type/date.rb +2 -41
  199. data/lib/active_record/type/date_time.rb +2 -49
  200. data/lib/active_record/type/internal/abstract_json.rb +29 -0
  201. data/lib/active_record/type/internal/timezone.rb +15 -0
  202. data/lib/active_record/type/serialized.rb +15 -14
  203. data/lib/active_record/type/time.rb +10 -16
  204. data/lib/active_record/type/type_map.rb +4 -4
  205. data/lib/active_record/type.rb +66 -17
  206. data/lib/active_record/type_caster/connection.rb +29 -0
  207. data/lib/active_record/type_caster/map.rb +19 -0
  208. data/lib/active_record/type_caster.rb +7 -0
  209. data/lib/active_record/validations/absence.rb +23 -0
  210. data/lib/active_record/validations/associated.rb +10 -3
  211. data/lib/active_record/validations/length.rb +24 -0
  212. data/lib/active_record/validations/presence.rb +11 -12
  213. data/lib/active_record/validations/uniqueness.rb +30 -29
  214. data/lib/active_record/validations.rb +33 -32
  215. data/lib/active_record.rb +7 -2
  216. data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
  217. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -3
  218. data/lib/rails/generators/active_record/migration/templates/migration.rb +8 -1
  219. data/lib/rails/generators/active_record/migration.rb +7 -0
  220. data/lib/rails/generators/active_record/model/model_generator.rb +32 -15
  221. data/lib/rails/generators/active_record/model/templates/application_record.rb +5 -0
  222. data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
  223. metadata +58 -34
  224. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
  225. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  226. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
  227. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  228. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  229. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
  230. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  231. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  232. data/lib/active_record/type/big_integer.rb +0 -13
  233. data/lib/active_record/type/binary.rb +0 -50
  234. data/lib/active_record/type/boolean.rb +0 -31
  235. data/lib/active_record/type/decimal.rb +0 -50
  236. data/lib/active_record/type/decimal_without_scale.rb +0 -11
  237. data/lib/active_record/type/decorator.rb +0 -14
  238. data/lib/active_record/type/float.rb +0 -19
  239. data/lib/active_record/type/integer.rb +0 -59
  240. data/lib/active_record/type/mutable.rb +0 -16
  241. data/lib/active_record/type/numeric.rb +0 -36
  242. data/lib/active_record/type/string.rb +0 -40
  243. data/lib/active_record/type/text.rb +0 -11
  244. data/lib/active_record/type/time_value.rb +0 -38
  245. data/lib/active_record/type/unsigned_integer.rb +0 -15
  246. data/lib/active_record/type/value.rb +0 -105
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,6 +40,7 @@ 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
@@ -49,9 +50,11 @@ module ActiveRecord
49
50
  autoload :ModelSchema
50
51
  autoload :NestedAttributes
51
52
  autoload :NoTouching
53
+ autoload :TouchLater
52
54
  autoload :Persistence
53
55
  autoload :QueryCache
54
56
  autoload :Querying
57
+ autoload :CollectionCacheKey
55
58
  autoload :ReadonlyAttributes
56
59
  autoload :RecordInvalid, 'active_record/validations'
57
60
  autoload :Reflection
@@ -64,10 +67,13 @@ module ActiveRecord
64
67
  autoload :Serialization
65
68
  autoload :StatementCache
66
69
  autoload :Store
70
+ autoload :Suppressor
71
+ autoload :TableMetadata
67
72
  autoload :Timestamp
68
73
  autoload :Transactions
69
74
  autoload :Translation
70
75
  autoload :Validations
76
+ autoload :SecureToken
71
77
 
72
78
  eager_autoload do
73
79
  autoload :ActiveRecordError, 'active_record/errors'
@@ -131,7 +137,6 @@ module ActiveRecord
131
137
 
132
138
  eager_autoload do
133
139
  autoload :AbstractAdapter
134
- autoload :ConnectionManagement, "active_record/connection_adapters/abstract/connection_pool"
135
140
  end
136
141
  end
137
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,17 +1,22 @@
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
22
  <% end -%>
@@ -1,9 +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
+ <%- 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
7
10
  <%- else -%>
8
11
  add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
9
12
  <%- if attribute.has_index? -%>
@@ -16,7 +19,11 @@ class <%= migration_class_name %> < ActiveRecord::Migration
16
19
  def change
17
20
  create_join_table :<%= join_tables.first %>, :<%= join_tables.second %> do |t|
18
21
  <%- attributes.each do |attribute| -%>
22
+ <%- if attribute.reference? -%>
23
+ t.references :<%= attribute.name %><%= attribute.inject_options %>
24
+ <%- else -%>
19
25
  <%= '# ' unless attribute.has_index? -%>t.index <%= attribute.index_name %><%= attribute.inject_index_options %>
26
+ <%- end -%>
20
27
  <%- end -%>
21
28
  end
22
29
  end
@@ -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.6
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: 2016-03-07 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.6
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.6
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.6
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.6
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.
@@ -106,6 +106,7 @@ files:
106
106
  - lib/active_record/associations/singular_association.rb
107
107
  - lib/active_record/associations/through_association.rb
108
108
  - lib/active_record/attribute.rb
109
+ - lib/active_record/attribute/user_provided_default.rb
109
110
  - lib/active_record/attribute_assignment.rb
110
111
  - lib/active_record/attribute_decorators.rb
111
112
  - lib/active_record/attribute_methods.rb
@@ -117,6 +118,7 @@ files:
117
118
  - lib/active_record/attribute_methods/serialization.rb
118
119
  - lib/active_record/attribute_methods/time_zone_conversion.rb
119
120
  - lib/active_record/attribute_methods/write.rb
121
+ - lib/active_record/attribute_mutation_tracker.rb
120
122
  - lib/active_record/attribute_set.rb
121
123
  - lib/active_record/attribute_set/builder.rb
122
124
  - lib/active_record/attributes.rb
@@ -125,6 +127,7 @@ files:
125
127
  - lib/active_record/callbacks.rb
126
128
  - lib/active_record/coders/json.rb
127
129
  - lib/active_record/coders/yaml_column.rb
130
+ - lib/active_record/collection_cache_key.rb
128
131
  - lib/active_record/connection_adapters/abstract/connection_pool.rb
129
132
  - lib/active_record/connection_adapters/abstract/database_limits.rb
130
133
  - lib/active_record/connection_adapters/abstract/database_statements.rb
@@ -140,33 +143,37 @@ files:
140
143
  - lib/active_record/connection_adapters/abstract_mysql_adapter.rb
141
144
  - lib/active_record/connection_adapters/column.rb
142
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
143
155
  - lib/active_record/connection_adapters/mysql2_adapter.rb
144
- - lib/active_record/connection_adapters/mysql_adapter.rb
145
- - lib/active_record/connection_adapters/postgresql/array_parser.rb
146
156
  - lib/active_record/connection_adapters/postgresql/column.rb
147
157
  - lib/active_record/connection_adapters/postgresql/database_statements.rb
158
+ - lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb
148
159
  - lib/active_record/connection_adapters/postgresql/oid.rb
149
160
  - lib/active_record/connection_adapters/postgresql/oid/array.rb
150
161
  - lib/active_record/connection_adapters/postgresql/oid/bit.rb
151
162
  - lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb
152
163
  - lib/active_record/connection_adapters/postgresql/oid/bytea.rb
153
164
  - lib/active_record/connection_adapters/postgresql/oid/cidr.rb
154
- - lib/active_record/connection_adapters/postgresql/oid/date.rb
155
165
  - lib/active_record/connection_adapters/postgresql/oid/date_time.rb
156
166
  - lib/active_record/connection_adapters/postgresql/oid/decimal.rb
157
167
  - lib/active_record/connection_adapters/postgresql/oid/enum.rb
158
- - lib/active_record/connection_adapters/postgresql/oid/float.rb
159
168
  - lib/active_record/connection_adapters/postgresql/oid/hstore.rb
160
169
  - 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
170
  - lib/active_record/connection_adapters/postgresql/oid/json.rb
164
171
  - lib/active_record/connection_adapters/postgresql/oid/jsonb.rb
165
172
  - lib/active_record/connection_adapters/postgresql/oid/money.rb
166
173
  - lib/active_record/connection_adapters/postgresql/oid/point.rb
174
+ - lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb
167
175
  - lib/active_record/connection_adapters/postgresql/oid/range.rb
168
176
  - lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb
169
- - lib/active_record/connection_adapters/postgresql/oid/time.rb
170
177
  - lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb
171
178
  - lib/active_record/connection_adapters/postgresql/oid/uuid.rb
172
179
  - lib/active_record/connection_adapters/postgresql/oid/vector.rb
@@ -174,10 +181,16 @@ files:
174
181
  - lib/active_record/connection_adapters/postgresql/quoting.rb
175
182
  - lib/active_record/connection_adapters/postgresql/referential_integrity.rb
176
183
  - lib/active_record/connection_adapters/postgresql/schema_definitions.rb
184
+ - lib/active_record/connection_adapters/postgresql/schema_dumper.rb
177
185
  - lib/active_record/connection_adapters/postgresql/schema_statements.rb
186
+ - lib/active_record/connection_adapters/postgresql/type_metadata.rb
178
187
  - lib/active_record/connection_adapters/postgresql/utils.rb
179
188
  - lib/active_record/connection_adapters/postgresql_adapter.rb
180
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
181
194
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
182
195
  - lib/active_record/connection_adapters/statement_pool.rb
183
196
  - lib/active_record/connection_handling.rb
@@ -194,6 +207,7 @@ files:
194
207
  - lib/active_record/gem_version.rb
195
208
  - lib/active_record/inheritance.rb
196
209
  - lib/active_record/integration.rb
210
+ - lib/active_record/internal_metadata.rb
197
211
  - lib/active_record/legacy_yaml_adapter.rb
198
212
  - lib/active_record/locale/en.yml
199
213
  - lib/active_record/locking/optimistic.rb
@@ -201,6 +215,7 @@ files:
201
215
  - lib/active_record/log_subscriber.rb
202
216
  - lib/active_record/migration.rb
203
217
  - lib/active_record/migration/command_recorder.rb
218
+ - lib/active_record/migration/compatibility.rb
204
219
  - lib/active_record/migration/join_table.rb
205
220
  - lib/active_record/model_schema.rb
206
221
  - lib/active_record/nested_attributes.rb
@@ -218,15 +233,27 @@ files:
218
233
  - lib/active_record/reflection.rb
219
234
  - lib/active_record/relation.rb
220
235
  - lib/active_record/relation/batches.rb
236
+ - lib/active_record/relation/batches/batch_enumerator.rb
221
237
  - lib/active_record/relation/calculations.rb
222
238
  - lib/active_record/relation/delegation.rb
223
239
  - lib/active_record/relation/finder_methods.rb
240
+ - lib/active_record/relation/from_clause.rb
224
241
  - lib/active_record/relation/merger.rb
225
242
  - lib/active_record/relation/predicate_builder.rb
226
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
227
250
  - lib/active_record/relation/predicate_builder/relation_handler.rb
251
+ - lib/active_record/relation/query_attribute.rb
228
252
  - lib/active_record/relation/query_methods.rb
253
+ - lib/active_record/relation/record_fetch_warning.rb
229
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
230
257
  - lib/active_record/result.rb
231
258
  - lib/active_record/runtime_registry.rb
232
259
  - lib/active_record/sanitization.rb
@@ -236,41 +263,37 @@ files:
236
263
  - lib/active_record/scoping.rb
237
264
  - lib/active_record/scoping/default.rb
238
265
  - lib/active_record/scoping/named.rb
266
+ - lib/active_record/secure_token.rb
239
267
  - lib/active_record/serialization.rb
240
- - lib/active_record/serializers/xml_serializer.rb
241
268
  - lib/active_record/statement_cache.rb
242
269
  - lib/active_record/store.rb
270
+ - lib/active_record/suppressor.rb
271
+ - lib/active_record/table_metadata.rb
243
272
  - lib/active_record/tasks/database_tasks.rb
244
273
  - lib/active_record/tasks/mysql_database_tasks.rb
245
274
  - lib/active_record/tasks/postgresql_database_tasks.rb
246
275
  - lib/active_record/tasks/sqlite_database_tasks.rb
247
276
  - lib/active_record/timestamp.rb
277
+ - lib/active_record/touch_later.rb
248
278
  - lib/active_record/transactions.rb
249
279
  - lib/active_record/translation.rb
250
280
  - 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
281
+ - lib/active_record/type/adapter_specific_registry.rb
254
282
  - lib/active_record/type/date.rb
255
283
  - 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
284
  - 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
285
+ - lib/active_record/type/internal/abstract_json.rb
286
+ - lib/active_record/type/internal/timezone.rb
264
287
  - lib/active_record/type/serialized.rb
265
- - lib/active_record/type/string.rb
266
- - lib/active_record/type/text.rb
267
288
  - lib/active_record/type/time.rb
268
- - lib/active_record/type/time_value.rb
269
289
  - lib/active_record/type/type_map.rb
270
- - lib/active_record/type/unsigned_integer.rb
271
- - 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
272
293
  - lib/active_record/validations.rb
294
+ - lib/active_record/validations/absence.rb
273
295
  - lib/active_record/validations/associated.rb
296
+ - lib/active_record/validations/length.rb
274
297
  - lib/active_record/validations/presence.rb
275
298
  - lib/active_record/validations/uniqueness.rb
276
299
  - lib/active_record/version.rb
@@ -280,9 +303,10 @@ files:
280
303
  - lib/rails/generators/active_record/migration/templates/create_table_migration.rb
281
304
  - lib/rails/generators/active_record/migration/templates/migration.rb
282
305
  - lib/rails/generators/active_record/model/model_generator.rb
306
+ - lib/rails/generators/active_record/model/templates/application_record.rb
283
307
  - lib/rails/generators/active_record/model/templates/model.rb
284
308
  - lib/rails/generators/active_record/model/templates/module.rb
285
- homepage: http://www.rubyonrails.org
309
+ homepage: http://rubyonrails.org
286
310
  licenses:
287
311
  - MIT
288
312
  metadata: {}
@@ -296,7 +320,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
296
320
  requirements:
297
321
  - - ">="
298
322
  - !ruby/object:Gem::Version
299
- version: 1.9.3
323
+ version: 2.2.2
300
324
  required_rubygems_version: !ruby/object:Gem::Requirement
301
325
  requirements:
302
326
  - - ">="
@@ -304,7 +328,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
304
328
  version: '0'
305
329
  requirements: []
306
330
  rubyforge_project:
307
- rubygems_version: 2.5.1
331
+ rubygems_version: 2.6.4
308
332
  signing_key:
309
333
  specification_version: 4
310
334
  summary: Object-relational mapper framework (part of Rails).