class RenderSync::ScopeDefinition

Attributes

args[RW]
klass[RW]
lambda[RW]
name[RW]
parameters[RW]

Public Class Methods

ensure_valid_params!(klass, lambda) click to toggle source

Checks the validity of the parameter names contained in the lambda definition. E.g. if the lambda looks like this:

->(user) { where(user_id: user.id) }

The name of the passed argument (user) must be present as a column name or an instance method (e.g. an association) of the ActiveRecord object.

# File lib/render_sync/scope_definition.rb, line 22
def self.ensure_valid_params!(klass, lambda)
  unless (invalid = lambda.parameters.map { |p| p[1] } - klass.column_names.map(&:to_sym) - klass.instance_methods) == []
    raise ArgumentError, "Invalid parameters #{invalid}. Parameter names of the sync_scope lambda definition may only contain ActiveRecord column names or instance methods of #{klass.name}."
  end
  true
end
new(klass, name, lambda) click to toggle source
# File lib/render_sync/scope_definition.rb, line 5
def initialize(klass, name, lambda)
  self.class.ensure_valid_params!(klass, lambda)
  
  @klass = klass
  @name = name
  @lambda = lambda
  @parameters = lambda.parameters.map { |p| p[1] }
end