class Golden::QueryForm

Attributes

mode[RW]
page[RW]
per[RW]
result[R]
sort[RW]

Public Class Methods

attributes() click to toggle source
# File lib/golden/objects/query/query_form.rb, line 6
def attributes
  accessor_attributes
end
new(params, accessors = {}) click to toggle source
# File lib/golden/objects/query/query_form.rb, line 22
def initialize(params, accessors = {})
  @query_params = find_query_from(params)
  assign_attributes(strip_attributes(@query_params))
  assign_attributes(strip_attributes(accessors || {}))
  @per ||= params.dig(:per)
  @page ||= params.dig(:page)
  @sort ||= params.dig(:sort)
  @mode ||= :paginated
end
permits() click to toggle source
# File lib/golden/objects/query/query_form.rb, line 10
def permits
  @permits ||= lambda do
    attrs = attributes.clone
    attrs.uniq
  end.call
end

Public Instance Methods

save() click to toggle source
# File lib/golden/objects/query/query_form.rb, line 32
def save
  return false if invalid?

  query!
  errors.empty?
end

Private Instance Methods

find_query_from(params) click to toggle source
# File lib/golden/objects/query/query_form.rb, line 41
def find_query_from(params)
  if ::Object.const_defined?('ActionController') && params.is_a?(ActionController::Parameters)
    params.require(:query).permit(*self.class.permits)
  else
    params.dig(:query)&.slice(*self.class.permits) || {}
  end
rescue ActionController::ParameterMissing
  {}
end
query!() click to toggle source
# File lib/golden/objects/query/query_form.rb, line 58
    def query!
      raise NotImplementedError, <<~ERROR
        Please define #{__method__} like
        ```
          def #{__method__}
            context = ::Orders::QueryContext.new query_accessors
            @result = context.perform(mode)
            errors.merge! context.errors
          end
        ```
      ERROR
    end
query_accessors() click to toggle source
# File lib/golden/objects/query/query_form.rb, line 51
def query_accessors
  attrs = attributes.clone
  attrs.delete(:mode)
  attrs.each { |accessor, value| attrs.delete(accessor) if value.blank? }
  attrs
end