scaffolder-tools 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -1
- data/.travis.yml +4 -0
- data/Gemfile +1 -3
- data/README.rdoc +6 -4
- data/Rakefile +3 -2
- data/VERSION +1 -1
- data/features/error_checking.feature +137 -0
- data/features/sequence.feature +30 -73
- data/features/step_definitions/scaffolder-tools.rb +5 -1
- data/features/validate.feature +12 -78
- data/lib/scaffolder/tool/sequence.rb +10 -8
- data/lib/scaffolder/tool_index.rb +0 -7
- data/man/scaffolder-format.7.ronn +127 -0
- data/man/scaffolder-sequence.1.ronn +3 -5
- data/scaffolder-tools.gemspec +16 -30
- data/spec/scaffolder/binary_helper_spec.rb +1 -1
- data/spec/scaffolder/tool/help_spec.rb +64 -74
- data/spec/scaffolder/tool/sequence_spec.rb +55 -16
- data/spec/scaffolder/tool/validate_spec.rb +5 -5
- data/spec/scaffolder/tool_index_spec.rb +1 -1
- data/spec/scaffolder/tool_spec.rb +12 -21
- data/spec/spec_helper.rb +15 -9
- data/spec/support/exit_code_matcher.rb +2 -2
- metadata +120 -214
@@ -17,18 +17,20 @@ class Scaffolder::Tool::Sequence < Scaffolder::Tool
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def sequence(scaffold)
|
20
|
-
|
21
|
-
string << entry.sequence
|
22
|
-
end
|
20
|
+
scaffold.map{|entry| entry.sequence}.join
|
23
21
|
end
|
24
22
|
|
25
23
|
def header(sequence,opts={})
|
26
|
-
header =
|
27
|
-
header << opts[:definition]
|
28
|
-
|
29
|
-
|
24
|
+
header = Array.new
|
25
|
+
header << opts[:definition] if opts[:definition]
|
26
|
+
if opts[:'with-sequence-digest']
|
27
|
+
digest = Digest::SHA1.hexdigest(sequence)
|
28
|
+
header << "[sha1=#{digest}]"
|
30
29
|
end
|
31
|
-
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
header * ' '
|
32
34
|
end
|
33
35
|
|
34
36
|
end
|
@@ -19,13 +19,6 @@ module Scaffolder::ToolIndex
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
def determine_tool(settings)
|
23
|
-
type = settings.rest.shift
|
24
|
-
tool_class = self[type]
|
25
|
-
settings[:unknown_tool] = type unless (tool_exists?(type) or type.nil?)
|
26
|
-
[tool_class,settings]
|
27
|
-
end
|
28
|
-
|
29
22
|
private
|
30
23
|
|
31
24
|
def tool_classes
|
@@ -0,0 +1,127 @@
|
|
1
|
+
scaffolder-format(7) -- scaffolder authoring format using YAML
|
2
|
+
==============================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
The scaffolder software allows the construction of genome scaffolds using text
|
7
|
+
files written in the YAML format. An example scaffold file with three entries
|
8
|
+
is as follows:
|
9
|
+
|
10
|
+
---
|
11
|
+
-
|
12
|
+
sequence:
|
13
|
+
source: 'sequence1'
|
14
|
+
-
|
15
|
+
unresolved:
|
16
|
+
length: 20
|
17
|
+
-
|
18
|
+
sequence:
|
19
|
+
source: 'sequence2'
|
20
|
+
start: 3
|
21
|
+
stop: 100
|
22
|
+
reverse: true
|
23
|
+
inserts:
|
24
|
+
-
|
25
|
+
source: 'insert1'
|
26
|
+
open: 5
|
27
|
+
close: 20
|
28
|
+
|
29
|
+
## DESCRIPTION
|
30
|
+
|
31
|
+
Scaffold files are written using the YAML format. The scaffold file along with
|
32
|
+
the fasta file for the corresponding nucleotide sequences is used by the
|
33
|
+
scaffolder software to generate the scaffold super sequence.
|
34
|
+
|
35
|
+
The scaffold file should begin with three dashes `---`. This identifies the
|
36
|
+
start of a YAML formatted document. The scaffold file is composed of a list of
|
37
|
+
entries where the sequence for each entries is joined together to create the
|
38
|
+
scaffold sequence. Each scaffold entry should should have a '-' dash line to
|
39
|
+
indicate the start of the entry. The first line of the entry should define the
|
40
|
+
type of entry. The entry types allowed are outlined in the section below.
|
41
|
+
|
42
|
+
## SCAFFOLD ENTRY TYPES
|
43
|
+
|
44
|
+
### SEQUENCE
|
45
|
+
|
46
|
+
Sequence entries are the main component of the scaffold and insert the
|
47
|
+
nucleotide sequences from the fasta file into the scaffold. The `sequence` tag
|
48
|
+
is used to specify a sequence entry in the scaffold. The following tags can be
|
49
|
+
used to modify how the sequence is inserted into the scaffold:
|
50
|
+
|
51
|
+
* `source:` <sequence-name>:
|
52
|
+
**Required.** Specify the source nucleotide sequence to insert into the
|
53
|
+
scaffold. The value <sequence-name> should match the first space delimited
|
54
|
+
word from the fasta header of the required sequence.
|
55
|
+
|
56
|
+
* `reverse:` <true|false>:
|
57
|
+
**Optional.** Specify whether sequence should be reverse completed in the
|
58
|
+
scaffold. Default value is false.
|
59
|
+
|
60
|
+
* `start:` <trim-position>:
|
61
|
+
**Optional.** Specify if the sequence should be trimmed from the start to
|
62
|
+
the specified coordinate position. Default value is 1 where no sequence is
|
63
|
+
removed.
|
64
|
+
|
65
|
+
* `stop:` <trim-position>:
|
66
|
+
**Optional.** Specify if the sequence should be trimmed from the end of the
|
67
|
+
sequence. Sequence onward of specified trim position is removed. Default
|
68
|
+
value is the length of the fasta sequence where no sequence is removed.
|
69
|
+
|
70
|
+
* `inserts:` <insert-list>:
|
71
|
+
**Optional.** Specify if additional insert sequences should be added to
|
72
|
+
replace regions in this sequence. Should be specified as a list of YAML
|
73
|
+
formatted [INSERT][] entries. Default value is an empty list.
|
74
|
+
|
75
|
+
### UNRESOLVED
|
76
|
+
|
77
|
+
Unresolved regions add sequences of N nucleotide characters to the scaffold.
|
78
|
+
They define gaps in the scaffold and join separate sequence sequence regions
|
79
|
+
together. Unresolved regions are specified using the `unresolved` tag. A single
|
80
|
+
attribute tag is used to specify the length of an unresolved region.
|
81
|
+
|
82
|
+
* `length:` <length>:
|
83
|
+
**Required.** Specify the length of the unresolved region to add to the
|
84
|
+
scaffold.
|
85
|
+
|
86
|
+
### INSERTS
|
87
|
+
|
88
|
+
Insert sequences are used to replace regions in encoding [SEQUENCE][] entries.
|
89
|
+
Each insert should correspond to a sequence in the fasta file. Inserts share
|
90
|
+
the same attributes tags as [SEQUENCE][] entries but define two additional
|
91
|
+
`open` and `close` attribute tags. These specify where the insert should be
|
92
|
+
added to the encoding sequence. Multiple inserts can be added as a list to the
|
93
|
+
encoding sequence entry using the `inserts` attribute tag. The following
|
94
|
+
attribute tags can be to modify how an insert is added to the scaffold.
|
95
|
+
|
96
|
+
* `source:` <sequence-name>:
|
97
|
+
**Required.** Specify the insert sequence to use. The value <sequence-name>
|
98
|
+
should match the first space delimited word from the fasta header of the
|
99
|
+
required insert sequence.
|
100
|
+
|
101
|
+
* `reverse:` <true|false>:
|
102
|
+
**Optional.** Specify whether the insert should be reverse complemented.
|
103
|
+
Default value is false.
|
104
|
+
|
105
|
+
* `start:` <trim-position>:
|
106
|
+
**Optional.** Specify if the insert should be trimmed from the start to the
|
107
|
+
specified trim position. Default value is 1 where no sequence is removed.
|
108
|
+
|
109
|
+
* `stop:` <trim-position>:
|
110
|
+
**Optional.** Specify if the insert should be trimmed from the end of the
|
111
|
+
sequence. Sequence onward of trim position is removed. Default value is the
|
112
|
+
length of the fasta sequence where no sequence is removed.
|
113
|
+
|
114
|
+
* `open:` <insert-start-coordinate>:
|
115
|
+
**Optional if close coordinate is specified.** Specify the start coordinate
|
116
|
+
where the insert is added to the encoding sequence. Default value is the
|
117
|
+
close coordinate position minus the length of the insert sequence.
|
118
|
+
|
119
|
+
* `close:` <insert-close-coordinate>:
|
120
|
+
**Optional if open coordinate is specified.** Specify the end coordinate
|
121
|
+
position for adding the insert to the encoding sequence. Default value is
|
122
|
+
the open coordinate position plus the length of the insert sequence.
|
123
|
+
|
124
|
+
## COPYRIGHT
|
125
|
+
|
126
|
+
**Scaffolder** is Copyright (C) 2010 Michael Barton
|
127
|
+
<http://michaelbarton.me.uk>
|
@@ -23,9 +23,9 @@ each contig specified in the scaffold file.
|
|
23
23
|
Fasta definition line added at the top of the assembled sequence. The
|
24
24
|
default is to use the SHA1 hash of the sequence as the definition.
|
25
25
|
|
26
|
-
* `--
|
27
|
-
|
28
|
-
|
26
|
+
* `--with-sequence-digest`:
|
27
|
+
Add an SHA1 digest of the assembled sequence to the definition line. This
|
28
|
+
may be useful for comparing large scaffold assemblies for identity.
|
29
29
|
|
30
30
|
## EXAMPLES
|
31
31
|
|
@@ -36,8 +36,6 @@ Pipe the assembly into another file.
|
|
36
36
|
|
37
37
|
## BUGS
|
38
38
|
|
39
|
-
## BUGS
|
40
|
-
|
41
39
|
**Scaffolder-sequence** is written in Ruby and depends on the scaffolder,
|
42
40
|
BioRuby, configliere and ronn gems. See the Gemfile in the scaffolder-tools gem
|
43
41
|
install directory for version details.
|
data/scaffolder-tools.gemspec
CHANGED
@@ -5,15 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{scaffolder-tools}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date = %q{2011-
|
13
|
-
s.default_executable = %q{scaffolder}
|
11
|
+
s.authors = [%q{Michael Barton}]
|
12
|
+
s.date = %q{2011-08-13}
|
14
13
|
s.description = %q{Binary to use with scaffolder genome scaffolds}
|
15
|
-
s.email = %q{mail@
|
16
|
-
s.executables = [
|
14
|
+
s.email = %q{mail@next.gs}
|
15
|
+
s.executables = [%q{scaffolder}]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE.txt",
|
19
18
|
"README.rdoc"
|
@@ -21,12 +20,14 @@ Gem::Specification.new do |s|
|
|
21
20
|
s.files = [
|
22
21
|
".document",
|
23
22
|
".rspec",
|
23
|
+
".travis.yml",
|
24
24
|
"Gemfile",
|
25
25
|
"LICENSE.txt",
|
26
26
|
"README.rdoc",
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
29
|
"bin/scaffolder",
|
30
|
+
"features/error_checking.feature",
|
30
31
|
"features/help.feature",
|
31
32
|
"features/sequence.feature",
|
32
33
|
"features/step_definitions/scaffolder-tools.rb",
|
@@ -38,6 +39,7 @@ Gem::Specification.new do |s|
|
|
38
39
|
"lib/scaffolder/tool/sequence.rb",
|
39
40
|
"lib/scaffolder/tool/validate.rb",
|
40
41
|
"lib/scaffolder/tool_index.rb",
|
42
|
+
"man/scaffolder-format.7.ronn",
|
41
43
|
"man/scaffolder-help.1.ronn",
|
42
44
|
"man/scaffolder-sequence.1.ronn",
|
43
45
|
"man/scaffolder-validate.1.ronn",
|
@@ -51,24 +53,14 @@ Gem::Specification.new do |s|
|
|
51
53
|
"spec/spec_helper.rb",
|
52
54
|
"spec/support/exit_code_matcher.rb"
|
53
55
|
]
|
54
|
-
s.homepage = %q{http://
|
55
|
-
s.licenses = [
|
56
|
-
s.require_paths = [
|
57
|
-
s.rubygems_version = %q{1.
|
56
|
+
s.homepage = %q{http://next.gs}
|
57
|
+
s.licenses = [%q{MIT}]
|
58
|
+
s.require_paths = [%q{lib}]
|
59
|
+
s.rubygems_version = %q{1.8.6}
|
58
60
|
s.summary = %q{Tools for manipulating genome scaffolds}
|
59
|
-
s.test_files = [
|
60
|
-
"spec/scaffolder/binary_helper_spec.rb",
|
61
|
-
"spec/scaffolder/tool/help_spec.rb",
|
62
|
-
"spec/scaffolder/tool/sequence_spec.rb",
|
63
|
-
"spec/scaffolder/tool/validate_spec.rb",
|
64
|
-
"spec/scaffolder/tool_index_spec.rb",
|
65
|
-
"spec/scaffolder/tool_spec.rb",
|
66
|
-
"spec/spec_helper.rb",
|
67
|
-
"spec/support/exit_code_matcher.rb"
|
68
|
-
]
|
61
|
+
s.test_files = [%q{spec/scaffolder/binary_helper_spec.rb}, %q{spec/scaffolder/tool/help_spec.rb}, %q{spec/scaffolder/tool/sequence_spec.rb}, %q{spec/scaffolder/tool/validate_spec.rb}, %q{spec/scaffolder/tool_index_spec.rb}, %q{spec/scaffolder/tool_spec.rb}, %q{spec/spec_helper.rb}, %q{spec/support/exit_code_matcher.rb}]
|
69
62
|
|
70
63
|
if s.respond_to? :specification_version then
|
71
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
72
64
|
s.specification_version = 3
|
73
65
|
|
74
66
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
@@ -78,15 +70,13 @@ Gem::Specification.new do |s|
|
|
78
70
|
s.add_runtime_dependency(%q<ronn>, ["~> 0.7"])
|
79
71
|
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
80
72
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5"])
|
81
|
-
s.add_development_dependency(%q<gherkin>, ["~> 2.3.3"])
|
82
73
|
s.add_development_dependency(%q<rspec>, ["~> 2.4"])
|
83
74
|
s.add_development_dependency(%q<cucumber>, ["~> 0.10"])
|
84
75
|
s.add_development_dependency(%q<fakefs>, ["~> 0.2"])
|
85
76
|
s.add_development_dependency(%q<aruba>, ["~> 0.2"])
|
86
77
|
s.add_development_dependency(%q<mocha>, ["~> 0.9"])
|
87
|
-
s.add_development_dependency(%q<hashie>, ["~> 0.4"])
|
88
78
|
s.add_development_dependency(%q<yard>, ["~> 0.6"])
|
89
|
-
s.add_development_dependency(%q<scaffolder-test-helpers>, ["~> 0.
|
79
|
+
s.add_development_dependency(%q<scaffolder-test-helpers>, ["~> 0.4"])
|
90
80
|
else
|
91
81
|
s.add_dependency(%q<configliere>, ["~> 0.1"])
|
92
82
|
s.add_dependency(%q<bio>, ["~> 1.4"])
|
@@ -94,15 +84,13 @@ Gem::Specification.new do |s|
|
|
94
84
|
s.add_dependency(%q<ronn>, ["~> 0.7"])
|
95
85
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
96
86
|
s.add_dependency(%q<jeweler>, ["~> 1.5"])
|
97
|
-
s.add_dependency(%q<gherkin>, ["~> 2.3.3"])
|
98
87
|
s.add_dependency(%q<rspec>, ["~> 2.4"])
|
99
88
|
s.add_dependency(%q<cucumber>, ["~> 0.10"])
|
100
89
|
s.add_dependency(%q<fakefs>, ["~> 0.2"])
|
101
90
|
s.add_dependency(%q<aruba>, ["~> 0.2"])
|
102
91
|
s.add_dependency(%q<mocha>, ["~> 0.9"])
|
103
|
-
s.add_dependency(%q<hashie>, ["~> 0.4"])
|
104
92
|
s.add_dependency(%q<yard>, ["~> 0.6"])
|
105
|
-
s.add_dependency(%q<scaffolder-test-helpers>, ["~> 0.
|
93
|
+
s.add_dependency(%q<scaffolder-test-helpers>, ["~> 0.4"])
|
106
94
|
end
|
107
95
|
else
|
108
96
|
s.add_dependency(%q<configliere>, ["~> 0.1"])
|
@@ -111,15 +99,13 @@ Gem::Specification.new do |s|
|
|
111
99
|
s.add_dependency(%q<ronn>, ["~> 0.7"])
|
112
100
|
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
113
101
|
s.add_dependency(%q<jeweler>, ["~> 1.5"])
|
114
|
-
s.add_dependency(%q<gherkin>, ["~> 2.3.3"])
|
115
102
|
s.add_dependency(%q<rspec>, ["~> 2.4"])
|
116
103
|
s.add_dependency(%q<cucumber>, ["~> 0.10"])
|
117
104
|
s.add_dependency(%q<fakefs>, ["~> 0.2"])
|
118
105
|
s.add_dependency(%q<aruba>, ["~> 0.2"])
|
119
106
|
s.add_dependency(%q<mocha>, ["~> 0.9"])
|
120
|
-
s.add_dependency(%q<hashie>, ["~> 0.4"])
|
121
107
|
s.add_dependency(%q<yard>, ["~> 0.6"])
|
122
|
-
s.add_dependency(%q<scaffolder-test-helpers>, ["~> 0.
|
108
|
+
s.add_dependency(%q<scaffolder-test-helpers>, ["~> 0.4"])
|
123
109
|
end
|
124
110
|
end
|
125
111
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Scaffolder::Tool::Help do
|
4
4
|
|
@@ -18,108 +18,98 @@ describe Scaffolder::Tool::Help do
|
|
18
18
|
Commands:
|
19
19
|
MSG
|
20
20
|
|
21
|
-
|
22
|
-
@settings = Hash.new
|
23
|
-
@settings.stubs(:rest).returns([])
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "execution with no command and the version argument" do
|
21
|
+
describe "execution with" do
|
27
22
|
|
28
|
-
|
29
|
-
@settings
|
30
|
-
@settings[
|
31
|
-
described_class.new(@settings)
|
23
|
+
before(:each) do
|
24
|
+
@settings = Hash.new
|
25
|
+
@settings.stubs(:rest).returns([])
|
32
26
|
end
|
33
27
|
|
34
|
-
|
35
|
-
lambda{ subject.execute }.should_not raise_error
|
36
|
-
end
|
28
|
+
describe "unknown command" do
|
37
29
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
30
|
+
subject do
|
31
|
+
@settings[:unknown_tool] = 'anything'
|
32
|
+
described_class.new(@settings)
|
33
|
+
end
|
44
34
|
|
45
|
-
|
35
|
+
it "should raise an error" do
|
36
|
+
lambda{ subject.execute }.should(raise_error(ArgumentError,
|
37
|
+
"Unknown command 'anything'.\nSee 'scaffolder help'."))
|
38
|
+
end
|
46
39
|
|
47
|
-
subject do
|
48
|
-
@settings[:empty_args] = true
|
49
|
-
described_class.new(@settings)
|
50
40
|
end
|
51
41
|
|
52
|
-
|
53
|
-
lambda{ subject.execute }.should_not raise_error
|
54
|
-
end
|
42
|
+
describe "no arguments" do
|
55
43
|
|
56
|
-
|
57
|
-
|
58
|
-
|
44
|
+
subject do
|
45
|
+
@settings[:empty_args] = true
|
46
|
+
described_class.new(@settings)
|
47
|
+
end
|
59
48
|
|
60
|
-
|
61
|
-
|
62
|
-
subject.execute.should include(cls.description)
|
49
|
+
it "should not raise an error" do
|
50
|
+
lambda{ subject.execute }.should_not raise_error
|
63
51
|
end
|
64
|
-
end
|
65
52
|
|
66
|
-
|
53
|
+
it "should contain the usage information" do
|
54
|
+
subject.execute.should include(USAGE)
|
55
|
+
end
|
67
56
|
|
68
|
-
|
57
|
+
it "should contain each tool information" do
|
58
|
+
tool_subclasses.each do |cls|
|
59
|
+
subject.execute.should include(cls.description)
|
60
|
+
end
|
61
|
+
end
|
69
62
|
|
70
|
-
subject do
|
71
|
-
@settings[:unknown_tool] = 'unknown_command'
|
72
|
-
described_class.new(@settings)
|
73
63
|
end
|
74
64
|
|
75
|
-
|
76
|
-
lambda{ subject.execute }.should(raise_error(ArgumentError,
|
77
|
-
"Unknown command 'unknown_command'.\nSee 'scaffolder help'."))
|
78
|
-
end
|
65
|
+
describe "version argument" do
|
79
66
|
|
80
|
-
|
67
|
+
subject do
|
68
|
+
@settings[:version] = true
|
69
|
+
@settings[:empty_args] = true
|
70
|
+
described_class.new(@settings)
|
71
|
+
end
|
81
72
|
|
82
|
-
|
73
|
+
it "should not raise an error" do
|
74
|
+
lambda{ subject.execute }.should_not raise_error
|
75
|
+
end
|
83
76
|
|
84
|
-
|
85
|
-
|
86
|
-
|
77
|
+
it "should return the version number" do
|
78
|
+
version = File.read('VERSION').strip
|
79
|
+
subject.execute.should == "scaffolder tool version " + version
|
80
|
+
end
|
87
81
|
|
88
|
-
@man_dir = File.join(%W|#{File.dirname(__FILE__)} .. .. .. man| )
|
89
|
-
@fake_man = File.join(@man_dir,'scaffolder-fake.1.ronn')
|
90
82
|
end
|
91
83
|
|
92
|
-
|
93
|
-
described_class.superclass.send(:remove_const,'Fake')
|
94
|
-
end
|
84
|
+
describe "existing man page" do
|
95
85
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
86
|
+
before(:each) do
|
87
|
+
@tool = Class.new(Scaffolder::Tool)
|
88
|
+
described_class.superclass.const_set('Fake',@tool)
|
100
89
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
end
|
90
|
+
@man_dir = File.join(%W|#{File.dirname(__FILE__)} .. .. .. man| )
|
91
|
+
@fake_man = File.join(@man_dir,'scaffolder-fake.1.ronn')
|
92
|
+
end
|
105
93
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
end
|
94
|
+
after(:each) do
|
95
|
+
described_class.superclass.send(:remove_const,'Fake')
|
96
|
+
end
|
110
97
|
|
111
|
-
|
98
|
+
subject do
|
99
|
+
@settings.stubs(:rest).returns(['fake'])
|
100
|
+
described_class.new(@settings)
|
101
|
+
end
|
112
102
|
|
113
|
-
|
103
|
+
it "should not raise an error" do
|
104
|
+
Kernel.stubs(:system).with("ronn -m #{File.expand_path(@fake_man)}")
|
105
|
+
lambda{ subject.execute }.should_not raise_error
|
106
|
+
end
|
114
107
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
108
|
+
it "should call ronn on the command line with the man file location" do
|
109
|
+
Kernel.expects(:system).with("ronn -m #{File.expand_path(@fake_man)}")
|
110
|
+
subject.execute
|
111
|
+
end
|
119
112
|
|
120
|
-
it "should raise an error" do
|
121
|
-
lambda{ subject.execute }.should(raise_error(ArgumentError,
|
122
|
-
"Unknown command 'fake'.\nSee 'scaffolder help'."))
|
123
113
|
end
|
124
114
|
|
125
115
|
end
|