sequel 5.35.0 → 5.40.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +68 -0
  3. data/README.rdoc +2 -2
  4. data/doc/cheat_sheet.rdoc +5 -5
  5. data/doc/code_order.rdoc +0 -12
  6. data/doc/fork_safety.rdoc +84 -0
  7. data/doc/model_plugins.rdoc +1 -1
  8. data/doc/opening_databases.rdoc +5 -1
  9. data/doc/postgresql.rdoc +1 -1
  10. data/doc/querying.rdoc +3 -3
  11. data/doc/release_notes/5.36.0.txt +60 -0
  12. data/doc/release_notes/5.37.0.txt +30 -0
  13. data/doc/release_notes/5.38.0.txt +28 -0
  14. data/doc/release_notes/5.39.0.txt +19 -0
  15. data/doc/release_notes/5.40.0.txt +40 -0
  16. data/doc/transactions.rdoc +0 -8
  17. data/doc/validations.rdoc +1 -1
  18. data/lib/sequel/adapters/jdbc.rb +15 -3
  19. data/lib/sequel/adapters/jdbc/mysql.rb +4 -4
  20. data/lib/sequel/adapters/odbc.rb +4 -6
  21. data/lib/sequel/adapters/shared/mssql.rb +35 -5
  22. data/lib/sequel/adapters/shared/oracle.rb +13 -7
  23. data/lib/sequel/adapters/shared/postgres.rb +40 -2
  24. data/lib/sequel/adapters/shared/sqlite.rb +35 -1
  25. data/lib/sequel/adapters/utils/mysql_mysql2.rb +1 -0
  26. data/lib/sequel/core.rb +5 -6
  27. data/lib/sequel/database/connecting.rb +0 -1
  28. data/lib/sequel/database/misc.rb +14 -0
  29. data/lib/sequel/database/schema_generator.rb +6 -0
  30. data/lib/sequel/database/schema_methods.rb +16 -6
  31. data/lib/sequel/database/transactions.rb +2 -2
  32. data/lib/sequel/dataset/actions.rb +10 -6
  33. data/lib/sequel/dataset/features.rb +10 -0
  34. data/lib/sequel/dataset/prepared_statements.rb +2 -0
  35. data/lib/sequel/dataset/sql.rb +32 -10
  36. data/lib/sequel/extensions/blank.rb +6 -0
  37. data/lib/sequel/extensions/date_arithmetic.rb +6 -3
  38. data/lib/sequel/extensions/eval_inspect.rb +2 -0
  39. data/lib/sequel/extensions/inflector.rb +6 -0
  40. data/lib/sequel/extensions/migration.rb +10 -1
  41. data/lib/sequel/extensions/pg_array.rb +1 -0
  42. data/lib/sequel/extensions/pg_interval.rb +22 -6
  43. data/lib/sequel/extensions/pg_json_ops.rb +44 -2
  44. data/lib/sequel/extensions/pg_row.rb +1 -0
  45. data/lib/sequel/extensions/pg_row_ops.rb +24 -0
  46. data/lib/sequel/extensions/query.rb +3 -0
  47. data/lib/sequel/extensions/schema_dumper.rb +3 -3
  48. data/lib/sequel/model.rb +1 -1
  49. data/lib/sequel/model/associations.rb +1 -0
  50. data/lib/sequel/model/base.rb +23 -4
  51. data/lib/sequel/model/plugins.rb +6 -0
  52. data/lib/sequel/plugins/association_proxies.rb +3 -0
  53. data/lib/sequel/plugins/class_table_inheritance.rb +0 -5
  54. data/lib/sequel/plugins/composition.rb +5 -1
  55. data/lib/sequel/plugins/constraint_validations.rb +2 -1
  56. data/lib/sequel/plugins/dataset_associations.rb +4 -1
  57. data/lib/sequel/plugins/dirty.rb +44 -0
  58. data/lib/sequel/plugins/nested_attributes.rb +3 -1
  59. data/lib/sequel/plugins/pg_array_associations.rb +4 -0
  60. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +2 -0
  61. data/lib/sequel/plugins/single_table_inheritance.rb +7 -0
  62. data/lib/sequel/plugins/tree.rb +9 -4
  63. data/lib/sequel/timezones.rb +8 -3
  64. data/lib/sequel/version.rb +1 -1
  65. metadata +33 -21
@@ -482,6 +482,7 @@ module Sequel
482
482
  row_type(db_type, v)
483
483
  end
484
484
  private meth
485
+ alias_method(meth, meth)
485
486
  end
486
487
 
487
488
  nil
@@ -158,6 +158,30 @@ module Sequel
158
158
  end
159
159
  end
160
160
  end
161
+
162
+ # :nocov:
163
+ if defined?(PGRow::ArrayRow)
164
+ # :nocov:
165
+ class PGRow::ArrayRow
166
+ # Wrap the PGRow::ArrayRow instance in an PGRowOp, allowing you to easily use
167
+ # the PostgreSQL row functions and operators with literal rows.
168
+ def op
169
+ Sequel.pg_row_op(self)
170
+ end
171
+ end
172
+ end
173
+
174
+ # :nocov:
175
+ if defined?(PGRow::HashRow)
176
+ # :nocov:
177
+ class PGRow::HashRow
178
+ # Wrap the PGRow::ArrayRow instance in an PGRowOp, allowing you to easily use
179
+ # the PostgreSQL row functions and operators with literal rows.
180
+ def op
181
+ Sequel.pg_row_op(self)
182
+ end
183
+ end
184
+ end
161
185
  end
162
186
 
163
187
  module SQL::Builders
@@ -74,6 +74,9 @@ module Sequel
74
74
  raise(Sequel::Error, "method #{method.inspect} did not return a dataset") unless @dataset.is_a?(Dataset)
75
75
  self
76
76
  end
77
+ # :nocov:
78
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
79
+ # :nocov:
77
80
  end
78
81
  end
79
82
 
@@ -37,7 +37,7 @@ module Sequel
37
37
  {:type =>schema[:type] == :boolean ? TrueClass : Integer}
38
38
  when /\Abigint(?:\((?:\d+)\))?(?: unsigned)?\z/
39
39
  {:type=>:Bignum}
40
- when /\A(?:real|float(?: unsigned)?|double(?: precision)?|double\(\d+,\d+\)(?: unsigned)?)\z/
40
+ when /\A(?:real|float|double(?: precision)?|double\(\d+,\d+\))(?: unsigned)?\z/
41
41
  {:type=>Float}
42
42
  when 'boolean', 'bit', 'bool'
43
43
  {:type=>TrueClass}
@@ -57,7 +57,7 @@ module Sequel
57
57
  {:type=>String, :size=>($1.to_i if $1)}
58
58
  when /\A(?:small)?money\z/
59
59
  {:type=>BigDecimal, :size=>[19,2]}
60
- when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?\z/
60
+ when /\A(?:decimal|numeric|number)(?:\((\d+)(?:,\s*(\d+))?\))?(?: unsigned)?\z/
61
61
  s = [($1.to_i if $1), ($2.to_i if $2)].compact
62
62
  {:type=>BigDecimal, :size=>(s.empty? ? nil : s)}
63
63
  when /\A(?:bytea|(?:tiny|medium|long)?blob|(?:var)?binary)(?:\((\d+)\))?\z/
@@ -218,7 +218,7 @@ END_MIG
218
218
  gen.foreign_key(name, table, col_opts)
219
219
  else
220
220
  gen.column(name, type, col_opts)
221
- if [Integer, :Bignum, Float].include?(type) && schema[:db_type] =~ / unsigned\z/io
221
+ if [Integer, :Bignum, Float, BigDecimal].include?(type) && schema[:db_type] =~ / unsigned\z/io
222
222
  gen.check(Sequel::SQL::Identifier.new(name) >= 0)
223
223
  end
224
224
  end
@@ -79,7 +79,7 @@ module Sequel
79
79
  def_Model(::Sequel)
80
80
 
81
81
  # The setter methods (methods ending with =) that are never allowed
82
- # to be called automatically via +set+/+update+/+new+/etc..
82
+ # to be called automatically via +set+/+update+/+new+/etc.
83
83
  RESTRICTED_SETTER_METHODS = instance_methods.map(&:to_s).select{|l| l.end_with?('=')}.freeze
84
84
  end
85
85
  end
@@ -1930,6 +1930,7 @@ module Sequel
1930
1930
  # super to be called.
1931
1931
  def association_module_def(name, opts=OPTS, &block)
1932
1932
  association_module(opts).send(:define_method, name, &block)
1933
+ association_module(opts).send(:alias_method, name, name)
1933
1934
  end
1934
1935
 
1935
1936
  # Add a private method to the module included in the class.
@@ -508,6 +508,9 @@ module Sequel
508
508
 
509
509
  m.configure(self, *args, &block) if m.respond_to?(:configure)
510
510
  end
511
+ # :nocov:
512
+ ruby2_keywords(:plugin) if respond_to?(:ruby2_keywords, true)
513
+ # :nocov:
511
514
 
512
515
  # Returns primary key attribute hash. If using a composite primary key
513
516
  # value such be an array with values for each primary key in the correct
@@ -726,8 +729,14 @@ module Sequel
726
729
  im = instance_methods
727
730
  overridable_methods_module.module_eval do
728
731
  meth = :"#{column}="
729
- define_method(column){self[column]} unless im.include?(column)
730
- define_method(meth){|v| self[column] = v} unless im.include?(meth)
732
+ unless im.include?(column)
733
+ define_method(column){self[column]}
734
+ alias_method(column, column)
735
+ end
736
+ unless im.include?(meth)
737
+ define_method(meth){|v| self[column] = v}
738
+ alias_method(meth, meth)
739
+ end
731
740
  end
732
741
  end
733
742
 
@@ -740,8 +749,14 @@ module Sequel
740
749
  im = instance_methods
741
750
  columns.each do |column|
742
751
  meth = :"#{column}="
743
- overridable_methods_module.module_eval("def #{column}; self[:#{column}] end", __FILE__, __LINE__) unless im.include?(column)
744
- overridable_methods_module.module_eval("def #{meth}(v); self[:#{column}] = v end", __FILE__, __LINE__) unless im.include?(meth)
752
+ unless im.include?(column)
753
+ overridable_methods_module.module_eval("def #{column}; self[:#{column}] end", __FILE__, __LINE__)
754
+ overridable_methods_module.send(:alias_method, column, column)
755
+ end
756
+ unless im.include?(meth)
757
+ overridable_methods_module.module_eval("def #{meth}(v); self[:#{column}] = v end", __FILE__, __LINE__)
758
+ overridable_methods_module.send(:alias_method, meth, meth)
759
+ end
745
760
  end
746
761
  end
747
762
 
@@ -756,6 +771,10 @@ module Sequel
756
771
  else
757
772
  define_singleton_method(meth){|*args, &block| dataset.public_send(meth, *args, &block)}
758
773
  end
774
+ singleton_class.send(:alias_method, meth, meth)
775
+ # :nocov:
776
+ singleton_class.send(:ruby2_keywords, meth) if respond_to?(:ruby2_keywords, true)
777
+ # :nocov:
759
778
  end
760
779
 
761
780
  # Get the schema from the database, fall back on checking the columns
@@ -31,6 +31,9 @@ module Sequel
31
31
  def self.def_dataset_methods(mod, meths)
32
32
  Array(meths).each do |meth|
33
33
  mod.class_eval("def #{meth}(*args, &block); dataset.#{meth}(*args, &block) end", __FILE__, __LINE__)
34
+ # :nocov:
35
+ mod.send(:ruby2_keywords, meth) if respond_to?(:ruby2_keywords, true)
36
+ # :nocov:
34
37
  end
35
38
  end
36
39
 
@@ -119,6 +122,7 @@ module Sequel
119
122
 
120
123
  model.send(:define_method, meth, &block)
121
124
  model.send(:private, meth)
125
+ model.send(:alias_method, meth, meth)
122
126
  call_meth
123
127
  end
124
128
 
@@ -140,6 +144,8 @@ module Sequel
140
144
  keyword = :required
141
145
  when :key, :keyrest
142
146
  keyword ||= true
147
+ else
148
+ raise Error, "invalid arg_type passed to _define_sequel_method_arg_numbers: #{arg_type}"
143
149
  end
144
150
  end
145
151
  arity = callable.arity
@@ -99,6 +99,9 @@ module Sequel
99
99
  end
100
100
  v.public_send(meth, *args, &block)
101
101
  end
102
+ # :nocov:
103
+ ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
104
+ # :nocov:
102
105
  end
103
106
 
104
107
  module ClassMethods
@@ -433,11 +433,6 @@ module Sequel
433
433
  end
434
434
  end
435
435
  end
436
-
437
- # Don't allow use of prepared statements.
438
- def use_prepared_statements_for?(type)
439
- false
440
- end
441
436
  end
442
437
  end
443
438
  end
@@ -143,10 +143,14 @@ module Sequel
143
143
  compositions[name] = send(composer_meth)
144
144
  end
145
145
  end
146
- define_method("#{name}=") do |v|
146
+ alias_method(name, name)
147
+
148
+ meth = :"#{name}="
149
+ define_method(meth) do |v|
147
150
  modified!
148
151
  compositions[name] = v
149
152
  end
153
+ alias_method(meth, meth)
150
154
  end
151
155
  end
152
156
 
@@ -220,7 +220,8 @@ module Sequel
220
220
  '%'
221
221
  when '%'
222
222
  '.*'
223
- when '_'
223
+ else
224
+ #when '_'
224
225
  '.'
225
226
  end
226
227
  end
@@ -62,7 +62,10 @@ module Sequel
62
62
  ret = super
63
63
  r = association_reflection(name)
64
64
  meth = r.returns_array? ? name : pluralize(name).to_sym
65
- dataset_module{define_method(meth){associated(name)}}
65
+ dataset_module do
66
+ define_method(meth){associated(name)}
67
+ alias_method(meth, meth)
68
+ end
66
69
  ret
67
70
  end
68
71
 
@@ -41,6 +41,15 @@ module Sequel
41
41
  # artist.column_changes # => {}
42
42
  # artist.previous_changes # => {:name=>['Foo', 'Bar']}
43
43
  #
44
+ # artist.column_previously_was(:name)
45
+ # # => 'Foo'
46
+ # artist.column_previously_changed?(:name)
47
+ # # => true
48
+ # artist.column_previously_changed?(:name, from: 'Foo', to: 'Bar')
49
+ # # => true
50
+ # artist.column_previously_changed?(:name, from: 'Foo', to: 'Baz')
51
+ # # => false
52
+ #
44
53
  # There is one caveat; when used with a column that also uses the
45
54
  # serialization plugin, setting the column back to its original value
46
55
  # after changing it is not correctly detected and will leave an entry
@@ -105,6 +114,41 @@ module Sequel
105
114
  initial_values.has_key?(column)
106
115
  end
107
116
 
117
+ # Whether the column was previously changed.
118
+ # Options:
119
+ # :from :: If given, the previous initial value of the column must match this
120
+ # :to :: If given, the previous changed value of the column must match this
121
+ #
122
+ # update(name: 'Current')
123
+ # previous_changes # => {:name=>['Initial', 'Current']}
124
+ # column_previously_changed?(:name) # => true
125
+ # column_previously_changed?(:id) # => false
126
+ # column_previously_changed?(:name, from: 'Initial', to: 'Current') # => true
127
+ # column_previously_changed?(:name, from: 'Foo', to: 'Current') # => false
128
+ def column_previously_changed?(column, opts=OPTS)
129
+ return false unless (pc = @previous_changes) && (val = pc[column])
130
+
131
+ if opts.has_key?(:from)
132
+ return false unless val[0] == opts[:from]
133
+ end
134
+
135
+ if opts.has_key?(:to)
136
+ return false unless val[1] == opts[:to]
137
+ end
138
+
139
+ true
140
+ end
141
+
142
+ # The previous value of the column, which is the initial value of
143
+ # the column before the object was previously saved.
144
+ #
145
+ # initial_value(:name) # => 'Initial'
146
+ # update(name: 'Current')
147
+ # column_previously_was(:name) # => 'Initial'
148
+ def column_previously_was(column)
149
+ (pc = @previous_changes) && (val = pc[column]) && val[0]
150
+ end
151
+
108
152
  # Freeze internal data structures
109
153
  def freeze
110
154
  initial_values.freeze
@@ -145,9 +145,11 @@ module Sequel
145
145
  # class.
146
146
  def def_nested_attribute_method(reflection)
147
147
  @nested_attributes_module.class_eval do
148
- define_method("#{reflection[:name]}_attributes=") do |v|
148
+ meth = :"#{reflection[:name]}_attributes="
149
+ define_method(meth) do |v|
149
150
  set_nested_attributes(reflection[:name], v)
150
151
  end
152
+ alias_method meth, meth
151
153
  end
152
154
  end
153
155
  end
@@ -520,7 +520,9 @@ module Sequel
520
520
  def many_to_pg_array_association_filter_expression(op, ref, obj)
521
521
  pk = ref.qualify(model.table_name, ref.primary_key)
522
522
  key = ref[:key]
523
+ # :nocov:
523
524
  expr = case obj
525
+ # :nocov:
524
526
  when Sequel::Model
525
527
  if (assoc_pks = obj.get_column_value(key)) && !assoc_pks.empty?
526
528
  Sequel[pk=>assoc_pks.to_a]
@@ -540,7 +542,9 @@ module Sequel
540
542
  # Support filtering by pg_array_to_many associations using a subquery.
541
543
  def pg_array_to_many_association_filter_expression(op, ref, obj)
542
544
  key = ref.qualify(model.table_name, ref[:key_column])
545
+ # :nocov:
543
546
  expr = case obj
547
+ # :nocov:
544
548
  when Sequel::Model
545
549
  if pkv = obj.get_column_value(ref.primary_key_method)
546
550
  Sequel.pg_array_op(key).contains(Sequel.pg_array([pkv], ref.array_type))
@@ -250,7 +250,9 @@ module Sequel
250
250
  messages = model.pg_auto_constraint_validations_messages
251
251
 
252
252
  unless override
253
+ # :nocov:
253
254
  case e
255
+ # :nocov:
254
256
  when Sequel::NotNullConstraintViolation
255
257
  if column = info[:column]
256
258
  add_pg_constraint_validation_error([m.call(column)], messages[:not_null])
@@ -250,6 +250,13 @@ module Sequel
250
250
  end
251
251
  super
252
252
  end
253
+
254
+ private
255
+
256
+ # Don't allow use of prepared statements.
257
+ def use_prepared_statements_for?(type)
258
+ false
259
+ end
253
260
  end
254
261
  end
255
262
  end
@@ -45,6 +45,7 @@ module Sequel
45
45
 
46
46
  model.instance_exec do
47
47
  @parent_column = opts[:key]
48
+ @qualified_parent_column = Sequel.deep_qualify(table_name, opts[:key])
48
49
  @tree_order = opts[:order]
49
50
  @parent_association_name = parent
50
51
  @children_association_name = children
@@ -59,17 +60,21 @@ module Sequel
59
60
  # The column symbol or array of column symbols on which to order the tree.
60
61
  attr_accessor :tree_order
61
62
 
62
- # The symbol for the column containing the value pointing to the
63
- # parent of the leaf.
63
+ # The symbol or array of symbols for the column containing the value pointing to the
64
+ # parent of the node.
64
65
  attr_accessor :parent_column
65
66
 
67
+ # The qualified identifier or array of qualified identifiers for the column
68
+ # containing the value pointing to the parent of the node.
69
+ attr_accessor :qualified_parent_column
70
+
66
71
  # The association name for the parent association
67
72
  attr_reader :parent_association_name
68
73
 
69
74
  # The association name for the children association
70
75
  attr_reader :children_association_name
71
76
 
72
- Plugins.inherited_instance_variables(self, :@parent_column=>nil, :@tree_order=>nil, :@parent_association_name=>nil, :@children_association_name=>nil)
77
+ Plugins.inherited_instance_variables(self, :@parent_column=>nil, :@qualified_parent_column=>nil, :@tree_order=>nil, :@parent_association_name=>nil, :@children_association_name=>nil)
73
78
  Plugins.def_dataset_methods(self, [:roots, :roots_dataset])
74
79
 
75
80
  # Should freeze tree order if it is an array when freezing the model class.
@@ -151,7 +156,7 @@ module Sequel
151
156
  #
152
157
  # TreeClass.roots_dataset # => Sequel::Dataset instance
153
158
  def roots_dataset
154
- ds = where(Sequel.or(Array(model.parent_column).zip([])))
159
+ ds = where(Sequel.or(Array(model.qualified_parent_column).zip([])))
155
160
  ds = ds.order(*model.tree_order) if model.tree_order
156
161
  ds
157
162
  end
@@ -10,9 +10,14 @@ module Sequel
10
10
  Timezones = SequelMethods
11
11
  Deprecation.deprecate_constant(self, :Timezones)
12
12
 
13
- # Sequel doesn't pay much attention to timezones by default, but you can set it
14
- # handle timezones if you want. There are three separate timezone settings, application_timezone,
15
- # database_timezone, and typecast_timezone. All three timezones have getter and setter methods.
13
+ # Sequel doesn't pay much attention to timezones by default, but you can set it to
14
+ # handle timezones if you want. There are three separate timezone settings:
15
+ #
16
+ # * application_timezone
17
+ # * database_timezone
18
+ # * typecast_timezone
19
+ #
20
+ # All three timezones have getter and setter methods.
16
21
  # You can set all three timezones to the same value at once via <tt>Sequel.default_timezone=</tt>.
17
22
  #
18
23
  # The only timezone values that are supported by default are <tt>:utc</tt> (convert to UTC),
@@ -6,7 +6,7 @@ module Sequel
6
6
 
7
7
  # The minor version of Sequel. Bumped for every non-patch level
8
8
  # release, generally around once a month.
9
- MINOR = 35
9
+ MINOR = 40
10
10
 
11
11
  # The tiny version of Sequel. Usually 0, only bumped for bugfix
12
12
  # releases that fix regressions from previous versions.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.35.0
4
+ version: 5.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-01 00:00:00.000000000 Z
11
+ date: 2021-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -117,9 +117,8 @@ extra_rdoc_files:
117
117
  - README.rdoc
118
118
  - CHANGELOG
119
119
  - MIT-LICENSE
120
- - doc/association_basics.rdoc
121
- - doc/model_dataset_method_design.rdoc
122
120
  - doc/advanced_associations.rdoc
121
+ - doc/association_basics.rdoc
123
122
  - doc/bin_sequel.rdoc
124
123
  - doc/cheat_sheet.rdoc
125
124
  - doc/code_order.rdoc
@@ -127,36 +126,30 @@ extra_rdoc_files:
127
126
  - doc/dataset_basics.rdoc
128
127
  - doc/dataset_filtering.rdoc
129
128
  - doc/extensions.rdoc
129
+ - doc/fork_safety.rdoc
130
130
  - doc/mass_assignment.rdoc
131
131
  - doc/migration.rdoc
132
- - doc/opening_databases.rdoc
132
+ - doc/model_dataset_method_design.rdoc
133
133
  - doc/model_hooks.rdoc
134
134
  - doc/model_plugins.rdoc
135
- - doc/object_model.rdoc
136
- - doc/sql.rdoc
137
135
  - doc/mssql_stored_procedures.rdoc
138
- - doc/thread_safety.rdoc
136
+ - doc/object_model.rdoc
137
+ - doc/opening_databases.rdoc
139
138
  - doc/postgresql.rdoc
140
- - doc/querying.rdoc
141
139
  - doc/prepared_statements.rdoc
140
+ - doc/querying.rdoc
142
141
  - doc/reflection.rdoc
143
- - doc/security.rdoc
144
- - doc/virtual_rows.rdoc
145
142
  - doc/schema_modification.rdoc
143
+ - doc/security.rdoc
146
144
  - doc/sharding.rdoc
145
+ - doc/sql.rdoc
147
146
  - doc/testing.rdoc
148
- - doc/validations.rdoc
147
+ - doc/thread_safety.rdoc
149
148
  - doc/transactions.rdoc
150
- - doc/release_notes/5.5.0.txt
151
- - doc/release_notes/5.6.0.txt
149
+ - doc/validations.rdoc
150
+ - doc/virtual_rows.rdoc
152
151
  - doc/release_notes/5.0.0.txt
153
152
  - doc/release_notes/5.1.0.txt
154
- - doc/release_notes/5.2.0.txt
155
- - doc/release_notes/5.3.0.txt
156
- - doc/release_notes/5.4.0.txt
157
- - doc/release_notes/5.8.0.txt
158
- - doc/release_notes/5.7.0.txt
159
- - doc/release_notes/5.9.0.txt
160
153
  - doc/release_notes/5.10.0.txt
161
154
  - doc/release_notes/5.11.0.txt
162
155
  - doc/release_notes/5.12.0.txt
@@ -167,6 +160,7 @@ extra_rdoc_files:
167
160
  - doc/release_notes/5.17.0.txt
168
161
  - doc/release_notes/5.18.0.txt
169
162
  - doc/release_notes/5.19.0.txt
163
+ - doc/release_notes/5.2.0.txt
170
164
  - doc/release_notes/5.20.0.txt
171
165
  - doc/release_notes/5.21.0.txt
172
166
  - doc/release_notes/5.22.0.txt
@@ -177,12 +171,24 @@ extra_rdoc_files:
177
171
  - doc/release_notes/5.27.0.txt
178
172
  - doc/release_notes/5.28.0.txt
179
173
  - doc/release_notes/5.29.0.txt
174
+ - doc/release_notes/5.3.0.txt
180
175
  - doc/release_notes/5.30.0.txt
181
176
  - doc/release_notes/5.31.0.txt
182
177
  - doc/release_notes/5.32.0.txt
183
178
  - doc/release_notes/5.33.0.txt
184
179
  - doc/release_notes/5.34.0.txt
185
180
  - doc/release_notes/5.35.0.txt
181
+ - doc/release_notes/5.36.0.txt
182
+ - doc/release_notes/5.37.0.txt
183
+ - doc/release_notes/5.38.0.txt
184
+ - doc/release_notes/5.39.0.txt
185
+ - doc/release_notes/5.4.0.txt
186
+ - doc/release_notes/5.40.0.txt
187
+ - doc/release_notes/5.5.0.txt
188
+ - doc/release_notes/5.6.0.txt
189
+ - doc/release_notes/5.7.0.txt
190
+ - doc/release_notes/5.8.0.txt
191
+ - doc/release_notes/5.9.0.txt
186
192
  files:
187
193
  - CHANGELOG
188
194
  - MIT-LICENSE
@@ -197,6 +203,7 @@ files:
197
203
  - doc/dataset_basics.rdoc
198
204
  - doc/dataset_filtering.rdoc
199
205
  - doc/extensions.rdoc
206
+ - doc/fork_safety.rdoc
200
207
  - doc/mass_assignment.rdoc
201
208
  - doc/migration.rdoc
202
209
  - doc/model_dataset_method_design.rdoc
@@ -239,7 +246,12 @@ files:
239
246
  - doc/release_notes/5.33.0.txt
240
247
  - doc/release_notes/5.34.0.txt
241
248
  - doc/release_notes/5.35.0.txt
249
+ - doc/release_notes/5.36.0.txt
250
+ - doc/release_notes/5.37.0.txt
251
+ - doc/release_notes/5.38.0.txt
252
+ - doc/release_notes/5.39.0.txt
242
253
  - doc/release_notes/5.4.0.txt
254
+ - doc/release_notes/5.40.0.txt
243
255
  - doc/release_notes/5.5.0.txt
244
256
  - doc/release_notes/5.6.0.txt
245
257
  - doc/release_notes/5.7.0.txt
@@ -545,7 +557,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
545
557
  - !ruby/object:Gem::Version
546
558
  version: '0'
547
559
  requirements: []
548
- rubygems_version: 3.1.2
560
+ rubygems_version: 3.2.3
549
561
  signing_key:
550
562
  specification_version: 4
551
563
  summary: The Database Toolkit for Ruby