class Frodo::Properties::Enum
Abstract base class for Frodo
EnumTypes @see [Frodo::Schema::EnumType]
Public Instance Methods
url_value()
click to toggle source
Value to be used in URLs. @return [String]
# File lib/frodo/properties/enum.rb, line 25 def url_value "#{type}'#{@value}'" end
value()
click to toggle source
Returns the property value, properly typecast @return [String, nil]
# File lib/frodo/properties/enum.rb, line 8 def value if @value.nil? && allows_nil? nil else @value end end
value=(new_value)
click to toggle source
Sets the property value @params new_value [String]
# File lib/frodo/properties/enum.rb, line 18 def value=(new_value) parsed_value = validate(new_value) @value = is_flags? ? parsed_value : parsed_value.first end
Private Instance Methods
members()
click to toggle source
# File lib/frodo/properties/enum.rb, line 31 def members raise NotImplementedError, 'Subclass must override' end
parse_value(value)
click to toggle source
# File lib/frodo/properties/enum.rb, line 54 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
validate(value)
click to toggle source
# File lib/frodo/properties/enum.rb, line 35 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