/usr/lib/ruby/vendor_ruby/sequel/plugins/boolean_readers.rb is in ruby-sequel 3.33.0-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 | module Sequel
module Plugins
# The BooleanReaders plugin allows for the creation of attribute? methods
# for boolean columns, which provides a nicer API. By default, the accessors
# are created for all columns of type :boolean. However, you can provide a
# block to the plugin to change the criteria used to determine if a
# column is boolean. The block is yielded with the column symbol for each
# column in the models dataset.
#
# Usage:
#
# # Add boolean attribute? methods for all columns of type :boolean
# # in all model subclasses (called before loading subclasses)
# Sequel::Model.plugin :boolean_readers
#
# # Add boolean readers for all tinyint columns in the Album class
# Album.plugin(:boolean_readers){|c| db_schema[c][:db_type] =~ /\Atinyint/}
#
# # Add a boolean reader for a specific columns in the Artist class
# Artist.plugin(:boolean_readers){|c| [:column1, :column2, :column3].include?(c)}
module BooleanReaders
# Default proc for determining if given column is a boolean, which
# just checks that the :type is boolean.
DEFAULT_BOOLEAN_ATTRIBUTE_PROC = lambda{|c| s = db_schema[c] and s[:type] == :boolean}
# Add the boolean_attribute? class method to the model, and create
# attribute? boolean reader methods for the class's columns if the class has a dataset.
def self.configure(model, &block)
model.meta_def(:boolean_attribute?, &(block || DEFAULT_BOOLEAN_ATTRIBUTE_PROC))
model.instance_eval{send(:create_boolean_readers) if @dataset}
end
module ClassMethods
# Create boolean readers for the class using the columns from the new dataset.
def set_dataset(*args)
super
create_boolean_readers
self
end
private
# Add a attribute? method for the column to a module included in the class.
def create_boolean_reader(column)
overridable_methods_module.module_eval do
define_method("#{column}?"){model.db.typecast_value(:boolean, send(column))}
end
end
# Add attribute? methods for all of the boolean attributes for this model.
def create_boolean_readers
im = instance_methods.collect{|x| x.to_s}
cs = columns rescue return
cs.each{|c| create_boolean_reader(c) if boolean_attribute?(c) && !im.include?("#{c}?")}
end
end
end
end
end
|