specdown 0.1.2 → 0.1.3
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/CHANGELOG.markdown +8 -0
- data/README.markdown +23 -16
- data/bin/specdown +0 -4
- data/features/specdown_examples/scoped_hooks/specdown/hooks.rb +1 -0
- data/lib/specdown/command/option_parser.rb +26 -0
- data/lib/specdown/command.rb +14 -6
- data/lib/specdown/config.rb +33 -0
- data/lib/specdown.rb +2 -0
- metadata +4 -3
data/CHANGELOG.markdown
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## CHANGELOG
|
2
2
|
|
3
|
+
## 0.1.3
|
4
|
+
|
5
|
+
The `specdown` command now accepts two options: -h and -r.
|
6
|
+
|
7
|
+
Usage: specdown [file1 [file2 [file3....]]]
|
8
|
+
-r, --root SPECDOWN_DIR defaults to ./specdown
|
9
|
+
-h, --help Display this screen
|
10
|
+
|
3
11
|
## 0.1.2
|
4
12
|
|
5
13
|
New feature added: test hooks. (see the README)
|
data/README.markdown
CHANGED
@@ -168,23 +168,29 @@ You can create test hooks that run before, after, and around tests. You can crea
|
|
168
168
|
|
169
169
|
To create a global before hook, use the `Specdown.before` method:
|
170
170
|
|
171
|
-
|
172
|
-
|
173
|
-
|
171
|
+
```ruby
|
172
|
+
Specdown.before do
|
173
|
+
puts "I run before every single test!"
|
174
|
+
end
|
175
|
+
```
|
174
176
|
|
175
177
|
That before hook will - you guessed it - RUN BEFORE EVERY SINGLE TEST.
|
176
178
|
|
177
179
|
Similary, you can run some code after every single test via the `Specdown.after` method:
|
178
180
|
|
179
|
-
|
180
|
-
|
181
|
-
|
181
|
+
```ruby
|
182
|
+
Specdown.after do
|
183
|
+
puts "I run after every single test!"
|
184
|
+
end
|
185
|
+
```
|
182
186
|
|
183
187
|
Whenever you need some code to run before _and_ after every single test, use the `Specdown.around` method:
|
184
188
|
|
185
|
-
|
186
|
-
|
187
|
-
|
189
|
+
```ruby
|
190
|
+
Specdown.around do
|
191
|
+
puts "I run before _AND_ after every single test!"
|
192
|
+
end
|
193
|
+
```
|
188
194
|
|
189
195
|
### Scoping your hooks to specific markdown files
|
190
196
|
|
@@ -192,18 +198,19 @@ You might, at times, want hooks to run only for certain files.
|
|
192
198
|
|
193
199
|
You can pass filenames (or regular expressions) to the `Specdown.before`, `Specdown.after`, and `Specdown.around` methods. The hooks will then execute whenever you execute any markdown file with matching filenames.
|
194
200
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
+
```ruby
|
202
|
+
Specdown.before "somefile.markdown", /^.*\.database.markdown$/ do
|
203
|
+
puts "This runs before every test within 'somefile.markdown', and
|
204
|
+
before every test in any markdown file whose filename ends
|
205
|
+
with '.database.markdown'"
|
206
|
+
end
|
207
|
+
```
|
201
208
|
|
202
209
|
## TODO
|
203
210
|
|
204
211
|
This library is the result of just a couple of days worth of work. It's a basic minimum viable product, but there are tons of features I want to implement. Here's what's on my immediate horizon:
|
205
212
|
|
206
|
-
*
|
213
|
+
* Choose which files to run
|
207
214
|
* color code the terminal output
|
208
215
|
* offer the option of outputing the actual markdown while it executes, instead of "..F....FF......"
|
209
216
|
* Better stack traces / reporting
|
data/bin/specdown
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Specdown
|
2
|
+
module OptionParser
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def parse!
|
6
|
+
parser.parse!
|
7
|
+
Specdown::Config.tests = ARGV
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def parser
|
12
|
+
::OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: specdown [file1 [file2 [file3....]]]"
|
14
|
+
|
15
|
+
opts.on '-r', '--root SPECDOWN_DIR', 'defaults to ./specdown' do |root|
|
16
|
+
Specdown::Config.root = root
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on '-h', '--help', 'Display this screen' do
|
20
|
+
puts opts
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/specdown/command.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
module Specdown
|
2
2
|
class Command
|
3
|
-
def initialize
|
4
|
-
@markdowns = Dir["specdown/**/*.markdown"]
|
5
|
-
end
|
6
|
-
|
7
3
|
def execute
|
4
|
+
parse_options
|
5
|
+
load_test_environment
|
8
6
|
run
|
9
|
-
Specdown::EventServer.event :command_complete, @results
|
10
7
|
end
|
11
8
|
|
12
9
|
private
|
10
|
+
def parse_options
|
11
|
+
Specdown::OptionParser.parse!
|
12
|
+
end
|
13
|
+
|
14
|
+
def load_test_environment
|
15
|
+
Specdown::Config.test_environment_files.each do |file|
|
16
|
+
Kernel.load file
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
13
20
|
def run
|
14
|
-
@results =
|
21
|
+
@results = Specdown::Config.tests.map {|markdown| Runner.new(markdown).run.stats}
|
22
|
+
Specdown::EventServer.event :command_complete, @results
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
data/lib/specdown/config.rb
CHANGED
@@ -3,6 +3,39 @@ module Specdown
|
|
3
3
|
extend self
|
4
4
|
|
5
5
|
attr_accessor :expectations
|
6
|
+
attr_accessor :tests
|
7
|
+
attr_accessor :root
|
8
|
+
|
9
|
+
def test_environment_files
|
10
|
+
unless @test_environment_files
|
11
|
+
@test_environment_files = Dir["#{root}/**/*.rb"]
|
12
|
+
unless root[0..0] == "/"
|
13
|
+
@test_environment_files.map! {|file| File.join Dir.pwd, file}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
@test_environment_files
|
18
|
+
end
|
19
|
+
|
20
|
+
def root
|
21
|
+
@root ||= "specdown"
|
22
|
+
end
|
23
|
+
|
24
|
+
def root=(new_root)
|
25
|
+
if new_root[-1..-1] == "/"
|
26
|
+
@root = new_root[0...-1]
|
27
|
+
else
|
28
|
+
@root = new_root
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def tests
|
33
|
+
@tests ||= Dir["#{root}/**/*.markdown"] + Dir["#{root}/**/*.md"]
|
34
|
+
end
|
35
|
+
|
36
|
+
def tests=(test_files)
|
37
|
+
@tests = test_files unless test_files.empty?
|
38
|
+
end
|
6
39
|
|
7
40
|
def reset!
|
8
41
|
self.expectations = nil
|
data/lib/specdown.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'kramdown'
|
2
|
+
require 'optparse'
|
2
3
|
require 'specdown/parser'
|
3
4
|
require 'specdown/node'
|
4
5
|
require 'specdown/tree'
|
@@ -19,3 +20,4 @@ require 'specdown/specdown'
|
|
19
20
|
require 'specdown/sandbox_factory'
|
20
21
|
require 'specdown/hooks'
|
21
22
|
require 'specdown/hook'
|
23
|
+
require 'specdown/command/option_parser'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: specdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Parker
|
@@ -71,6 +71,7 @@ extra_rdoc_files:
|
|
71
71
|
- CHANGELOG.markdown
|
72
72
|
- README.markdown
|
73
73
|
files:
|
74
|
+
- lib/specdown/command/option_parser.rb
|
74
75
|
- lib/specdown/command.rb
|
75
76
|
- lib/specdown/config.rb
|
76
77
|
- lib/specdown/event_handlers/after_test.rb
|