Sha256: 76953e908b09a76f0c9e61d3f0bcaa356e0e974e25a35a74e738183a374cbdcf

Contents?: true

Size: 1.32 KB

Versions: 2

Compression:

Stored size: 1.32 KB

Contents

module Ecoportal
  module API
    class V1
      class Person < Common::BaseModel
        passthrough :id, :external_id, :name, :email, :supervisor_id, to: :doc

        def supervisor(client)
          return @supervisor if defined?(@supervisor)
          return @supervisor = nil if supervisor_id.nil?
          @supervisor = client.people.get(supervisor_id).result
        end

        def supervisor=(person)
          self.supervisor_id = person.id
        end

        def as_json
          super.merge "details" => details&.as_json
        end

        def details
          return @details if defined?(@details)
          return @details = nil if doc["details"].nil?
          @details = person_details_class.new(doc["details"])
        end

        def details=(value)
          case value
          when NilClass
            doc["details"] = nil
          when V1::PersonDetails
            doc["details"] = JSON.parse(value.to_json)
          when Hash
            doc["details"] = value.slice("schema_id", "fields")
          else
            raise "Invalid set on details: Need nil, PersonDetails or Hash; got #{value.class}"
          end
          remove_instance_variable("@details")
          return details
        end

        private

        def person_details_class
          V1::PersonDetails
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ecoportal-api-0.1.1 lib/ecoportal/api/v1/person.rb
ecoportal-api-0.1.0 lib/ecoportal/api/v1/person.rb