# frozen_string_literal: true require "json" # monkey patch String class with a run method class String def run(args = nil) if args.nil? command = self Makit::RUNNER.run(Makit::RUNNER::parse_command_request(command)) else command = self request = Makit::RUNNER.parse_args(command) if args.is_a?(Hash) args.each do |key, value| request.send("#{key}=", value) end end Makit::RUNNER.run(request) end end def try(args = nil) if args.nil? command = self Makit::RUNNER.try(command) else command = self request = Makit::RUNNER.parse_args(command) if args.is_a?(Hash) args.each do |key, value| request.send("#{key}=", value) end end Makit::RUNNER.try(request) end end # Read a value from a JSON file # key is a string with the key to read, e.g. "AzureAd.Authority" def get_json_value(key) json = File.read(self) data = JSON.parse(json) # key delimiter is '.' so we can access nested keys key.split(".").each do |k| data = data[k] end data end alias_method :retrieve, :get_json_value # Set a value in a JSON file # key is a string with the key to set, e.g. "AzureAd.Authority" def set_json_value(key, value) file = File.read(self) data = JSON.parse(file) keys = key.split(".") current = data # Traverse and create any missing keys keys[0..-2].each do |k| current[k] ||= {} # Create a new hash if the key doesn't exist current = current[k] end # Set the value for the final key current[keys[-1]] = value # Write the JSON back to the file File.write(self, JSON.pretty_generate(data)) end # Alias for set_json_value alias_method :assign, :set_json_value def to_lines(max_length=80,indent_length=5) if(self.length <= max_length) return self else indent = " " * indent_length words = self.split(" ") lines = [] line = "" words.each do |word| if((line + word).length > max_length) lines << line line = indent + word else if(line.length == 0) line = word else line += " " + word end end end lines << line return lines.join("\n") end end end