epugh-sequel 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. data/README.rdoc +652 -0
  2. data/VERSION.yml +4 -0
  3. data/bin/sequel +104 -0
  4. data/lib/sequel.rb +1 -0
  5. data/lib/sequel/adapters/ado.rb +85 -0
  6. data/lib/sequel/adapters/db2.rb +132 -0
  7. data/lib/sequel/adapters/dbi.rb +101 -0
  8. data/lib/sequel/adapters/do.rb +197 -0
  9. data/lib/sequel/adapters/do/mysql.rb +38 -0
  10. data/lib/sequel/adapters/do/postgres.rb +92 -0
  11. data/lib/sequel/adapters/do/sqlite.rb +31 -0
  12. data/lib/sequel/adapters/firebird.rb +307 -0
  13. data/lib/sequel/adapters/informix.rb +75 -0
  14. data/lib/sequel/adapters/jdbc.rb +485 -0
  15. data/lib/sequel/adapters/jdbc/h2.rb +62 -0
  16. data/lib/sequel/adapters/jdbc/mysql.rb +56 -0
  17. data/lib/sequel/adapters/jdbc/oracle.rb +23 -0
  18. data/lib/sequel/adapters/jdbc/postgresql.rb +101 -0
  19. data/lib/sequel/adapters/jdbc/sqlite.rb +43 -0
  20. data/lib/sequel/adapters/mysql.rb +370 -0
  21. data/lib/sequel/adapters/odbc.rb +184 -0
  22. data/lib/sequel/adapters/openbase.rb +57 -0
  23. data/lib/sequel/adapters/oracle.rb +140 -0
  24. data/lib/sequel/adapters/postgres.rb +453 -0
  25. data/lib/sequel/adapters/shared/mssql.rb +93 -0
  26. data/lib/sequel/adapters/shared/mysql.rb +341 -0
  27. data/lib/sequel/adapters/shared/oracle.rb +62 -0
  28. data/lib/sequel/adapters/shared/postgres.rb +743 -0
  29. data/lib/sequel/adapters/shared/progress.rb +34 -0
  30. data/lib/sequel/adapters/shared/sqlite.rb +263 -0
  31. data/lib/sequel/adapters/sqlite.rb +243 -0
  32. data/lib/sequel/adapters/utils/date_format.rb +21 -0
  33. data/lib/sequel/adapters/utils/stored_procedures.rb +75 -0
  34. data/lib/sequel/adapters/utils/unsupported.rb +62 -0
  35. data/lib/sequel/connection_pool.rb +258 -0
  36. data/lib/sequel/core.rb +204 -0
  37. data/lib/sequel/core_sql.rb +185 -0
  38. data/lib/sequel/database.rb +687 -0
  39. data/lib/sequel/database/schema_generator.rb +324 -0
  40. data/lib/sequel/database/schema_methods.rb +164 -0
  41. data/lib/sequel/database/schema_sql.rb +324 -0
  42. data/lib/sequel/dataset.rb +422 -0
  43. data/lib/sequel/dataset/convenience.rb +237 -0
  44. data/lib/sequel/dataset/prepared_statements.rb +220 -0
  45. data/lib/sequel/dataset/sql.rb +1105 -0
  46. data/lib/sequel/deprecated.rb +529 -0
  47. data/lib/sequel/exceptions.rb +44 -0
  48. data/lib/sequel/extensions/blank.rb +42 -0
  49. data/lib/sequel/extensions/inflector.rb +288 -0
  50. data/lib/sequel/extensions/pagination.rb +96 -0
  51. data/lib/sequel/extensions/pretty_table.rb +78 -0
  52. data/lib/sequel/extensions/query.rb +48 -0
  53. data/lib/sequel/extensions/string_date_time.rb +47 -0
  54. data/lib/sequel/metaprogramming.rb +44 -0
  55. data/lib/sequel/migration.rb +212 -0
  56. data/lib/sequel/model.rb +142 -0
  57. data/lib/sequel/model/association_reflection.rb +263 -0
  58. data/lib/sequel/model/associations.rb +1024 -0
  59. data/lib/sequel/model/base.rb +911 -0
  60. data/lib/sequel/model/deprecated.rb +188 -0
  61. data/lib/sequel/model/deprecated_hooks.rb +103 -0
  62. data/lib/sequel/model/deprecated_inflector.rb +335 -0
  63. data/lib/sequel/model/deprecated_validations.rb +384 -0
  64. data/lib/sequel/model/errors.rb +37 -0
  65. data/lib/sequel/model/exceptions.rb +7 -0
  66. data/lib/sequel/model/inflections.rb +230 -0
  67. data/lib/sequel/model/plugins.rb +74 -0
  68. data/lib/sequel/object_graph.rb +230 -0
  69. data/lib/sequel/plugins/caching.rb +122 -0
  70. data/lib/sequel/plugins/hook_class_methods.rb +122 -0
  71. data/lib/sequel/plugins/schema.rb +53 -0
  72. data/lib/sequel/plugins/single_table_inheritance.rb +63 -0
  73. data/lib/sequel/plugins/validation_class_methods.rb +373 -0
  74. data/lib/sequel/sql.rb +854 -0
  75. data/lib/sequel/version.rb +11 -0
  76. data/lib/sequel_core.rb +1 -0
  77. data/lib/sequel_model.rb +1 -0
  78. data/spec/adapters/ado_spec.rb +46 -0
  79. data/spec/adapters/firebird_spec.rb +376 -0
  80. data/spec/adapters/informix_spec.rb +96 -0
  81. data/spec/adapters/mysql_spec.rb +875 -0
  82. data/spec/adapters/oracle_spec.rb +272 -0
  83. data/spec/adapters/postgres_spec.rb +692 -0
  84. data/spec/adapters/spec_helper.rb +10 -0
  85. data/spec/adapters/sqlite_spec.rb +550 -0
  86. data/spec/core/connection_pool_spec.rb +526 -0
  87. data/spec/core/core_ext_spec.rb +156 -0
  88. data/spec/core/core_sql_spec.rb +528 -0
  89. data/spec/core/database_spec.rb +1214 -0
  90. data/spec/core/dataset_spec.rb +3513 -0
  91. data/spec/core/expression_filters_spec.rb +363 -0
  92. data/spec/core/migration_spec.rb +261 -0
  93. data/spec/core/object_graph_spec.rb +280 -0
  94. data/spec/core/pretty_table_spec.rb +58 -0
  95. data/spec/core/schema_generator_spec.rb +167 -0
  96. data/spec/core/schema_spec.rb +778 -0
  97. data/spec/core/spec_helper.rb +82 -0
  98. data/spec/core/version_spec.rb +7 -0
  99. data/spec/extensions/blank_spec.rb +67 -0
  100. data/spec/extensions/caching_spec.rb +201 -0
  101. data/spec/extensions/hook_class_methods_spec.rb +470 -0
  102. data/spec/extensions/inflector_spec.rb +122 -0
  103. data/spec/extensions/pagination_spec.rb +99 -0
  104. data/spec/extensions/pretty_table_spec.rb +91 -0
  105. data/spec/extensions/query_spec.rb +85 -0
  106. data/spec/extensions/schema_spec.rb +111 -0
  107. data/spec/extensions/single_table_inheritance_spec.rb +53 -0
  108. data/spec/extensions/spec_helper.rb +90 -0
  109. data/spec/extensions/string_date_time_spec.rb +93 -0
  110. data/spec/extensions/validation_class_methods_spec.rb +1054 -0
  111. data/spec/integration/dataset_test.rb +160 -0
  112. data/spec/integration/eager_loader_test.rb +683 -0
  113. data/spec/integration/prepared_statement_test.rb +130 -0
  114. data/spec/integration/schema_test.rb +183 -0
  115. data/spec/integration/spec_helper.rb +75 -0
  116. data/spec/integration/type_test.rb +96 -0
  117. data/spec/model/association_reflection_spec.rb +93 -0
  118. data/spec/model/associations_spec.rb +1780 -0
  119. data/spec/model/base_spec.rb +494 -0
  120. data/spec/model/caching_spec.rb +217 -0
  121. data/spec/model/dataset_methods_spec.rb +78 -0
  122. data/spec/model/eager_loading_spec.rb +1165 -0
  123. data/spec/model/hooks_spec.rb +472 -0
  124. data/spec/model/inflector_spec.rb +126 -0
  125. data/spec/model/model_spec.rb +588 -0
  126. data/spec/model/plugins_spec.rb +142 -0
  127. data/spec/model/record_spec.rb +1243 -0
  128. data/spec/model/schema_spec.rb +92 -0
  129. data/spec/model/spec_helper.rb +124 -0
  130. data/spec/model/validations_spec.rb +1080 -0
  131. data/spec/rcov.opts +6 -0
  132. data/spec/spec.opts +0 -0
  133. data/spec/spec_config.rb.example +10 -0
  134. metadata +202 -0
@@ -0,0 +1,529 @@
1
+ module Sequel
2
+ # This module makes it easy to print deprecation warnings with optional backtraces to a given stream.
3
+ # There are a couple of methods you can use to change where the deprecation methods are printed
4
+ # and whether they should include backtraces:
5
+ #
6
+ # Sequel.Deprecation.output = $stderr # print deprecation messages to standard error (default)
7
+ # Sequel.Deprecation.output = File.open('deprecated_calls.txt', 'wb') # use a file instead
8
+ # Sequel.Deprecation.backtraces = false # don't include backtraces
9
+ # Sequel.Deprecation.backtraces = true # include full backtraces
10
+ # Sequel.Deprecation.backtraces = 10 # include 10 backtrace lines (default)
11
+ # Sequel.Deprecation.backtraces = 1 # include 1 backtrace line
12
+ module Deprecation
13
+ extend Metaprogramming
14
+
15
+ @output = $stderr
16
+ @backtraces = 10
17
+
18
+ metaattr_accessor :output, :backtraces
19
+
20
+ # Print the message to the output stream
21
+ def self.deprecate(method, instead=nil)
22
+ message = instead ? "#{method} is deprecated and will be removed in a future version. #{instead}." : method
23
+ return unless output
24
+ output.puts(message)
25
+ case backtraces
26
+ when Integer
27
+ b = backtraces
28
+ caller.each do |c|
29
+ b -= 1
30
+ output.puts(c)
31
+ break if b == 0
32
+ end
33
+ when true
34
+ caller.each{|c| output.puts(c)}
35
+ end
36
+ end
37
+ end
38
+
39
+ def self.open(*args, &block)
40
+ Deprecation.deprecate('Sequel.open', 'Use Sequel.connect')
41
+ Database.connect(*args, &block)
42
+ end
43
+
44
+ def self.upcase_identifiers=(value)
45
+ Deprecation.deprecate('Sequel.upcase_identifiers=', 'Use Sequel.identifier_input_method = :upcase or nil')
46
+ Database.identifier_input_method = value ? :upcase : nil
47
+ end
48
+
49
+ def self.use_parse_tree
50
+ Deprecation.deprecate('Sequel.use_parse_tree', 'Sequel has not used ParseTree since 2.2')
51
+ false
52
+ end
53
+
54
+ def self.use_parse_tree=(val)
55
+ Deprecation.deprecate('Sequel.use_parse_tree=', 'Sequel has not used ParseTree since 2.2')
56
+ raise(Error, 'ParseTree support has been removed from Sequel') if val
57
+ end
58
+
59
+ class Database
60
+ def self.upcase_identifiers=(value)
61
+ Deprecation.deprecate('Sequel::Database.upcase_identifiers=', 'Use Sequel::Database.identifier_input_method = :upcase or nil')
62
+ self.identifier_input_method = value ? :upcase : nil
63
+ end
64
+
65
+ def upcase_identifiers=(v)
66
+ Deprecation.deprecate('Sequel::Database#upcase_identifiers=', 'Use Sequel::Database#identifier_input_method = :upcase or nil')
67
+ self.identifier_input_method = v ? :upcase : nil
68
+ end
69
+
70
+ def upcase_identifiers?
71
+ Deprecation.deprecate('Sequel::Database#upcase_identifiers?', 'Use Sequel::Database#identifier_input_method == :upcase')
72
+ identifier_input_method == :upcase
73
+ end
74
+
75
+ def >>(*args, &block)
76
+ Deprecation.deprecate('Sequel::Database#>>', 'Use Sequel::Database#fetch')
77
+ fetch(*args, &block)
78
+ end
79
+
80
+ def query(&block)
81
+ Deprecation.deprecate('Sequel::Database#query', 'require "sequel/extensions/query" first')
82
+ dataset.query(&block)
83
+ end
84
+ end
85
+
86
+ class Dataset
87
+ DATASET_CLASSES = []
88
+
89
+ def self.dataset_classes
90
+ Deprecation.deprecate('Sequel::Dataset#dataset_classes', 'No replacement is planned')
91
+ DATASET_CLASSES
92
+ end
93
+
94
+ def self.inherited(c)
95
+ DATASET_CLASSES << c
96
+ end
97
+
98
+ def upcase_identifiers=(v)
99
+ Deprecation.deprecate('Sequel::Dataset#upcase_identifiers=', 'Use Sequel::Dataset#identifier_input_method = :upcase or nil')
100
+ @identifier_input_method = v ? :upcase : nil
101
+ end
102
+
103
+ def upcase_identifiers?
104
+ Deprecation.deprecate('Sequel::Dataset#upcase_identifiers?', 'Use Sequel::Dataset#identifier_input_method == :upcase')
105
+ @identifier_input_method == :upcase
106
+ end
107
+
108
+ def model_classes
109
+ Deprecation.deprecate('Sequel::Dataset#model_classes', 'Sequel::Model datasets no longer set this information')
110
+ @opts[:models]
111
+ end
112
+
113
+ def polymorphic_key
114
+ Deprecation.deprecate('Sequel::Dataset#polymorphic_key', 'Sequel::Model datasets no longer set this information')
115
+ @opts[:polymorphic_key]
116
+ end
117
+
118
+ def set_model(key, *args)
119
+ Deprecation.deprecate('Sequel::Dataset#set_model', 'Use Sequel::Dataset#set_row_proc with an appropriate row proc')
120
+ # This code is more verbose then necessary for performance reasons
121
+ case key
122
+ when nil # set_model(nil) => no argument provided, so the dataset is denuded
123
+ @opts.merge!(:naked => true, :models => nil, :polymorphic_key => nil)
124
+ self.row_proc = nil
125
+ when Class
126
+ # isomorphic model
127
+ @opts.merge!(:naked => nil, :models => {nil => key}, :polymorphic_key => nil)
128
+ if key.respond_to?(:load)
129
+ # the class has a values setter method, so we use it
130
+ self.row_proc = proc{|h| key.load(h, *args)}
131
+ else
132
+ # otherwise we just pass the hash to the constructor
133
+ self.row_proc = proc{|h| key.new(h, *args)}
134
+ end
135
+ when Symbol
136
+ # polymorphic model
137
+ hash = args.shift || raise(ArgumentError, "No class hash supplied for polymorphic model")
138
+ @opts.merge!(:naked => true, :models => hash, :polymorphic_key => key)
139
+ if (hash.empty? ? (hash[nil] rescue nil) : hash.values.first).respond_to?(:load)
140
+ # the class has a values setter method, so we use it
141
+ self.row_proc = proc do |h|
142
+ c = hash[h[key]] || hash[nil] || \
143
+ raise(Error, "No matching model class for record (#{polymorphic_key} => #{h[polymorphic_key].inspect})")
144
+ c.load(h, *args)
145
+ end
146
+ else
147
+ # otherwise we just pass the hash to the constructor
148
+ self.row_proc = proc do |h|
149
+ c = hash[h[key]] || hash[nil] || \
150
+ raise(Error, "No matching model class for record (#{polymorphic_key} => #{h[polymorphic_key].inspect})")
151
+ c.new(h, *args)
152
+ end
153
+ end
154
+ else
155
+ raise ArgumentError, "Invalid model specified"
156
+ end
157
+ self
158
+ end
159
+
160
+ def create_view(name)
161
+ Sequel::Deprecation.deprecate('Sequel::Dataset#create_view', 'Use Sequel::Database#create_view')
162
+ @db.create_view(name, self)
163
+ end
164
+
165
+ def create_or_replace_view(name)
166
+ Sequel::Deprecation.deprecate('Sequel::Dataset#create_or_replace_view', 'Use Sequel::Database#create_or_replace_view')
167
+ @db.create_or_replace_view(name, self)
168
+ end
169
+
170
+ def import(*args, &block)
171
+ Sequel::Deprecation.deprecate('Sequel::Dataset#import', 'Use Sequel::Dataset#multi_insert')
172
+ multi_insert(*args, &block)
173
+ end
174
+
175
+ def size
176
+ Sequel::Deprecation.deprecate('Sequel::Dataset#size', 'Use Sequel::Dataset#count')
177
+ count
178
+ end
179
+
180
+ def uniq(*args)
181
+ Sequel::Deprecation.deprecate('Sequel::Dataset#uniq', 'Use Sequel::Dataset#distinct')
182
+ distinct(*args)
183
+ end
184
+
185
+ def quote_column_ref(name)
186
+ Sequel::Deprecation.deprecate('Sequel::Dataset#quote_column_ref', 'Use Sequel::Dataset#quote_identifier')
187
+ quote_identifier(name)
188
+ end
189
+
190
+ def symbol_to_column_ref(sym)
191
+ Sequel::Deprecation.deprecate('Sequel::Dataset#symbol_to_column_ref', 'Use Sequel::Dataset#literal')
192
+ literal_symbol(sym)
193
+ end
194
+
195
+ def paginate(page_no, page_size, record_count=nil)
196
+ Sequel::Deprecation.deprecate('Sequel::Dataset#paginate', 'require "sequel/extensions/pagination" first')
197
+ require "sequel/extensions/pagination"
198
+ raise(Error, "You cannot paginate a dataset that already has a limit") if @opts[:limit]
199
+ paginated = limit(page_size, (page_no - 1) * page_size)
200
+ paginated.extend(Pagination)
201
+ paginated.set_pagination_info(page_no, page_size, record_count || count)
202
+ end
203
+
204
+ def each_page(page_size, &block)
205
+ Sequel::Deprecation.deprecate('Sequel::Dataset#each_page', 'require "sequel/extensions/pagination" first')
206
+ raise(Error, "You cannot paginate a dataset that already has a limit") if @opts[:limit]
207
+ record_count = count
208
+ total_pages = (record_count / page_size.to_f).ceil
209
+ (1..total_pages).each{|page_no| yield paginate(page_no, page_size, record_count)}
210
+ self
211
+ end
212
+
213
+ def query(&block)
214
+ Sequel::Deprecation.deprecate('Sequel::Dataset#each_page', 'require "sequel/extensions/query" first')
215
+ require "sequel/extensions/query"
216
+ copy = clone({})
217
+ copy.extend(QueryBlockCopy)
218
+ copy.instance_eval(&block)
219
+ clone(copy.opts)
220
+ end
221
+
222
+ def print(*cols)
223
+ Sequel::Deprecation.deprecate('Sequel::Dataset#print', 'require "sequel/extensions/pretty_table" first')
224
+ Sequel::PrettyTable.print(naked.all, cols.empty? ? columns : cols)
225
+ end
226
+ end
227
+
228
+ module SQL
229
+ module CastMethods
230
+ def cast_as(sql_type)
231
+ Sequel::Deprecation.deprecate('Sequel::SQL::CastMethods#cast_as', 'Use Sequel::SQL::CastMethods#cast')
232
+ cast(sql_type)
233
+ end
234
+ end
235
+
236
+ class Blob
237
+ def to_blob(*args)
238
+ Sequel::Deprecation.deprecate('Sequel::SQL::Blob#to_blob', 'Use Sequel::SQL::Blob#to_sequel_blob')
239
+ to_sequel_blob(*args)
240
+ end
241
+ end
242
+ end
243
+
244
+ module PrettyTable
245
+ def self.print(*args)
246
+ Sequel::Deprecation.deprecate('Sequel::PrettyTable#print', 'require "sequel/extensions/pretty_table" first')
247
+ require "sequel/extensions/pretty_table"
248
+ print(*args)
249
+ end
250
+ end
251
+ end
252
+
253
+ if RUBY_VERSION < '1.9.0'
254
+ class Hash
255
+ unless method_defined?(:key)
256
+ include(Module.new do
257
+ def key(*args, &block)
258
+ Sequel::Deprecation.deprecate('Hash#key', 'Use Hash#index')
259
+ index(*args, &block)
260
+ end
261
+ end)
262
+ end
263
+ end
264
+ end
265
+
266
+ module Enumerable
267
+ unless method_defined?(:send_each)
268
+ def send_each(sym, *args)
269
+ Sequel::Deprecation.deprecate('Enumerable#send_each', 'Use Enumerable#each{|x| x.send(...)}')
270
+ each{|i| i.send(sym, *args)}
271
+ end
272
+ end
273
+ end
274
+
275
+ class Range
276
+ unless method_defined?(:interval)
277
+ include(Module.new do
278
+ def interval
279
+ Sequel::Deprecation.deprecate('Range#interval', 'Use range.first - range.last - (range.exclude_end? ? 1 : 0)')
280
+ last - first - (exclude_end? ? 1 : 0)
281
+ end
282
+ end)
283
+ end
284
+ end
285
+
286
+ class Array
287
+ unless method_defined?(:extract_options!)
288
+ include(Module.new do
289
+ def extract_options!
290
+ Sequel::Deprecation.deprecate('Array#extract_options!', 'Use array.last.is_a?(Hash) ? array.pop : {}')
291
+ last.is_a?(Hash) ? pop : {}
292
+ end
293
+ end)
294
+ end
295
+
296
+ def to_sql
297
+ Sequel::Deprecation.deprecate('Array#to_sql', 'It may be a good idea to refactor your implementation so this type of method is not required')
298
+ map {|l| ((m = /^(.*)--/.match(l)) ? m[1] : l).chomp}.join(' '). \
299
+ gsub(/\/\*.*\*\//, '').gsub(/\s+/, ' ').strip
300
+ end
301
+ end
302
+
303
+ class String
304
+ include(Module.new do
305
+ def split_sql
306
+ Sequel::Deprecation.deprecate('String#split_sql', 'It may be a good idea to refactor your implementation so this type of method is not required')
307
+ to_sql.split(';').map {|s| s.strip}
308
+ end
309
+
310
+ def to_sql
311
+ Sequel::Deprecation.deprecate('String#to_sql', 'It may be a good idea to refactor your implementation so this type of method is not required')
312
+ split("\n").to_sql
313
+ end
314
+
315
+ def expr(*args)
316
+ Sequel::Deprecation.deprecate('String#expr', 'Use String#lit')
317
+ lit(*args)
318
+ end
319
+
320
+ unless String.method_defined?(:to_blob)
321
+ def to_blob(*args)
322
+ Sequel::Deprecation.deprecate('String#to_blob', 'Use String#to_sequel_blob')
323
+ to_sequel_blob(*args)
324
+ end
325
+ end
326
+
327
+ unless String.method_defined?(:blank?)
328
+ def blank?
329
+ Sequel::Deprecation.deprecate('String#blank?', "require 'sequel/extensions/blank' first")
330
+ strip.empty?
331
+ end
332
+ end
333
+
334
+ unless String.method_defined?(:to_date)
335
+ def to_date
336
+ Sequel::Deprecation.deprecate('String#to_date', 'You should require "sequel/extensions/string_date_time"')
337
+ begin
338
+ Date.parse(self, Sequel.convert_two_digit_years)
339
+ rescue => e
340
+ raise Sequel::Error::InvalidValue, "Invalid Date value '#{self}' (#{e.message})"
341
+ end
342
+ end
343
+ end
344
+
345
+ unless String.method_defined?(:to_datetime)
346
+ def to_datetime
347
+ Sequel::Deprecation.deprecate('String#to_datetime', 'You should require "sequel/extensions/string_date_time"')
348
+ begin
349
+ DateTime.parse(self, Sequel.convert_two_digit_years)
350
+ rescue => e
351
+ raise Sequel::Error::InvalidValue, "Invalid DateTime value '#{self}' (#{e.message})"
352
+ end
353
+ end
354
+ end
355
+
356
+ unless String.method_defined?(:to_sequel_time)
357
+ def to_sequel_time
358
+ Sequel::Deprecation.deprecate('String#to_sequel_time', 'You should require "sequel/extensions/string_date_time"')
359
+ begin
360
+ if Sequel.datetime_class == DateTime
361
+ DateTime.parse(self, Sequel.convert_two_digit_years)
362
+ else
363
+ Sequel.datetime_class.parse(self)
364
+ end
365
+ rescue => e
366
+ raise Sequel::Error::InvalidValue, "Invalid #{Sequel.datetime_class} value '#{self}' (#{e.message})"
367
+ end
368
+ end
369
+ end
370
+
371
+ unless String.method_defined?(:to_time)
372
+ def to_time
373
+ Sequel::Deprecation.deprecate('String#to_time', 'You should require "sequel/extensions/string_date_time"')
374
+ begin
375
+ Time.parse(self)
376
+ rescue => e
377
+ raise Sequel::Error::InvalidValue, "Invalid Time value '#{self}' (#{e.message})"
378
+ end
379
+ end
380
+ end
381
+ end)
382
+ end
383
+
384
+ class Symbol
385
+ def |(sub)
386
+ return super unless (Integer === sub) || ((Array === sub) && sub.any?{|x| Integer === x})
387
+ Sequel::Deprecation.deprecate('The use of Symbol#| for SQL array subscripts', 'Use Symbol#sql_subscript')
388
+ Sequel::SQL::Subscript.new(self, Array(sub))
389
+ end
390
+
391
+ def to_column_ref(ds)
392
+ Sequel::Deprecation.deprecate('Symbol#to_column_ref', 'Use Dataset#literal')
393
+ ds.literal(self)
394
+ end
395
+ end
396
+
397
+ class Module
398
+ include(Module.new do
399
+ unless Module.method_defined?(:class_def)
400
+ def class_def(name, &block)
401
+ Sequel::Deprecation.deprecate('Object#class_def', "Install the metaid gem")
402
+ class_eval{define_method(name, &block)}
403
+ end
404
+ end
405
+
406
+ private
407
+
408
+ unless Module.method_defined?(:class_attr_overridable)
409
+ def class_attr_overridable(*meths)
410
+ Sequel::Deprecation.deprecate('Module#class_attr_overridable', "Copy the method from #{__FILE__} (line #{__LINE__}) if you need it")
411
+ meths.each{|meth| class_eval("def #{meth}; !defined?(@#{meth}) ? (@#{meth} = self.class.#{meth}) : @#{meth} end")}
412
+ attr_writer(*meths)
413
+ end
414
+ end
415
+
416
+ unless Module.method_defined?(:class_attr_reader)
417
+ def class_attr_reader(*meths)
418
+ Sequel::Deprecation.deprecate('Module#class_attr_reader', "Copy the method from #{__FILE__} (line #{__LINE__}) if you need it")
419
+ meths.each{|meth| define_method(meth){self.class.send(meth)}}
420
+ end
421
+ end
422
+
423
+ unless Module.method_defined?(:metaalias)
424
+ def metaalias(to, from)
425
+ Sequel::Deprecation.deprecate('Module#metaalias', "Copy the method from #{__FILE__} (line #{__LINE__}) if you need it")
426
+ meta_eval{alias_method to, from}
427
+ end
428
+ end
429
+
430
+ unless Module.method_defined?(:metaattr_accessor)
431
+ def metaattr_accessor(*meths)
432
+ Sequel::Deprecation.deprecate('Module#metaattr_accessor', "Copy the method from #{__FILE__} (line #{__LINE__}) if you need it")
433
+ meta_eval{attr_accessor(*meths)}
434
+ end
435
+ end
436
+
437
+ unless Module.method_defined?(:metaattr_reader)
438
+ def metaattr_reader(*meths)
439
+ Sequel::Deprecation.deprecate('Module#metaattr_reader', "Copy the method from #{__FILE__} (line #{__LINE__}) if you need it")
440
+ meta_eval{attr_reader(*meths)}
441
+ end
442
+ end
443
+ end)
444
+ end
445
+
446
+ class FalseClass
447
+ unless method_defined?(:blank?)
448
+ include(Module.new do
449
+ def blank?
450
+ Sequel::Deprecation.deprecate('FalseClass#blank?', "require 'sequel/extensions/blank' first")
451
+ true
452
+ end
453
+ end)
454
+ end
455
+ end
456
+
457
+ class NilClass
458
+ unless method_defined?(:blank?)
459
+ include(Module.new do
460
+ def blank?
461
+ Sequel::Deprecation.deprecate('NilClass#blank?', "require 'sequel/extensions/blank' first")
462
+ true
463
+ end
464
+ end)
465
+ end
466
+ end
467
+
468
+ class Numeric
469
+ unless method_defined?(:blank?)
470
+ include(Module.new do
471
+ def blank?
472
+ Sequel::Deprecation.deprecate('Numeric#blank?', "require 'sequel/extensions/blank' first")
473
+ false
474
+ end
475
+ end)
476
+ end
477
+ end
478
+
479
+ class TrueClass
480
+ unless method_defined?(:blank?)
481
+ include(Module.new do
482
+ def blank?
483
+ Sequel::Deprecation.deprecate('FalseClass#blank?', "require 'sequel/extensions/blank' first")
484
+ false
485
+ end
486
+ end)
487
+ end
488
+ end
489
+
490
+ class Object
491
+ include(Module.new do
492
+ unless Object.method_defined?(:blank?)
493
+ def blank?
494
+ Sequel::Deprecation.deprecate('FalseClass#blank?', "require 'sequel/extensions/blank' first")
495
+ respond_to?(:empty?) && empty?
496
+ end
497
+ end
498
+
499
+ unless Object.method_defined?(:is_one_of?)
500
+ def is_one_of?(*classes)
501
+ Sequel::Deprecation.deprecate('Object#is_one_of?', "Use classes.any?{|c| object.is_a?(c)}")
502
+ classes.any?{|c| is_a?(c)}
503
+ end
504
+ end
505
+
506
+ unless Object.method_defined?(:meta_def)
507
+ def meta_def(name, &block)
508
+ Sequel::Deprecation.deprecate('Object#meta_def', "Install the metaid gem")
509
+ meta_eval{define_method(name, &block)}
510
+ end
511
+ end
512
+
513
+ unless Object.method_defined?(:meta_eval)
514
+ def meta_eval(&block)
515
+ Sequel::Deprecation.deprecate('Object#meta_eval', "Install the metaid gem")
516
+ metaclass.instance_eval(&block)
517
+ end
518
+ end
519
+
520
+ unless Object.method_defined?(:metaclass)
521
+ def metaclass
522
+ Sequel::Deprecation.deprecate('Object#metaclass', "Install the metaid gem")
523
+ class << self
524
+ self
525
+ end
526
+ end
527
+ end
528
+ end)
529
+ end