class Filtrum::Field

Attributes

alias[RW]
name[RW]

Public Class Methods

new(name, view, options = {}) click to toggle source
# File lib/filtrum/field.rb, line 6
def initialize name, view, options = {}, &block

  @name, @view = name.to_s, view
  @alias = options[:as].try :to_s
  @value_column = options[:value].try :to_s
  @includes = options[:includes]

  if options[:order] == false
    @no_order = true
  elsif options[:order]
    @order_column = options[:order].to_s
  end

  instance_eval &block if block
end

Public Instance Methods

as(name) click to toggle source
# File lib/filtrum/field.rb, line 26
def as name
  @alias = name.to_s
end
extract(object) click to toggle source
# File lib/filtrum/field.rb, line 65
def extract object
  if @value_block
    @value_block.call object
  else
    serialize object.send(@value_column || @name)
  end
end
includes(&block) click to toggle source
# File lib/filtrum/field.rb, line 42
def includes &block
  @includes_block = block
end
no_order() click to toggle source
# File lib/filtrum/field.rb, line 34
def no_order
  @no_order = true
end
order(&block) click to toggle source
# File lib/filtrum/field.rb, line 30
def order &block
  @order_block = block
end
value(&block) click to toggle source
# File lib/filtrum/field.rb, line 38
def value &block
  @value_block = block
end
with_includes(query) click to toggle source
# File lib/filtrum/field.rb, line 55
def with_includes query
  if @includes_block
    @includes_block.call query
  elsif @includes
    query.includes @includes
  else
    query
  end
end
with_order(query, direction) click to toggle source
# File lib/filtrum/field.rb, line 46
def with_order query, direction
  return if @no_order
  if @order_block
    @order_block.call query, direction
  else
    query.order "#{model.table_name}.#{@order_column || @name} #{direction}"
  end
end
working_name() click to toggle source
# File lib/filtrum/field.rb, line 22
def working_name
  @alias || @name
end

Private Instance Methods

model() click to toggle source
# File lib/filtrum/field.rb, line 75
def model
  @view.config.model
end
serialize(value) click to toggle source
# File lib/filtrum/field.rb, line 79
def serialize value
  type_serializer = @view.settings.type_serializers.find{ |s| s.match? value }
  type_serializer ? type_serializer.serialize(value) : value
end