Sha256: 5c7e82a52783bed78f1b783ce9c03b0c1fc4ff2ecbcb2c745da0c3059b70b17d

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

module DiningTable
  
  module Columns

    class Column
      
      attr_accessor :name, :table, :options, :block
      
      def initialize( table, name, options = {}, &block)
        self.table = table
        self.name = name
        self.options = options
        self.block = block
      end
      
      def value(object)
        if block
          block.call(object, self)
        else
          object.send(name) if object.respond_to?(name)
        end
      end
      
      def header
        @header ||= begin
          label = determine_label(:header)
          return label if label
          object_class = table.collection.first.class if table.collection.first
          object_class ||= table.object_class if !object_class
          object_class.human_attribute_name( name ) if object_class && object_class.respond_to?( :human_attribute_name )
        end
      end

      def footer
        @footer ||= determine_label(:footer)
      end
      
      def options_for(identifier)
        options[ identifier ] || { }
      end
    
      private
      
        def determine_label( name )
          if options[ name ]
            label_ = options[ name ]
            label_ = label_.call if label_.respond_to?(:call)
            label_ = label_.to_s if label_.respond_to?(:to_s)
            return label_
          end
        end

    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dining-table-1.1.3 lib/dining-table/columns/column.rb
dining-table-1.1.2 lib/dining-table/columns/column.rb
dining-table-1.1.1 lib/dining-table/columns/column.rb
dining-table-1.1.0 lib/dining-table/columns/column.rb