Sha256: fe8b9faa9cf6928dd9201df7d3a88128498993edcc5a9e9e32a247cb201b6f70
Contents?: true
Size: 1.52 KB
Versions: 18
Compression:
Stored size: 1.52 KB
Contents
module Frodo module Properties # Abstract base class for Frodo EnumTypes # @see [Frodo::Schema::EnumType] class Enum < Frodo::Property # Returns the property value, properly typecast # @return [String, nil] def value if @value.nil? && allows_nil? nil else @value end end # Sets the property value # @params new_value [String] def value=(new_value) parsed_value = validate(new_value) @value = is_flags? ? parsed_value : parsed_value.first end # Value to be used in URLs. # @return [String] def url_value "#{type}'#{@value}'" end private def members raise NotImplementedError, 'Subclass must override' end def validate(value) return [] if value.nil? && allows_nil? values = parse_value(value) if values.length > 1 && !is_flags? raise ArgumentError, 'Multiple values are not allowed for this property' end values.map do |value| if members.keys.include?(value) members[value] elsif members.values.include?(value) value else validation_error "Value must be one of #{members.to_a}, but was: '#{value}'" end end.compact end def parse_value(value) return nil if value.nil? value.to_s.split(',').map(&:strip).map do |val| val =~ /^[0-9]+$/ ? val.to_i : val end end end end end
Version data entries
18 entries across 18 versions & 1 rubygems