Sha256: e49cc869891cba565d246d145296adaa6ee7964889eda51b5f4e2377c22db5a5

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

module Jimmy
  class SchemaTypes::String < SchemaType
    register!

    trait :min_length
    trait :max_length
    trait(:pattern) { |regex| attrs[:pattern] = regex.is_a?(Regexp) ? regex.inspect.gsub(%r`^/|/[a-z]*$`, '') : regex }
    trait(:format) { |value| attrs[:format] = value.to_s.gsub('_', '-') }
    %i[
      date_time
      email
      hostname
      ipv4
      ipv6
      uri
    ].each { |k| trait(k) { format k } }
    trait(:enum) do |*values|
      attrs[:enum] ||= []
      attrs[:enum] |= values.flatten.map(&:to_s)
    end
    trait(Regexp) { |regex| pattern regex }
    trait Range do |value|
      variation = value.exclude_end? ? 1 : 0
      if value.first < value.last
        attrs[:min_length] = value.first
        attrs[:max_length] = value.last - variation
      else
        attrs[:max_length] = value.first
        attrs[:min_length] = value.last + variation
      end
    end
    trait(Integer) { |value| min_length value; max_length value }
    trait(Array) { |value| enum value }

    compile do |hash|
      hash.merge! camelize_attrs(%i[min_length max_length pattern enum format])
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jimmy-0.5.5 lib/jimmy/schema_types/string.rb
jimmy-0.5.4 lib/jimmy/schema_types/string.rb