Class: Eco::API::Session::Batch

Inherits:
Common::Session::BaseSession show all
Defined in:
lib/eco/api/session/batch.rb,
lib/eco/api/session/batch/job.rb,
lib/eco/api/session/batch/jobs.rb,
lib/eco/api/session/batch/errors.rb,
lib/eco/api/session/batch/status.rb,
lib/eco/api/session/batch/feedback.rb,
lib/eco/api/session/batch/policies.rb,
lib/eco/api/session/batch/base_policy.rb,
lib/eco/api/session/batch/jobs_groups.rb,
lib/eco/api/session/batch/request_stats.rb

Defined Under Namespace

Classes: BasePolicy, Errors, Feedback, Job, Jobs, JobsGroups, Policies, RequestStats, Status

Constant Summary collapse

DEFAULT_BATCH_BLOCK =
50
VALID_METHODS =
%i[get create update upsert delete].freeze

Instance Attribute Summary

Attributes inherited from Common::Session::BaseSession

#config, #environment, #session

Attributes included from Language::AuxiliarLogger

#logger

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Common::Session::BaseSession

#api, #api?, #fatal, #file_manager, #initialize, #logger, #mailer, #mailer?, #s3uploader, #s3uploader?, #sftp, #sftp?

Methods included from Language::AuxiliarLogger

#log

Constructor Details

This class inherits a constructor from Eco::API::Common::Session::BaseSession

Class Method Details

.valid_method?(value) ⇒ Boolean

Returns true if the method is supported, false otherwise.

Returns:

  • (Boolean)

    true if the method is supported, false otherwise.



10
11
12
# File 'lib/eco/api/session/batch.rb', line 10

def valid_method?(value)
  VALID_METHODS.include?(value)
end

Instance Method Details

#batch_mode(opts = self.options) ⇒ Symbol

Returns the batch mode to run.

Returns:

  • (Symbol)

    the batch mode to run



16
17
18
# File 'lib/eco/api/session/batch.rb', line 16

def batch_mode(opts = self.options)
  opts.dig(:workflow, :batch, :mode) || :batch
end

#get_people(people = nil, params: {}, silent: false) ⇒ Array<People>

Note:
  • If people is given keys page: and q of params:.

Gets the people of the organization according params. If people is not nil, scopes to only the people specified.

Parameters:

  • people (Nil, People, Enumerable<Person>, Enumerable<Hash>) (defaults to: nil)

    target People to launch the batch against.

  • params (Hash) (defaults to: {})

    api request options.

Options Hash (params:):

  • :page (String)

    the page number page based on :per_page.

  • :per_page (String)

    the number of people included per each batch api request.

  • :q (String)

    some text to search. Omit this parameter to target all the people.

Returns:

  • (Array<People>)

    all the people based on params



35
36
37
38
39
# File 'lib/eco/api/session/batch.rb', line 35

def get_people(people = nil, params: {}, silent: false)
  return launch(people, method: :get, params: params, silent: silent).people if people.is_a?(Enumerable)

  get(params: params, silent: silent)
end

#job_mode?(opts = self.options) ⇒ Boolean

Returns are we running in :job mode?.

Returns:

  • (Boolean)

    are we running in :job mode?



21
22
23
# File 'lib/eco/api/session/batch.rb', line 21

def job_mode?(opts = self.options)
  batch_mode(opts) == :job
end

#launch(people, method:, params: {}, silent: false) ⇒ Batch::Status

launches a batch of method type using people and the specified params

Parameters:

  • people (People, Enumerable<Person>, Enumerable<Hash>)

    target People to launch the batch against.

  • method (Symbol)

    the method to launch the batch api request with.

  • params (Hash) (defaults to: {})

    api request options.

Options Hash (params:):

  • :per_page (String)

    the number of people included per each batch api request.

Returns:

Raises:

  • Exception

    • if people is nil or is not an Enumerable.
    • if there's no api connection linked to the current Batch.


50
51
52
# File 'lib/eco/api/session/batch.rb', line 50

def launch(people, method:, params: {}, silent: false)
  batch_from(people, method: method, params: params, silent: silent)
end

#search(data, silent: false, params: {}) ⇒ Object

rubocop:disable Metrics/AbcSize



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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/eco/api/session/batch.rb', line 54

def search(data, silent: false, params: {}) # rubocop:disable Metrics/AbcSize
  params = {per_page: DEFAULT_BATCH_BLOCK}.merge(params)

  launch(data, method: :get, params: params, silent: silent).tap do |status|
    status.mode = :search

    entries = status.queue
    puts "\n"
    entries.each_with_index do |entry, i|
      if (i % 10).zero?
        percent = i * 100 / entries.length
        print "Searching: #{percent.round}% (#{i}/#{entries.length} entries)\r"
        $stdout.flush
      end

      next if status.success?(entry)

      email = nil
      if entry.respond_to?(:email)
        email = entry.email
      elsif entry.respond_to?(:to_h)
        email = entry.to_h["email"]
      end

      people_matching = []
      email = email.to_s.strip.downcase
      unless email.empty?
        people_matching = get(params: params.merge(q: email), silent: silent).select do |person|
          person.email == email
        end
      end

      case people_matching.length
      when 1
        status.set_person_match(entry, people_matching.first)
      when 2..Float::INFINITY
        status.set_people_match(entry, people_matching)
      end
    end
  end
end