Sha256: f34e6aac0769b7c11165c8d1c876d144a941bf4e467472ac550bdc2848d2ccee

Contents?: true

Size: 1.91 KB

Versions: 10

Compression:

Stored size: 1.91 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|
                         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

10 entries across 10 versions & 1 rubygems

Version Path
ecoportal-api-0.3.8 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.6 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.5 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.4 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.3 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.1 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.0 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.3.0.pre1 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.2.2 lib/ecoportal/api/v1/schema_field_value.rb
ecoportal-api-0.2.1 lib/ecoportal/api/v1/schema_field_value.rb