Class: Insdc::ImportCountries

Inherits:
Object
  • Object
show all
Defined in:
lib/insdc/import_countries.rb

Overview

Handles the download and import of permitted country fields from the ENA

Constant Summary collapse

FILE_ROOT =
Rails.root.join('data/sample_checklists')
FIELD_NAME =
'geographic location (country and/or sea)'
XPATH =
"//FIELD//LABEL[text() = '#{FIELD_NAME}']/following-sibling::FIELD_TYPE//TEXT_VALUE//VALUE".freeze

Instance Method Summary collapse

Constructor Details

#initialize(ena_root:, sample_checklist:, priorities: {}) ⇒ ImportCountries

Returns a new instance of ImportCountries.



11
12
13
14
15
# File 'lib/insdc/import_countries.rb', line 11

def initialize(ena_root:, sample_checklist:, priorities: {})
  @ena_root = ena_root
  @sample_checklist = sample_checklist
  @priorities = priorities
end

Instance Method Details

#download(force: false) ⇒ Object



17
18
19
20
21
22
# File 'lib/insdc/import_countries.rb', line 17

def download(force: false)
  return unless force || file_missing?

  payload = RestClient.get(url).body
  File.write(file_name, payload)
end

#importObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/insdc/import_countries.rb', line 24

def import
  no_file_error if file_missing?

  existing_valid_countries = Insdc::Country.valid_state.pluck(:name)
  existing_invalid_countries = Insdc::Country.invalid_state.pluck(:name)
  existing_countries = Insdc::Country.pluck(:name)

  existing_countries_to_mark_valid = countries_to_import & existing_invalid_countries
  existing_countries_to_mark_invalid = existing_valid_countries - countries_to_import
  new_countries_to_add = countries_to_import - existing_countries

  mark_as_valid(existing_countries_to_mark_valid)
  mark_as_invalid(existing_countries_to_mark_invalid)
  add_countries(new_countries_to_add)

  Rails.logger.info { "#{existing_countries_to_mark_valid.size} existing countries marked as valid" }
  Rails.logger.info { "#{existing_countries_to_mark_invalid.size} existing countries marked as invalid" }
  Rails.logger.info { "#{new_countries_to_add.size} new countries added" }
end