Class: Ecoportal::API::V1::People
- Inherits:
-
Object
- Object
- Ecoportal::API::V1::People
- Extended by:
- Common::BaseClass
- Includes:
- Common::Client::TimeOut, Common::DocHelpers, Enumerable
- Defined in:
- lib/ecoportal/api/v1/people.rb
Direct Known Subclasses
Constant Summary collapse
- DELAY_STATUS_CHECK =
5
Constants included from Common::Client::TimeOut
Common::Client::TimeOut::MIN_SIZE, Common::Client::TimeOut::MIN_THROUGHPUT
Instance Attribute Summary collapse
-
#client ⇒ Common::Client
readonly
a
Common::Client
object that holds the configuration of the api connection.
Instance Method Summary collapse
-
#batch(job_mode: true) {|batch_op| ... } ⇒ Ecoportal::API::Common::Response
Creates a
BatchOperation
and yields it to the given bock. -
#create(doc) ⇒ Response
Requests to create a person via api.
-
#delete(doc) ⇒ Response
Requests to completelly remove from an organization an existing person via api.
-
#each(params: {}, silent: false) {|person| ... } ⇒ Object
Iterates all the people of the organization.
-
#get(doc) ⇒ Person
Gets a person via api.
-
#get_all(params: {}, silent: false) ⇒ Array<Person>
Gets all the people via api requests.
-
#initialize(client) ⇒ People
constructor
An instance object ready to make people api requests.
-
#job {|operation| ... } ⇒ Ecoportal::API::Common::Response
The results of the batch job.
-
#new ⇒ Person
Creates a new
Person
object. -
#update(doc) ⇒ Response
Requests an update of a person via api.
-
#upsert(doc) ⇒ Response
Requests to update an existing person or if it does not exist, to create it, via api.
Methods included from Common::BaseClass
class_resolver, redef_without_warning, resolve_class
Methods included from Common::DocHelpers
Constructor Details
#initialize(client) ⇒ People
Returns an instance object ready to make people api requests.
20 21 22 |
# File 'lib/ecoportal/api/v1/people.rb', line 20 def initialize(client) @client = client end |
Instance Attribute Details
#client ⇒ Common::Client (readonly)
a Common::Client
object that
holds the configuration of the api connection.
6 7 8 |
# File 'lib/ecoportal/api/v1/people.rb', line 6 def client @client end |
Instance Method Details
#batch(job_mode: true) {|batch_op| ... } ⇒ Ecoportal::API::Common::Response
Creates a BatchOperation
and yields it to the given bock.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/ecoportal/api/v1/people.rb', line 145 def batch(job_mode: true, &block) return job(&block) if job_mode operation = Common::BatchOperation.new( "/people", person_class, logger: client.logger ) yield operation # The batch operation is responsible for logging the output client.post("/people/batch", data: operation.as_json).tap do |response| operation.process_response(response) end end |
#create(doc) ⇒ Response
Requests to create a person via api.
118 119 120 121 |
# File 'lib/ecoportal/api/v1/people.rb', line 118 def create(doc) body = get_body(doc) client.post("/people", data: body) end |
#delete(doc) ⇒ Response
Requests to completelly remove from an organization an existing person via api.
135 136 137 138 |
# File 'lib/ecoportal/api/v1/people.rb', line 135 def delete(doc) id = get_id(doc) client.delete("/people/#{CGI.escape(id)}") end |
#each(params: {}, silent: false) {|person| ... } ⇒ Object
- it ignores the key
cursor_id:
ofparams:
. each
is called byto_a
Iterates all the people of the organization.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/ecoportal/api/v1/people.rb', line 34 def each(params: {}, silent: false) # rubocop:disable Metrics/AbcSize return to_enum(:each, params: params, silent: silent) unless block_given? cursor_id = nil results = 0 puts "\n" unless silent loop do params.update(cursor_id: cursor_id) if cursor_id body = nil response = nil count = 5 loop do response = client.get("/people", params: params) body = response && body_data(response.body) break if response.success? || count <= 0 puts "Request failed - Status #{response.status}: #{body}" count -= 1 sleep(0.5) end raise "Request failed - Status #{response.status}: #{body}" unless response.success? unless silent || (total = body["total_results"])&.zero? results += body["results"].length percent = results * 100 / total msg = "People GET" msg << " (search=#{params[:q]})" if params.key?(:q) print "#{msg}: #{percent.round}% (of #{total}): #{results}\r" $stdout.flush end body["results"].each do |person| yield person_class.new(person) end break unless (cursor_id = body["cursor_id"]) end self end |
#get(doc) ⇒ Person
if the request has success?
the returned object.result
gives an object with that Person
.
Gets a person via api.
97 98 99 100 101 102 103 104 |
# File 'lib/ecoportal/api/v1/people.rb', line 97 def get(doc) id = get_id(doc) response = client.get("/people/#{CGI.escape(id)}") body = body_data(response.body) return person_class.new(body) if response.success? raise "Could not get person #{id} - Error #{response.status}: #{body}" end |
#get_all(params: {}, silent: false) ⇒ Array<Person>
it ignores the key :cursor_id
in params:
.
Gets all the people via api requests.
89 90 91 |
# File 'lib/ecoportal/api/v1/people.rb', line 89 def get_all(params: {}, silent: false) each(params: params, silent: silent).to_a end |
#job {|operation| ... } ⇒ Ecoportal::API::Common::Response
Returns the results of the batch job.
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/ecoportal/api/v1/people.rb', line 163 def job operation = Common::BatchOperation.new( "/people", person_class, logger: client.logger ) yield operation total = operation.count timeout = timeout_for(total) job_id = create_job(operation) status = wait_for_job_completion(job_id, timeout: timeout, total: total) # @todo # if total == status.progress if status&.complete?(total) job_result(job_id, operation) else msg = "Job '#{job_id}' not complete (size: #{total}).\n" msg << " Probably timeout after #{timeout} seconds.\n" msg << " Current status: #{status}" raise API::Errors::TimeOut, msg end end |
#new ⇒ Person
Creates a new Person
object.
193 194 195 |
# File 'lib/ecoportal/api/v1/people.rb', line 193 def new person_class.new end |
#update(doc) ⇒ Response
Requests an update of a person via api.
109 110 111 112 113 |
# File 'lib/ecoportal/api/v1/people.rb', line 109 def update(doc) body = get_body(doc) id = get_id(doc) client.patch("/people/#{CGI.escape(id)}", data: body) end |
#upsert(doc) ⇒ Response
Requests to update an existing person or if it does not exist, to create it, via api.
126 127 128 129 130 |
# File 'lib/ecoportal/api/v1/people.rb', line 126 def upsert(doc) body = get_body(doc) id = get_id(doc) client.post("/people/#{CGI.escape(id)}", data: body) end |