/usr/lib/ruby/vendor_ruby/sequel/plugins/defaults_setter.rb is in ruby-sequel 4.1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | module Sequel
module Plugins
# DefaultsSetter is a simple plugin that sets non-nil/NULL default values upon
# initialize:
#
# # column a default NULL
# # column b default 2
# album = Album.new.values # {:b => 2}
# album = Album.new(:a=>1, :b=>3).values # {:a => 1, :b => 3}
#
# Usage:
#
# # Make all model subclass instances set defaults (called before loading subclasses)
# Sequel::Model.plugin :defaults_setter
#
# # Make the Album class set defaults
# Album.plugin :defaults_setter
module DefaultsSetter
# Set the default values based on the model schema
def self.configure(model)
model.send(:set_default_values)
end
module ClassMethods
# The default values to set in initialize for this model. A hash with column symbol
# keys and default values. If the default values respond to +call+, it will be called
# to get the value, otherwise the value will be used directly. You can manually modify
# this hash to set specific default values, by default the ones will be parsed from the database.
attr_reader :default_values
Plugins.after_set_dataset(self, :set_default_values)
private
# Parse the cached database schema for this model and set the default values appropriately.
def set_default_values
h = {}
@db_schema.each{|k, v| h[k] = convert_default_value(v[:ruby_default]) unless v[:ruby_default].nil?} if @db_schema
@default_values = h
end
# Handle the CURRENT_DATE and CURRENT_TIMESTAMP values specially by returning an appropriate Date or
# Time/DateTime value.
def convert_default_value(v)
case v
when Sequel::CURRENT_DATE
lambda{Date.today}
when Sequel::CURRENT_TIMESTAMP
lambda{Sequel.datetime_class.now}
else
v
end
end
end
module InstanceMethods
# Use default value for a new record if values doesn't already contain an entry for it.
def [](k)
if new? && !values.has_key?(k)
v = model.default_values[k]
v.respond_to?(:call) ? v.call : v
else
super
end
end
end
end
end
end
|