genomer 0.0.7 → 0.0.8
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.
- data/Gemfile +0 -2
- data/README.mkd +59 -0
- data/features/cli/init.feature +14 -0
- data/features/cli/man.feature +6 -0
- data/genomer.gemspec +2 -2
- data/lib/genomer/runtime.rb +11 -4
- data/lib/genomer/version.rb +1 -1
- data/man/genomer-init.1.ronn +29 -1
- data/spec/genomer/runtime_spec.rb +28 -5
- metadata +8 -9
- data/README.rdoc +0 -23
- data/cucumber.yml +0 -2
data/Gemfile
CHANGED
data/README.mkd
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+

|
2
|
+
|
3
|
+
## About
|
4
|
+
|
5
|
+
Genomer is command line glue for genome projects. I wrote this tool to simplify
|
6
|
+
the small but tedious tasks required when finishing a genome. Genomer does not
|
7
|
+
perform assembly, gap closing or genome annotation. Genomer does however make
|
8
|
+
it easy to reorganise contigs in a genome, map annotations on to the genome and
|
9
|
+
generate the files required to submit a genome.
|
10
|
+
|
11
|
+
A important part of genomer is making all projects reproducible. Genomer is
|
12
|
+
designed to work well with build tools such as [GNU Make][make] and revision
|
13
|
+
control tools such as [git][git]. This allows for all steps taken in genome
|
14
|
+
project to be tracked and reverted if required.
|
15
|
+
|
16
|
+
[make]: http://www.gnu.org/software/make/
|
17
|
+
[git]: http://git-scm.com/
|
18
|
+
|
19
|
+
Genomer is also built as a modular tool where additional functions are added by
|
20
|
+
installing plugins. Plugins can be added simply by naming them in the `Gemfile`
|
21
|
+
in the genomer project root, followed typing the command `bundle install`.
|
22
|
+
Furthermore plugins can be specified to specific versions, this means that new
|
23
|
+
versions of genomer plugins will not break any existing genomer projects.
|
24
|
+
|
25
|
+
## Examples
|
26
|
+
|
27
|
+
I wrote genomer to simplify the manual and error prone tasks in my own genome
|
28
|
+
projects. You can see examples of using genomer for [a small plasmid][plasmid]
|
29
|
+
and for [a larger microbial genome][genome]. Each of these projects takes
|
30
|
+
advantage of revision control and build files to make the projects
|
31
|
+
reproducible.
|
32
|
+
|
33
|
+
[plasmid]: https://github.com/michaelbarton/chromosome-pfluorescens-r124-plasmid
|
34
|
+
[genome]: https://github.com/michaelbarton/chromosome-pfluorescens-r124-genome
|
35
|
+
|
36
|
+
## Installing
|
37
|
+
|
38
|
+
Ruby and RubyGems are required to use genomer and related plugins. Genomer is
|
39
|
+
installed on the command line using:
|
40
|
+
|
41
|
+
$ gem install genomer
|
42
|
+
|
43
|
+
## Contact
|
44
|
+
|
45
|
+
Genomer is developed by Michael Barton (www.michaelbarton.me.uk). The source
|
46
|
+
code is available on [github][]. Bug reports and feature requests should also
|
47
|
+
be made there.
|
48
|
+
|
49
|
+
[github]: https://github.com/michaelbarton/genomer
|
50
|
+
|
51
|
+
## Copyright
|
52
|
+
|
53
|
+
Genomer copyright (c) 2010 by Michael Barton. Genomer is licensed under the MIT
|
54
|
+
license. See LICENSE.txt for further details. The swiss army knife image is by
|
55
|
+
[Alan Cann][cann] used under a Creative Commons Attribution Non-Commercial
|
56
|
+
ShareAlike 2.0 Licence. The original can be [found on flickr.][flickr]
|
57
|
+
|
58
|
+
[cann]: http://microbiologybytes.com/AJC/
|
59
|
+
[flickr]: http://www.flickr.com/photos/ajc1/4663140532/
|
data/features/cli/init.feature
CHANGED
@@ -6,6 +6,11 @@ Feature: Creating a new genomer project
|
|
6
6
|
Scenario: Creating a new project
|
7
7
|
When I run the genomer command with the arguments "init project"
|
8
8
|
Then the exit status should be 0
|
9
|
+
And the stdout should contain:
|
10
|
+
"""
|
11
|
+
Genomer project 'project' created.
|
12
|
+
|
13
|
+
"""
|
9
14
|
And a directory named "project" should exist
|
10
15
|
And a directory named "project/assembly" should exist
|
11
16
|
And a file named "project/assembly/scaffold.yml" should exist
|
@@ -67,3 +72,12 @@ Feature: Creating a new genomer project
|
|
67
72
|
"""
|
68
73
|
The scaffold contains 1 entries
|
69
74
|
"""
|
75
|
+
|
76
|
+
Scenario: Creating a new project where the directory already exists
|
77
|
+
Given a directory named "project"
|
78
|
+
When I run the genomer command with the arguments "init project"
|
79
|
+
Then the exit status should be 1
|
80
|
+
And the stderr should contain:
|
81
|
+
"""
|
82
|
+
Error. Directory 'project' already exists.
|
83
|
+
"""
|
data/features/cli/man.feature
CHANGED
@@ -69,3 +69,9 @@ Feature: Showing man pages for available commands
|
|
69
69
|
Error. No manual entry for command 'simple unknown'
|
70
70
|
|
71
71
|
"""
|
72
|
+
|
73
|
+
@disable-bundler
|
74
|
+
Scenario: Getting the man page for init
|
75
|
+
When I run the genomer command with the arguments "man init"
|
76
|
+
Then the exit status should be 0
|
77
|
+
And the output should contain "GENOMER-INIT(1)"
|
data/genomer.gemspec
CHANGED
@@ -16,12 +16,12 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rubyforge_project = "genomer"
|
17
17
|
|
18
18
|
s.add_dependency "rake", "~> 0.9.0"
|
19
|
-
s.add_dependency "bundler",
|
19
|
+
s.add_dependency "bundler", "> 1.1.0"
|
20
20
|
s.add_dependency "configliere", "~> 0.4.8"
|
21
21
|
s.add_dependency "scaffolder", "~> 0.4.0"
|
22
22
|
s.add_dependency "scaffolder-annotation-locator", ">= 0.1.4"
|
23
23
|
s.add_dependency "unindent", "~> 1.0.0"
|
24
|
-
s.add_dependency "md2man", "~> 1.
|
24
|
+
s.add_dependency "md2man", "~> 1.4.0"
|
25
25
|
|
26
26
|
# Specs
|
27
27
|
s.add_development_dependency "rspec", "~> 2.7.0"
|
data/lib/genomer/runtime.rb
CHANGED
@@ -53,12 +53,17 @@ class Genomer::Runtime
|
|
53
53
|
|
54
54
|
def man
|
55
55
|
if not arguments.empty?
|
56
|
-
|
57
|
-
|
56
|
+
location = if arguments.first == 'init'
|
57
|
+
File.expand_path File.dirname(__FILE__) + '/../../man/genomer-init.1.ronn'
|
58
|
+
else
|
59
|
+
man_file(arguments.clone)
|
60
|
+
end
|
61
|
+
|
62
|
+
unless File.exists?(location)
|
58
63
|
raise Genomer::Error, "No manual entry for command '#{arguments.join(' ')}'"
|
59
64
|
end
|
60
65
|
|
61
|
-
Kernel.exec "man #{groffed_man_file(
|
66
|
+
Kernel.exec "man #{groffed_man_file(location).path}"
|
62
67
|
else
|
63
68
|
msg =<<-EOF
|
64
69
|
genomer man COMMAND
|
@@ -94,7 +99,6 @@ class Genomer::Runtime
|
|
94
99
|
Dir.mkdir project_name
|
95
100
|
Dir.mkdir File.join(project_name,'assembly')
|
96
101
|
|
97
|
-
|
98
102
|
File.open(File.join(project_name,'Gemfile'),'w') do |file|
|
99
103
|
file.print Genomer::Files.gemfile
|
100
104
|
end
|
@@ -104,6 +108,9 @@ class Genomer::Runtime
|
|
104
108
|
file.print Genomer::Files.send(name.gsub('.','_').to_sym)
|
105
109
|
end
|
106
110
|
end
|
111
|
+
|
112
|
+
"Genomer project '#{project_name}' created.\n"
|
113
|
+
|
107
114
|
end
|
108
115
|
|
109
116
|
def run_plugin
|
data/lib/genomer/version.rb
CHANGED
data/man/genomer-init.1.ronn
CHANGED
@@ -11,7 +11,35 @@ genomer-init(1) -- create a new genomer project
|
|
11
11
|
## DESCRIPTION
|
12
12
|
|
13
13
|
Creates a new genomer project directory named **project-name**. Returns an
|
14
|
-
error if the project directory already exists.
|
14
|
+
error if the project directory already exists. This created directory has the
|
15
|
+
following structure. Each file is described below.
|
16
|
+
|
17
|
+
**project-name**
|
18
|
+
├── Gemfile
|
19
|
+
└── assembly
|
20
|
+
├── annotations.gff
|
21
|
+
├── scaffold.yml
|
22
|
+
└── sequence.fna
|
23
|
+
|
24
|
+
* **Gemfile**: Genomer plugins are specified here. After adding a plugin the
|
25
|
+
command `bundle install` should run to install the required plugins. Gems are
|
26
|
+
specified according to [the bundler documentation][bundler]. Each plugin
|
27
|
+
should begin with the suffix 'genomer-plugin.'
|
28
|
+
|
29
|
+
* **sequence.fna**: The file containing your contigs and scaffolds. These
|
30
|
+
should be stored in fasta format.
|
31
|
+
|
32
|
+
* **scaffold.yml**: The specifies the final layout of your genome. The scaffold
|
33
|
+
file is written the YAML format. Details and examples of the scaffold format
|
34
|
+
can be found on the [next.gs][] website.
|
35
|
+
|
36
|
+
* **annotations.gff**: Specific your genome annotations in [gff3 format][gff]
|
37
|
+
here. The **seqid** column should match the corresponding name of the fasta
|
38
|
+
sequence in the **sequence.fna** file.
|
39
|
+
|
40
|
+
[bundler]: http://gembundler.com/
|
41
|
+
[gff]: http://www.sequenceontology.org/gff3.shtml
|
42
|
+
[next.gs]: http://next.gs
|
15
43
|
|
16
44
|
## BUGS
|
17
45
|
|
@@ -49,7 +49,11 @@ describe Genomer::Runtime do
|
|
49
49
|
describe "with project name argument" do
|
50
50
|
|
51
51
|
before do
|
52
|
-
subject.execute!
|
52
|
+
@msg = subject.execute!
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should print message that project has been created" do
|
56
|
+
@msg.should == "Genomer project 'project_name' created.\n"
|
53
57
|
end
|
54
58
|
|
55
59
|
it "should create a directory from the named argument" do
|
@@ -133,12 +137,12 @@ describe Genomer::Runtime do
|
|
133
137
|
|
134
138
|
describe "help" do
|
135
139
|
|
136
|
-
let(:arguments){ %w|help| }
|
137
|
-
|
138
140
|
before do
|
139
141
|
mock(Genomer::Plugin).plugins{ gems }
|
140
142
|
end
|
141
143
|
|
144
|
+
let(:arguments){ %w|help| }
|
145
|
+
|
142
146
|
describe "with no available plugins" do
|
143
147
|
|
144
148
|
let(:gems) do
|
@@ -186,7 +190,7 @@ describe Genomer::Runtime do
|
|
186
190
|
stub(Genomer::Plugin).plugins{ gems }
|
187
191
|
end
|
188
192
|
|
189
|
-
describe "
|
193
|
+
describe "and no command specified" do
|
190
194
|
|
191
195
|
let(:arguments){ %w|man| }
|
192
196
|
|
@@ -200,7 +204,7 @@ describe Genomer::Runtime do
|
|
200
204
|
|
201
205
|
end
|
202
206
|
|
203
|
-
describe "
|
207
|
+
describe "and a command specified" do
|
204
208
|
|
205
209
|
let(:arguments){ %w|man simple| }
|
206
210
|
let(:man_file){ 'a' }
|
@@ -219,6 +223,25 @@ describe Genomer::Runtime do
|
|
219
223
|
|
220
224
|
end
|
221
225
|
|
226
|
+
describe "and the init command specified" do
|
227
|
+
|
228
|
+
let(:arguments){ %w|man init| }
|
229
|
+
let(:man_file){ File.expand_path File.dirname(__FILE__) + '/../../man/genomer-init.1.ronn' }
|
230
|
+
let(:groffed_man_file){ mock!.path{ 'b' } }
|
231
|
+
|
232
|
+
before do
|
233
|
+
dont_allow(subject).man_file
|
234
|
+
mock(subject).groffed_man_file(man_file){ groffed_man_file }
|
235
|
+
mock(File).exists?(man_file){true}
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should call man for the groffed path" do
|
239
|
+
mock(Kernel).exec("man b")
|
240
|
+
subject.execute!
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
222
245
|
describe "with a subcommand specified" do
|
223
246
|
|
224
247
|
let(:arguments){ %w|man simple subcommand| }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genomer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ! '>'
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 1.1.0
|
38
38
|
type: :runtime
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ! '>'
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 1.1.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
117
|
+
version: 1.4.0
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -122,7 +122,7 @@ dependencies:
|
|
122
122
|
requirements:
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.
|
125
|
+
version: 1.4.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rspec
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,10 +232,9 @@ files:
|
|
232
232
|
- .travis.yml
|
233
233
|
- Gemfile
|
234
234
|
- LICENSE.txt
|
235
|
-
- README.
|
235
|
+
- README.mkd
|
236
236
|
- Rakefile
|
237
237
|
- bin/genomer
|
238
|
-
- cucumber.yml
|
239
238
|
- features/api/annotation_ids.feature
|
240
239
|
- features/api/annotation_location.feature
|
241
240
|
- features/cli/error.feature
|
@@ -275,7 +274,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
275
274
|
version: '0'
|
276
275
|
segments:
|
277
276
|
- 0
|
278
|
-
hash: -
|
277
|
+
hash: -1310621877616390557
|
279
278
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
280
279
|
none: false
|
281
280
|
requirements:
|
data/README.rdoc
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
== Synopsis
|
2
|
-
|
3
|
-
Genomer is a plugin-based framework for genome finishing. Plugins are installed
|
4
|
-
using the RubyGems package management system. Genome files are managed as a
|
5
|
-
directory and updated at the command line using the `genomer` command.
|
6
|
-
|
7
|
-
== Installing
|
8
|
-
|
9
|
-
Ruby and RubyGems are required to use genomer and related plugins. Genomer is
|
10
|
-
installed on the command line using:
|
11
|
-
|
12
|
-
$ gem install genomer
|
13
|
-
|
14
|
-
== Contact
|
15
|
-
|
16
|
-
Genomer is developed by Michael Barton (www.michaelbarton.me.uk). The source
|
17
|
-
code is available on github. Bug reports and feature requests should also be
|
18
|
-
made there.
|
19
|
-
|
20
|
-
== Copyright
|
21
|
-
|
22
|
-
Genomer copyright (c) 2010 by Michael Barton. Scaffolder is licensed under the
|
23
|
-
MIT license. See LICENSE.txt for further details.
|
data/cucumber.yml
DELETED