miga-base 0.2.1.0 → 0.2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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