lib/genome/importers/my_cancer_genome_clinical_trial/my_cancer_genome_clinical_trial_tsv_importer.rb
  module Genome
    module Importers
      module MyCancerGenomeClinicalTrial
        def self.source_info
          {
              base_url: 'http://www.mycancergenome.org/',
              citation: 'Jain,N., Mittendorf,K.F., Holt,M., Lenoue-Newton,M., Maurer,I., Miller,C., Stachowiak,M., Botyrius,M., Cole,J., Micheel,C., et al. (2020) The My Cancer Genome clinical trial data model and trial curation workflow. J. Am. Med. Inform. Assoc., 27, 1057–1066. PMID: 32483629',
              site_url: 'http://www.mycancergenome.org/',
              source_db_version: '30-Feburary-2014',
              source_type_id: DataModel::SourceType.INTERACTION,
              source_trust_level_id: DataModel::SourceTrustLevel.EXPERT_CURATED,
              source_db_name: 'MyCancerGenomeClinicalTrial',
              full_name: 'MyCancerGenome Clinical Trial',
              license: 'Restrictive, custom, non-commercial',
              license_link: 'https://www.mycancergenome.org/content/page/legal-policies-licensing/',
          }
        end

        def self.run(tsv_path)
          blank_filter = ->(x) { x.blank? }
          upcase = ->(x) { x.upcase }

          TSVImporter.import tsv_path, MyCancerGenomeClinicalTrialRow, source_info do
            interaction known_action_type: :interaction_type do
              attribute :interaction_type, name: 'Interaction Type'
              gene :entrez_gene_name, nomenclature: 'Gene Target Symbol', transform: upcase do
                name :entrez_gene_id, nomenclature: 'Entrez Gene ID'
                attribute :molecular_target, name: 'Reported Genome Event Targeted'
              end

              drug :pubchem_name, nomenclature: 'Primary Drug Name', primary_name: :pubchem_name, transform: upcase do
                name :drug_name, nomenclature: 'Drug Trade Name', unless: blank_filter
                name :cid, nomenclature: 'PubChem Drug ID', unless: blank_filter
                names :other_drug_names, nomenclature: 'Other Drug Name', unless: blank_filter
              end

              attribute :clinical_trial_id, name: 'Clinical Trial ID'
              attribute :disease, name: 'Type of Cancer Targeted'
              attribute :indication_of_interaction, name: 'Indication of Interaction'
            end
          end.save!
          s = DataModel::Source.where(source_db_name: source_info['source_db_name'])
          s.interaction_claims.each do |ic|
            Genome::OnlineUpdater.new.create_interaction_claim_link(ic, 'Clinical Trials', "https://www.mycancergenome.org/content/clinical_trials/")
          end
        end
      end
    end
  end
