Sha256: a018f81a9153f8671a049519d055125b7bd867308a7f6e3cf203b6496db5c314

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

class Typero::ArrayType < Typero::Type
  def default
    []
  end

  def set
    unless @value.class.to_s.index('Array')
      @value = @value.to_s.sub(/^\{/,'').sub(/\}$/,'')

      # split on new line and comma by default
      @value = @value.split(/\s*[,\n]\s*/)
    end

    @value.uniq!
    @value.compact!

    if type = @opts[:array_type]
      @value.map! { |el|
        Typero.validate(type, el) { |msg|
          raise TypeError.new "'%s' %s (%s)" % [el, msg, value_in_list_error]
        }
      }
    end

    # this converts Sequel::Postgres::PGArray to Array and fixes many problems
    @value = @value.to_a if @value.class != Array
  end

  def validate
    raise TypeError, error_for(:min_length) % @opts[:min] if @opts[:min] && @value.length < @opts[:min]
    raise TypeError, error_for(:max_length) % @opts[:max] if @opts[:max] && @value.length > @opts[:max]
    true
  end

  def min_error
    'min array lenght is %s elements'
  end

  def max_error
    'max array lenght is %s elements'
  end

  def value_in_list_error
    'value in list'
  end

  def db_field
    check  = Typero::Type.load(@opts[:array_type]).new nil, {}
    schema = check.db_field
    schema[1] ||= {}
    schema[1].merge! array: true
    schema
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
typero-0.5.2 ./lib/typero/type/array.rb