class OData4::Properties::Enum

Abstract base class for OData4 EnumTypes @see [OData4::Schema::EnumType]

Public Instance Methods

url_value() click to toggle source

Value to be used in URLs. @return [String]

# File lib/odata4/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/odata4/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/odata4/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/odata4/properties/enum.rb, line 31
def members
  raise NotImplementedError, 'Subclass must override'
end
parse_value(value) click to toggle source
# File lib/odata4/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/odata4/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