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
obj
without 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
path
and 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 |