module ParseUtil

Public Class Methods

capitalize(string) click to toggle source
# File lib/oddb2xml/parslet_compositions.rb, line 61
def self.capitalize(string)
  string.split(/\s+/u).collect { |word| word.capitalize }.join(" ").strip
end
nr_saved_parsed_used() click to toggle source
# File lib/oddb2xml/parslet_compositions.rb, line 65
def self.nr_saved_parsed_used
  @@nr_saved_parsed_used
end
parse_compositions(composition_text, active_agents_string = "") click to toggle source
# File lib/oddb2xml/parslet_compositions.rb, line 69
def self.parse_compositions(composition_text, active_agents_string = "")
  active_agents = active_agents_string ? active_agents_string.delete("[").downcase.split(/,\s+/) : []
  key = [composition_text, active_agents]
  saved_value = @@saved_parsed[key]
  if saved_value
    @@nr_saved_parsed_used += 1
    return saved_value
  end
  comps = []
  lines = composition_text.gsub(/\r\n?/u, "\n").split(/\n/u)
  lines.select do |line|
    composition = ParseComposition.from_string(line)
    if composition.is_a?(ParseComposition)
      composition.substances.each do |substance_item|
        active_substance_name = substance_item.name.downcase.sub(/^cum\s/, "")
        substance_item.is_active_agent = !active_agents.find { |x|
          /#{x.downcase
          .gsub('(', '\(')
          .gsub(')', '\)')
          .gsub('[', '\[')
          .gsub(']', '\]')
            }($|\s)/
            .match(active_substance_name)
        }.nil?
        substance_item.is_active_agent = true if substance_item.chemical_substance && active_agents.find { |x| x.downcase.eql?(substance_item.chemical_substance.name.downcase) }
      end
      comps << composition
    end
  end
  comps << ParseComposition.new(composition_text.split(/,|:|\(/)[0]) if comps.size == 0
  @@saved_parsed[key] = comps
  comps
rescue => error
  puts "error #{error}"
  # binding.pry
  raise error
end