Class: Filterameter::Helpers::DeclarationWithModel

Inherits:
Object
  • Object
show all
Defined in:
lib/filterameter/helpers/declaration_with_model.rb

Overview

Declaration with Model

Class DeclarationWithModel inspects the declaration under the context of the model. This enables predicate methods as well as drilling through associations.

Instance Method Summary collapse

Constructor Details

#initialize(model, declaration) ⇒ DeclarationWithModel



10
11
12
13
# File 'lib/filterameter/helpers/declaration_with_model.rb', line 10

def initialize(model, declaration)
  @model = model
  @declaration = declaration
end

Instance Method Details

#any_collections?Boolean



23
24
25
26
27
28
29
30
31
32
# File 'lib/filterameter/helpers/declaration_with_model.rb', line 23

def any_collections?
  @declaration.association.reduce(@model) do |related_model, name|
    association = related_model.reflect_on_association(name)
    return true if association.collection?

    association.klass
  end

  false
end

#model_from_associationObject



34
35
36
37
38
39
40
41
# File 'lib/filterameter/helpers/declaration_with_model.rb', line 34

def model_from_association
  @declaration.association.flatten.reduce(@model) do |memo, name|
    association = memo.reflect_on_association(name)
    raise_invalid_association if association.nil?

    association.klass
  end
end

#scope?Boolean



15
16
17
18
19
20
21
# File 'lib/filterameter/helpers/declaration_with_model.rb', line 15

def scope?
  model = @declaration.nested? ? model_from_association : @model

  model.respond_to?(@declaration.name) &&
    # checking dangerous_class_method? excludes any names that cannot be scope names, such as "name"
    !model.dangerous_class_method?(@declaration.name)
end