Sha256: e1429d2fb9f3befe67ca232dc899b1dbc75454660534c3556843993516498f6d

Contents?: true

Size: 1.94 KB

Versions: 18

Compression:

Stored size: 1.94 KB

Contents

module Ecoportal
  module API
    class V1
      # @todo Rename to PersonDetailsField
      class SchemaFieldValue < Common::BaseModel
        passthrough :id, :alt_id, :type, :name, :shared, :multiple

        def value
          return @value if defined?(@value)
          @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

        def value=(value)
          case type
          when "text", "phone_number", "select"
            doc["value"] = @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 = value
          when "boolean"
            doc["value"] = @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
            @value       = value
            doc["value"] = maybe_multiple(@value) do |v|
              v&.to_date&.to_s
            end
          else
            raise "Unknown type #{type}"
          end
          @value
        end

        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
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
ecoportal-api-0.8.2 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.5 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.4 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.3 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.2 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.1 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.7.0 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.6.0 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.8 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.7 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.6 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.5 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.3 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.1 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.5.0 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.4.3 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.4.2 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.4.1 lib/ecoportal/api/v1/schema_field_value.rb