lib/brad_views/tables/column.rb

Summary

Maintainability
A
0 mins
Test Coverage
module BradViews::Tables
  class Column
    attr_reader :keys, :options, :block

    def initialize keys, options = {}, &block
      @keys = keys
      @options = options
      @block = block
    end

    def caption i18n_scope = nil
      @options[:caption] || i18n_scope && i18n_scope.t(key)
    end

    def key
      @key ||= keys.join '_'
    end

    def cell_class
      [key.to_s, options[:class]] * " "
    end

    def helper_name
      @options[:helper_name]
    end

    def helper_args
      args = @options[:helper]

      case args
      when Hash
        [args.dup]
      when Array
        args.map do |e|
          Hash === e ? e.dup : e
        end
      when nil
        []
      else
        [args]
      end
    end

    def render_value object, template = nil
      value = retrieve_value_from object, template

      if name = helper_name
        args = helper_args
        template.send name, value, *args
      else
        value
      end
    end

    def retrieve_value_from object, template = nil
      if template && block
        return template.capture(object, &block)
      end

      keys.inject object do |memo, key|
        memo.try key
      end
    end
  end
end