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