Sha256: bed3ebc84bb297f9d6301f9240809ada2acd422acd39f3ac31d0cf21bc5e607f

Contents?: true

Size: 1.11 KB

Versions: 12

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(Fixnum) { |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

12 entries across 12 versions & 1 rubygems

Version Path
jimmy-0.5.3 lib/jimmy/schema_types/string.rb
jimmy-0.5.2 lib/jimmy/schema_types/string.rb
jimmy-0.5.1 lib/jimmy/schema_types/string.rb
jimmy-0.5.0 lib/jimmy/schema_types/string.rb
jimmy-0.4.8 lib/jimmy/schema_types/string.rb
jimmy-0.4.7 lib/jimmy/schema_types/string.rb
jimmy-0.4.6 lib/jimmy/schema_types/string.rb
jimmy-0.4.5 lib/jimmy/schema_types/string.rb
jimmy-0.4.4 lib/jimmy/schema_types/string.rb
jimmy-0.4.3 lib/jimmy/schema_types/string.rb
jimmy-0.4.2 lib/jimmy/schema_types/string.rb
jimmy-0.4.1 lib/jimmy/schema_types/string.rb