Sha256: 92eb90a6bf86ab692d551ab3a826036c01961ad04edb4b134f3f4ac8dc19529f

Contents?: true

Size: 1.33 KB

Versions: 5

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Collection
      module Type
        module Helpers
          # Adds support for multiple: true
          module Multiple
            def initialize(multiple: false, **)
              super(**)

              @multiple = multiple
            end

            def multiple?
              @multiple
            end

            def cast(value)
              return (multiple? ? [] : nil) if value.nil?

              if multiple? && value.is_a?(::Array)
                value.map { |v| super(v) }
              elsif multiple?
                [super]
              else
                super
              end
            end

            def deserialize(value)
              if multiple? && value.is_a?(::Array)
                value.map { |v| super(v) }.flatten
              elsif multiple?
                [super].flatten.compact
              else
                super
              end
            end

            def serialize(value)
              if multiple? && value.is_a?(::Array)
                value.map { |v| super(v) }.flatten
              else
                super
              end
            end

            using Extensions

            def default_value
              multiple? ? [] : super
            end
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
katalyst-tables-3.4.1 lib/katalyst/tables/collection/type/helpers/multiple.rb
katalyst-tables-3.4.0 lib/katalyst/tables/collection/type/helpers/multiple.rb
katalyst-tables-3.3.4 lib/katalyst/tables/collection/type/helpers/multiple.rb
katalyst-tables-3.3.3 lib/katalyst/tables/collection/type/helpers/multiple.rb
katalyst-tables-3.3.2 app/models/katalyst/tables/collection/type/helpers/multiple.rb