Class: FileSystem
- Inherits:
-
Object
- Object
- FileSystem
- Defined in:
- lib/jirametrics/file_system.rb
Instance Attribute Summary collapse
-
#log_only ⇒ Object
Returns the value of attribute log_only.
-
#logfile ⇒ Object
Returns the value of attribute logfile.
-
#logfile_name ⇒ Object
Returns the value of attribute logfile_name.
Instance Method Summary collapse
-
#compress(node) ⇒ Object
In some Jira instances, a sizeable portion of the JSON is made up of empty fields.
- #deprecated(message:, date:, depth: 2) ⇒ Object
- #dir_exist?(path) ⇒ Boolean
- #end_progress ⇒ Object
- #error(message, more: nil) ⇒ Object
- #file_exist?(filename) ⇒ Boolean
- #foreach(root, &block) ⇒ Object
-
#initialize ⇒ FileSystem
constructor
A new instance of FileSystem.
-
#load(filename, supress_deprecation: false) ⇒ Object
Effectively the same as File.read except it forces the encoding to UTF-8.
- #load_json(filename, fail_on_error: true) ⇒ Object
- #log(message, more: nil, also_write_to_stderr: false) ⇒ Object
- #log_start(message) ⇒ Object
- #mkdir(path) ⇒ Object
- #progress_dot ⇒ Object
- #save_file(content:, filename:) ⇒ Object
- #save_json(json:, filename:) ⇒ Object
- #start_progress ⇒ Object
- #unlink(filename) ⇒ Object
- #utime(file:, time:) ⇒ Object
- #warning(message, more: nil) ⇒ Object
Constructor Details
#initialize ⇒ FileSystem
Returns a new instance of FileSystem.
8 9 10 11 12 13 14 |
# File 'lib/jirametrics/file_system.rb', line 8 def initialize # In almost all cases, this will be immediately replaced in the Exporter # but if we fail before we get that far, this will at least let a useful # error show up on the console. @logfile = $stdout @log_only = false end |
Instance Attribute Details
#log_only ⇒ Object
Returns the value of attribute log_only.
6 7 8 |
# File 'lib/jirametrics/file_system.rb', line 6 def log_only @log_only end |
#logfile ⇒ Object
Returns the value of attribute logfile.
6 7 8 |
# File 'lib/jirametrics/file_system.rb', line 6 def logfile @logfile end |
#logfile_name ⇒ Object
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.
102 103 104 105 106 107 108 109 110 |
# File 'lib/jirametrics/file_system.rb', line 102 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
128 129 130 131 132 133 134 135 136 |
# File 'lib/jirametrics/file_system.rb', line 128 def deprecated message:, date:, depth: 2 text = +'' text << "Deprecated(#{date}): " text << caller(1..depth).each do |line| text << "\n-> Called from #{line}" end log text, also_write_to_stderr: true end |
#dir_exist?(path) ⇒ Boolean
120 121 122 |
# File 'lib/jirametrics/file_system.rb', line 120 def dir_exist? path File.exist?(path) && File.directory?(path) end |
#end_progress ⇒ Object
94 95 96 97 98 |
# File 'lib/jirametrics/file_system.rb', line 94 def end_progress return if log_only $stderr.puts '' # rubocop:disable Style/StderrPuts end |
#error(message, more: nil) ⇒ Object
54 55 56 |
# File 'lib/jirametrics/file_system.rb', line 54 def error , more: nil log "Error: #{}", more: more, also_write_to_stderr: true end |
#file_exist?(filename) ⇒ Boolean
116 117 118 |
# File 'lib/jirametrics/file_system.rb', line 116 def file_exist? filename File.exist?(filename) && File.file?(filename) end |
#foreach(root, &block) ⇒ Object
112 113 114 |
# File 'lib/jirametrics/file_system.rb', line 112 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
17 18 19 20 21 22 23 |
# File 'lib/jirametrics/file_system.rb', line 17 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
25 26 27 28 29 |
# File 'lib/jirametrics/file_system.rb', line 25 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
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/jirametrics/file_system.rb', line 58 def log , more: nil, also_write_to_stderr: false += " See #{logfile_name} for more details about this message." if more logfile.puts logfile.puts more if more return if log_only || !also_write_to_stderr # Obscure edge-case where we're trying to log something before logging is even # set up. Quick escape here so that we don't dump the error twice. return if logfile == $stdout $stderr.puts # rubocop:disable Style/StderrPuts end |
#log_start(message) ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/jirametrics/file_system.rb', line 72 def log_start logfile.puts return if log_only || logfile == $stdout $stderr.print $stderr.flush end |
#mkdir(path) ⇒ Object
42 43 44 |
# File 'lib/jirametrics/file_system.rb', line 42 def mkdir path FileUtils.mkdir_p path end |
#progress_dot ⇒ Object
87 88 89 90 91 92 |
# File 'lib/jirametrics/file_system.rb', line 87 def progress_dot return if log_only $stderr.print '.' $stderr.flush end |
#save_file(content:, filename:) ⇒ Object
35 36 37 38 39 40 |
# File 'lib/jirametrics/file_system.rb', line 35 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
31 32 33 |
# File 'lib/jirametrics/file_system.rb', line 31 def save_json json:, filename: save_file content: JSON.pretty_generate(compress json), filename: filename end |
#start_progress ⇒ Object
80 81 82 83 84 85 |
# File 'lib/jirametrics/file_system.rb', line 80 def start_progress return if log_only $stderr.print ' ' $stderr.flush end |
#unlink(filename) ⇒ Object
124 125 126 |
# File 'lib/jirametrics/file_system.rb', line 124 def unlink filename File.unlink filename end |
#utime(file:, time:) ⇒ Object
46 47 48 |
# File 'lib/jirametrics/file_system.rb', line 46 def utime file:, time: File.utime time, time, file end |
#warning(message, more: nil) ⇒ Object
50 51 52 |
# File 'lib/jirametrics/file_system.rb', line 50 def warning , more: nil log "Warning: #{}", more: more, also_write_to_stderr: true end |