Class: MiGA::Json
Overview
Taxonomic classifications in MiGA.
Constant Summary
Constants included from MiGA
CITATION, VERSION, VERSION_DATE, VERSION_NAME
Instance Attribute Summary
Attributes included from Common::Net
Class Method Summary collapse
-
.default_opts(opts = {}) ⇒ Object
Default parsing options.
-
.generate(obj, path = nil) ⇒ Object
Generates and returns prettyfied JSON to represent
obj. -
.generate_fast(obj, path = nil) ⇒ Object
Generates and returns plain JSON to represent
objwithout checking for circular references. -
.generate_plain(obj, path = nil) ⇒ Object
Generates and returns plain JSON to represent
obj. -
.parse(path, opts = {}) ⇒ Object
Parse a JSON file in
pathand return a hash.
Methods inherited from MiGA
CITATION, CITATION_ARRAY, DEBUG, DEBUG_OFF, DEBUG_ON, DEBUG_TRACE_OFF, DEBUG_TRACE_ON, FULL_VERSION, LONG_VERSION, VERSION, VERSION_DATE, #advance, debug?, debug_trace?, initialized?, #like_io?, #num_suffix, rc_path, #result_files_exist?, #say
Methods included from Common::Path
Methods included from Common::Format
#clean_fasta_file, #seqs_length, #tabulate
Methods included from Common::Net
#download_file_ftp, #http_request, #known_hosts, #main_server, #net_method, #normalize_encoding, #remote_connection
Methods included from Common::SystemCall
Class Method Details
.default_opts(opts = {}) ⇒ Object
Default parsing options. Supported opts keys:
-
:contents: If true, the input is assumed to be the contents to parse, not the path to a JSON file. -
:default: A base to attach the parsed hash. A Hash or a String (path). -
:additions: If addition classes should be parsed. By default is false. -
:symbolize: If names should be symbolized. By default it’s true if additions is false, or false otherwise. They can both be false, but an exception will be raised if both are true -
:large_file: If passed, the file is treated as a file with very long lines (possibly a single long line)
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/miga/json.rb', line 26 def default_opts(opts = {}) opts[:contents] ||= false opts[:additions] ||= false opts[:symbolize] = !opts[:additions] if opts[:symbolize].nil? if opts[:additions] and opts[:symbolize] raise 'JSON additions are not supported with symbolized names' end opts end |
.generate(obj, path = nil) ⇒ Object
Generates and returns prettyfied JSON to represent obj. If path is passed, it saves the JSON in that file.
82 83 84 |
# File 'lib/miga/json.rb', line 82 def generate(obj, path = nil) generate_generic(:pretty_generate, obj, path) end |
.generate_fast(obj, path = nil) ⇒ Object
Generates and returns plain JSON to represent obj without checking for circular references. If path is passed, it saves the JSON in that file.
96 97 98 |
# File 'lib/miga/json.rb', line 96 def generate_fast(obj, path = nil) generate_generic(:fast_generate, obj, path) end |
.generate_plain(obj, path = nil) ⇒ Object
Generates and returns plain JSON to represent obj. If path is passed, it saves the JSON in that file.
89 90 91 |
# File 'lib/miga/json.rb', line 89 def generate_plain(obj, path = nil) generate_generic(:generate, obj, path) end |
.parse(path, opts = {}) ⇒ Object
Parse a JSON file in path and return a hash. Optionally, use default as the base to attach the parsed hash. default can be a Hash or a String (path). See default_opts for supported opts.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/miga/json.rb', line 42 def parse(path, opts = {}) opts = default_opts(opts) # Read JSON cont = path if opts[:large_file] cont = '' File.open(path, 'r') do |fh| cont += fh.read(2 ** 16) until fh.eof? end elsif !opts[:contents] 12.times do cont = File.read(path) break unless cont.empty? sleep 1 # Wait up to 12 seconds for racing processes (iff empty file) end end raise "Empty descriptor: #{opts[:contents] ? "''" : path}" if cont.empty? # Parse JSON params = { symbolize_names: opts[:symbolize], create_additions: opts[:additions] } y = JSON.parse(cont, params) # Add defaults unless opts[:default].nil? opts[:default] = parse(opts[:default]) if opts[:default].is_a? String y.each { |k, v| opts[:default][k] = v } y = opts[:default] end # Return y end |