Sha256: 77642d8ebd68907c3482127ece1c6f027aba2fef98edc7abf6e7b6ea03a0cb6c
Contents?: true
Size: 1.88 KB
Versions: 1
Compression:
Stored size: 1.88 KB
Contents
module Sequel module Plugins module StringNilifier # Set blob columns as skipping nilifying when plugin is loaded. def self.configure(model) model.instance_variable_set(:@skipped_string_nilifier_columns, []) model.send(:set_skipped_string_nilifying_columns) end module ClassMethods # Copy skipped nilifying columns from superclass into subclass. def inherited(subclass) subclass.instance_variable_set(:@skipped_string_nilifier_columns, @skipped_string_nilifier_columns.dup) super end # Set blob columns as skipping nilifying when plugin is loaded. def set_dataset(*) res = super set_skipped_string_nilifying_columns res end # Skip nilifying for the given columns. def skip_string_nilifying(*columns) @skipped_string_nilifier_columns.concat(columns).uniq! end # Return true if the column should not have values stripped. def skip_string_nilifying?(column) @skipped_string_nilifier_columns.include?(column) end private # Automatically skip nilifying of blob columns def set_skipped_string_nilifying_columns if @db_schema blob_columns = @db_schema.map{|k,v| k if v[:type] == :blob}.compact skip_string_nilifying(*blob_columns) end end end module InstanceMethods # Strip value if it is a non-blob string and the model hasn't been set # to skip nilifying for the column, before attempting to assign # it to the model's values. def nil_string?(k,str) str.is_a?(String) && !str.is_a?(SQL::Blob) && str.strip.empty? && !model.skip_string_nilifying?(k) end def []=(k, v) v = nil if nil_string? k, v super(k, v) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sequel-string_nilifier-1.0.1 | lib/sequel/plugins/string_nilifier.rb |