Class: DataExporter::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/data_exporter/configuration.rb

Constant Summary collapse

ALLOWED_OVERRIDES =
%w(mode export_dir download_dir unpack_dir pii_file csv)

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



9
10
11
# File 'lib/data_exporter/configuration.rb', line 9

def initialize
  reset!
end

Instance Method Details

#archive_base_directoryObject



80
81
82
# File 'lib/data_exporter/configuration.rb', line 80

def archive_base_directory
  @sections[mode].fetch(:archive_base_directory, 'data_exporter')
end

#backup_dirObject



68
69
70
# File 'lib/data_exporter/configuration.rb', line 68

def backup_dir
  @sections[mode][:backup_dir]
end

#backup_keyObject



72
73
74
# File 'lib/data_exporter/configuration.rb', line 72

def backup_key
  absolute_config_path(@sections[mode][:backup_key])
end

#backup_prefixObject



76
77
78
# File 'lib/data_exporter/configuration.rb', line 76

def backup_prefix
  @sections[mode][:backup_prefix] || @sections[mode][:s3][:prefix]
end

#csv_enabled?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/data_exporter/configuration.rb', line 94

def csv_enabled?
  @override[:csv] || @sections[mode][:export_csv]
end

#databaseObject Also known as: mysql



24
25
26
27
# File 'lib/data_exporter/configuration.rb', line 24

def database
  @sections[mode][:mysql] ||= HashWithIndifferentAccess.new
  @sections[mode][:mysql]
end

#database=(h = {}) ⇒ Object



19
20
21
22
# File 'lib/data_exporter/configuration.rb', line 19

def database=(h = {})
  @sections[mode][:mysql] ||= HashWithIndifferentAccess.new
  @sections[mode][:mysql].merge!(h)
end

#load(options = {}) ⇒ Object



102
103
104
105
106
107
108
# File 'lib/data_exporter/configuration.rb', line 102

def load(options = {})
  @config_file = options[:config_file]
  @override.merge!(options.select { |k,_| ALLOWED_OVERRIDES.include?(k.to_sym) || ALLOWED_OVERRIDES.include?(k.to_s) })
  process_configuration(load_yaml_file(@config_file))
  validate!(options)
  self
end

#modeObject



58
59
60
# File 'lib/data_exporter/configuration.rb', line 58

def mode
  @override.fetch(:mode, :default)
end

#mysqldump_optionsObject



34
35
36
# File 'lib/data_exporter/configuration.rb', line 34

def mysqldump_options
  @sections[mode].fetch(:mysqldump_options, '').split(/\s+/).compact
end

#mysqldump_pathObject



30
31
32
# File 'lib/data_exporter/configuration.rb', line 30

def mysqldump_path
  @sections[mode].fetch(:mysqldump_path, 'mysqldump')
end

#pii_fields(table) ⇒ Object



88
89
90
91
92
# File 'lib/data_exporter/configuration.rb', line 88

def pii_fields(table)
  return [] unless pii_file
  @pii_data ||= load_yaml_file(pii_file)
  @pii_data.fetch(table, []).map(&:to_s)
end

#pii_fileObject



84
85
86
# File 'lib/data_exporter/configuration.rb', line 84

def pii_file
  @override[:pii_file] || @sections[mode][:pii_file]
end

#redisObject



53
54
55
56
# File 'lib/data_exporter/configuration.rb', line 53

def redis
  @sections[mode][:redis] ||= HashWithIndifferentAccess.new
  @sections[mode][:redis]
end

#reset!Object



13
14
15
16
17
# File 'lib/data_exporter/configuration.rb', line 13

def reset!
  @config_file = nil
  @override = HashWithIndifferentAccess.new
  @sections = HashWithIndifferentAccess.new { |h,k| h[k] = HashWithIndifferentAccess.new }
end

#s3Object



38
39
40
41
42
43
44
# File 'lib/data_exporter/configuration.rb', line 38

def s3
  @sections[mode][:s3] ||= HashWithIndifferentAccess.new
  @sections[mode][:s3].tap do |s3|
    s3[:bucket_name].sub!(%r{\As3://}, '') if s3[:bucket_name]
    s3[:bucket] = s3[:bucket_name]
  end
end

#sftpObject



46
47
48
49
50
51
# File 'lib/data_exporter/configuration.rb', line 46

def sftp
  @sections[mode][:sftp] ||= HashWithIndifferentAccess.new
  @sections[mode][:sftp].tap do |sftp|
    sftp[:user] ||= ENV['USER']
  end
end

#sftp_enabled?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/data_exporter/configuration.rb', line 98

def sftp_enabled?
  sftp && sftp[:host] && sftp[:user]
end

#validate!(options = {}) ⇒ Object

Raises:

  • (ArgumentError)


110
111
112
113
114
# File 'lib/data_exporter/configuration.rb', line 110

def validate!(options = {})
  raise ArgumentError, "#{@config_file} missing s3 section" unless s3_config_complete? unless sftp_enabled?
  raise ArgumentError, "#{@config_file} missing mysql section" unless database_config_complete? if options[:mysql_required]
  raise ArgumentError, "#{@config_file} missing redis section" unless redis_config_complete? if options[:redis_key_prefix]
end