Class: FileSystem

Inherits:
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.



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

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

#foreach(root, &block) ⇒ Object



51
52
53
# File 'lib/jirametrics/file_system.rb', line 51

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, also_write_to_stderr: false) ⇒ Object



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

def log message, also_write_to_stderr: false
  logfile.puts message
  $stderr.puts message if also_write_to_stderr # 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