lib/db_mod/statements/configuration/as.rb
require_relative 'as/csv'
require_relative 'as/json'
module DbMod
module Statements
module Configuration
# Contains coercers and other functions that allow
# module instance methods returning an SQL result set
# to be extended with additional result coercion and
# formatting. The normal way to access this functionality
# is via {MethodConfiguration#as},
# which is available when defining a statement method
# or prepared method:
#
# def_statement(:a, 'SELECT a, b, c FROM foo').as(:csv)
# def_prepared(:b, 'SELECT d, e, f FROM bar').as(:csv)
module As
# List of available result coercion methods.
# Only keys defined here are allowed as arguments
# to {DbMod::Statements::Configuration::ConfigurableMethod#as}.
COERCERS = {
csv: As::Csv,
json: As::Json
}
# Extend the given method definition with additional
# result coercion, if specified using {MethodConfiguration#as}.
#
# @param definition [Proc] base method definition
# @param config [MethodConfiguration] method configuration
# @return [Proc] wrapped method definition, or the original
# definition if no coercion has been specified
def self.extend(definition, config)
type = config[:as]
return definition if type.nil?
Configuration.attach_result_processor definition, COERCERS[type]
end
end
end
end
end