class Ecoportal::API::V1::SchemaFieldValue

@todo Rename to PersonDetailsField

Public Instance Methods

maybe_multiple(value) { |v| ... } click to toggle source
# File lib/ecoportal/api/v1/schema_field_value.rb, line 52
def maybe_multiple(value)
  if multiple
    unless value.is_a?(Array)
      raise "Expected Array, got #{value.class}"
    end
    value.map {|v| yield v }
  else
    yield value
  end
end
value() click to toggle source
# File lib/ecoportal/api/v1/schema_field_value.rb, line 8
def value
  case type
  when "text", "phone_number", "number", "boolean", "select"
   doc["value"]
  when "date"
   if doc["value"]
     maybe_multiple(doc["value"]) do |v|
       Date.iso8601(v)
     end
   end
  else
   raise "Unknown type #{type}"
  end
end
value=(value) click to toggle source
# File lib/ecoportal/api/v1/schema_field_value.rb, line 23
def value=(value)
  case type
  when "text", "phone_number", "select"
    doc["value"] = maybe_multiple(value) do |v|
      v&.to_s
    end
  when "number"
    maybe_multiple(value) do |v|
      unless v.nil? || v.is_a?(Numeric)
        raise "Invalid number type #{v.class}"
      end
    end
    doc["value"] = value
  when "boolean"
    doc["value"] = !!value
  when "date"
    maybe_multiple(value) do |v|
      unless v.nil? || v.respond_to?(:to_date)
        raise "Invalid date type #{v.class}"
      end
    end
    doc["value"] = maybe_multiple(value) do |v|
      v&.to_date&.to_s
    end
  else
    raise "Unknown type #{type}"
  end
end