Sha256: c456bfc6b2cf503869fa3a3e3a73f9a067bb2f72daf8b252108b2b83a2d7dc6b

Contents?: true

Size: 1.9 KB

Versions: 14

Compression:

Stored size: 1.9 KB

Contents

module Ecoportal
  module API
    class V1
      class SchemaFieldValue < Common::BaseModel
        passthrough :id, :alt_id, :type, :name, :shared, :multiple, to: :doc

        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|
                         DateTime.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?(:iso8601)
                raise "Invalid date type #{v.class}"
              end
            end
            @value       = value
            doc["value"] = maybe_multiple(@value) do |v|
              v&.iso8601
            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

14 entries across 14 versions & 1 rubygems

Version Path
ecoportal-api-0.2.0 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.12 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.11 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.10 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.9 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.8 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.7 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.6 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.5 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.4 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.3 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.2 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.1 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.1.0 lib/ecoportal/api/v1/schema_field_value.rb