miga-base 0.7.22.0 → 0.7.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +1 -1
- data/Rakefile +1 -0
- data/lib/miga/cli/action/add.rb +10 -8
- data/lib/miga/cli/action/classify_wf.rb +12 -11
- data/lib/miga/cli/action/derep_wf.rb +3 -9
- data/lib/miga/cli/action/edit.rb +0 -1
- data/lib/miga/cli/action/find.rb +1 -1
- data/lib/miga/cli/action/generic.rb +1 -1
- data/lib/miga/cli/action/get.rb +7 -2
- data/lib/miga/cli/action/get_db.rb +16 -21
- data/lib/miga/cli/action/index_wf.rb +4 -2
- data/lib/miga/cli/action/init.rb +93 -144
- data/lib/miga/cli/action/init/daemon_helper.rb +1 -2
- data/lib/miga/cli/action/init/files_helper.rb +119 -0
- data/lib/miga/cli/action/ncbi_get.rb +1 -1
- data/lib/miga/cli/action/new.rb +15 -9
- data/lib/miga/cli/action/option.rb +44 -0
- data/lib/miga/cli/action/preproc_wf.rb +7 -5
- data/lib/miga/cli/action/quality_wf.rb +3 -3
- data/lib/miga/cli/action/tax_dist.rb +1 -1
- data/lib/miga/cli/action/tax_test.rb +1 -1
- data/lib/miga/cli/action/wf.rb +71 -53
- data/lib/miga/cli/base.rb +17 -5
- data/lib/miga/cli/objects_helper.rb +23 -18
- data/lib/miga/common.rb +4 -2
- data/lib/miga/common/net.rb +74 -0
- data/lib/miga/common/with_option.rb +83 -0
- data/lib/miga/common/with_result.rb +3 -2
- data/lib/miga/dataset/base.rb +20 -2
- data/lib/miga/dataset/result.rb +5 -3
- data/lib/miga/metadata.rb +25 -13
- data/lib/miga/project/base.rb +82 -2
- data/lib/miga/project/result.rb +4 -4
- data/lib/miga/remote_dataset.rb +2 -0
- data/lib/miga/result/stats.rb +2 -2
- data/lib/miga/version.rb +4 -2
- data/scripts/essential_genes.bash +18 -3
- data/scripts/miga.bash +8 -2
- data/scripts/mytaxa.bash +6 -5
- data/scripts/mytaxa_scan.bash +8 -7
- data/scripts/ogs.bash +2 -3
- data/scripts/ssu.bash +16 -2
- data/test/dataset_test.rb +5 -5
- data/test/lair_test.rb +1 -2
- data/test/net_test.rb +34 -0
- data/test/with_option_test.rb +115 -0
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Archaea_SCG.hmm +41964 -0
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Bacteria_SCG.hmm +32439 -0
- data/utils/FastAAI/00.Libraries/01.SCG_HMMs/Complete_SCG_DB.hmm +62056 -0
- data/utils/FastAAI/FastAAI/FastAAI +1336 -0
- data/utils/FastAAI/README.md +84 -0
- data/utils/FastAAI/kAAI_v1.0_virus.py +1296 -0
- data/utils/cleanup-databases.rb +2 -3
- data/utils/distance/base.rb +9 -0
- data/utils/distance/commands.rb +183 -81
- data/utils/distance/database.rb +69 -10
- data/utils/distance/pipeline.rb +15 -21
- data/utils/distance/runner.rb +27 -49
- data/utils/distance/temporal.rb +4 -2
- data/utils/distances.rb +2 -2
- data/utils/index_metadata.rb +1 -2
- data/utils/requirements.txt +6 -5
- data/utils/subclade/runner.rb +10 -11
- metadata +18 -6
    
        data/lib/miga/project/result.rb
    CHANGED
    
    | @@ -31,9 +31,9 @@ module MiGA::Project::Result | |
| 31 31 | 
             
              ##
         | 
| 32 32 | 
             
              # Is this +task+ to be bypassed?
         | 
| 33 33 | 
             
              def ignore_task?(task)
         | 
| 34 | 
            -
                metadata["run_#{task}"] == false | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 34 | 
            +
                return true if metadata["run_#{task}"] == false
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                !clade? && @@INCLADE_TASKS.include?(task) && metadata["run_#{task}"] != true
         | 
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              ##
         | 
| @@ -74,7 +74,7 @@ module MiGA::Project::Result | |
| 74 74 | 
             
                  return r
         | 
| 75 75 | 
             
                end
         | 
| 76 76 | 
             
                return nil unless result_files_exist?(base, %w[.proposed-clades])
         | 
| 77 | 
            -
                unless  | 
| 77 | 
            +
                unless clade? ||
         | 
| 78 78 | 
             
                       result_files_exist?(
         | 
| 79 79 | 
             
                         base, %w[.pdf .classif .medoids .class.tsv .class.nwk]
         | 
| 80 80 | 
             
                       )
         | 
    
        data/lib/miga/remote_dataset.rb
    CHANGED
    
    | @@ -162,6 +162,8 @@ class MiGA::RemoteDataset < MiGA::MiGA | |
| 162 162 | 
             
                  txt.empty? ? sleep(1) : break
         | 
| 163 163 | 
             
                end
         | 
| 164 164 | 
             
                doc = MiGA::Json.parse(txt, symbolize: false, contents: true)
         | 
| 165 | 
            +
                return if doc.nil? || doc['result'].nil? || doc['result'].empty?
         | 
| 166 | 
            +
             | 
| 165 167 | 
             
                @_ncbi_asm_json_doc = doc['result'][ doc['result']['uids'].first ]
         | 
| 166 168 | 
             
              end
         | 
| 167 169 |  | 
    
        data/lib/miga/result/stats.rb
    CHANGED
    
    | @@ -118,7 +118,7 @@ module MiGA::Result::Stats | |
| 118 118 |  | 
| 119 119 | 
             
              def compute_stats_essential_genes
         | 
| 120 120 | 
             
                stats = {}
         | 
| 121 | 
            -
                if source. | 
| 121 | 
            +
                if source.multi?
         | 
| 122 122 | 
             
                  stats = { median_copies: 0, mean_copies: 0 }
         | 
| 123 123 | 
             
                  File.open(file_path(:report), 'r') do |fh|
         | 
| 124 124 | 
             
                    fh.each_line do |ln|
         | 
| @@ -151,7 +151,7 @@ module MiGA::Result::Stats | |
| 151 151 | 
             
                  source.save
         | 
| 152 152 |  | 
| 153 153 | 
             
                  # Inactivate low-quality datasets
         | 
| 154 | 
            -
                  min_qual =  | 
| 154 | 
            +
                  min_qual = project.option(:min_qual)
         | 
| 155 155 | 
             
                  if min_qual != 'no' && stats[:quality] < min_qual
         | 
| 156 156 | 
             
                    source.inactivate! 'Low quality genome'
         | 
| 157 157 | 
             
                  end
         | 
    
        data/lib/miga/version.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require 'date'
         | 
| 2 4 |  | 
| 3 5 | 
             
            ##
         | 
| @@ -8,7 +10,7 @@ module MiGA | |
| 8 10 | 
             
              # - Float representing the major.minor version.
         | 
| 9 11 | 
             
              # - Integer representing gem releases of the current version.
         | 
| 10 12 | 
             
              # - Integer representing minor changes that require new version number.
         | 
| 11 | 
            -
              VERSION = [0.7,  | 
| 13 | 
            +
              VERSION = [0.7, 25, 0].freeze
         | 
| 12 14 |  | 
| 13 15 | 
             
              ##
         | 
| 14 16 | 
             
              # Nickname for the current major.minor version.
         | 
| @@ -16,7 +18,7 @@ module MiGA | |
| 16 18 |  | 
| 17 19 | 
             
              ##
         | 
| 18 20 | 
             
              # Date of the current gem release.
         | 
| 19 | 
            -
              VERSION_DATE = Date.new(2021,  | 
| 21 | 
            +
              VERSION_DATE = Date.new(2021, 2, 22)
         | 
| 20 22 |  | 
| 21 23 | 
             
              ##
         | 
| 22 24 | 
             
              # Reference of MiGA.
         | 
| @@ -24,18 +24,33 @@ fi | |
| 24 24 | 
             
            mkdir "${DATASET}.ess"
         | 
| 25 25 | 
             
            TYPE=$(miga ls -P "$PROJECT" -D "$DATASET" \
         | 
| 26 26 | 
             
              --metadata "type" | awk '{print $2}')
         | 
| 27 | 
            -
            COLL=$(miga  | 
| 28 | 
            -
            [[ "$COLL" == "?" ]] && COLL=dupont_2012
         | 
| 27 | 
            +
            COLL=$(miga option -P "$PROJECT" --key ess_coll)
         | 
| 29 28 | 
             
            if [[ "$TYPE" == "metagenome" || "$TYPE" == "virome" ]] ; then
         | 
| 30 29 | 
             
              FLAGS="--metagenome"
         | 
| 31 30 | 
             
            else
         | 
| 32 | 
            -
              FLAGS=" | 
| 31 | 
            +
              FLAGS=""
         | 
| 33 32 | 
             
            fi
         | 
| 34 33 | 
             
            HMM.essential.rb \
         | 
| 35 34 | 
             
              -i "$FAA" -o "${DATASET}.ess.faa" -m "${DATASET}.ess/" \
         | 
| 36 35 | 
             
              -t "$CORES" -r "$DATASET" --collection "$COLL" $FLAGS \
         | 
| 37 36 | 
             
              > "${DATASET}.ess/log"
         | 
| 38 37 |  | 
| 38 | 
            +
            # Index for FastAAI
         | 
| 39 | 
            +
            NOMULTI=$(miga list_datasets -P "$PROJECT" -D "$DATASET" --no-multi \
         | 
| 40 | 
            +
                        | wc -l | awk '{print $1}')
         | 
| 41 | 
            +
            if [[ "$NOMULTI" -eq "1" ]] ; then
         | 
| 42 | 
            +
              if [[ "$FAA" == *.gz ]] ; then
         | 
| 43 | 
            +
                gzip -cd "$FAA" > "${DATASET}.faix"
         | 
| 44 | 
            +
              else
         | 
| 45 | 
            +
                cp "$FAA" "${DATASET}.faix"
         | 
| 46 | 
            +
              fi
         | 
| 47 | 
            +
              FastAAI --qp "${DATASET}.faix" --output "${DATASET}.faix" \
         | 
| 48 | 
            +
                --ext ".faix" --index --input-paths --all-vs-all --threads "$CORES"
         | 
| 49 | 
            +
              rm "${DATASET}.faix"
         | 
| 50 | 
            +
              rm "${DATASET}.faix.hmm"
         | 
| 51 | 
            +
              rm "${DATASET}.faix.hmm.filt"
         | 
| 52 | 
            +
            fi
         | 
| 53 | 
            +
             | 
| 39 54 | 
             
            # Reduce files
         | 
| 40 55 | 
             
            if exists "$DATASET".ess/*.faa ; then
         | 
| 41 56 | 
             
              ( cd "${DATASET}.ess" \
         | 
    
        data/scripts/miga.bash
    CHANGED
    
    | @@ -1,12 +1,17 @@ | |
| 1 1 | 
             
            #!/bin/bash
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Setup environment
         | 
| 2 4 | 
             
            set -e
         | 
| 3 | 
            -
            #MIGA=${MIGA:-$(cd "$(dirname "$0")/.."; pwd)}
         | 
| 4 5 | 
             
            MIGA_HOME=${MIGA_HOME:-"$HOME"}
         | 
| 6 | 
            +
            SCRIPT=${SCRIPT:-$(basename "$0" .bash)}
         | 
| 5 7 | 
             
            # shellcheck source=/dev/null
         | 
| 6 8 | 
             
            . "$MIGA_HOME/.miga_rc"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            # Ensure submodules are first in PATH
         | 
| 7 11 | 
             
            export PATH="$MIGA/bin:$MIGA/utils/enveomics/Scripts:$PATH"
         | 
| 8 | 
            -
             | 
| 12 | 
            +
            export PATH="$MIGA/utils/FastAAI/FastAAI:$PATH"
         | 
| 9 13 |  | 
| 14 | 
            +
            # Ancillary functions
         | 
| 10 15 | 
             
            function exists { [[ -e "$1" ]] ; }
         | 
| 11 16 | 
             
            function fx_exists { [[ $(type -t "$1") == "function" ]] ; }
         | 
| 12 17 | 
             
            function miga_start_project_step {
         | 
| @@ -28,6 +33,7 @@ function miga_end_project_step { | |
| 28 33 | 
             
              miga add_result -P "$PROJECT" -r "$SCRIPT" -f
         | 
| 29 34 | 
             
            }
         | 
| 30 35 |  | 
| 36 | 
            +
            # Environment header
         | 
| 31 37 | 
             
            if [[ "$SCRIPT" != "d" && "$SCRIPT" != "p" ]] ; then
         | 
| 32 38 | 
             
              echo ""
         | 
| 33 39 | 
             
              echo "######[ $SCRIPT ]######"
         | 
    
        data/scripts/mytaxa.bash
    CHANGED
    
    | @@ -14,15 +14,16 @@ if [[ "$MIGA_MYTAXA" == "no" ]] ; then | |
| 14 14 | 
             
              echo "This system doesn't currently support MyTaxa." \
         | 
| 15 15 | 
             
                > "$DATASET.nomytaxa.txt"
         | 
| 16 16 | 
             
            else
         | 
| 17 | 
            -
              MT=$(dirname -- "$(which MyTaxa)")
         | 
| 18 | 
            -
             | 
| 19 17 | 
             
              # Check type of dataset
         | 
| 20 18 | 
             
              MULTI=$(miga list_datasets -P "$PROJECT" -D "$DATASET" --multi \
         | 
| 21 19 | 
             
                | wc -l | awk '{print $1}')
         | 
| 22 20 | 
             
              if [[ "$MULTI" -eq "1" ]] ; then
         | 
| 23 21 | 
             
                # Check requirements
         | 
| 24 | 
            -
                 | 
| 25 | 
            -
             | 
| 22 | 
            +
                MT=$(dirname -- "$(which MyTaxa)")
         | 
| 23 | 
            +
                DB="$MIGA_HOME/.miga_db/AllGenomes.faa.dmnd"
         | 
| 24 | 
            +
                [[ -e "$DB" ]] || DB="$MT/AllGenomes.faa.dmnd"
         | 
| 25 | 
            +
                if [[ ! -e "$DB" ]] ; then
         | 
| 26 | 
            +
                  echo "Cannot locate the database: AllGenomes.faa.dmnd:" \
         | 
| 26 27 | 
             
                        "no such file or directory" >&2
         | 
| 27 28 | 
             
                  exit 1
         | 
| 28 29 | 
             
                fi
         | 
| @@ -40,7 +41,7 @@ else | |
| 40 41 | 
             
                # Execute search
         | 
| 41 42 | 
             
                FAA="../../../06.cds/$DATASET.faa"
         | 
| 42 43 | 
             
                [[ -s "$FAA" ]] || FAA="${FAA}.gz"
         | 
| 43 | 
            -
                diamond blastp -q "$FAA" -d "$ | 
| 44 | 
            +
                diamond blastp -q "$FAA" -d "$DB" \
         | 
| 44 45 | 
             
                  -a "$DATASET.daa" -k 5 -p "$CORES" --min-score 60
         | 
| 45 46 | 
             
                diamond view -a "$DATASET.daa" -o "$DATASET.blast"
         | 
| 46 47 |  | 
    
        data/scripts/mytaxa_scan.bash
    CHANGED
    
    | @@ -5,7 +5,6 @@ SCRIPT="mytaxa_scan" | |
| 5 5 | 
             
            # shellcheck source=scripts/miga.bash
         | 
| 6 6 | 
             
            . "$MIGA/scripts/miga.bash" || exit 1
         | 
| 7 7 | 
             
            DIR="$PROJECT/data/07.annotation/03.qa/02.mytaxa_scan"
         | 
| 8 | 
            -
            [[ -d "$DIR" ]] || mkdir -p "$DIR"
         | 
| 9 8 | 
             
            cd "$DIR"
         | 
| 10 9 |  | 
| 11 10 | 
             
            # Initialize
         | 
| @@ -14,17 +13,16 @@ if [[ "$MIGA_MYTAXA" == "no" ]] ; then | |
| 14 13 | 
             
              echo "This system doesn't currently support MyTaxa." \
         | 
| 15 14 | 
             
                > "$DATASET.nomytaxa.txt"
         | 
| 16 15 | 
             
            else
         | 
| 17 | 
            -
              MT=$(dirname -- "$(which MyTaxa)")
         | 
| 18 | 
            -
              TMPDIR=$(mktemp -d /tmp/MiGA.XXXXXXXXXXXX)
         | 
| 19 | 
            -
              trap "rm -rf '$TMPDIR'; exit" SIGHUP SIGINT SIGTERM
         | 
| 20 | 
            -
             | 
| 21 16 | 
             
              # Check type of dataset
         | 
| 22 17 | 
             
              NOMULTI=$(miga list_datasets -P "$PROJECT" -D "$DATASET" --no-multi \
         | 
| 23 18 | 
             
                | wc -l | awk '{print $1}')
         | 
| 24 19 | 
             
              if [[ "$NOMULTI" -eq "1" ]] ; then
         | 
| 25 20 | 
             
                # Check requirements
         | 
| 21 | 
            +
                MT=$(dirname -- "$(which MyTaxa)")
         | 
| 22 | 
            +
                DB="$MIGA_HOME/.miga_db/AllGenomes.faa.dmnd"
         | 
| 23 | 
            +
                [[ -e "$DB" ]] || DB="$MT/AllGenomes.faa.dmnd"
         | 
| 26 24 | 
             
                if [[ ! -e "$MT/AllGenomes.faa.dmnd" ]] ; then
         | 
| 27 | 
            -
                  echo "Cannot locate the database:  | 
| 25 | 
            +
                  echo "Cannot locate the database: AllGenomes.faa.dmnd:" \
         | 
| 28 26 | 
             
                        "no such file or directory" >&2
         | 
| 29 27 | 
             
                  exit 1
         | 
| 30 28 | 
             
                fi
         | 
| @@ -39,13 +37,16 @@ else | |
| 39 37 | 
             
                  exit 1
         | 
| 40 38 | 
             
                fi
         | 
| 41 39 |  | 
| 40 | 
            +
                TMPDIR=$(mktemp -d /tmp/MiGA.XXXXXXXXXXXX)
         | 
| 41 | 
            +
                trap "rm -rf '$TMPDIR'; exit" SIGHUP SIGINT SIGTERM
         | 
| 42 | 
            +
             | 
| 42 43 | 
             
                FAA="../../../06.cds/$DATASET.faa"
         | 
| 43 44 | 
             
                [[ -s "$FAA" ]] || FAA="${FAA}.gz"
         | 
| 44 45 | 
             
                if [[ ! -s "$DATASET.mytaxa" ]] ; then
         | 
| 45 46 | 
             
                  # Execute search
         | 
| 46 47 | 
             
                  if [[ ! -s "$DATASET.blast" ]] ; then
         | 
| 47 48 | 
             
                    diamond blastp -q "$FAA" -a "$DATASET.daa" -t "$TMPDIR" \
         | 
| 48 | 
            -
                      -d "$ | 
| 49 | 
            +
                      -d "$DB" -k 5 -p "$CORES" --min-score 60
         | 
| 49 50 | 
             
                    diamond view -a "$DATASET.daa" -o "$DATASET.blast" -t "$TMPDIR"
         | 
| 50 51 | 
             
                  fi
         | 
| 51 52 |  | 
    
        data/scripts/ogs.bash
    CHANGED
    
    | @@ -12,8 +12,7 @@ miga_start_project_step "$DIR" | |
| 12 12 | 
             
            DS=$(miga ls -P "$PROJECT" --ref --no-multi)
         | 
| 13 13 |  | 
| 14 14 | 
             
            if [[ -n $DS ]] ; then
         | 
| 15 | 
            -
              MIN_ID=$(miga  | 
| 16 | 
            -
              [[ $MIN_ID == "?" ]] && MIN_ID=80
         | 
| 15 | 
            +
              MIN_ID=$(miga option -P "$PROJECT" --key ogs_identity)
         | 
| 17 16 | 
             
              if [[ ! -s miga-project.ogs ]] ; then
         | 
| 18 17 | 
             
                # Extract RBMs
         | 
| 19 18 | 
             
                if [[ ! -s miga-project.abc ]] ; then
         | 
| @@ -34,7 +33,7 @@ if [[ -n $DS ]] ; then | |
| 34 33 |  | 
| 35 34 | 
             
                # Estimate OGs and Clean RBMs
         | 
| 36 35 | 
             
                ogs.mcl.rb -o miga-project.ogs --abc miga-project.abc -t "$CORES"
         | 
| 37 | 
            -
                if [[ $(miga  | 
| 36 | 
            +
                if [[ $(miga option -P "$PROJECT" --key clean_ogs) == "false" ]] ; then
         | 
| 38 37 | 
             
                  gzip -9 miga-project.abc
         | 
| 39 38 | 
             
                else
         | 
| 40 39 | 
             
                  rm miga-project.abc
         | 
    
        data/scripts/ssu.bash
    CHANGED
    
    | @@ -16,6 +16,7 @@ if [[ -s $fa ]] ; then | |
| 16 16 | 
             
              # Run barrnap
         | 
| 17 17 | 
             
              barrnap --quiet --threads "$CORES" "$fa" | grep "^##gff\\|;product=16S " \
         | 
| 18 18 | 
             
                > "$DATASET.ssu.gff"
         | 
| 19 | 
            +
             | 
| 19 20 | 
             
              # Extract
         | 
| 20 21 | 
             
              bedtools getfasta -s "-fi" "$fa" -bed "$DATASET.ssu.gff" \
         | 
| 21 22 | 
             
                -fo "$DATASET.ssu.all.fa"
         | 
| @@ -24,9 +25,22 @@ if [[ -s $fa ]] ; then | |
| 24 25 | 
             
              FastA.filter.pl "$DATASET.ssu.fa.id" "$DATASET.ssu.all.fa" > "$DATASET.ssu.fa"
         | 
| 25 26 | 
             
              rm "$DATASET.ssu.fa.id"
         | 
| 26 27 | 
             
              [[ -e "$fa.fai" ]] && rm "$fa.fai"
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              # RDP classifier
         | 
| 30 | 
            +
              if [[ "$MIGA_RDP" == "yes" && -s "$DATASET.ssu.all.fa" ]] ; then
         | 
| 31 | 
            +
                java -jar "$MIGA_HOME/.miga_db/classifier.jar" classify \
         | 
| 32 | 
            +
                  -c 0.8 -f fixrank -g 16srrna -o "$DATASET.rdp.tsv" \
         | 
| 33 | 
            +
                  "$DATASET.ssu.all.fa"
         | 
| 34 | 
            +
                echo "# Version: $(perl -pe 's/.*://' \
         | 
| 35 | 
            +
                      < "$MIGA_HOME/.miga_db/classifier.version.txt" \
         | 
| 36 | 
            +
                      | grep . | paste - - | perl -pe 's/\t/; /')" \
         | 
| 37 | 
            +
                  >> "$DATASET.rdp.tsv"
         | 
| 38 | 
            +
              fi
         | 
| 39 | 
            +
             | 
| 27 40 | 
             
              # Gzip
         | 
| 28 | 
            -
               | 
| 29 | 
            -
             | 
| 41 | 
            +
              for x in ssu.gff ssu.all.fa rdp.tsv ; do
         | 
| 42 | 
            +
                [[ -e "${DATASET}.${x}" ]] && gzip -9 -f "${DATASET}.${x}"
         | 
| 43 | 
            +
              done
         | 
| 30 44 | 
             
            fi
         | 
| 31 45 |  | 
| 32 46 | 
             
            # Finalize
         | 
    
        data/test/dataset_test.rb
    CHANGED
    
    | @@ -29,7 +29,7 @@ class DatasetTest < Test::Unit::TestCase | |
| 29 29 | 
             
                assert_raise { MiGA::Dataset.new(project, 'dataset-1') }
         | 
| 30 30 | 
             
                assert_equal(project, dataset.project)
         | 
| 31 31 | 
             
                assert_equal('dataset0', dataset.name)
         | 
| 32 | 
            -
                assert_predicate(dataset, : | 
| 32 | 
            +
                assert_predicate(dataset, :ref?)
         | 
| 33 33 | 
             
                assert_equal(MiGA::Metadata, dataset.metadata.class)
         | 
| 34 34 | 
             
                assert_equal(:incomplete, dataset.status)
         | 
| 35 35 | 
             
              end
         | 
| @@ -38,14 +38,14 @@ class DatasetTest < Test::Unit::TestCase | |
| 38 38 | 
             
                d2 = project.add_dataset('ds_save')
         | 
| 39 39 | 
             
                assert_respond_to(d2, :save)
         | 
| 40 40 | 
             
                d2.save
         | 
| 41 | 
            -
                assert_not_predicate(d2, : | 
| 42 | 
            -
                assert_not_predicate(d2, : | 
| 41 | 
            +
                assert_not_predicate(d2, :multi?)
         | 
| 42 | 
            +
                assert_not_predicate(d2, :nonmulti?)
         | 
| 43 43 | 
             
                assert_nil(d2.metadata[:type])
         | 
| 44 44 | 
             
                d2.metadata[:type] = :metagenome
         | 
| 45 45 | 
             
                d2.save
         | 
| 46 46 | 
             
                assert_equal(:metagenome, d2.metadata[:type])
         | 
| 47 | 
            -
                assert_predicate(d2, : | 
| 48 | 
            -
                assert_not_predicate(d2, : | 
| 47 | 
            +
                assert_predicate(d2, :multi?)
         | 
| 48 | 
            +
                assert_not_predicate(d2, :nonmulti?)
         | 
| 49 49 | 
             
              end
         | 
| 50 50 |  | 
| 51 51 | 
             
              def test_remove
         | 
    
        data/test/lair_test.rb
    CHANGED
    
    | @@ -75,10 +75,9 @@ class LairTest < Test::Unit::TestCase | |
| 75 75 | 
             
                  assert_predicate(d, :active?)
         | 
| 76 76 | 
             
                end
         | 
| 77 77 |  | 
| 78 | 
            -
                out = capture_stderr { lair.terminate_daemons }.string
         | 
| 78 | 
            +
                out = capture_stderr { lair.terminate_daemons ; sleep(2) }.string
         | 
| 79 79 | 
             
                assert_match(/Probing MiGA::Daemon/, out)
         | 
| 80 80 | 
             
                assert_match(/Sending termination message/, out)
         | 
| 81 | 
            -
                sleep(2)
         | 
| 82 81 | 
             
                assert_not_predicate(d, :active?)
         | 
| 83 82 |  | 
| 84 83 | 
             
                out = capture_stderr { assert { lair.daemon_loop } }.string
         | 
    
        data/test/net_test.rb
    ADDED
    
    | @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class FormatTest < Test::Unit::TestCase
         | 
| 4 | 
            +
              include TestHelper
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def test_known_hosts
         | 
| 7 | 
            +
                m = MiGA::MiGA
         | 
| 8 | 
            +
                assert_not_nil(m.known_hosts(:miga_db))
         | 
| 9 | 
            +
                assert_not_nil(m.known_hosts('miga_db'))
         | 
| 10 | 
            +
                assert_not_nil(m.known_hosts(:miga_dist))
         | 
| 11 | 
            +
                assert_raise { m.known_kosts(:not_a_host) }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def test_remote_connection
         | 
| 15 | 
            +
                declare_remote_access
         | 
| 16 | 
            +
                m = MiGA::MiGA
         | 
| 17 | 
            +
                assert_raise { m.remote_connection(:bad_descriptor) }
         | 
| 18 | 
            +
                assert_raise { m.remote_connection('http://microbial-genomes.org/') }
         | 
| 19 | 
            +
                c = m.remote_connection(:miga_db)
         | 
| 20 | 
            +
                assert_equal(Net::FTP, c.class)
         | 
| 21 | 
            +
                c.close
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def test_download_file_ftp
         | 
| 25 | 
            +
                declare_remote_access
         | 
| 26 | 
            +
                m = MiGA::MiGA
         | 
| 27 | 
            +
                f = tmpfile('t/test.txt')
         | 
| 28 | 
            +
                d = File.dirname(f)
         | 
| 29 | 
            +
                assert(!Dir.exist?(d))
         | 
| 30 | 
            +
                m.download_file_ftp(:miga_online_ftp, 'test.txt', f)
         | 
| 31 | 
            +
                assert(Dir.exist?(d))
         | 
| 32 | 
            +
                assert_equal('miga', File.read(f).chomp)
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,115 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'test_helper'
         | 
| 4 | 
            +
            require 'miga/common/with_option'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            class WithDaemonTest < Test::Unit::TestCase
         | 
| 7 | 
            +
              include TestHelper
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              class TestWithOption < MiGA::MiGA
         | 
| 10 | 
            +
                include MiGA::Common::WithOption
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                attr_reader :metadata, :saved
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def initialize
         | 
| 15 | 
            +
                  @metadata = { range: 0.9 }
         | 
| 16 | 
            +
                  @saved = false
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def self.OPTIONS
         | 
| 20 | 
            +
                  {
         | 
| 21 | 
            +
                    empty: {},
         | 
| 22 | 
            +
                    float: { type: Float },
         | 
| 23 | 
            +
                    range: { default: 1.0, in: -5.5..5.5, type: Float },
         | 
| 24 | 
            +
                    default: { default: 9, type: Integer },
         | 
| 25 | 
            +
                    token: { type: Integer, tokens: %w[yes no 0] },
         | 
| 26 | 
            +
                    proc: { default: proc { Date.today } },
         | 
| 27 | 
            +
                    bool: { in: [true, false] }
         | 
| 28 | 
            +
                  }
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def save
         | 
| 32 | 
            +
                  @saved = true
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def test_with_option
         | 
| 37 | 
            +
                o = TestWithOption.new
         | 
| 38 | 
            +
                assert_respond_to(o, :option)
         | 
| 39 | 
            +
                assert_equal(1, o.metadata.size)
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_option
         | 
| 43 | 
            +
                o = TestWithOption.new
         | 
| 44 | 
            +
                assert_equal(9, o.option(:default))
         | 
| 45 | 
            +
                assert_nil(o.option(:bool))
         | 
| 46 | 
            +
                assert_raise { o.option(:not_an_option) }
         | 
| 47 | 
            +
                assert_nil(o.option(:empty))
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              def test_set_bool
         | 
| 51 | 
            +
                o = TestWithOption.new
         | 
| 52 | 
            +
                assert_nil(o.option(:bool))
         | 
| 53 | 
            +
                assert(!o.saved)
         | 
| 54 | 
            +
                assert_raise { o.set_option(:bool, 'true') }
         | 
| 55 | 
            +
                assert_nil(o.option(:bool))
         | 
| 56 | 
            +
                assert(!o.saved)
         | 
| 57 | 
            +
                assert_equal(true, o.set_option(:bool, 'true', true))
         | 
| 58 | 
            +
                assert(o.saved)
         | 
| 59 | 
            +
                assert_equal(false, o.set_option(:bool, false))
         | 
| 60 | 
            +
                assert_equal(false, o.set_option(:bool, 'false', true))
         | 
| 61 | 
            +
                assert_nil(o.set_option(:bool, nil))
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              def test_set_empty
         | 
| 65 | 
            +
                o = TestWithOption.new
         | 
| 66 | 
            +
                assert_nil(o.option(:empty))
         | 
| 67 | 
            +
                assert_equal('a', o.set_option(:empty, 'a'))
         | 
| 68 | 
            +
                assert_equal('1', o.set_option(:empty, '1', true))
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              def test_all_options
         | 
| 72 | 
            +
                o = TestWithOption.new
         | 
| 73 | 
            +
                assert(o.all_options.is_a?(Hash))
         | 
| 74 | 
            +
                assert_include(o.all_options.keys, :bool)
         | 
| 75 | 
            +
                assert_nil(o.all_options[:bool])
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              def test_option?
         | 
| 79 | 
            +
                o = TestWithOption.new
         | 
| 80 | 
            +
                assert(o.option?(:range))
         | 
| 81 | 
            +
                assert(!o.option?(:not_an_option))
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              def test_option_metadata
         | 
| 85 | 
            +
                o = TestWithOption.new
         | 
| 86 | 
            +
                assert_equal(0.9, o.option(:range))
         | 
| 87 | 
            +
                assert_equal(1.0, o.set_option(:range, nil))
         | 
| 88 | 
            +
                assert_equal(2.0, o.set_option(:range, 2.0))
         | 
| 89 | 
            +
                assert_equal(3.0, o.set_option(:range, '3', true))
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              def test_option_range
         | 
| 93 | 
            +
                o = TestWithOption.new
         | 
| 94 | 
            +
                assert_raise { o.set_option(:range, 9.0) }
         | 
| 95 | 
            +
                assert_raise { o.set_option(:range, 3) }
         | 
| 96 | 
            +
                assert_raise { o.set_option(:range, true) }
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def test_option_proc
         | 
| 100 | 
            +
                o = TestWithOption.new
         | 
| 101 | 
            +
                assert(o.option(:proc).is_a?(Date))
         | 
| 102 | 
            +
                assert(o.set_option(:proc, 1).is_a?(Integer))
         | 
| 103 | 
            +
                assert(o.set_option(:proc, nil).is_a?(Date))
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
              def test_token
         | 
| 107 | 
            +
                o = TestWithOption.new
         | 
| 108 | 
            +
                assert_nil(o.option(:token))
         | 
| 109 | 
            +
                assert_equal(1, o.set_option(:token, 1))
         | 
| 110 | 
            +
                assert_equal(-2, o.set_option(:token, '-2', true))
         | 
| 111 | 
            +
                assert_equal('yes', o.set_option(:token, 'yes'))
         | 
| 112 | 
            +
                assert_equal('0', o.set_option(:token, '0', true))
         | 
| 113 | 
            +
                assert_raise { o.set_option(:token, 'maybe') }
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
            end
         |