iroki_lib 0.0.1
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/COPYING +674 -0
- data/Gemfile +4 -0
- data/Guardfile +70 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/iroki_lib.gemspec +33 -0
- data/lib/iroki_lib.rb +42 -0
- data/lib/iroki_lib/color/color.rb +58 -0
- data/lib/iroki_lib/const/const.rb +115 -0
- data/lib/iroki_lib/core_ext/file/file.rb +64 -0
- data/lib/iroki_lib/core_ext/hash/hash.rb +28 -0
- data/lib/iroki_lib/core_ext/string/string.rb +34 -0
- data/lib/iroki_lib/main/main.rb +231 -0
- data/lib/iroki_lib/utils/utils.rb +103 -0
- data/lib/iroki_lib/version.rb +21 -0
- metadata +185 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright 2016 Ryan Moore
|
2
|
+
# Contact: moorer@udel.edu
|
3
|
+
#
|
4
|
+
# This file is part of IrokiLib.
|
5
|
+
#
|
6
|
+
# IrokiLib is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# IrokiLib is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with IrokiLib. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module IrokiLib
|
20
|
+
module CoreExt
|
21
|
+
module Hash
|
22
|
+
def duplicate_values? hash
|
23
|
+
values = hash.values
|
24
|
+
values.count != 1 && values.count != values.uniq.count
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module IrokiLib
|
2
|
+
module CoreExt
|
3
|
+
module String
|
4
|
+
|
5
|
+
def hex? str
|
6
|
+
str.match(/^#[0-9A-Fa-f]{6}$/)
|
7
|
+
end
|
8
|
+
|
9
|
+
def clean str
|
10
|
+
str.gsub(/[^\p{Alnum}_]+/, "_").gsub(/_+/, "_")
|
11
|
+
end
|
12
|
+
|
13
|
+
def has_color? name
|
14
|
+
name.match(/(.*)(\[&!color="#[0-9A-Fa-f]{6}"\])/)
|
15
|
+
end
|
16
|
+
alias already_checked? has_color?
|
17
|
+
|
18
|
+
def clean_name name
|
19
|
+
if name.nil?
|
20
|
+
nil
|
21
|
+
else
|
22
|
+
if (match = has_color? name)
|
23
|
+
name = match[1]
|
24
|
+
color = match[2]
|
25
|
+
|
26
|
+
clean(name) + color
|
27
|
+
else
|
28
|
+
clean(name)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
# Copyright 2016 Ryan Moore
|
2
|
+
# Contact: moorer@udel.edu
|
3
|
+
#
|
4
|
+
# This file is part of IrokiLib.
|
5
|
+
#
|
6
|
+
# IrokiLib is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# IrokiLib is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with IrokiLib. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
require "bio"
|
20
|
+
|
21
|
+
module IrokiLib
|
22
|
+
module Main
|
23
|
+
def self.main(color_branches: nil,
|
24
|
+
color_taxa_names: nil,
|
25
|
+
exact: nil,
|
26
|
+
remove_bootstraps_below: nil,
|
27
|
+
color_map_f: nil,
|
28
|
+
name_map_f: nil,
|
29
|
+
auto_color: nil,
|
30
|
+
display_auto_color_options: nil,
|
31
|
+
newick_f: nil,
|
32
|
+
out_f: nil)
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
if display_auto_color_options
|
37
|
+
puts "\n Choices for --auto-color ..."
|
38
|
+
print " basic, basic_light, basic_dark, funky, funky_light, " +
|
39
|
+
"funky_dark\n\n"
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
|
43
|
+
auto_color_options =
|
44
|
+
["basic", "basic_light", "basic_dark",
|
45
|
+
"funky", "funky_light", "funky_dark",]
|
46
|
+
|
47
|
+
|
48
|
+
if(!auto_color.nil? &&
|
49
|
+
!auto_color_options.include?(auto_color))
|
50
|
+
puts "\n Choices for --auto-color ..."
|
51
|
+
print " basic, basic_light, basic_dark, funky, funky_light, " +
|
52
|
+
"funky_dark\n\n"
|
53
|
+
|
54
|
+
Trollop.die :auto_color, "#{auto_color} is not a valid option"
|
55
|
+
end
|
56
|
+
|
57
|
+
case auto_color
|
58
|
+
when nil
|
59
|
+
auto_colors = BASIC
|
60
|
+
when "basic"
|
61
|
+
auto_colors = BASIC
|
62
|
+
when "basic_light"
|
63
|
+
auto_colors = BASIC_LIGHT
|
64
|
+
when "basic_dark"
|
65
|
+
auto_colors = BASIC_DARK
|
66
|
+
when "funky"
|
67
|
+
auto_colors = FUNKY
|
68
|
+
when "funky_light"
|
69
|
+
auto_colors = FUNKY_LIGHT
|
70
|
+
when "funky_dark"
|
71
|
+
auto_colors = FUNKY_DARK
|
72
|
+
end
|
73
|
+
|
74
|
+
# color_branches = true
|
75
|
+
# color_taxa_names = true
|
76
|
+
# exact = false
|
77
|
+
# color_map_f = "test_files/500.patterns_with_name_map"
|
78
|
+
# name_map_f = "test_files/500.name_map"
|
79
|
+
# ARGV[0] = "test_files/500.zetas.tre"
|
80
|
+
newick = check_file newick_f, :newick
|
81
|
+
|
82
|
+
color_f = nil
|
83
|
+
if color_taxa_names || color_branches
|
84
|
+
color_f = check_file color_map_f, :color_map_f
|
85
|
+
end
|
86
|
+
|
87
|
+
check = color_map_f &&
|
88
|
+
!color_taxa_names &&
|
89
|
+
!color_branches
|
90
|
+
|
91
|
+
abort_if check,
|
92
|
+
"A pattern file was provided without specifying " +
|
93
|
+
"any coloring options"
|
94
|
+
|
95
|
+
|
96
|
+
# if passed color other than one defined, return black
|
97
|
+
black = "#000000"
|
98
|
+
red = "#FF1300"
|
99
|
+
yellow = "#FFD700"
|
100
|
+
blue = "#5311FF"
|
101
|
+
green = "#00FF2C"
|
102
|
+
color2hex = Hash.new "[&!color=\"#{black}\"]"
|
103
|
+
color2hex.merge!({
|
104
|
+
"black" => "[&!color=\"#{black}\"]",
|
105
|
+
"red" => "[&!color=\"#{red}\"]",
|
106
|
+
"blue" => "[&!color=\"#{blue}\"]",
|
107
|
+
"yellow" => "[&!color=\"#{yellow}\"]",
|
108
|
+
"green" => "[&!color=\"#{green}\"]"
|
109
|
+
})
|
110
|
+
|
111
|
+
# check if complementary colors requested
|
112
|
+
if color_f
|
113
|
+
colors = Set.new
|
114
|
+
File.open(color_f).each_line do |line|
|
115
|
+
_, color = line.chomp.split "\t"
|
116
|
+
|
117
|
+
colors << color
|
118
|
+
end
|
119
|
+
|
120
|
+
auto_color = colors.all? { |color| color.match /\A[0-4]\Z/ }
|
121
|
+
end
|
122
|
+
|
123
|
+
# get the color patterns
|
124
|
+
if color_f
|
125
|
+
patterns = {}
|
126
|
+
File.open(color_f).each_line do |line|
|
127
|
+
pattern, color = line.chomp.split "\t"
|
128
|
+
|
129
|
+
color = "black" if color.nil? || color.empty?
|
130
|
+
|
131
|
+
if name_map_f || color_taxa_names || color_branches
|
132
|
+
pattern = clean_name pattern
|
133
|
+
end
|
134
|
+
|
135
|
+
if !exact
|
136
|
+
pattern = Regexp.new pattern
|
137
|
+
end
|
138
|
+
|
139
|
+
if auto_color
|
140
|
+
patterns[pattern] = "[&!color=\"#{auto_colors[color]}\"]"
|
141
|
+
else
|
142
|
+
if hex? color
|
143
|
+
patterns[pattern] = "[&!color=\"#{color}\"]"
|
144
|
+
else
|
145
|
+
patterns[pattern] = color2hex[color]
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
treeio = Bio::FlatFile.open(Bio::Newick, newick)
|
152
|
+
|
153
|
+
newick = treeio.next_entry
|
154
|
+
tree = newick.tree
|
155
|
+
|
156
|
+
# do this first cos everything after will use the "new" names
|
157
|
+
if name_map_f
|
158
|
+
name_map = parse_name_map name_map_f
|
159
|
+
|
160
|
+
tree.collect_node! do |node|
|
161
|
+
unless node.name.nil?
|
162
|
+
# every name is cleaned no matter what
|
163
|
+
node.name = clean node.name
|
164
|
+
|
165
|
+
if name_map.has_key?(node.name)
|
166
|
+
node.name = name_map[node.name]
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
node
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
if color_taxa_names
|
175
|
+
leaves = tree.leaves.map do |n|
|
176
|
+
name = clean_name n.name
|
177
|
+
|
178
|
+
if (color = add_color_to_leaf_branch(patterns, name, exact))
|
179
|
+
name + color
|
180
|
+
else
|
181
|
+
name
|
182
|
+
end
|
183
|
+
end
|
184
|
+
else
|
185
|
+
leaves = tree.leaves.map { |n| clean_name n.name }
|
186
|
+
end
|
187
|
+
|
188
|
+
if color_branches
|
189
|
+
total = tree.nodes.count
|
190
|
+
n = 0
|
191
|
+
tree.collect_node! do |node|
|
192
|
+
n += 1
|
193
|
+
$stderr.printf "Node: %d of %d\r", n, total
|
194
|
+
|
195
|
+
color_nodes patterns, tree, node, exact
|
196
|
+
end
|
197
|
+
end
|
198
|
+
$stderr.puts
|
199
|
+
|
200
|
+
if remove_bootstraps_below
|
201
|
+
tree.collect_node! do |node|
|
202
|
+
if node.bootstrap && node.bootstrap < remove_bootstraps_below
|
203
|
+
node.bootstrap_string = ""
|
204
|
+
end
|
205
|
+
|
206
|
+
node
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
tre_str = tree.newick(indent: false).gsub(/'/, '')
|
213
|
+
|
214
|
+
nexus = "#NEXUS
|
215
|
+
begin taxa;
|
216
|
+
dimensions ntax=#{leaves.count};
|
217
|
+
taxlabels
|
218
|
+
#{leaves.join("\n")}
|
219
|
+
;
|
220
|
+
end;
|
221
|
+
|
222
|
+
begin trees;
|
223
|
+
tree tree_1 = [&R] #{tre_str}
|
224
|
+
end;
|
225
|
+
|
226
|
+
#{FIG}"
|
227
|
+
|
228
|
+
File.open(out_f, "w") { |f| f.puts nexus }
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# Copyright 2016 Ryan Moore
|
2
|
+
# Contact: moorer@udel.edu
|
3
|
+
#
|
4
|
+
# This file is part of IrokiLib.
|
5
|
+
#
|
6
|
+
# IrokiLib is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# IrokiLib is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with IrokiLib. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module IrokiLib
|
20
|
+
module Utils
|
21
|
+
include AbortIf
|
22
|
+
include IrokiLib::CoreExt::String
|
23
|
+
|
24
|
+
def leaf? tree, node
|
25
|
+
tree.children(node).empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_color_to_leaf_branch patterns, node, exact
|
29
|
+
num_matches = 0
|
30
|
+
color = nil
|
31
|
+
already_matched = false
|
32
|
+
|
33
|
+
if exact # treat patterns as string matching
|
34
|
+
node_s = node.to_s
|
35
|
+
if patterns.has_key? node_s
|
36
|
+
color = patterns[node_s]
|
37
|
+
|
38
|
+
return color
|
39
|
+
else
|
40
|
+
return nil
|
41
|
+
end
|
42
|
+
else
|
43
|
+
node_s = node.to_s
|
44
|
+
|
45
|
+
patterns.each do |pattern, this_color|
|
46
|
+
if node_s =~ pattern
|
47
|
+
abort_if already_matched,
|
48
|
+
"Non specific matching for #{node_s}"
|
49
|
+
|
50
|
+
color = this_color
|
51
|
+
already_matched = true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
return color
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def get_color node
|
60
|
+
begin
|
61
|
+
node.name.match(/\[&!color="#[0-9A-Fa-f]{6}"\]/)[0]
|
62
|
+
rescue NoMethodError => e
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def color_nodes patterns, tree, node, exact
|
68
|
+
# # check if it needs color, if so set the color
|
69
|
+
# color = add_color_to_leaf_branch patterns, node, exact
|
70
|
+
|
71
|
+
# clean the name no matter what
|
72
|
+
node.name = clean_name node.name
|
73
|
+
|
74
|
+
# if its a leaf that hasnt been checked & needs color
|
75
|
+
if leaf?(tree, node) && !already_checked?(node.name) # && color
|
76
|
+
# check if it needs color, if so set the color
|
77
|
+
|
78
|
+
# NOTE: this was originally before cleaning the node name a
|
79
|
+
# couple lines up, does it matter that it is after?
|
80
|
+
color = add_color_to_leaf_branch patterns, node, exact
|
81
|
+
|
82
|
+
# add color to the name
|
83
|
+
node.name = node.name + color if color
|
84
|
+
elsif !leaf?(tree, node)
|
85
|
+
children = tree.children(node) # get the children
|
86
|
+
children_colors = []
|
87
|
+
children.each do |child|
|
88
|
+
# recurse to color the child if needed
|
89
|
+
color_nodes patterns, tree, child, exact
|
90
|
+
children_colors << get_color(child) # add color of the child
|
91
|
+
end
|
92
|
+
|
93
|
+
# if all the children have the same color
|
94
|
+
if children_colors.uniq.count == 1
|
95
|
+
# set the branch node to only the color name
|
96
|
+
node.name = children_colors[0]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
return node
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Copyright 2016 Ryan Moore
|
2
|
+
# Contact: moorer@udel.edu
|
3
|
+
#
|
4
|
+
# This file is part of IrokiLib.
|
5
|
+
#
|
6
|
+
# IrokiLib is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# IrokiLib is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with IrokiLib. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
|
19
|
+
module IrokiLib
|
20
|
+
VERSION = "0.0.1"
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: iroki_lib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryan Moore
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.6'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 4.6.4
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '4.6'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 4.6.4
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: yard
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.8.7.6
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.8.7.6
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: coveralls
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.8.11
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.8.11
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: abort_if
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.1.0
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.1.0
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: bio
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '1.5'
|
124
|
+
type: :runtime
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '1.5'
|
131
|
+
description: Library code for Iroki, a phylogenetic tree customization program.
|
132
|
+
email:
|
133
|
+
- moorer@udel.edu
|
134
|
+
executables: []
|
135
|
+
extensions: []
|
136
|
+
extra_rdoc_files: []
|
137
|
+
files:
|
138
|
+
- ".gitignore"
|
139
|
+
- ".rspec"
|
140
|
+
- ".ruby-version"
|
141
|
+
- ".travis.yml"
|
142
|
+
- CODE_OF_CONDUCT.md
|
143
|
+
- COPYING
|
144
|
+
- Gemfile
|
145
|
+
- Guardfile
|
146
|
+
- README.md
|
147
|
+
- Rakefile
|
148
|
+
- bin/console
|
149
|
+
- bin/setup
|
150
|
+
- iroki_lib.gemspec
|
151
|
+
- lib/iroki_lib.rb
|
152
|
+
- lib/iroki_lib/color/color.rb
|
153
|
+
- lib/iroki_lib/const/const.rb
|
154
|
+
- lib/iroki_lib/core_ext/file/file.rb
|
155
|
+
- lib/iroki_lib/core_ext/hash/hash.rb
|
156
|
+
- lib/iroki_lib/core_ext/string/string.rb
|
157
|
+
- lib/iroki_lib/main/main.rb
|
158
|
+
- lib/iroki_lib/utils/utils.rb
|
159
|
+
- lib/iroki_lib/version.rb
|
160
|
+
homepage: https://github.com/mooreryan/iroki_lib
|
161
|
+
licenses:
|
162
|
+
- 'GPLv3: http://www.gnu.org/licenses/gpl.txt'
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 2.2.4
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
requirements: []
|
179
|
+
rubyforge_project:
|
180
|
+
rubygems_version: 2.4.8
|
181
|
+
signing_key:
|
182
|
+
specification_version: 4
|
183
|
+
summary: Library code for Iroki, a phylogenetic tree customization program.
|
184
|
+
test_files: []
|
185
|
+
has_rdoc:
|