class TaxonReporter::EolDataSource

Constants

BAD_PROVIDERS
DATA_SOURCE_NAME
HE_DATA
PAGES_DATA

Public Class Methods

add_children(results) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 48
def self.add_children(results)
  children = eol_children(filter_hes(results["he_ids"]))
  results["children"] = children if children.length > 0
  results
end
add_field(field_name) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 66
def self.add_field(field_name)
  @@fields[field_name] = TaxonReporter::Field.new(DATA_SOURCE_NAME, field_name) unless @@fields.member?(field_name)
  @@fields[field_name]
end
eol_children(he_ids) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 89
def self.eol_children(he_ids)
  result = Set.new
  if he_ids
    he_ids.each do |he_id|
      result += (get_api_results(hierarchy_entries_url(he_id), HE_DATA)["children"] || [])
    end
  end
  result.sort
end
filter_hes(hes_with_provider) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 75
def self.filter_hes(hes_with_provider)
  if hes_with_provider
    result = Set.new
    hes_with_provider.each do |he, provider|
      result << he unless BAD_PROVIDERS.member?(provider)
    end
    result
  end
end
get_eol_ids_from_name(name) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 20
def self.get_eol_ids_from_name(name) # Set of ids
  get_api_result(search_url(name), ["results", "id"])
end
hierarchy_entries_url(id) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 99
def self.hierarchy_entries_url(id); "http://eol.org/api/hierarchy_entries/#{id}.json?common_names=false&synonyms=false&cache_ttl=86400"; end
pages_url(id) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 54
def self.pages_url(id)
  "http://eol.org/api/pages/#{id}.json?images=0&videos=0&sounds=0&maps=0&text=0&iucn=false&details=false&common_names=false&synonyms=false&references=false&cache_ttl=86400"
end
records(id) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 40
def self.records(id)
  result = []
  add_children(get_api_results(pages_url(id), PAGES_DATA)).each do |k, v|
    result.push(TaxonReporter::Record.new(add_field(k), v))
  end
  result
end
search_url(name) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 24
def self.search_url(name); "http://eol.org/api/search/#{URI::escape(name)}.json?exact=1&cache_ttl=86400"; end
taxons_from_id(id) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 26
def self.taxons_from_id(id)
  result = []
  records = self.records(id)
  if records.length > 0
    taxon = TaxonReporter::Taxon.new(self.records(id))
    result << taxon
    children = taxon.values(@@fields['children'])
    if children
      children.each {|c| result += taxons_from_id(c)}
    end
  end
  result
end
taxons_from_name(name) click to toggle source
# File lib/taxon_reporter/eol_data_source.rb, line 9
def self.taxons_from_name(name)
  result = []
  ids = self.get_eol_ids_from_name(name)
  if ids
    ids.each do |id|
      result += self.taxons_from_id(id)
    end
  end
  result
end