Class: HQ::GraphQL::Filters

Inherits:
Object
  • Object
show all
Defined in:
lib/hq/graphql/filters.rb

Defined Under Namespace

Classes: BooleanFilter, DateFilter, Filter, NumericFilter, StringFilter, UuidFilter

Constant Summary collapse

BOOLEAN_VALUES =
["t", "f", "true", "false"]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filters, model) ⇒ Filters

Returns a new instance of Filters.



17
18
19
20
# File 'lib/hq/graphql/filters.rb', line 17

def initialize(filters, model)
  @filters = Array(filters).map { |filter| Filter.for(filter, table: model.arel_table) }
  @model = model
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



15
16
17
# File 'lib/hq/graphql/filters.rb', line 15

def filters
  @filters
end

#modelObject (readonly)

Returns the value of attribute model.



15
16
17
# File 'lib/hq/graphql/filters.rb', line 15

def model
  @model
end

Class Method Details

.supported?(column) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/hq/graphql/filters.rb', line 11

def self.supported?(column)
  !!Filter.class_from_column(column)
end

Instance Method Details

#to_scopeObject



33
34
35
36
37
# File 'lib/hq/graphql/filters.rb', line 33

def to_scope
  filters.reduce(model.all) do |s, filter|
    s.where(filter.to_arel)
  end
end

#validate!Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/hq/graphql/filters.rb', line 22

def validate!
  filters.each(&:validate)
  errors = filters.map do |filter|
    filter.display_error_message
  end.flatten.uniq

  if errors.any?
    raise ::GraphQL::ExecutionError, errors.join(", ")
  end
end