class AgnosticBackend::Queryable::Validator

Public Class Methods

new() click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 7
def initialize
  @valid = true
end

Private Instance Methods

attribute_error(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 183
def attribute_error(subject)
  "Attribute '#{subject.name}' in #{subject.parent.class.name} missing from schema"
end
value_error(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 179
def value_error(subject)
  "Value #{subject.value} for #{subject.associated_attribute.name} in #{subject.parent.class.name} is defined as #{subject.type} type in schema"
end
visit_attribute(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 140
def visit_attribute(subject)
  if value_for_key(subject.context.index.schema, subject.name).nil? && !subject.any? && !subject.score?
    subject.context.query.errors[subject.class.name] << attribute_error(subject)
    @valid = false
  end
end
visit_criteria_contains(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 48
def visit_criteria_contains(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 18
def visit_criteria_equal(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_free_text(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 82
def visit_criteria_free_text(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_fuzzy(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 87
def visit_criteria_fuzzy(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_greater(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 28
def visit_criteria_greater(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_greater_and_less(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 58
def visit_criteria_greater_and_less(subject)
  visit(subject.attribute)
  visit(subject.left_value)
  visit(subject.right_value)
end
visit_criteria_greater_and_less_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 70
def visit_criteria_greater_and_less_equal(subject)
  visit(subject.attribute)
  visit(subject.left_value)
  visit(subject.right_value)
end
visit_criteria_greater_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 38
def visit_criteria_greater_equal(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_greater_equal_and_less(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 64
def visit_criteria_greater_equal_and_less(subject)
  visit(subject.attribute)
  visit(subject.left_value)
  visit(subject.right_value)
end
visit_criteria_greater_equal_and_less_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 76
def visit_criteria_greater_equal_and_less_equal(subject)
  visit(subject.attribute)
  visit(subject.left_value)
  visit(subject.right_value)
end
visit_criteria_less(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 33
def visit_criteria_less(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_less_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 43
def visit_criteria_less_equal(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_not_equal(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 23
def visit_criteria_not_equal(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_criteria_starts(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 53
def visit_criteria_starts(subject)
  visit(subject.attribute)
  visit(subject.value)
end
visit_expressions_filter(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 116
def visit_expressions_filter(subject)
  visit(subject.criterion)
end
visit_expressions_limit(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 128
def visit_expressions_limit(subject)
  visit(subject.limit)
end
visit_expressions_offset(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 132
def visit_expressions_offset(subject)
  visit(subject.offset)
end
visit_expressions_order(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 124
def visit_expressions_order(subject)
  subject.qualifiers.each { |c| visit(c) }
end
visit_expressions_scroll_cursor(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 136
def visit_expressions_scroll_cursor(subject)
  visit(subject.scroll_cursor)
end
visit_expressions_select(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 120
def visit_expressions_select(subject)
  subject.projections.each { |c| visit(c) }
end
visit_expressions_where(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 112
def visit_expressions_where(subject)
  visit(subject.criterion)
end
visit_operations_and(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 96
def visit_operations_and(subject)
  subject.operands.each { |o| visit(o) }
end
visit_operations_ascending(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 104
def visit_operations_ascending(subject)
  visit(subject.attribute)
end
visit_operations_descending(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 108
def visit_operations_descending(subject)
  visit(subject.attribute)
end
visit_operations_not(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 92
def visit_operations_not(subject)
  visit(subject.operand)
end
visit_operations_or(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 100
def visit_operations_or(subject)
  subject.operands.each { |o| visit(o) }
end
visit_query(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 13
def visit_query(subject)
  subject.children.each { |c| visit(c) }
  @valid
end
visit_value(subject) click to toggle source
# File lib/agnostic_backend/queryable/validator.rb, line 147
def visit_value(subject)
  case subject.type
  when :integer
    unless subject.value.is_a?(Fixnum)
      subject.context.query.errors[subject.class.name] << value_error(subject)
      @valid = false
    end
  when :double
    unless subject.value.is_a?(Float)
      subject.context.query.errors[subject.class.name] << value_error(subject)
      @valid = false
    end
  when :string,:string_array,:text,:text_array
    unless subject.value.is_a?(String)
      subject.context.query.errors[subject.class.name] << value_error(subject)
      @valid = false
    end
  when :date,:date_array
    unless subject.value.is_a?(Time)
      subject.context.query.errors[subject.class.name] << value_error(subject)
      @valid = false
    end
  when :boolean
    unless subject.value.is_a?(TrueClass) || subject.value.is_a?(FalseClass)
      subject.context.query.errors[subject.class.name] << value_error(subject)
      @valid = false
    end
  else
    true
  end
end