docu 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
@@ -0,0 +1,5 @@
1
+ Example
2
+ =======
3
+
4
+ 1 + 2
5
+ #=> 3
@@ -0,0 +1,7 @@
1
+ Example
2
+ =======
3
+
4
+ :example:
5
+ 1 + 2
6
+ #=> 3
7
+ :end:
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in docu.gemspec
4
+ gemspec
@@ -0,0 +1,34 @@
1
+ docu
2
+ ====
3
+
4
+ Executes code examples you may have in your readme files!
5
+
6
+ Example README.md.docu
7
+ ----------------------
8
+
9
+ ```
10
+ Hello!
11
+ ======
12
+
13
+ :example:
14
+ 1 + 1000
15
+ #=> 1001
16
+ :end:
17
+ ```
18
+
19
+ This file will generate a README.md that looks like this:
20
+
21
+ ```
22
+ Hello!
23
+ ======
24
+
25
+ 1 + 1000
26
+ #=> 1001
27
+ ```
28
+
29
+ It will also fail if any assertions don't match up.
30
+
31
+ Usage
32
+ -----
33
+ gem install docu
34
+ docu README.md.docu
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+ Rake::TestTask.new(:spec) do |task|
5
+ task.test_files = FileList['spec/**/*_spec.rb']
6
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
3
+
4
+ require "docu"
5
+ Docu::ExecutesExamples.new(Kernel).execute(ARGV.first)
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "docu/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "docu"
7
+ s.version = Docu::VERSION
8
+ s.authors = ["Andrew Vos"]
9
+ s.email = ["andrew.vos@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{}
12
+ s.description = %q{}
13
+
14
+ s.rubyforge_project = "docu"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "minitest"
22
+ end
@@ -0,0 +1,3 @@
1
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__))))
2
+ require "docu/version"
3
+ require "docu/executes_examples"
@@ -0,0 +1,38 @@
1
+ module Docu
2
+ class ExecutesExamples
3
+ def initialize output
4
+ @output = output
5
+ end
6
+
7
+ def execute path
8
+ @output.puts "Executing Examples"
9
+ errors = []
10
+ successes = 0
11
+
12
+ contents = File.read(path)
13
+ contents.scan(/:example:((?:(?!^:end:).)*)/m).flatten.each do |example|
14
+ if example.include?("#=>")
15
+ expected = example.scan(/#=>\s*(.*)/).first.first
16
+ actual = eval(example).inspect
17
+ if actual == expected
18
+ successes += 1
19
+ else
20
+ errors << "Assertion does not match example. Expected \"#{actual}\" to equal \"#{expected}\""
21
+ end
22
+ end
23
+ end
24
+
25
+ @output.puts "#{errors.size} example(s) failed, #{successes} example(s) passed"
26
+
27
+ if errors.any?
28
+ errors.each do |error|
29
+ @output.puts error
30
+ end
31
+ else
32
+ File.open(path.chomp(File.extname(path)), "w") do |file|
33
+ file.write contents.gsub(":example:\n", "").gsub(":end:\n", "")
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Docu
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,85 @@
1
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "../../lib")))
2
+ require "docu"
3
+
4
+ require "minitest/pride"
5
+ require "minitest/autorun"
6
+ require "minitest/spec"
7
+
8
+ module Docu
9
+ class OutputSpy
10
+ attr_accessor :output
11
+ def puts(*a)
12
+ @output ||= []
13
+ a.each do |i|
14
+ @output << i
15
+ end
16
+ end
17
+ end
18
+
19
+ describe ExecutesExamples do
20
+ after do
21
+ File.delete("TEST_README.md") if File.exist?("TEST_README.md")
22
+ File.delete("TEST_README.md.docu") if File.exist?("TEST_README.md.docu")
23
+ end
24
+
25
+ it "writes out some text" do
26
+ output_spy = OutputSpy.new
27
+ File.open("TEST_README.md.docu", "w") do |file|
28
+ file.puts
29
+ end
30
+ Docu::ExecutesExamples.new(output_spy).execute("TEST_README.md.docu")
31
+ output_spy.output.must_include "Executing Examples"
32
+ end
33
+
34
+ describe "one failing example and one passing example" do
35
+ before do
36
+ File.open("TEST_README.md.docu", "w") do |file|
37
+ file.puts ":example:"
38
+ file.puts "1 + 1"
39
+ file.puts "#=> 23"
40
+ file.puts ":end:"
41
+
42
+ file.puts ":example:"
43
+ file.puts "1 + 1"
44
+ file.puts "#=> 2"
45
+ file.puts ":end:"
46
+ end
47
+ end
48
+
49
+ it "mentions failure and success" do
50
+ output_spy = OutputSpy.new
51
+ Docu::ExecutesExamples.new(output_spy).execute("TEST_README.md.docu")
52
+ output_spy.output.must_include "1 example(s) failed, 1 example(s) passed"
53
+ end
54
+
55
+ it "outputs errors" do
56
+ output_spy = OutputSpy.new
57
+ Docu::ExecutesExamples.new(output_spy).execute("TEST_README.md.docu")
58
+ output_spy.output.must_include "Assertion does not match example. Expected \"2\" to equal \"23\""
59
+ end
60
+
61
+ it "does not write the file" do
62
+ File.exist?("TEST_README.md").must_equal false
63
+ end
64
+ end
65
+
66
+ describe "one passing example" do
67
+ before do
68
+ File.open("TEST_README.md.docu", "w") do |file|
69
+ file.puts ":example:"
70
+ file.puts "1 + 1"
71
+ file.puts "#=> 2"
72
+ file.puts ":end:"
73
+ end
74
+ end
75
+
76
+ it "writes out the file removing all :example: and :end: markers" do
77
+ output_spy = OutputSpy.new
78
+ Docu::ExecutesExamples.new(output_spy).execute("TEST_README.md.docu")
79
+ File.exist?("TEST_README.md").must_equal true
80
+ contents = File.read("TEST_README.md").to_s
81
+ contents.must_equal "1 + 1\n#=> 2\n"
82
+ end
83
+ end
84
+ end
85
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Vos
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-23 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: minitest
16
+ requirement: &70328576592840 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70328576592840
25
+ description: ''
26
+ email:
27
+ - andrew.vos@gmail.com
28
+ executables:
29
+ - docu
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - .gitignore
34
+ - EXAMPLE_README.md
35
+ - EXAMPLE_README.md.docu
36
+ - Gemfile
37
+ - README.md
38
+ - Rakefile
39
+ - bin/docu
40
+ - docu.gemspec
41
+ - lib/docu.rb
42
+ - lib/docu/executes_examples.rb
43
+ - lib/docu/version.rb
44
+ - spec/docu/executes_examples_spec.rb
45
+ homepage: ''
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project: docu
65
+ rubygems_version: 1.8.10
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: ''
69
+ test_files:
70
+ - spec/docu/executes_examples_spec.rb