Sha256: 907f9f576df40a184eee3546fd45c318e524056c18f3fc8454f8b41b8d4b7b4e

Contents?: true

Size: 1.44 KB

Versions: 6

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module EacRailsUtils
  module DataTableHelper
    class DataTable
      common_constructor :view, :dataset, :setup_block, block_arg: true

      def output
        view.content_tag(:table, id: id) do
          head << body
        end << script
      end

      private

      def head
        view.content_tag(:thead) do
          view.content_tag(:tr) do
            view.safe_join(setup.columns.map { |c| view.content_tag('th', c.label) })
          end
        end
      end

      def body
        view.content_tag(:tbody) do
          view.safe_join(dataset.map { |r| row(r) })
        end
      end

      def row(record)
        view.content_tag(:tr) do
          view.safe_join(
            setup.columns.map { |c| value_cell(c, record) << "\n" }
          )
        end << "\n"
      end

      def script
        view.javascript_tag <<~JS_CODE
          $(document).ready(function () {
            $('##{id}').DataTable({
              paging: #{@setup.paging ? 'true' : 'false'}
                  });
            });
        JS_CODE
      end

      def id
        @id ||= SecureRandom.hex(32)
      end

      # @return [EacRailsUtils::DataTableHelper::Setup]
      def setup
        @setup ||= begin
          r = ::EacRailsUtils::DataTableHelper::Setup.new
          setup_block.call(r)
          r
        end
      end

      require_sub __FILE__, require_mode: :kernel
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
eac_rails_utils-0.22.2 app/helpers/eac_rails_utils/data_table_helper/data_table.rb
eac_rails_utils-0.22.1 app/helpers/eac_rails_utils/data_table_helper/data_table.rb
eac_rails_utils-0.22.0 app/helpers/eac_rails_utils/data_table_helper/data_table.rb
eac_rails_utils-0.21.0 app/helpers/eac_rails_utils/data_table_helper/data_table.rb
eac_rails_utils-0.20.0 app/helpers/eac_rails_utils/data_table_helper/data_table.rb
eac_rails_utils-0.19.0 app/helpers/eac_rails_utils/data_table_helper/data_table.rb