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
         |