Class: FileSystem

Inherits:
Object
  • Object
show all
Defined in:
lib/jirametrics/file_system.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#logfileObject

Returns the value of attribute logfile.



6
7
8
# File 'lib/jirametrics/file_system.rb', line 6

def logfile
  @logfile
end

#logfile_nameObject

Returns the value of attribute logfile_name.



6
7
8
# File 'lib/jirametrics/file_system.rb', line 6

def logfile_name
  @logfile_name
end

Instance Method Details

#compress(node) ⇒ Object

In some Jira instances, a sizeable portion of the JSON is made up of empty fields. I’ve seen cases where this simple compression will drop the filesize by half.



54
55
56
57
58
59
60
61
62
# File 'lib/jirametrics/file_system.rb', line 54

def compress node
  if node.is_a? Hash
    node.reject! { |_key, value| value.nil? || (value.is_a?(Array) && value.empty?) }
    node.each_value { |value| compress value }
  elsif node.is_a? Array
    node.each { |a| compress a }
  end
  node
end

#deprecated(message:, date:, depth: 2) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/jirametrics/file_system.rb', line 72

def deprecated message:, date:, depth: 2
  text = +''
  text << "Deprecated(#{date}): "
  text << message
  caller(1..depth).each do |line|
    text << "\n-> Called from #{line}"
  end
  log text, also_write_to_stderr: true
end

#error(message, more: nil) ⇒ Object



38
39
40
# File 'lib/jirametrics/file_system.rb', line 38

def error message, more: nil
  log "Error: #{message}", more: more, also_write_to_stderr: true
end

#file_exist?(filename) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/jirametrics/file_system.rb', line 68

def file_exist? filename
  File.exist? filename
end

#foreach(root, &block) ⇒ Object



64
65
66
# File 'lib/jirametrics/file_system.rb', line 64

def foreach root, &block
  Dir.foreach root, &block
end

#load(filename, supress_deprecation: false) ⇒ Object

Effectively the same as File.read except it forces the encoding to UTF-8



9
10
11
12
13
14
15
# File 'lib/jirametrics/file_system.rb', line 9

def load filename, supress_deprecation: false
  if filename.end_with?('.json') && !supress_deprecation
    deprecated(message: 'call load_json instead', date: '2024-11-13')
  end

  File.read filename, encoding: 'UTF-8'
end

#load_json(filename, fail_on_error: true) ⇒ Object



17
18
19
20
21
# File 'lib/jirametrics/file_system.rb', line 17

def load_json filename, fail_on_error: true
  return nil if fail_on_error == false && File.exist?(filename) == false

  JSON.parse load(filename, supress_deprecation: true)
end

#log(message, more: nil, also_write_to_stderr: false) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/jirametrics/file_system.rb', line 42

def log message, more: nil, also_write_to_stderr: false
  message += " See #{logfile_name} for more details about this message." if more

  logfile.puts message
  logfile.puts more if more
  return unless also_write_to_stderr

  $stderr.puts message # rubocop:disable Style/StderrPuts
end

#save_file(content:, filename:) ⇒ Object



27
28
29
30
31
32
# File 'lib/jirametrics/file_system.rb', line 27

def save_file content:, filename:
  file_path = File.dirname(filename)
  FileUtils.mkdir_p file_path unless File.exist?(file_path)

  File.write(filename, content)
end

#save_json(json:, filename:) ⇒ Object



23
24
25
# File 'lib/jirametrics/file_system.rb', line 23

def save_json json:, filename:
  save_file content: JSON.pretty_generate(compress json), filename: filename
end

#warning(message, more: nil) ⇒ Object



34
35
36
# File 'lib/jirametrics/file_system.rb', line 34

def warning message, more: nil
  log "Warning: #{message}", more: more, also_write_to_stderr: true
end