Class: Eco::API::UseCases::DefaultCases::ToCsvDetailedCase

Inherits:
Common::Loaders::UseCase show all
Defined in:
lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb

Instance Method Summary collapse

Methods inherited from Common::Loaders::UseCase

#initialize, type, #type

Methods inherited from Common::BaseLoader

<=>, created_at, #initialize, #name, name_only_once!, set_created_at!

Methods included from Common::ClassHelpers

#class_resolver, #descendants, #descendants?, #inheritable_attrs, #inheritable_class_vars, #inherited, #instance_variable_name, #new_class, #resolve_class, #to_constant

Constructor Details

This class inherits a constructor from Eco::API::Common::Loaders::UseCase

Instance Method Details

#main(people, session, options, usecase) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/eco/api/usecases/default_cases/to_csv_detailed_case.rb', line 5

def main(people, session, options, usecase)
  unless people && !people.empty?
    session.logger.warn("No source people to create the file... aborting!")
    return false
  end

  unless file = options[:file] || options.dig(:export, :file, :name)
    session.logger.error("Destination file not specified")
    return false
  end

   = session.
  abilities       = session.presets_factory.keys

  session.logger.info("going to create file: #{file}")
  CSV.open(file, "w") do |csv|
    deps    = {"supervisor_id" => {people: people}}

    person_model = people.first
    person_entry = session.new_entry(person_model, dependencies: deps)
    header  = person_entry.external_entry.keys
    header += ["Subordinates"]
    header += ["Supervisor Name"]
    header += abilities
    header += ["Landing Page"]

    csv << header
    people.each do |person|
      data = session.new_entry(person, dependencies: deps).external_entry.values

      data.push(person.subordinates)
      session.micro.with_supervisor(person.supervisor_id, people) do |supervisor|
        data.push supervisor ? supervisor.name : ""
      end

      person_abilities = (person. && person..permissions_custom) || {}
      data += abilities.map {|key| person_abilities[key] || "no access"}

      if person. && landing_id = person..landing_page_id
        data.push(landing_id)
      end

      csv << data
    end
  end
  exit(0)
end