activerecord 4.1.15 → 4.2.11.3

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 (185) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1162 -1792
  3. data/README.rdoc +15 -10
  4. data/lib/active_record.rb +4 -0
  5. data/lib/active_record/aggregations.rb +15 -8
  6. data/lib/active_record/association_relation.rb +13 -0
  7. data/lib/active_record/associations.rb +158 -49
  8. data/lib/active_record/associations/alias_tracker.rb +3 -12
  9. data/lib/active_record/associations/association.rb +16 -4
  10. data/lib/active_record/associations/association_scope.rb +83 -38
  11. data/lib/active_record/associations/belongs_to_association.rb +28 -10
  12. data/lib/active_record/associations/builder/association.rb +15 -4
  13. data/lib/active_record/associations/builder/belongs_to.rb +7 -29
  14. data/lib/active_record/associations/builder/collection_association.rb +5 -1
  15. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +8 -13
  16. data/lib/active_record/associations/builder/has_many.rb +1 -1
  17. data/lib/active_record/associations/builder/has_one.rb +2 -2
  18. data/lib/active_record/associations/builder/singular_association.rb +8 -1
  19. data/lib/active_record/associations/collection_association.rb +63 -27
  20. data/lib/active_record/associations/collection_proxy.rb +29 -35
  21. data/lib/active_record/associations/foreign_association.rb +11 -0
  22. data/lib/active_record/associations/has_many_association.rb +83 -22
  23. data/lib/active_record/associations/has_many_through_association.rb +49 -26
  24. data/lib/active_record/associations/has_one_association.rb +1 -1
  25. data/lib/active_record/associations/join_dependency.rb +26 -13
  26. data/lib/active_record/associations/join_dependency/join_association.rb +25 -15
  27. data/lib/active_record/associations/join_dependency/join_part.rb +0 -1
  28. data/lib/active_record/associations/preloader.rb +36 -26
  29. data/lib/active_record/associations/preloader/association.rb +14 -11
  30. data/lib/active_record/associations/preloader/through_association.rb +4 -3
  31. data/lib/active_record/associations/singular_association.rb +17 -2
  32. data/lib/active_record/associations/through_association.rb +5 -12
  33. data/lib/active_record/attribute.rb +163 -0
  34. data/lib/active_record/attribute_assignment.rb +19 -11
  35. data/lib/active_record/attribute_decorators.rb +66 -0
  36. data/lib/active_record/attribute_methods.rb +56 -94
  37. data/lib/active_record/attribute_methods/before_type_cast.rb +7 -2
  38. data/lib/active_record/attribute_methods/dirty.rb +107 -43
  39. data/lib/active_record/attribute_methods/primary_key.rb +7 -8
  40. data/lib/active_record/attribute_methods/query.rb +1 -1
  41. data/lib/active_record/attribute_methods/read.rb +22 -59
  42. data/lib/active_record/attribute_methods/serialization.rb +16 -150
  43. data/lib/active_record/attribute_methods/time_zone_conversion.rb +38 -40
  44. data/lib/active_record/attribute_methods/write.rb +9 -24
  45. data/lib/active_record/attribute_set.rb +81 -0
  46. data/lib/active_record/attribute_set/builder.rb +106 -0
  47. data/lib/active_record/attributes.rb +147 -0
  48. data/lib/active_record/autosave_association.rb +19 -12
  49. data/lib/active_record/base.rb +13 -24
  50. data/lib/active_record/callbacks.rb +6 -6
  51. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +84 -52
  52. data/lib/active_record/connection_adapters/abstract/database_statements.rb +52 -50
  53. data/lib/active_record/connection_adapters/abstract/query_cache.rb +1 -1
  54. data/lib/active_record/connection_adapters/abstract/quoting.rb +60 -60
  55. data/lib/active_record/connection_adapters/abstract/savepoints.rb +1 -1
  56. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +39 -4
  57. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +138 -56
  58. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +14 -34
  59. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +268 -71
  60. data/lib/active_record/connection_adapters/abstract/transaction.rb +125 -118
  61. data/lib/active_record/connection_adapters/abstract_adapter.rb +171 -59
  62. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +293 -139
  63. data/lib/active_record/connection_adapters/column.rb +29 -240
  64. data/lib/active_record/connection_adapters/connection_specification.rb +15 -24
  65. data/lib/active_record/connection_adapters/mysql2_adapter.rb +16 -32
  66. data/lib/active_record/connection_adapters/mysql_adapter.rb +67 -144
  67. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +15 -27
  68. data/lib/active_record/connection_adapters/postgresql/column.rb +20 -0
  69. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +40 -25
  70. data/lib/active_record/connection_adapters/postgresql/oid.rb +29 -388
  71. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +100 -0
  72. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +52 -0
  73. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +13 -0
  74. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +15 -0
  75. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +46 -0
  76. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +11 -0
  77. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +36 -0
  78. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +13 -0
  79. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +19 -0
  80. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +21 -0
  81. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +59 -0
  82. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +13 -0
  83. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +13 -0
  84. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +11 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +35 -0
  86. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +23 -0
  87. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +43 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +43 -0
  89. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +79 -0
  90. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +19 -0
  91. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +11 -0
  92. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +109 -0
  93. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +21 -0
  94. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +26 -0
  95. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +28 -0
  96. data/lib/active_record/connection_adapters/postgresql/quoting.rb +46 -136
  97. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +4 -4
  98. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +152 -0
  99. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +131 -43
  100. data/lib/active_record/connection_adapters/postgresql/utils.rb +77 -0
  101. data/lib/active_record/connection_adapters/postgresql_adapter.rb +224 -477
  102. data/lib/active_record/connection_adapters/schema_cache.rb +14 -28
  103. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +61 -75
  104. data/lib/active_record/connection_handling.rb +1 -1
  105. data/lib/active_record/core.rb +163 -39
  106. data/lib/active_record/counter_cache.rb +60 -6
  107. data/lib/active_record/enum.rb +9 -11
  108. data/lib/active_record/errors.rb +53 -30
  109. data/lib/active_record/explain.rb +1 -1
  110. data/lib/active_record/explain_subscriber.rb +1 -1
  111. data/lib/active_record/fixtures.rb +55 -69
  112. data/lib/active_record/gem_version.rb +4 -4
  113. data/lib/active_record/inheritance.rb +35 -10
  114. data/lib/active_record/integration.rb +4 -4
  115. data/lib/active_record/legacy_yaml_adapter.rb +30 -0
  116. data/lib/active_record/locking/optimistic.rb +46 -26
  117. data/lib/active_record/migration.rb +71 -46
  118. data/lib/active_record/migration/command_recorder.rb +19 -2
  119. data/lib/active_record/migration/join_table.rb +1 -1
  120. data/lib/active_record/model_schema.rb +52 -58
  121. data/lib/active_record/nested_attributes.rb +5 -5
  122. data/lib/active_record/no_touching.rb +1 -1
  123. data/lib/active_record/persistence.rb +46 -26
  124. data/lib/active_record/query_cache.rb +3 -3
  125. data/lib/active_record/querying.rb +10 -7
  126. data/lib/active_record/railtie.rb +18 -11
  127. data/lib/active_record/railties/databases.rake +50 -51
  128. data/lib/active_record/readonly_attributes.rb +0 -1
  129. data/lib/active_record/reflection.rb +273 -114
  130. data/lib/active_record/relation.rb +57 -25
  131. data/lib/active_record/relation/batches.rb +0 -2
  132. data/lib/active_record/relation/calculations.rb +41 -37
  133. data/lib/active_record/relation/finder_methods.rb +70 -47
  134. data/lib/active_record/relation/merger.rb +39 -29
  135. data/lib/active_record/relation/predicate_builder.rb +16 -8
  136. data/lib/active_record/relation/predicate_builder/array_handler.rb +32 -13
  137. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -5
  138. data/lib/active_record/relation/query_methods.rb +114 -65
  139. data/lib/active_record/relation/spawn_methods.rb +3 -0
  140. data/lib/active_record/result.rb +18 -7
  141. data/lib/active_record/sanitization.rb +12 -2
  142. data/lib/active_record/schema.rb +0 -1
  143. data/lib/active_record/schema_dumper.rb +59 -28
  144. data/lib/active_record/schema_migration.rb +5 -4
  145. data/lib/active_record/scoping/default.rb +6 -4
  146. data/lib/active_record/scoping/named.rb +4 -0
  147. data/lib/active_record/serializers/xml_serializer.rb +3 -7
  148. data/lib/active_record/statement_cache.rb +95 -10
  149. data/lib/active_record/store.rb +5 -5
  150. data/lib/active_record/tasks/database_tasks.rb +61 -6
  151. data/lib/active_record/tasks/mysql_database_tasks.rb +32 -17
  152. data/lib/active_record/tasks/postgresql_database_tasks.rb +20 -9
  153. data/lib/active_record/timestamp.rb +9 -7
  154. data/lib/active_record/transactions.rb +53 -27
  155. data/lib/active_record/type.rb +23 -0
  156. data/lib/active_record/type/big_integer.rb +13 -0
  157. data/lib/active_record/type/binary.rb +50 -0
  158. data/lib/active_record/type/boolean.rb +31 -0
  159. data/lib/active_record/type/date.rb +50 -0
  160. data/lib/active_record/type/date_time.rb +54 -0
  161. data/lib/active_record/type/decimal.rb +64 -0
  162. data/lib/active_record/type/decimal_without_scale.rb +11 -0
  163. data/lib/active_record/type/decorator.rb +14 -0
  164. data/lib/active_record/type/float.rb +19 -0
  165. data/lib/active_record/type/hash_lookup_type_map.rb +23 -0
  166. data/lib/active_record/type/integer.rb +59 -0
  167. data/lib/active_record/type/mutable.rb +16 -0
  168. data/lib/active_record/type/numeric.rb +36 -0
  169. data/lib/active_record/type/serialized.rb +62 -0
  170. data/lib/active_record/type/string.rb +40 -0
  171. data/lib/active_record/type/text.rb +11 -0
  172. data/lib/active_record/type/time.rb +26 -0
  173. data/lib/active_record/type/time_value.rb +38 -0
  174. data/lib/active_record/type/type_map.rb +64 -0
  175. data/lib/active_record/type/unsigned_integer.rb +15 -0
  176. data/lib/active_record/type/value.rb +110 -0
  177. data/lib/active_record/validations.rb +25 -19
  178. data/lib/active_record/validations/associated.rb +5 -3
  179. data/lib/active_record/validations/presence.rb +5 -3
  180. data/lib/active_record/validations/uniqueness.rb +25 -29
  181. data/lib/rails/generators/active_record/migration/migration_generator.rb +8 -4
  182. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +1 -1
  183. data/lib/rails/generators/active_record/model/templates/model.rb +1 -1
  184. metadata +66 -11
  185. data/lib/active_record/connection_adapters/postgresql/cast.rb +0 -168
@@ -29,9 +29,11 @@ module ActiveRecord
29
29
  # Configuration options:
30
30
  #
31
31
  # * <tt>:message</tt> - A custom error message (default is: "is invalid").
32
- # * <tt>:on</tt> - Specifies when this validation is active. Runs in all
33
- # validation contexts by default (+nil+), other options are <tt>:create</tt>
34
- # and <tt>:update</tt>.
32
+ # * <tt>:on</tt> - Specifies the contexts where this validation is active.
33
+ # Runs in all validation contexts by default (nil). You can pass a symbol
34
+ # or an array of symbols. (e.g. <tt>on: :create</tt> or
35
+ # <tt>on: :custom_validation_context</tt> or
36
+ # <tt>on: [:create, :custom_validation_context]</tt>)
35
37
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine
36
38
  # if the validation should occur (e.g. <tt>if: :allow_validation</tt>,
37
39
  # or <tt>if: Proc.new { |user| user.signup_step > 2 }</tt>). The method,
@@ -44,9 +44,11 @@ module ActiveRecord
44
44
  #
45
45
  # Configuration options:
46
46
  # * <tt>:message</tt> - A custom error message (default is: "can't be blank").
47
- # * <tt>:on</tt> - Specifies when this validation is active. Runs in all
48
- # validation contexts by default (+nil+), other options are <tt>:create</tt>
49
- # and <tt>:update</tt>.
47
+ # * <tt>:on</tt> - Specifies the contexts where this validation is active.
48
+ # Runs in all validation contexts by default (nil). You can pass a symbol
49
+ # or an array of symbols. (e.g. <tt>on: :create</tt> or
50
+ # <tt>on: :custom_validation_context</tt> or
51
+ # <tt>on: [:create, :custom_validation_context]</tt>)
50
52
  # * <tt>:if</tt> - Specifies a method, proc or string to call to determine if
51
53
  # the validation should occur (e.g. <tt>if: :allow_validation</tt>, or
52
54
  # <tt>if: Proc.new { |user| user.signup_step > 2 }</tt>). The method, proc
@@ -13,14 +13,23 @@ module ActiveRecord
13
13
  def validate_each(record, attribute, value)
14
14
  finder_class = find_finder_class_for(record)
15
15
  table = finder_class.arel_table
16
- value = map_enum_attribute(finder_class,attribute,value)
17
- value = deserialize_attribute(record, attribute, value)
18
-
19
- relation = build_relation(finder_class, table, attribute, value)
20
- relation = relation.and(table[finder_class.primary_key.to_sym].not_eq(record.id)) if record.persisted?
21
- relation = scope_relation(record, table, relation)
22
- relation = finder_class.unscoped.where(relation)
23
- relation = relation.merge(options[:conditions]) if options[:conditions]
16
+ value = map_enum_attribute(finder_class, attribute, value)
17
+
18
+ begin
19
+ relation = build_relation(finder_class, table, attribute, value)
20
+ if record.persisted?
21
+ if finder_class.primary_key
22
+ relation = relation.and(table[finder_class.primary_key.to_sym].not_eq(record.id))
23
+ else
24
+ raise UnknownPrimaryKey.new(finder_class, "Can not validate uniqueness for persisted record without primary key.")
25
+ end
26
+ end
27
+ relation = scope_relation(record, table, relation)
28
+ relation = finder_class.unscoped.where(relation)
29
+ relation = relation.merge(options[:conditions]) if options[:conditions]
30
+ rescue RangeError
31
+ relation = finder_class.none
32
+ end
24
33
 
25
34
  if relation.exists?
26
35
  error_options = options.except(:case_sensitive, :scope, :conditions)
@@ -49,7 +58,7 @@ module ActiveRecord
49
58
  def build_relation(klass, table, attribute, value) #:nodoc:
50
59
  if reflection = klass._reflect_on_association(attribute)
51
60
  attribute = reflection.foreign_key
52
- value = value.attributes[reflection.primary_key_column.name] unless value.nil?
61
+ value = value.attributes[reflection.klass.primary_key] unless value.nil?
53
62
  end
54
63
 
55
64
  attribute_name = attribute.to_s
@@ -62,14 +71,15 @@ module ActiveRecord
62
71
 
63
72
  column = klass.columns_hash[attribute_name]
64
73
  value = klass.connection.type_cast(value, column)
65
- value = value.to_s[0, column.limit] if value && column.limit && column.text?
74
+ if value.is_a?(String) && column.limit
75
+ value = value.to_s[0, column.limit]
76
+ end
66
77
 
67
78
  if !options[:case_sensitive] && value && column.text?
68
79
  # will use SQL LOWER function before comparison, unless it detects a case insensitive collation
69
80
  klass.connection.case_insensitive_comparison(table, attribute, column, value)
70
81
  else
71
- value = klass.connection.case_sensitive_modifier(value) unless value.nil?
72
- table[attribute].eq(value)
82
+ klass.connection.case_sensitive_comparison(table, attribute, column, value)
73
83
  end
74
84
  end
75
85
 
@@ -79,28 +89,14 @@ module ActiveRecord
79
89
  scope_value = record.send(reflection.foreign_key)
80
90
  scope_item = reflection.foreign_key
81
91
  else
82
- scope_value = record.read_attribute(scope_item)
83
- end
84
-
85
- # This is basically emulating an Arel::Nodes::Casted
86
- column = record.class.columns_hash[scope_item.to_s]
87
- quoted_value = record.class.connection.quote(scope_value, column)
88
- unless scope_value.nil?
89
- node = Arel::Nodes::SqlLiteral.new(quoted_value)
92
+ scope_value = record._read_attribute(scope_item)
90
93
  end
91
-
92
- relation = relation.and(table[scope_item].eq(node))
94
+ relation = relation.and(table[scope_item].eq(scope_value))
93
95
  end
94
96
 
95
97
  relation
96
98
  end
97
99
 
98
- def deserialize_attribute(record, attribute, value)
99
- coder = record.class.serialized_attributes[attribute.to_s]
100
- value = coder.dump value if value && coder
101
- value
102
- end
103
-
104
100
  def map_enum_attribute(klass, attribute, value)
105
101
  mapping = klass.defined_enums[attribute.to_s]
106
102
  value = mapping[value] if value && mapping
@@ -166,7 +162,7 @@ module ActiveRecord
166
162
  # or <tt>if: Proc.new { |user| user.signup_step > 2 }</tt>). The method,
167
163
  # proc or string should return or evaluate to a +true+ or +false+ value.
168
164
  # * <tt>:unless</tt> - Specifies a method, proc or string to call to
169
- # determine if the validation should ot occur (e.g. <tt>unless: :skip_validation</tt>,
165
+ # determine if the validation should not occur (e.g. <tt>unless: :skip_validation</tt>,
170
166
  # or <tt>unless: Proc.new { |user| user.signup_step <= 2 }</tt>). The
171
167
  # method, proc or string should return or evaluate to a +true+ or +false+
172
168
  # value.
@@ -23,16 +23,16 @@ module ActiveRecord
23
23
  case file_name
24
24
  when /^(add|remove)_.*_(?:to|from)_(.*)/
25
25
  @migration_action = $1
26
- @table_name = $2.pluralize
26
+ @table_name = normalize_table_name($2)
27
27
  when /join_table/
28
28
  if attributes.length == 2
29
29
  @migration_action = 'join'
30
- @join_tables = attributes.map(&:plural_name)
30
+ @join_tables = pluralize_table_names? ? attributes.map(&:plural_name) : attributes.map(&:singular_name)
31
31
 
32
32
  set_index_names
33
33
  end
34
34
  when /^create_(.+)/
35
- @table_name = $1.pluralize
35
+ @table_name = normalize_table_name($1)
36
36
  @migration_template = "create_table_migration.rb"
37
37
  end
38
38
  end
@@ -55,12 +55,16 @@ module ActiveRecord
55
55
  def attributes_with_index
56
56
  attributes.select { |a| !a.reference? && a.has_index? }
57
57
  end
58
-
58
+
59
59
  def validate_file_name!
60
60
  unless file_name =~ /^[_a-z0-9]+$/
61
61
  raise IllegalMigrationNameError.new(file_name)
62
62
  end
63
63
  end
64
+
65
+ def normalize_table_name(_table_name)
66
+ pluralize_table_names? ? _table_name.pluralize : _table_name.singularize
67
+ end
64
68
  end
65
69
  end
66
70
  end
@@ -9,7 +9,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration
9
9
  <% end -%>
10
10
  <% end -%>
11
11
  <% if options[:timestamps] %>
12
- t.timestamps
12
+ t.timestamps null: false
13
13
  <% end -%>
14
14
  end
15
15
  <% attributes_with_index.each do |attribute| -%>
@@ -1,7 +1,7 @@
1
1
  <% module_namespacing do -%>
2
2
  class <%= class_name %> < <%= parent_class_name.classify %>
3
3
  <% attributes.select(&:reference?).each do |attribute| -%>
4
- belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %>
4
+ belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %><%= ', required: true' if attribute.required? %>
5
5
  <% end -%>
6
6
  <% if attributes.any?(&:password_digest?) -%>
7
7
  has_secure_password
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.1.15
4
+ version: 4.2.11.3
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: 2020-05-15 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.1.15
19
+ version: 4.2.11.3
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.1.15
26
+ version: 4.2.11.3
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.1.15
33
+ version: 4.2.11.3
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.1.15
40
+ version: 4.2.11.3
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: 5.0.0
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: 5.0.0
54
+ version: '6.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
@@ -104,7 +105,9 @@ files:
104
105
  - lib/active_record/associations/preloader/through_association.rb
105
106
  - lib/active_record/associations/singular_association.rb
106
107
  - lib/active_record/associations/through_association.rb
108
+ - lib/active_record/attribute.rb
107
109
  - lib/active_record/attribute_assignment.rb
110
+ - lib/active_record/attribute_decorators.rb
108
111
  - lib/active_record/attribute_methods.rb
109
112
  - lib/active_record/attribute_methods/before_type_cast.rb
110
113
  - lib/active_record/attribute_methods/dirty.rb
@@ -114,6 +117,9 @@ files:
114
117
  - lib/active_record/attribute_methods/serialization.rb
115
118
  - lib/active_record/attribute_methods/time_zone_conversion.rb
116
119
  - lib/active_record/attribute_methods/write.rb
120
+ - lib/active_record/attribute_set.rb
121
+ - lib/active_record/attribute_set/builder.rb
122
+ - lib/active_record/attributes.rb
117
123
  - lib/active_record/autosave_association.rb
118
124
  - lib/active_record/base.rb
119
125
  - lib/active_record/callbacks.rb
@@ -137,12 +143,39 @@ files:
137
143
  - lib/active_record/connection_adapters/mysql2_adapter.rb
138
144
  - lib/active_record/connection_adapters/mysql_adapter.rb
139
145
  - lib/active_record/connection_adapters/postgresql/array_parser.rb
140
- - lib/active_record/connection_adapters/postgresql/cast.rb
146
+ - lib/active_record/connection_adapters/postgresql/column.rb
141
147
  - lib/active_record/connection_adapters/postgresql/database_statements.rb
142
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
143
174
  - lib/active_record/connection_adapters/postgresql/quoting.rb
144
175
  - lib/active_record/connection_adapters/postgresql/referential_integrity.rb
176
+ - lib/active_record/connection_adapters/postgresql/schema_definitions.rb
145
177
  - lib/active_record/connection_adapters/postgresql/schema_statements.rb
178
+ - lib/active_record/connection_adapters/postgresql/utils.rb
146
179
  - lib/active_record/connection_adapters/postgresql_adapter.rb
147
180
  - lib/active_record/connection_adapters/schema_cache.rb
148
181
  - lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -161,6 +194,7 @@ files:
161
194
  - lib/active_record/gem_version.rb
162
195
  - lib/active_record/inheritance.rb
163
196
  - lib/active_record/integration.rb
197
+ - lib/active_record/legacy_yaml_adapter.rb
164
198
  - lib/active_record/locale/en.yml
165
199
  - lib/active_record/locking/optimistic.rb
166
200
  - lib/active_record/locking/pessimistic.rb
@@ -213,6 +247,28 @@ files:
213
247
  - lib/active_record/timestamp.rb
214
248
  - lib/active_record/transactions.rb
215
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
216
272
  - lib/active_record/validations.rb
217
273
  - lib/active_record/validations/associated.rb
218
274
  - lib/active_record/validations/presence.rb
@@ -247,8 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
303
  - !ruby/object:Gem::Version
248
304
  version: '0'
249
305
  requirements: []
250
- rubyforge_project:
251
- rubygems_version: 2.5.1
306
+ rubygems_version: 3.0.3
252
307
  signing_key:
253
308
  specification_version: 4
254
309
  summary: Object-relational mapper framework (part of Rails).
@@ -1,168 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- class PostgreSQLColumn < Column
4
- module Cast
5
- def point_to_string(point)
6
- "(#{point[0]},#{point[1]})"
7
- end
8
-
9
- def string_to_point(string)
10
- if string[0] == '(' && string[-1] == ')'
11
- string = string[1...-1]
12
- end
13
- string.split(',').map{ |v| Float(v) }
14
- end
15
-
16
- def string_to_time(string)
17
- return string unless String === string
18
-
19
- case string
20
- when 'infinity'; Float::INFINITY
21
- when '-infinity'; -Float::INFINITY
22
- when / BC$/
23
- super("-" + string.sub(/ BC$/, ""))
24
- else
25
- super
26
- end
27
- end
28
-
29
- def string_to_bit(value)
30
- case value
31
- when /^0x/i
32
- value[2..-1].hex.to_s(2) # Hexadecimal notation
33
- else
34
- value # Bit-string notation
35
- end
36
- end
37
-
38
- def hstore_to_string(object, array_member = false)
39
- if Hash === object
40
- string = object.map { |k, v| "#{escape_hstore(k)}=>#{escape_hstore(v)}" }.join(',')
41
- string = escape_hstore(string) if array_member
42
- string
43
- else
44
- object
45
- end
46
- end
47
-
48
- def string_to_hstore(string)
49
- if string.nil?
50
- nil
51
- elsif String === string
52
- Hash[string.scan(HstorePair).map { |k, v|
53
- v = v.upcase == 'NULL' ? nil : v.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1')
54
- k = k.gsub(/\A"(.*)"\Z/m,'\1').gsub(/\\(.)/, '\1')
55
- [k, v]
56
- }]
57
- else
58
- string
59
- end
60
- end
61
-
62
- def json_to_string(object)
63
- if Hash === object || Array === object
64
- ActiveSupport::JSON.encode(object)
65
- else
66
- object
67
- end
68
- end
69
-
70
- def array_to_string(value, column, adapter)
71
- casted_values = value.map do |val|
72
- if String === val
73
- if val == "NULL"
74
- "\"#{val}\""
75
- else
76
- quote_and_escape(adapter.type_cast(val, column, true))
77
- end
78
- else
79
- adapter.type_cast(val, column, true)
80
- end
81
- end
82
- "{#{casted_values.join(',')}}"
83
- end
84
-
85
- def range_to_string(object)
86
- from = object.begin.respond_to?(:infinite?) && object.begin.infinite? ? '' : object.begin
87
- to = object.end.respond_to?(:infinite?) && object.end.infinite? ? '' : object.end
88
- "[#{from},#{to}#{object.exclude_end? ? ')' : ']'}"
89
- end
90
-
91
- def string_to_json(string)
92
- if String === string
93
- ActiveSupport::JSON.decode(string)
94
- else
95
- string
96
- end
97
- end
98
-
99
- def string_to_cidr(string)
100
- if string.nil?
101
- nil
102
- elsif String === string
103
- begin
104
- IPAddr.new(string)
105
- rescue ArgumentError
106
- nil
107
- end
108
- else
109
- string
110
- end
111
- end
112
-
113
- def cidr_to_string(object)
114
- if IPAddr === object
115
- "#{object.to_s}/#{object.instance_variable_get(:@mask_addr).to_s(2).count('1')}"
116
- else
117
- object
118
- end
119
- end
120
-
121
- def string_to_array(string, oid)
122
- parse_pg_array(string).map {|val| type_cast_array(oid, val)}
123
- end
124
-
125
- private
126
-
127
- HstorePair = begin
128
- quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"/
129
- unquoted_string = /(?:\\.|[^\s,])[^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*/
130
- /(#{quoted_string}|#{unquoted_string})\s*=>\s*(#{quoted_string}|#{unquoted_string})/
131
- end
132
-
133
- def escape_hstore(value)
134
- if value.nil?
135
- 'NULL'
136
- else
137
- if value == ""
138
- '""'
139
- else
140
- '"%s"' % value.to_s.gsub(/(["\\])/, '\\\\\1')
141
- end
142
- end
143
- end
144
-
145
- ARRAY_ESCAPE = "\\" * 2 * 2 # escape the backslash twice for PG arrays
146
-
147
- def quote_and_escape(value)
148
- case value
149
- when "NULL", Numeric
150
- value
151
- else
152
- value = value.gsub(/\\/, ARRAY_ESCAPE)
153
- value.gsub!(/"/,"\\\"")
154
- "\"#{value}\""
155
- end
156
- end
157
-
158
- def type_cast_array(oid, value)
159
- if ::Array === value
160
- value.map {|item| type_cast_array(oid, item)}
161
- else
162
- oid.type_cast value
163
- end
164
- end
165
- end
166
- end
167
- end
168
- end