Class: Ecoportal::API::V1::People
- Inherits:
-
Object
- Object
- Ecoportal::API::V1::People
- Extended by:
- Common::BaseClass
- Includes:
- Common::DocHelpers, Enumerable
- Defined in:
- lib/ecoportal/api/v1/people.rb
Direct Known Subclasses
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(preserve_stats: true) ⇒ Ecoportal::API::V1::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.
17 18 19 |
# File 'lib/ecoportal/api/v1/people.rb', line 17 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.
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/ecoportal/api/v1/people.rb', line 144 def batch(job_mode: true, &block) return job.batch(&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.
116 117 118 119 120 |
# File 'lib/ecoportal/api/v1/people.rb', line 116 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.
134 135 136 137 |
# File 'lib/ecoportal/api/v1/people.rb', line 134 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.
31 32 33 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 |
# File 'lib/ecoportal/api/v1/people.rb', line 31 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.
94 95 96 97 98 99 100 101 |
# File 'lib/ecoportal/api/v1/people.rb', line 94 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.
86 87 88 |
# File 'lib/ecoportal/api/v1/people.rb', line 86 def get_all(params: {}, silent: false) each(params: params, silent: silent).to_a end |
#job(preserve_stats: true) ⇒ Ecoportal::API::V1::Job
162 163 164 165 166 |
# File 'lib/ecoportal/api/v1/people.rb', line 162 def job(preserve_stats: true) return @last_job = Job.new(client, person_class: person_class) unless preserve_stats && @last_job @last_job = @last_job.new end |
#new ⇒ Person
Creates a new Person
object.
170 171 172 |
# File 'lib/ecoportal/api/v1/people.rb', line 170 def new person_class.new end |
#update(doc) ⇒ Response
Requests an update of a person via api.
106 107 108 109 110 111 |
# File 'lib/ecoportal/api/v1/people.rb', line 106 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.
125 126 127 128 129 |
# File 'lib/ecoportal/api/v1/people.rb', line 125 def upsert(doc) body = get_body(doc) id = get_id(doc) client.post("/people/#{CGI.escape(id)}", data: body) end |