Module: Biodiversity::Parser
- Extended by:
- FFI::Library
- Defined in:
- lib/biodiversity/parser.rb
Overview
Parser provides a namespace for functions to parse scientific names.
Constant Summary collapse
- POINTER_SIZE =
FFI.type_size(:pointer)
Class Method Summary collapse
- .output(parsed, simple) ⇒ Object
- .parse(name, simple = false) ⇒ Object
- .parse_ary(ary, simple = false) ⇒ Object
Class Method Details
.output(parsed, simple) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/biodiversity/parser.rb', line 59 def self.output(parsed, simple) if simple parsed = parsed.split('|') { id: parsed[0], verbatim: parsed[1], canonicalName: { full: parsed[2], simple: parsed[3], stem: parsed[4] }, authorship: parsed[5], year: parsed[6], quality: parsed[7] } else JSON.parse(parsed, symbolize_names: true) end end |
.parse(name, simple = false) ⇒ Object
32 33 34 35 36 |
# File 'lib/biodiversity/parser.rb', line 32 def self.parse(name, simple = false) format = simple ? 'simple' : 'compact' parsed = parse_go(name, format) output(parsed, simple) end |
.parse_ary(ary, simple = false) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/biodiversity/parser.rb', line 38 def self.parse_ary(ary, simple = false) format = simple ? 'simple' : 'compact' in_ptr = FFI::MemoryPointer.new(:pointer, ary.length) in_ptr.write_array_of_pointer( ary.map { |s| FFI::MemoryPointer.from_string(s) } ) out_var = FFI::MemoryPointer.new(:pointer) parse_ary_go(in_ptr, ary.length, format, out_var) out_var.read_pointer .get_array_of_string(0, ary.length) .each_with_object([]) do |prsd, a| a << output(prsd, simple) end ensure out_var.read_pointer.get_array_of_pointer(0, ary.length).each do |p| CLib.free(p) end CLib.free(out_var.read_pointer) end |