Sha256: bfaa99dd696aeb4f4b68a4cedd89360f02117cf859050800c0384b9fe7c61aaf

Contents?: true

Size: 1.02 KB

Versions: 5

Compression:

Stored size: 1.02 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(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(Fixnum) { |value| min_length value; max_length value }
    trait(Array) { |value| attrs[:enum] = value.map(&:to_s) }

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

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
jimmy-0.4 lib/jimmy/schema_types/string.rb
jimmy-0.3.4 lib/jimmy/schema_types/string.rb
jimmy-0.3.3 lib/jimmy/schema_types/string.rb
jimmy-0.3.2 lib/jimmy/schema_types/string.rb
jimmy-0.3.1 lib/jimmy/schema_types/string.rb