eac_rails_utils 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/helpers/eac_rails_utils/data_table_helper/column.rb +26 -23
- data/app/helpers/eac_rails_utils/data_table_helper/column_node.rb +32 -0
- data/app/helpers/eac_rails_utils/data_table_helper/data_table/value_cell.rb +30 -0
- data/app/helpers/eac_rails_utils/data_table_helper/data_table.rb +24 -16
- data/app/helpers/eac_rails_utils/data_table_helper/setup.rb +5 -2
- data/lib/eac_rails_utils/version.rb +1 -1
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3e4525483ddef206757144a407560d2b7569db1933b16935da157aef0e8645c4
         | 
| 4 | 
            +
              data.tar.gz: 163bb84353cde0a519afaba18890920cf8f04920291f8e457d81431743e61bf4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7313d2b4e45e6893a574df04e25ef627d0edea64820eda383a22ead2bd21243d377fb659ced3c58c84726f1f06d1c0904678510a6a60263e4aac88c45742d414
         | 
| 7 | 
            +
              data.tar.gz: 8d5b6f1ab06c37696f0dd780e4017c519c41e1a2c717e9bbe3fa066824a30766fd84641546bdabe20978cb3adbba8808b06384bc3ec8ef3a4e93bf61c378f678
         | 
| @@ -1,48 +1,51 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'eac_ruby_utils/core_ext'
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
            module EacRailsUtils
         | 
| 4 6 | 
             
              module DataTableHelper
         | 
| 5 7 | 
             
                class Column
         | 
| 6 8 | 
             
                  EMPTY_VALUE = '-'
         | 
| 7 9 |  | 
| 8 | 
            -
                   | 
| 10 | 
            +
                  common_constructor :args, :block
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  # @return [String]
         | 
| 13 | 
            +
                  def label
         | 
| 14 | 
            +
                    args[0]
         | 
| 15 | 
            +
                  end
         | 
| 9 16 |  | 
| 10 | 
            -
                   | 
| 11 | 
            -
             | 
| 12 | 
            -
                     | 
| 13 | 
            -
                    @block = block
         | 
| 17 | 
            +
                  # @return [String]
         | 
| 18 | 
            +
                  def path
         | 
| 19 | 
            +
                    args[1].to_s.split('.')
         | 
| 14 20 | 
             
                  end
         | 
| 15 21 |  | 
| 16 22 | 
             
                  def record_value(record)
         | 
| 17 | 
            -
                    v =  | 
| 23 | 
            +
                    v = ::EacRailsUtils::DataTableHelper::ColumnNode.new(record, path).value
         | 
| 18 24 | 
             
                    if v.present?
         | 
| 19 | 
            -
                       | 
| 25 | 
            +
                      block ? block.call(v) : v
         | 
| 20 26 | 
             
                    else
         | 
| 21 27 | 
             
                      EMPTY_VALUE
         | 
| 22 28 | 
             
                    end
         | 
| 23 29 | 
             
                  end
         | 
| 24 30 |  | 
| 25 | 
            -
                   | 
| 31 | 
            +
                  # @param attribute [Symbol]
         | 
| 32 | 
            +
                  # @param value [Proc, Object]
         | 
| 33 | 
            +
                  # @return [self]
         | 
| 34 | 
            +
                  def value_cell(attribute, value = nil, &block)
         | 
| 35 | 
            +
                    value_cell_attributes[attribute.to_sym] = block.if_present(value)
         | 
| 26 36 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
                    return node if subpath.empty?
         | 
| 37 | 
            +
                    self
         | 
| 29 38 | 
             
                  end
         | 
| 30 39 |  | 
| 31 | 
            -
                   | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
                    end
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                    def value
         | 
| 38 | 
            -
                      return @node if @node.nil? || @path.empty?
         | 
| 40 | 
            +
                  # @return [Hash]
         | 
| 41 | 
            +
                  def value_cell_attributes
         | 
| 42 | 
            +
                    @value_cell_attributes ||= {}
         | 
| 43 | 
            +
                  end
         | 
| 39 44 |  | 
| 40 | 
            -
             | 
| 41 | 
            -
                      n = subpath.shift
         | 
| 42 | 
            -
                      return Node.new(@node.send(n), subpath).value if @node.respond_to?(n)
         | 
| 45 | 
            +
                  private
         | 
| 43 46 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
                     | 
| 47 | 
            +
                  def node_value(node, subpath)
         | 
| 48 | 
            +
                    return node if subpath.empty?
         | 
| 46 49 | 
             
                  end
         | 
| 47 50 | 
             
                end
         | 
| 48 51 | 
             
              end
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'eac_ruby_utils/core_ext'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module EacRailsUtils
         | 
| 6 | 
            +
              module DataTableHelper
         | 
| 7 | 
            +
                class ColumnNode
         | 
| 8 | 
            +
                  common_constructor :node, :path
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  # @return [Boolean]
         | 
| 11 | 
            +
                  def ended?
         | 
| 12 | 
            +
                    node.nil? || path.empty?
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  # @return [Object]
         | 
| 16 | 
            +
                  def value
         | 
| 17 | 
            +
                    ended? ? node : child_value
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  # @return [Object]
         | 
| 23 | 
            +
                  def child_value
         | 
| 24 | 
            +
                    subpath = path.dup
         | 
| 25 | 
            +
                    n = subpath.shift
         | 
| 26 | 
            +
                    return self.class.new(node.send(n), subpath).value if node.respond_to?(n)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    raise "Instance of #{node.class} does not respond to #{n}"
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'eac_ruby_utils/core_ext'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module EacRailsUtils
         | 
| 6 | 
            +
              module DataTableHelper
         | 
| 7 | 
            +
                class DataTable
         | 
| 8 | 
            +
                  class ValueCell
         | 
| 9 | 
            +
                    enable_method_class
         | 
| 10 | 
            +
                    common_constructor :data_table, :column, :record
         | 
| 11 | 
            +
                    delegate :view, to: :data_table
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    # @return [ActiveSupport::SafeBuffer]
         | 
| 14 | 
            +
                    def result
         | 
| 15 | 
            +
                      view.content_tag('td', column.record_value(record), tag_attributes)
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    # @return [Object]
         | 
| 19 | 
            +
                    def tag_attribute_value(value)
         | 
| 20 | 
            +
                      value.is_a?(::Proc) ? value.call(record) : value
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    # @return [Hash]
         | 
| 24 | 
            +
                    def tag_attributes
         | 
| 25 | 
            +
                      column.value_cell_attributes.map { |k, v| [k, tag_attribute_value(v)] }.to_h
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -1,17 +1,14 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'eac_ruby_utils/core_ext'
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
            module EacRailsUtils
         | 
| 4 6 | 
             
              module DataTableHelper
         | 
| 5 7 | 
             
                class DataTable
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
                    @view = view
         | 
| 8 | 
            -
                    @dataset = dataset
         | 
| 9 | 
            -
                    @setup = ::EacRailsUtils::DataTableHelper::Setup.new
         | 
| 10 | 
            -
                    yield(@setup)
         | 
| 11 | 
            -
                  end
         | 
| 8 | 
            +
                  common_constructor :view, :dataset, :setup_block, block_arg: true
         | 
| 12 9 |  | 
| 13 10 | 
             
                  def output
         | 
| 14 | 
            -
                     | 
| 11 | 
            +
                    view.content_tag(:table, id: id) do
         | 
| 15 12 | 
             
                      head << body
         | 
| 16 13 | 
             
                    end << script
         | 
| 17 14 | 
             
                  end
         | 
| @@ -19,29 +16,29 @@ module EacRailsUtils | |
| 19 16 | 
             
                  private
         | 
| 20 17 |  | 
| 21 18 | 
             
                  def head
         | 
| 22 | 
            -
                     | 
| 23 | 
            -
                       | 
| 24 | 
            -
                         | 
| 19 | 
            +
                    view.content_tag(:thead) do
         | 
| 20 | 
            +
                      view.content_tag(:tr) do
         | 
| 21 | 
            +
                        view.safe_join(setup.columns.map { |c| view.content_tag('th', c.label) })
         | 
| 25 22 | 
             
                      end
         | 
| 26 23 | 
             
                    end
         | 
| 27 24 | 
             
                  end
         | 
| 28 25 |  | 
| 29 26 | 
             
                  def body
         | 
| 30 | 
            -
                     | 
| 31 | 
            -
                       | 
| 27 | 
            +
                    view.content_tag(:tbody) do
         | 
| 28 | 
            +
                      view.safe_join(dataset.map { |r| row(r) })
         | 
| 32 29 | 
             
                    end
         | 
| 33 30 | 
             
                  end
         | 
| 34 31 |  | 
| 35 32 | 
             
                  def row(record)
         | 
| 36 | 
            -
                     | 
| 37 | 
            -
                       | 
| 38 | 
            -
                         | 
| 33 | 
            +
                    view.content_tag(:tr) do
         | 
| 34 | 
            +
                      view.safe_join(
         | 
| 35 | 
            +
                        setup.columns.map { |c| value_cell(c, record) << "\n" }
         | 
| 39 36 | 
             
                      )
         | 
| 40 37 | 
             
                    end << "\n"
         | 
| 41 38 | 
             
                  end
         | 
| 42 39 |  | 
| 43 40 | 
             
                  def script
         | 
| 44 | 
            -
                     | 
| 41 | 
            +
                    view.javascript_tag <<~JS_CODE
         | 
| 45 42 | 
             
                      $(document).ready(function () {
         | 
| 46 43 | 
             
                        $('##{id}').DataTable({
         | 
| 47 44 | 
             
                          paging: #{@setup.paging ? 'true' : 'false'}
         | 
| @@ -53,6 +50,17 @@ module EacRailsUtils | |
| 53 50 | 
             
                  def id
         | 
| 54 51 | 
             
                    @id ||= SecureRandom.hex(32)
         | 
| 55 52 | 
             
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  # @return [EacRailsUtils::DataTableHelper::Setup]
         | 
| 55 | 
            +
                  def setup
         | 
| 56 | 
            +
                    @setup ||= begin
         | 
| 57 | 
            +
                      r = ::EacRailsUtils::DataTableHelper::Setup.new
         | 
| 58 | 
            +
                      setup_block.call(r)
         | 
| 59 | 
            +
                      r
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  require_sub __FILE__, require_mode: :kernel
         | 
| 56 64 | 
             
                end
         | 
| 57 65 | 
             
              end
         | 
| 58 66 | 
             
            end
         | 
| @@ -11,8 +11,11 @@ module EacRailsUtils | |
| 11 11 | 
             
                    @paging = true
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 | 
            -
                   | 
| 15 | 
            -
             | 
| 14 | 
            +
                  # @return [EacRailsUtils::DataTableHelper::Column]
         | 
| 15 | 
            +
                  def column(*args, &block)
         | 
| 16 | 
            +
                    column = ::EacRailsUtils::DataTableHelper::Column.new(args, block)
         | 
| 17 | 
            +
                    @columns << column
         | 
| 18 | 
            +
                    column
         | 
| 16 19 | 
             
                  end
         | 
| 17 20 | 
             
                end
         | 
| 18 21 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: eac_rails_utils
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.19.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - E.A.C.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-06-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activemodel-associations
         | 
| @@ -193,7 +193,9 @@ files: | |
| 193 193 | 
             
            - app/helpers/eac_rails_utils/common_form_helper/form_builder/year_month_field.rb
         | 
| 194 194 | 
             
            - app/helpers/eac_rails_utils/data_table_helper.rb
         | 
| 195 195 | 
             
            - app/helpers/eac_rails_utils/data_table_helper/column.rb
         | 
| 196 | 
            +
            - app/helpers/eac_rails_utils/data_table_helper/column_node.rb
         | 
| 196 197 | 
             
            - app/helpers/eac_rails_utils/data_table_helper/data_table.rb
         | 
| 198 | 
            +
            - app/helpers/eac_rails_utils/data_table_helper/data_table/value_cell.rb
         | 
| 197 199 | 
             
            - app/helpers/eac_rails_utils/data_table_helper/setup.rb
         | 
| 198 200 | 
             
            - app/helpers/eac_rails_utils/formatter_helper.rb
         | 
| 199 201 | 
             
            - app/helpers/eac_rails_utils/links_helper.rb
         |