miga-base 0.2.1.0 → 0.2.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f914d4f05c7c1cb97b6036fa1af3bb5c6e95c341
4
- data.tar.gz: 3812c256d78cbe8125ee5aa14a1785c3de57918f
3
+ metadata.gz: 5a495f0a540632069724a9f30b87495532c74aa5
4
+ data.tar.gz: 21e81ff7c152fbc6ef89e781b25aef2852190622
5
5
  SHA512:
6
- metadata.gz: cdc6692724bb6b7c39a313c35eaabe51405d104d8af465618983a83601435af66ca1f7eca0a3e9fbc19b24ce13cbde8f9962beaf643ad1f9e3970bb10067f671
7
- data.tar.gz: 45e19af2b3e14e225c9f6a89193b0c400fe8ac685296314b4320885a563ab2b3c4472563a45f98c5a7d15edd74573cf1f9176a59905a2764a809d6bc3850b90d
6
+ metadata.gz: 7f0f38d7981e0f872af676b4e65341baa032a00b7dd491337b1c01bf72c1c4a9702b5808ce2eb19486d1c139658e303c1d39b9422f0ae6301e4af9dc4be5ce33
7
+ data.tar.gz: 8b731945f0dc75f9f29c6dc92f943ad069e42038c6aec6fe64885832ce3ceeb1dad824b5d594ca03d25febb5d5f70599f7049ce2739c2892e8c2a0d330c955f9
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @package MiGA
4
+ # @license Artistic-2.0
5
+
6
+ require "miga/tax_index"
7
+ require "zlib"
8
+ require "tmpdir"
9
+
10
+ o = {q:true, format: :json}
11
+ OptionParser.new do |opt|
12
+ opt_banner(opt)
13
+ opt_object(opt, o, [:project])
14
+ opt_filter_datasets(opt, o)
15
+ opt.on("-i", "--index FILE",
16
+ "Pre-calculated tax-index (in tabular format) to be used.",
17
+ "If passed, dataset filtering arguments are ignored."
18
+ ){ |v| o[:index]=v }
19
+ opt_common(opt, o)
20
+ end.parse!
21
+
22
+ ##=> Functions <=
23
+ # Returns the _cannonical_ ID between strings +a+ and +b+.
24
+ def cannid(a, b) ; [a, b].sort.join("-") ; end
25
+
26
+ ##=> Main <=
27
+ opt_require(o, project:"-P")
28
+
29
+ $stderr.puts "Loading project." unless o[:q]
30
+ p = MiGA::Project.load(o[:project])
31
+ raise "Impossible to load project: #{o[:project]}" if p.nil?
32
+
33
+ metric = p.is_clade? ? "ani" : "aai"
34
+ res_n = "#{metric}_distances"
35
+ $stderr.puts "Reading distances (1-#{metric.upcase})." unless o[:q]
36
+ res = p.result res_n
37
+ raise "#{res_n} not yet calculated." if res.nil?
38
+ matrix = res.file_path(:matrix)
39
+ raise "#{res_n} has no matrix." if matrix.nil?
40
+ dist = {}
41
+ fh = matrix=~/\.gz$/ ? Zlib::GzipReader.open(matrix) : File.open(matrix,"r")
42
+ fh.each_line do |ln|
43
+ next if fh.lineno==1
44
+ row = ln.chomp.split(/\t/)
45
+ dist[cannid(row[1], row[2])] = [row[3], 0, ["root:biota"]]
46
+ end
47
+ fh.close
48
+
49
+ Dir.mktmpdir do |dir|
50
+ if o[:index].nil?
51
+ $stderr.puts "Loading datasets." unless o[:q]
52
+ ds = p.datasets
53
+ ds.select!{ |d| not d.metadata[:tax].nil? }
54
+ ds = filter_datasets!(ds, o)
55
+
56
+ $stderr.puts "Indexing taxonomy." unless o[:q]
57
+ tax_index = MiGA::TaxIndex.new
58
+ ds.each { |d| tax_index << d }
59
+ tab = File.expand_path("index.tab", dir)
60
+ File.open(tab, "w") { |fh| fh.print tax_index.to_tab }
61
+ else
62
+ tab = o[:index]
63
+ end
64
+
65
+ $stderr.puts "Traversing taxonomy." unless o[:q]
66
+ rank_i = 0
67
+ MiGA::Taxonomy.KNOWN_RANKS.each do |rank|
68
+ $stderr.print "o #{rank}: " unless o[:q]
69
+ rank_n = 0
70
+ rank_i += 1
71
+ in_rank = nil
72
+ ds_name = []
73
+ File.open(tab, "r") do |fh|
74
+ fh.each_line do |ln|
75
+ if ln =~ /^ {#{(rank_i-1)*2}}\S+:\S+:/
76
+ in_rank = nil
77
+ ds_name = []
78
+ elsif ln =~ /^ {#{rank_i*2}}(#{rank}:(\S+)):/
79
+ in_rank = $2=="?" ? nil : $1
80
+ ds_name = []
81
+ elsif ln =~ /^ *# (\S+)/ and not in_rank.nil?
82
+ ds_i = $1
83
+ ds_name << ds_i
84
+ ds_name.each do |ds_j|
85
+ k = cannid(ds_i, ds_j)
86
+ next if dist[k].nil?
87
+ rank_n += 1
88
+ dist[k][1] = rank_i
89
+ dist[k][2].unshift in_rank
90
+ end
91
+ end
92
+ end
93
+ end
94
+ $stderr.puts "#{rank_n} pairs of datasets." unless o[:q]
95
+ end
96
+ end
97
+
98
+ dist.keys.each do |k|
99
+ puts (k.split("-") + dist[k].flatten).join("\t")
100
+ end
data/bin/miga CHANGED
@@ -26,6 +26,7 @@ $task_desc = {
26
26
  list_files: "Lists all registered files from the results of a dataset or a "+
27
27
  "project.",
28
28
  project_info: "Displays information about a MiGA project.",
29
+ tax_distributions: "Estimates distributions of distance by taxonomy.",
29
30
  unlink_dataset: "Removes a dataset from an MiGA project."
30
31
  }
31
32
 
Binary file
Binary file
@@ -0,0 +1,65 @@
1
+ # @package MiGA
2
+ # @license Artistic-2.0
3
+
4
+ require "miga/common"
5
+ require "miga/taxonomy"
6
+ require "zlib"
7
+
8
+ ##
9
+ # Methods for taxonomy identification based on AAI/ANI values.
10
+ module MiGA::TaxDist
11
+
12
+ ##
13
+ # Absolute path to the :intax or :novel data file (determined by +test+) for
14
+ # AAI.
15
+ def self.aai_path(test)
16
+ test = test.downcase.to_sym
17
+ return nil unless [:intax, :novel].include? test
18
+ File.expand_path("../_data/aai-#{test}.tsv.gz", __FILE__)
19
+ end
20
+
21
+ # Returns a Hash, where the keys correspond to the taxonomic level
22
+ # (see MiGA::Taxonomy.LONG_RANKS for the meanings), and the values correspond
23
+ # to the p-values of being :intax or :novel, as determined by +test+.
24
+ def self.aai_pvalues(aai, test)
25
+ Zlib::GzipReader.open(aai_path(test)) do |fh|
26
+ keys = nil
27
+ fh.each_line do |ln|
28
+ row = ln.chomp.split /\t/
29
+ if fh.lineno==1
30
+ keys = row[1, row.size-1].map{ |i| i.to_i }
31
+ elsif row.shift.to_f >= aai
32
+ vals = {}
33
+ keys.each do |i|
34
+ v = row.shift
35
+ next if v=="NA"
36
+ vals[MiGA::Taxonomy.KNOWN_RANKS[i]] = v.to_f
37
+ end
38
+ return vals
39
+ end
40
+ end # each_line ln
41
+ end # open fh
42
+ {}
43
+ end
44
+
45
+ # Determines the degree to which a Float +aai+ value indicates similar
46
+ # taxonomy (with +test+ :intax) or a novel taxon (with +test+ :novel). Returns
47
+ # a Hash with "likelihood" phrases as keys and values as an array with
48
+ # cannonical rank (as in MiGA::Taxonomy) and estimated p-value.
49
+ def self.aai_taxtest(aai, test)
50
+ meaning = {most_likely:[0,0.01],probably:[0.01,0.1],possibly_even:[0.1,0.5]}
51
+ pv = aai_pvalues(aai, test)
52
+ out = {}
53
+ meaning.each do |phrase, thresholds|
54
+ lwr, upr = thresholds
55
+ min = pv.values.select{ |v| v >= lwr }.min
56
+ return out if min.nil?
57
+ if min < upr
58
+ v = pv.select{ |_,v| v==min }
59
+ out[phrase] = (test==:intax ? v.reverse_each : v).first
60
+ end
61
+ end
62
+ out
63
+ end
64
+
65
+ end
@@ -34,6 +34,26 @@ class MiGA::TaxIndex < MiGA::MiGA
34
34
  @datasets << dataset
35
35
  end
36
36
 
37
+ ##
38
+ # Finds all the taxa in the collection at the +rank+ taxonomic rank.
39
+ def taxa_by_rank(rank)
40
+ rank = MiGA::Taxonomy.normalize_rank(rank)
41
+ taxa = [@root]
42
+ select = []
43
+ loop do
44
+ new_taxa = []
45
+ taxa.map{ |tx| tx.children }.flatten.each do |ch|
46
+ if ch.rank == rank
47
+ select << ch
48
+ elsif not ch.children.empty?
49
+ new_taxa << ch
50
+ end
51
+ end
52
+ break if new_taxa.empty?
53
+ end
54
+ select
55
+ end
56
+
37
57
  ##
38
58
  # Generate JSON String for the index.
39
59
  def to_json
@@ -98,6 +118,12 @@ class MiGA::TaxIndexTaxon < MiGA::MiGA
98
118
  datasets.size + children.map{ |it| it.datasets_count }.reduce(0, :+)
99
119
  end
100
120
 
121
+ ##
122
+ # Get all the datasets in the taxon (including children).
123
+ def all_datasets
124
+ datasets + children.map{ |it| it.datasets }.reduce([], :+)
125
+ end
126
+
101
127
  ##
102
128
  # JSON String of the taxon.
103
129
  def to_json(*a)
data/lib/miga/taxonomy.rb CHANGED
@@ -11,6 +11,13 @@ class MiGA::Taxonomy < MiGA::MiGA
11
11
  def self.KNOWN_RANKS() @@KNOWN_RANKS ; end
12
12
  @@KNOWN_RANKS = %w{ns d k p c o f g s ssp str ds}.map{|r| r.to_sym}
13
13
 
14
+ ##
15
+ # Long names of the cannonical ranks.
16
+ def self.LONG_RANKS() @@LONG_RANKS ; end
17
+ @@LONG_RANKS = {root: "root", ns: "namespace", d: "domain", k: "kingdom",
18
+ p: "phylum", c: "class", o: "order", f: "family", g: "genus", s: "species",
19
+ ssp: "subspecies", str: "strain", ds: "dataset"}
20
+
14
21
  ##
15
22
  # Synonms for cannonical ranks.
16
23
  @@RANK_SYNONYMS = {
data/lib/miga/version.rb CHANGED
@@ -10,7 +10,7 @@ module MiGA
10
10
  # - Float representing the major.minor version.
11
11
  # - Integer representing gem releases of the current version.
12
12
  # - Integer representing minor changes that require new version number.
13
- VERSION = [0.2, 1, 0]
13
+ VERSION = [0.2, 1, 2]
14
14
 
15
15
  ##
16
16
  # Nickname for the current major.minor version.
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env Rscript
2
+
3
+ # @package MiGA
4
+ # @license Artistic-2.0
5
+
6
+ ##
7
+ # To update the AAI data files, use:
8
+ #
9
+ # ```bash
10
+ # miga tax_distributions -P /Path/To/RefSeq --ref | cut -f 1-5 \
11
+ # > aai-tax-index.tsv
12
+ # ```
13
+ #
14
+ # Next, in R:
15
+ #
16
+ # ```R
17
+ # source("utils/plot-taxdist.R")
18
+ # p.val <- plot.miga.taxdist("aai-tax-index.tsv",
19
+ # exclude=c("g:Mycoplasma", "ssp:Prochlorococcus_marinus_subsp__marinus",
20
+ # "f:Rhizobiaceae", "s:Buchnera_aphidicola", "s:Prochlorococcus_marinus"))
21
+ # write.table(p.val[[1]], file="lib/miga/_data/aai-intax.tsv",
22
+ # sep="\t", row.names=TRUE, col.names=NA, quote=FALSE)
23
+ # write.table(p.val[[2]], file="lib/miga/_data/aai-novel.tsv",
24
+ # sep="\t", row.names=TRUE, col.names=NA, quote=FALSE)
25
+ # ```
26
+ #
27
+ # And finally, back in bash:
28
+ #
29
+ # ```bash
30
+ # gzip lib/miga/_data/aai-intax.tsv
31
+ # gzip lib/miga/_data/aai-novel.tsv
32
+ # rm aai-tax-index.tsv
33
+ # ```
34
+ #
35
+
36
+ #= Load stuff
37
+ #argv <- commandArgs(trailingOnly=T)
38
+
39
+ #= Functions
40
+ plot.miga.taxdist <- function(file, exclude=c()){
41
+ pdf(paste(file, ".pdf", sep=""), 6, 7)
42
+ layout(1:3, heights=c(2,1,1.5))
43
+ d <- read.table(file, sep="\t", header=FALSE,
44
+ col.names=c("a","b","aai","rank","taxon"), as.is=TRUE)
45
+ a <- d[!(d$taxon %in% exclude),]
46
+ col <- rainbow(max(a$rank)+1, s=3/4, v=3/4, alpha=1/3)
47
+ col2 <- rainbow(max(a$rank)+1, s=3/4, v=3/4)
48
+
49
+ cat("o Plot pairs.\n")
50
+ par(mar=c(0,4,1,1)+0.1)
51
+ plot(d$aai, d$rank+runif(nrow(d), -0.3, 0.3), cex=1/2, pch=16, las=1, bty="l",
52
+ col=ifelse(d$taxon %in% exclude, rgb(.8,.8,.8,1/4), col[d$rank+1]),
53
+ xlab="", ylab="Lowest common taxon", xaxt="n", ylim=rev(range(a$rank)))
54
+ for(i in c(0.1, 0.05, 0.01)){
55
+ min_q <- tapply(a$aai, a$rank, quantile, probs=i)
56
+ max_q <- tapply(a$aai, a$rank, quantile, probs=1-i)
57
+ arrows(x0=min_q, length=0, col=grey(1+log10(i)/2),
58
+ y0=as.numeric(names(min_q))-0.45, y1=as.numeric(names(min_q))+0.45)
59
+ arrows(x0=max_q, length=0, col=grey(1+log10(i)/2),
60
+ y0=as.numeric(names(max_q))-0.45, y1=as.numeric(names(max_q))+0.45)
61
+ }
62
+
63
+ cat("o Plot taxa.\n")
64
+ par(mar=c(0,4,0,1)+0.1)
65
+ plot(1, type="n", xlim=range(a$aai), ylim=rev(range(a$rank)),
66
+ xlab="", ylab="Lowest common taxon", xaxt="n", las=1, bty="l")
67
+ for(i in unique(a$rank)){
68
+ t.aai <- tapply(d$aai[d$rank==i], d$taxon[d$rank==i], mean)
69
+ t.size <- tapply(d$aai[d$rank==i], d$taxon[d$rank==i], length)
70
+ points(t.aai, i+runif(length(t.aai), -0.15, 0.15), pch=16,
71
+ cex=2*log2(1+t.size)/log2(1+max(t.size)),
72
+ col=ifelse(names(t.aai) %in% exclude, rgb(.8,.8,.8,1/4), col[i+1]))
73
+ }
74
+
75
+ cat("o Plot p-values.\n")
76
+ par(mar=c(4,4,0,1)+0.1)
77
+ plot(1, type="n", xlim=range(a$aai), ylim=c(0,0.5),
78
+ xlab="AAI (%)", ylab="P-value (--- intax; - - novel)", las=1, bty="l")
79
+ x <- seq(30, 100, 0.1)
80
+ intax <- data.frame(row.names=x)
81
+ novel <- data.frame(row.names=x)
82
+ for(i in sort(unique(a$rank))){
83
+ if(i==12) next
84
+ k <- as.character(i)
85
+ intax[,k] <- miga.taxprob.intax(x, i, a)
86
+ novel[,k] <- miga.taxprob.novel(x, i, a)
87
+ lines(x, intax[,k], col=col2[i+1], lwd=2)
88
+ lines(x, novel[,k], col=col2[i+1], lwd=2, lty=2)
89
+ }
90
+ dev.off()
91
+ return(list(intax, novel))
92
+ }
93
+
94
+ miga.taxprob.novel <- function(max.aai, rank, data){
95
+ o <- c()
96
+ for(i in max.aai){
97
+ a <- sum(data$rank >= rank & data$aai <= i)/sum(data$aai <= i)
98
+ o <- c(o, a)
99
+ }
100
+ return(o*sum(data$rank < 12)/sum(data$rank >= rank))
101
+ }
102
+
103
+ miga.taxprob.intax <- function(max.aai, rank, data){
104
+ o <- c()
105
+ for(i in max.aai){
106
+ a <- sum(data$rank < rank & data$aai >= i)/sum(data$aai >= i)
107
+ o <- c(o, a)
108
+ }
109
+ return(o*sum(data$rank < 12)/sum(data$rank < rank))
110
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miga-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1.0
4
+ version: 0.2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luis M. Rodriguez-R
@@ -14,70 +14,70 @@ dependencies:
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: daemons
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: json
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.8'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.8'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '11'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '11'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: test-unit
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3'
83
83
  description: Microbial Genomes Atlas
@@ -88,26 +88,6 @@ extensions: []
88
88
  extra_rdoc_files:
89
89
  - README.md
90
90
  files:
91
- - Gemfile
92
- - LICENSE
93
- - README.md
94
- - Rakefile
95
- - actions/add_result.rb
96
- - actions/add_taxonomy.rb
97
- - actions/create_dataset.rb
98
- - actions/create_project.rb
99
- - actions/daemon.rb
100
- - actions/date.rb
101
- - actions/download_dataset.rb
102
- - actions/find_datasets.rb
103
- - actions/import_datasets.rb
104
- - actions/index_taxonomy.rb
105
- - actions/list_datasets.rb
106
- - actions/list_files.rb
107
- - actions/project_info.rb
108
- - actions/unlink_dataset.rb
109
- - bin/miga
110
- - lib/miga.rb
111
91
  - lib/miga/common.rb
112
92
  - lib/miga/daemon.rb
113
93
  - lib/miga/dataset.rb
@@ -116,9 +96,22 @@ files:
116
96
  - lib/miga/project.rb
117
97
  - lib/miga/remote_dataset.rb
118
98
  - lib/miga/result.rb
99
+ - lib/miga/tax_dist.rb
119
100
  - lib/miga/tax_index.rb
120
101
  - lib/miga/taxonomy.rb
121
102
  - lib/miga/version.rb
103
+ - lib/miga.rb
104
+ - test/common_test.rb
105
+ - test/daemon_test.rb
106
+ - test/dataset_test.rb
107
+ - test/metadata_test.rb
108
+ - test/project_test.rb
109
+ - test/remote_dataset_test.rb
110
+ - test/tax_index_test.rb
111
+ - test/taxonomy_test.rb
112
+ - test/test_helper.rb
113
+ - lib/miga/_data/aai-intax.tsv.gz
114
+ - lib/miga/_data/aai-novel.tsv.gz
122
115
  - scripts/_distances_functions.bash
123
116
  - scripts/_distances_noref_nomulti.bash
124
117
  - scripts/_distances_ref_nomulti.bash
@@ -140,21 +133,33 @@ files:
140
133
  - scripts/subclades.bash
141
134
  - scripts/trimmed_fasta.bash
142
135
  - scripts/trimmed_reads.bash
143
- - test/common_test.rb
144
- - test/daemon_test.rb
145
- - test/dataset_test.rb
146
- - test/metadata_test.rb
147
- - test/project_test.rb
148
- - test/remote_dataset_test.rb
149
- - test/tax_index_test.rb
150
- - test/taxonomy_test.rb
151
- - test/test_helper.rb
152
136
  - utils/adapters.fa
153
137
  - utils/mytaxa_scan.R
154
138
  - utils/mytaxa_scan.rb
139
+ - utils/plot-taxdist.R
155
140
  - utils/requirements.txt
156
141
  - utils/subclades-compile.rb
157
142
  - utils/subclades.R
143
+ - bin/miga
144
+ - actions/add_result.rb
145
+ - actions/add_taxonomy.rb
146
+ - actions/create_dataset.rb
147
+ - actions/create_project.rb
148
+ - actions/daemon.rb
149
+ - actions/date.rb
150
+ - actions/download_dataset.rb
151
+ - actions/find_datasets.rb
152
+ - actions/import_datasets.rb
153
+ - actions/index_taxonomy.rb
154
+ - actions/list_datasets.rb
155
+ - actions/list_files.rb
156
+ - actions/project_info.rb
157
+ - actions/tax_distributions.rb
158
+ - actions/unlink_dataset.rb
159
+ - Gemfile
160
+ - Rakefile
161
+ - README.md
162
+ - LICENSE
158
163
  homepage: http://enve-omics.ce.gatech.edu/miga
159
164
  licenses:
160
165
  - Artistic-2.0
@@ -163,25 +168,25 @@ post_install_message:
163
168
  rdoc_options:
164
169
  - lib
165
170
  - README.md
166
- - "--main"
171
+ - --main
167
172
  - README.md
168
- - "--title"
173
+ - --title
169
174
  - MiGA
170
175
  require_paths:
171
176
  - lib
172
177
  required_ruby_version: !ruby/object:Gem::Requirement
173
178
  requirements:
174
- - - ">="
179
+ - - '>='
175
180
  - !ruby/object:Gem::Version
176
181
  version: '1.9'
177
182
  required_rubygems_version: !ruby/object:Gem::Requirement
178
183
  requirements:
179
- - - ">="
184
+ - - '>='
180
185
  - !ruby/object:Gem::Version
181
186
  version: '0'
182
187
  requirements: []
183
188
  rubyforge_project:
184
- rubygems_version: 2.5.1
189
+ rubygems_version: 2.0.14
185
190
  signing_key:
186
191
  specification_version: 4
187
192
  summary: MiGA