Sha256: 520ced13a35928dd6afeb3e4bae81856fb4216a40f7b37d0788b9f815ad87d44
Contents?: true
Size: 1.59 KB
Versions: 1
Compression:
Stored size: 1.59 KB
Contents
# The query extension adds Sequel::Dataset#query which allows # a different way to construct queries instead of the usual # method chaining. See Sequel::Dataset#query for details. # # To load the extension, do: # # Sequel.extension :query module Sequel class Database # Return a dataset modified by the query block def query(&block) dataset.query(&block) end end class Dataset # Translates a query block into a dataset. Query blocks are an # alternative to Sequel's usual method chaining, by using # instance_eval with a proxy object: # # dataset = DB[:items].query do # select :x, :y, :z # filter{(x > 1) & (y > 2)} # reverse :z # end # # Which is the same as: # # dataset = DB[:items].select(:x, :y, :z).filter{(x > 1) & (y > 2)}.reverse(:z) def query(&block) query = Query.new(self) query.instance_eval(&block) query.dataset end # Proxy object used by Dataset#query. class Query < Sequel::BasicObject # The current dataset in the query. This changes on each method call. attr_reader :dataset def initialize(dataset) @dataset = dataset end # Replace the query's dataset with dataset returned by the method call. def method_missing(method, *args, &block) @dataset = @dataset.send(method, *args, &block) raise(Sequel::Error, "method #{method.inspect} did not return a dataset") unless @dataset.is_a?(Dataset) self end end end Dataset.register_extension(:query){} Database.register_extension(:query){} end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
sequel-3.47.0 | lib/sequel/extensions/query.rb |