class ROM::Yesql::Relation

Yesql relation subclass

Class that inherits from this relation will be extended with methods based on its gateway queries hash

It also supports overriding query_proc

@example

conf = ROM::Configuration.new(
  :yesql, ['sqlite::memory', path: '/my/sql/queries/are/here']
)

class Reports < ROM::Relation[:yesql]
  query_proc(proc { |name, query, *args|
    # magic if needed
  })
end

conf.register_relation(Reports)

rom = ROM.container(conf)

rom.relations[:reports] # use like a normal rom relation

@api public

Constants

Materialized

Public Class Methods

define_query_methods(klass, queries) click to toggle source

Extends provided klass with query methods

@param [Class] klass A relation class @param [Hash] queries A hash with name, query pairs for the relation

@api private

# File lib/rom/yesql/relation.rb, line 62
def self.define_query_methods(klass, queries)
  queries.each do |name, query|
    klass.class_eval do
      define_method(name) do |*args|
        Materialized.new(dataset.read(query_proc.call(name, query, *args)))
      end
    end
  end
end
inherited(klass) click to toggle source

Extends a relation with query methods

This will only kick in if the derived dataset name matches the key under which relation queries were registered. If not it is expected that the dataset will be set manually

@api private

Calls superclass method
# File lib/rom/yesql/relation.rb, line 51
def self.inherited(klass)
  super
  klass.extend(ClassInterface)
end
load_queries(queries) click to toggle source

Hook called by a gateway to load all configured queries

@param [Hash] queries A hash with queries

@api private

# File lib/rom/yesql/relation.rb, line 86
def self.load_queries(queries)
  @queries = {}
  queries.each do |ds, ds_queries|
    @queries[ds] = ds_queries.each_with_object({}) do |(name, query), h|
      h[name] = query
    end
  end
  @queries
end
queries() click to toggle source

All loaded queries provided by gateway

@return [Hash]

@api private

# File lib/rom/yesql/relation.rb, line 77
def self.queries
  @queries || {}
end

Public Instance Methods

query_proc() click to toggle source

Returns query proc set on a relation class

By default this returns whatever was set in the gateway or the default one which simply uses hash % query to evaluate a query string

@return [Proc]

@api public

# File lib/rom/yesql/relation.rb, line 104
def query_proc
  self.class.query_proc
end