class Qreds::Reducer
Attributes
config[R]
context[R]
params[R]
query[R]
resource_name[R]
Public Class Methods
new(query:, params:, config:, resource_name: query.model.to_s, context: {})
click to toggle source
@param query [any] the query to be reduced @param params [Hash] with keys being functor names and values the functor arguments. @param config [Qreds::Config] current reducer config @param resource_name
[String] the name of the resource that query operates on @param context [any]
# File lib/qreds/reducer.rb, line 8 def initialize(query:, params:, config:, resource_name: query.model.to_s, context: {}) @query = query @params = params @config = config @resource_name = resource_name @context = context end
Public Instance Methods
call()
click to toggle source
# File lib/qreds/reducer.rb, line 16 def call return query if params.blank? params.reduce(query) do |reduced_query, (functor_key, functor_value)| functor_instance(functor_key, reduced_query, functor_value).call end end
Private Instance Methods
functor_class(functor_key, reduced_query, functor_value)
click to toggle source
# File lib/qreds/reducer.rb, line 45 def functor_class(functor_key, reduced_query, functor_value) functor_group_name = config.functor_group.to_s.capitalize functor_name = functor_key.classify klass = "::#{functor_group_name}::#{resource_name}::#{functor_name}".constantize rescue NameError end
functor_instance(functor_key, reduced_query, functor_value)
click to toggle source
# File lib/qreds/reducer.rb, line 28 def functor_instance(functor_key, reduced_query, functor_value) functor_group_name = config.functor_group.to_s.capitalize functor_name = functor_key.classify klass = functor_class(functor_key, reduced_query, functor_value) return klass.new(reduced_query, functor_value, context) if klass ::Qreds::CatchAllFunctor.new( reduced_query, functor_value, context, functor_key, config ) end