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.



58
59
60
61
62
63
64
65
66
# File 'lib/jirametrics/file_system.rb', line 58

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



80
81
82
83
84
85
86
87
88
# File 'lib/jirametrics/file_system.rb', line 80

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



42
43
44
# File 'lib/jirametrics/file_system.rb', line 42

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

#file_exist?(filename) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/jirametrics/file_system.rb', line 72

def file_exist? filename
  File.exist? filename
end

#foreach(root, &block) ⇒ Object



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

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



46
47
48
49
50
51
52
53
54
# File 'lib/jirametrics/file_system.rb', line 46

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


76
77
78
# File 'lib/jirametrics/file_system.rb', line 76

def unlink filename
  File.unlink filename
end

#utime(file:, time:) ⇒ Object



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

def utime file:, time:
  File.utime time, time, file
end

#warning(message, more: nil) ⇒ Object



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

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