Sha256: 6b2e1505eb8cef4ca6adc9bc33cc3357cd49ed0afdad569dfa01d4cb52bc8397

Contents?: true

Size: 1.43 KB

Versions: 6

Compression:

Stored size: 1.43 KB

Contents

module Tableling

  class Field
    attr_reader :name

    def initialize name, view, options = {}, &block

      @name, @view = name.to_s, view
      @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

    def order &block
      @order_block = block
    end

    def no_order
      @no_order = true
    end

    def value &block
      @value_block = block
    end

    def includes &block
      @includes_block = block
    end

    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

    def with_includes query
      if @includes_block
        @includes_block.call query
      elsif @includes
        query.includes @includes
      else
        query
      end
    end

    def extract object
      if @value_block
        @value_block.call object
      else
        serialize object.send(@value_column || @name)
      end
    end

    private

    def model
      @view.config.model
    end

    def serialize value
      serializer = @view.settings.serializers.find{ |s| s.match? value }
      serializer ? serializer.serialize(value) : value
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
tableling-rails-0.0.17 lib/tableling-rails/field.rb
tableling-rails-0.0.16 lib/tableling-rails/field.rb
tableling-rails-0.0.15 lib/tableling-rails/field.rb
tableling-rails-0.0.14 lib/tableling-rails/field.rb
tableling-rails-0.0.13 lib/tableling-rails/field.rb
tableling-rails-0.0.12 lib/tableling-rails/field.rb