Class: Ecoportal::API::V1::Person

Inherits:
Common::BaseModel show all
Defined in:
lib/ecoportal/api/v1/person.rb

Direct Known Subclasses

Internal::Person

Instance Attribute Summary

Attributes inherited from Common::BaseModel

#doc

Instance Method Summary collapse

Methods inherited from Common::BaseModel

#as_update, build, #initialize, passthrough, #print, #to_json

Constructor Details

This class inherits a constructor from Ecoportal::API::Common::BaseModel

Instance Method Details

#add_details(schema_or_id) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/ecoportal/api/v1/person.rb', line 45

def add_details(schema_or_id)
  person_details_class.new.tap do |new_details|
    case schema_or_id
    when person_schema_class
      schema_or_id.initialize_details(new_details)
    when String
      new_details.schema_id = schema_or_id
    end
    self.details = new_details
    # Patch out static data from as_update
    @original_doc["details"] = {
      "fields" => JSON.parse(doc["details"]["fields"].to_json)
    }
  end
  self.details.tap do |details|
    # Patch out static data from as_update
    original = details.instance_variable_get("@original_doc")
    original["fields"] = JSON.parse(doc["details"]["fields"].to_json)
  end
end

#as_jsonObject



17
18
19
# File 'lib/ecoportal/api/v1/person.rb', line 17

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

#detailsObject



21
22
23
24
25
# File 'lib/ecoportal/api/v1/person.rb', line 21

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

#details=(value) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ecoportal/api/v1/person.rb', line 27

def details=(value)
  case value
  when NilClass
    doc["details"] = nil
  when person_details_class
    doc["details"] = value.as_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") if defined?(@details)
  details.tap do |details|
    # When reassigning details, mark the whole thing as dirty
    details&.instance_variable_set("@original_doc", {})
  end
end

#supervisor(client) ⇒ Object



7
8
9
10
11
# File 'lib/ecoportal/api/v1/person.rb', line 7

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

#supervisor=(person) ⇒ Object



13
14
15
# File 'lib/ecoportal/api/v1/person.rb', line 13

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