Sha256: 98888c391d512bd7d4065677b773afa20b1a63096528913e16c55082c8876d24
Contents?: true
Size: 1.68 KB
Versions: 5
Compression:
Stored size: 1.68 KB
Contents
# frozen-string-literal: true module Sequel module Plugins # The inverted_subsets plugin adds another method for each defined # subset, which inverts the condition supplied. By default, inverted # subset method names are prefixed with not_. # # You can change the prefix, or indeed entirely customise the inverted names, # by passing a block to the plugin configuration: # # # Use an exclude_ prefix for inverted subsets instead of not_ # Album.plugin(:inverted_subsets){|name| "exclude_#{name}"} # # Usage: # # # Add inverted subsets in the Album class # Album.plugin :inverted_subsets # # # This will now create two methods, published and not_published # Album.subset :published, :published => true # # Album.published.sql # # SELECT * FROM albums WHERE (published IS TRUE) # # Album.not_published.sql # # SELECT * FROM albums WHERE (published IS NOT TRUE) # module InvertedSubsets def self.apply(mod, &block) mod.instance_exec do @dataset_module_class = Class.new(@dataset_module_class) do include DatasetModuleMethods if block define_method(:inverted_subset_name, &block) private :inverted_subset_name end end end end module DatasetModuleMethods # Define a not_ prefixed subset which inverts the subset condition. def where(name, *args, &block) super exclude(inverted_subset_name(name), *args, &block) end private def inverted_subset_name(name) "not_#{name}" end end end end end
Version data entries
5 entries across 5 versions & 2 rubygems