class Rails::Surrender::SortBuilder
apply sort directives to the given resource, based on the given sort controls
Attributes
resource[R]
sort[R]
Public Class Methods
new(resource:, sort:)
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 9 def initialize(resource:, sort:) @resource = resource @sort = sort end
Public Instance Methods
build!()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 14 def build! return resource unless resource.is_a? ActiveRecord::Relation return resource_attribute_order if resource_has_attribute? return scope_method_order if resource_has_scope_method? return association_attribute_order if resource_has_association_with_attribute? raise Error, I18n.t('surrender.error.query_string.sort.invalid_column', param: sort.request) end
Private Instance Methods
association_attribute_order()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 49 def association_attribute_order table_name = resource.reflect_on_association(sort.association).klass.table_name resource.joins(sort.association.to_sym) .order("#{table_name}.#{sort.attribute} #{sort.direction}") end
resource_attribute_order()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 32 def resource_attribute_order resource.order(sort.attribute => sort.direction) end
resource_has_association_with_attribute?()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 44 def resource_has_association_with_attribute? resource.reflections.keys.include?(sort.association) && resource.reflect_on_association(sort.association).klass.attribute_names.include?(sort.attribute) end
resource_has_attribute?()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 28 def resource_has_attribute? resource.klass.attribute_names.include?(sort.attribute) end
resource_has_scope_method?()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 36 def resource_has_scope_method? resource.respond_to?(sort.scope_method) end
scope_method_order()
click to toggle source
# File lib/rails/surrender/helpers/sort_builder.rb, line 40 def scope_method_order resource.send(sort.scope_method, sort.direction) end