Sha256: d04b5fd0cb45c77b574de5b3faef5179bf24f9687242aef4dc6c2a82791a608c

Contents?: true

Size: 1.18 KB

Versions: 9

Compression:

Stored size: 1.18 KB

Contents

module Tableling

  class Field
    attr_reader :name
    # TODO: extract active record functionality

    def initialize name, options = {}, &block
      @name = name.to_s
      @order_column = options[:order].try :to_s
      @value_column = options[:value].try :to_s
      @includes = options[:includes]
      @model = options[:model]
      Array.wrap(options[:modules] || []).each do |mod|
        extend mod
      end
      instance_eval &block if block
    end

    def order &block
      @order_block = block
    end

    def value &block
      @value_block = block
    end

    def includes &block
      @includes_block = block
    end

    def with_order query, direction
      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
        object.send(@value_column || @name).to_s
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
tableling-rails-0.0.11 lib/tableling-rails/field.rb
tableling-rails-0.0.10 lib/tableling-rails/field.rb
tableling-rails-0.0.9 lib/tableling-rails/field.rb
tableling-rails-0.0.8 lib/tableling-rails/field.rb
tableling-rails-0.0.7 lib/tableling-rails/field.rb
tableling-rails-0.0.6 lib/tableling-rails/field.rb
tableling-rails-0.0.5 lib/tableling-rails/field.rb
tableling-rails-0.0.3 lib/tableling-rails/field.rb
tableling-rails-0.0.4 lib/tableling-rails/field.rb