class Rack::Queries::Cache

Attributes

cache[R]

Public Class Methods

instance() click to toggle source
# File lib/rack/queries/cache.rb, line 104
def instance
  @instance ||= new
end
new() click to toggle source
# File lib/rack/queries/cache.rb, line 61
def initialize
  @cache = []
end

Public Instance Methods

add(*queries) click to toggle source
# File lib/rack/queries/cache.rb, line 65
def add(*queries)
  queries.each do |query|
    opts = {}

    (query.public_instance_methods(false) - %i[run]).each do |name|
      opts[name] = SelectOption.new(name)
    end

    query.define_singleton_method(:opts) { opts }
  end

  @cache = (cache + queries).sort_by(&:name)
end
create(&block) click to toggle source
# File lib/rack/queries/cache.rb, line 79
def create(&block)
  query = Class.new(CreateQuery, &block)
  @cache = (cache << query).sort_by(&:name)
end
opts_for(name, opt) click to toggle source
# File lib/rack/queries/cache.rb, line 84
def opts_for(name, opt)
  query = query_for(name)
  query.new.public_send(opt) if query
end
queries() click to toggle source
# File lib/rack/queries/cache.rb, line 89
def queries
  cache.map do |query|
    desc = query.respond_to?(:desc) ? query.desc : ''
    opts =
      query.respond_to?(:opts) ? query.opts.values.map(&:as_json) : []

    { name: query.name, desc: desc, opts: opts }
  end
end
query_for(name) click to toggle source
# File lib/rack/queries/cache.rb, line 99
def query_for(name)
  cache.detect { |query| query.name == name }
end