Sha256: e7b88762895ec998d79302157833c912da1c60fd1693b5f5db1c91ac606b3670

Contents?: true

Size: 1.8 KB

Versions: 5

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Tables
    module Collection
      module Type
        module Helpers
          # Adds support for ranges
          module Range
            extend ActiveSupport::Concern

            class_methods do
              # @param single_value [Regex] pattern for accepting a single value
              def define_range_patterns(single_value)
                const_set(:SINGLE_VALUE, /\A(?<value>#{single_value})\z/)
                const_set(:LOWER_BOUND, /\A(?<lower>#{single_value})\.\.\z/)
                const_set(:UPPER_BOUND, /\A\.\.(?<upper>#{single_value})\z/)
                const_set(:BOUNDED, /\A(?<lower>#{single_value})\.\.(?<upper>#{single_value})\z/)
              end
            end

            def serialize(value)
              if value.is_a?(::Range)
                if value.begin.nil?
                  "..#{serialize(value.end)}"
                elsif value.end.nil?
                  "#{serialize(value.begin)}.."
                else
                  "#{serialize(value.begin)}..#{serialize(value.end)}"
                end
              else
                super
              end
            end

            def cast(value)
              case value
              when nil
                nil
              when ::Range
                value
              when self.class.const_get(:SINGLE_VALUE)
                super($~[:value])
              when self.class.const_get(:LOWER_BOUND)
                ((super($~[:lower]))..)
              when self.class.const_get(:UPPER_BOUND)
                (..(super($~[:upper])))
              when self.class.const_get(:BOUNDED)
                ((super($~[:lower]))..(super($~[:upper])))
              else
                super
              end
            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/range.rb
katalyst-tables-3.4.0 lib/katalyst/tables/collection/type/helpers/range.rb
katalyst-tables-3.3.4 lib/katalyst/tables/collection/type/helpers/range.rb
katalyst-tables-3.3.3 lib/katalyst/tables/collection/type/helpers/range.rb
katalyst-tables-3.3.2 app/models/katalyst/tables/collection/type/helpers/range.rb