# frozen_string_literal: true require_relative "base" module Neetob class CLI module Heroku module ConfigVars class List < Base attr_accessor :apps, :sandbox, :keys, :required_config_vars_file_path def initialize(apps, keys = [], required_config_vars_file_path = "", sandbox = false) super() @apps = apps @sandbox = sandbox @keys = keys @required_config_vars_file_path = required_config_vars_file_path end def run matching_apps = find_all_matching_apps_or_repos(apps, :heroku, sandbox) final_data = [] matching_apps.each do |app| ui.info("\n Config of #{app}\n", print_to_audit_log: false) config = `heroku config -a #{app} --json` unless $?.success? ui.error( "There is a problem in accessing the app with name \"#{app}\" in your account.", print_to_audit_log: false) ui.error( "Please check the specified app name and ensure you're authorized to view that app.", print_to_audit_log: false) next end table = Terminal::Table.new headings: table_columns, rows: filter_config(config) ui.success(table, print_to_audit_log: false) final_data << JSON.parse(config) end if Thread.current[:audit_mode] final_data end end private def table_columns ["Key", "Value"] end def filter_config(config) parsed_config = JSON.parse(config) if keys.nil? && required_config_vars_file_path.nil? return parsed_config end required_config = keys || read_json_file(required_config_vars_file_path) required_config.map do |key| [key, parsed_config[key]] end end end end end end end