augment 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +674 -0
- data/History.txt +5 -0
- data/Manifest.txt +27 -0
- data/README.txt +103 -0
- data/Rakefile +26 -0
- data/TODO +5 -0
- data/bin/augment +16 -0
- data/lib/augment.rb +41 -0
- data/lib/backends/backend.rb +14 -0
- data/lib/backends/coloring_backend.rb +25 -0
- data/lib/backends/test_unit_backend.rb +56 -0
- data/lib/flet.rb +26 -0
- data/lib/frontends/ansi_color_frontend.rb +38 -0
- data/lib/frontends/augment.el +148 -0
- data/lib/frontends/frontend.rb +8 -0
- data/lib/frontends/html_frontend.rb +28 -0
- data/lib/layer.rb +27 -0
- data/spec/ansi_frontend_spec.rb +26 -0
- data/spec/color_backend_spec.rb +32 -0
- data/spec/emacs-frontend-test.el +63 -0
- data/spec/fixtures/augment-output.txt +3 -0
- data/spec/fixtures/drinks/lib/drink.rb +15 -0
- data/spec/fixtures/drinks/test/test_drink.rb +19 -0
- data/spec/fixtures/layers.json +3 -0
- data/spec/html_frontend_spec.rb +24 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/test_backend_spec.rb +28 -0
- metadata +102 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
class String
|
2
|
+
def html_colorize(color)
|
3
|
+
"<span style='color: #{color};'>#{self}</span>"
|
4
|
+
end
|
5
|
+
|
6
|
+
def html_colorize_range(range, color)
|
7
|
+
"#{self[0 ... range.begin]}#{self[range].html_colorize(color)}#{self[range.end .. -1]}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class HtmlFrontend < Frontend
|
12
|
+
class << self
|
13
|
+
def run(file)
|
14
|
+
puts "<html>
|
15
|
+
<head><title>#{file} - Augment</title></head>
|
16
|
+
<body>
|
17
|
+
#{super(file).gsub("\n", "<br />").gsub(' ', ' ')}
|
18
|
+
</body>
|
19
|
+
</html>"
|
20
|
+
end
|
21
|
+
|
22
|
+
def process_layer(text, layer)
|
23
|
+
text.html_colorize_range(layer['range'], layer['color'])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Augment::FRONTENDS['html'] = HtmlFrontend
|
data/lib/layer.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
class Layer
|
4
|
+
def initialize(range, color, message, backend)
|
5
|
+
range = (range.split('...').first.to_i ... range.split('...').last.to_i) if range.is_a? String
|
6
|
+
@attrs = { 'range' => range, 'color' => color, 'message' => message,
|
7
|
+
'backend' => backend.to_s.downcase.gsub(/backend/, '')}
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.read(original_file)
|
11
|
+
JSON.parse(File.read(Augment.augment_path(original_file))).map{ |l| Layer.new(l['range'], l['color'], l['message'], l['backend']) }.sort_by{ |l| l['range'].begin }.reverse
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.line_to_char_range(file, line)
|
15
|
+
file = File.read(file).split("\n")
|
16
|
+
start = file[0 ... line - 1].join("\n").size + 2
|
17
|
+
(start ... start + file[line - 1].size)
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
@attrs.to_json
|
22
|
+
end
|
23
|
+
|
24
|
+
def [](attr)
|
25
|
+
@attrs[attr]
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Frontend, " when outputting ANSI color" do
|
6
|
+
before do
|
7
|
+
FileUtils.cd(PROJECT_ROOT)
|
8
|
+
FileUtils.rm_r('lib/.augment') rescue nil
|
9
|
+
FileUtils.rm_r('test/.augment') rescue nil
|
10
|
+
|
11
|
+
ColoringBackend.run('lib/drink.rb')
|
12
|
+
TestUnitBackend.run('test/test_drink.rb')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should color red as red" do
|
16
|
+
output = `../../../bin/augment ansi #{PROJECT_ROOT}/lib/drink.rb`
|
17
|
+
output.to_s.should include("#{'white'.colorize('white')}")
|
18
|
+
output.to_s.should include("#{'red'.colorize('red')}")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should color the test_drink" do
|
22
|
+
output = `../../../bin/augment ansi #{PROJECT_ROOT}/test/test_drink.rb`
|
23
|
+
output.to_s.should match(/\e\[#{String::COLOR_LOOKUP['red']}m *assert/)
|
24
|
+
output.to_s.should match(/\e\[#{String::COLOR_LOOKUP['yellow']}m *junk/)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Backend, " when augmenting by color" do
|
5
|
+
before do
|
6
|
+
FileUtils.cd(PROJECT_ROOT)
|
7
|
+
FileUtils.rm_r('lib/.augment') rescue nil
|
8
|
+
|
9
|
+
ColoringBackend.run('lib/drink.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should create .augment directory and files" do
|
13
|
+
File.should exist('lib/.augment')
|
14
|
+
File.should exist('lib/.augment/drink.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should color the colors and ranges" do
|
18
|
+
layers = Layer.read('lib/drink.rb')
|
19
|
+
layers.size.should == 4
|
20
|
+
|
21
|
+
layers[0]['color'].should == 'black'
|
22
|
+
layers[1]['color'].should == 'green'
|
23
|
+
layers[2]['color'].should == 'red'
|
24
|
+
layers[3]['color'].should == 'white'
|
25
|
+
|
26
|
+
layers[0]['range'].should == (531 ... 536)
|
27
|
+
layers[1]['range'].should == (456 ... 461)
|
28
|
+
layers[2]['range'].should == (371 ... 374)
|
29
|
+
layers[3]['range'].should == (221 ... 226)
|
30
|
+
layers.map{ |l| l['backend'] }.uniq.should == ['coloring']
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
;;; augment.el --- Display metadata about code
|
2
|
+
|
3
|
+
;; Copyright (C) 2007 Phil Hagelberg
|
4
|
+
|
5
|
+
;; Author: Phil Hagelberg <technomancy@gmail.com>
|
6
|
+
;; Created: 19 Oct 2007
|
7
|
+
;; Version: 0.1
|
8
|
+
;; Keywords: augment testing metadata
|
9
|
+
|
10
|
+
;; This file is part of the Augment system:
|
11
|
+
;; http://augment.rubyforge.org
|
12
|
+
|
13
|
+
(require 'elunit) ;; See http://www.emacswiki.org/cgi-bin/wiki/ElUnit
|
14
|
+
(require 'augment)
|
15
|
+
(require 'flymake)
|
16
|
+
|
17
|
+
;; in case it hasn't been properly installed
|
18
|
+
(add-to-list 'exec-path (expand-file-name "../bin"))
|
19
|
+
|
20
|
+
(elunit-clear-suites)
|
21
|
+
(defsuite augment-suite nil)
|
22
|
+
|
23
|
+
(deftest layer-from-plist augment-suite
|
24
|
+
"The layer struct should populated from a plist."
|
25
|
+
(let ((layer (augment-layer-from-plist (list :message "message" :color "color"
|
26
|
+
:range "221...226"))))
|
27
|
+
(assert-equal 221 (layer-begin layer))
|
28
|
+
(assert-equal 226 (layer-end layer))
|
29
|
+
(assert-equal "color" (layer-color layer))
|
30
|
+
(assert-equal "message" (layer-message layer))))
|
31
|
+
|
32
|
+
(deftest augment-file-path augment-suite
|
33
|
+
(assert-equal "/foo/bar/.augment/baz.rb" (augment-file-path "/foo/bar/baz.rb")))
|
34
|
+
|
35
|
+
(deftest render-layers augment-suite
|
36
|
+
"Rendering layers should create overlays in a buffer."
|
37
|
+
(with-test-buffer
|
38
|
+
;; Fill the buffer with some garbage
|
39
|
+
(dotimes (i 5) (insert "hello world.\n"))
|
40
|
+
(augment-render-layer (augment-layer-from-plist (list :message "hello"
|
41
|
+
:color "red"
|
42
|
+
:range "0...10")))
|
43
|
+
(assert-overlay 1)
|
44
|
+
(assert-overlay 9)))
|
45
|
+
|
46
|
+
(deftest layer-message augment-suite
|
47
|
+
"Finding message at point should get the message of the layer the point is in."
|
48
|
+
(let* ((json-object-type 'plist)
|
49
|
+
(json-array-type 'list)
|
50
|
+
(layers (mapcar #'augment-layer-from-plist
|
51
|
+
(json-read-file "fixtures/layers.json"))))
|
52
|
+
(assert-equal "cons" (augment-message-at-point 5))
|
53
|
+
(assert-equal "car" (augment-message-at-point 16))
|
54
|
+
(assert-equal "cdr" (augment-message-at-point 29))))
|
55
|
+
|
56
|
+
(deftest augment-filter augment-suite
|
57
|
+
(with-test-buffer
|
58
|
+
(make-local-variable 'layers)
|
59
|
+
(dotimes (i 3) (insert "hello world\n"))
|
60
|
+
(augment-filter nil (flymake-read-file-to-string "fixtures/augment-output.txt"))
|
61
|
+
(assert-overlay 2)))
|
62
|
+
|
63
|
+
(elunit "augment-suite")
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Drink
|
2
|
+
attr_accessor :name, :proof, :color
|
3
|
+
|
4
|
+
def initialize args
|
5
|
+
@name = args[:name]
|
6
|
+
@proof = args[:proof]
|
7
|
+
@color = args[:color]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Vodka = Drink.new :name => 'Vodka', :proof => 80, :color => 'white'
|
12
|
+
Kahlua = Drink.new :name => 'Kahlua', :proof => 40, :color => 'brown'
|
13
|
+
TomatoJuice = Drink.new :name => 'Tomato Juice', :proof => 0, :color => 'red'
|
14
|
+
MikesHardLime = Drink.new :name => 'Mike\'s Hard Lime', :proof => 8, :color => 'green'
|
15
|
+
Jager = Drink.new :name => 'Jagermeister', :proof => 40, :color => 'black'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
class SampleTest < Test::Unit::TestCase
|
4
|
+
def test_might_error
|
5
|
+
junk.foo
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_pass_longer
|
9
|
+
foo = 2 + 0
|
10
|
+
assert_equal 2, foo
|
11
|
+
assert_match /foo(.*)/, "foobarbunkle"
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_will_fail
|
15
|
+
a = "hello world"
|
16
|
+
a.split(' ')
|
17
|
+
assert_equal 88, a.length, "bad length"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Frontend, " when outputting HTML" do
|
6
|
+
before do
|
7
|
+
FileUtils.cd(PROJECT_ROOT)
|
8
|
+
FileUtils.rm_r('lib/.augment') rescue nil
|
9
|
+
ColoringBackend.run('lib/drink.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should create styled spans around colors" do
|
13
|
+
output = `../../../bin/augment html #{PROJECT_ROOT}/lib/drink.rb`
|
14
|
+
output.to_s.should include("<span style='color: white;'>white</span>")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Layer, " when converting line range to char range" do
|
19
|
+
it "should convert properly" do
|
20
|
+
Layer.line_to_char_range('test/test_drink.rb', 10).should == (153 ... 176)
|
21
|
+
Layer.line_to_char_range('test/test_drink.rb', 3).should == (22 ... 61)
|
22
|
+
Layer.line_to_char_range('test/test_drink.rb', 17).should == (289 ... 332)
|
23
|
+
end
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Backend, " when augmenting test results" do
|
6
|
+
before do
|
7
|
+
FileUtils.cd(PROJECT_ROOT)
|
8
|
+
FileUtils.rm_r('test/.augment') rescue nil
|
9
|
+
|
10
|
+
TestUnitBackend.run('test/test_drink.rb')
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should color failing/erroring tests" do
|
14
|
+
File.should exist(Augment.augment_path('test/test_drink.rb'))
|
15
|
+
layers = Layer.read('test/test_drink.rb')
|
16
|
+
layers.first['color'].should == 'red'
|
17
|
+
layers.last['color'].should == 'yellow'
|
18
|
+
|
19
|
+
layers.first['range'].should == (289 ... 332)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should include failure message" do
|
23
|
+
layers = Layer.read('test/test_drink.rb')
|
24
|
+
layers.first['message'].should =~ /bad length/
|
25
|
+
layers.last['message'].should =~ /undefined local variable or method/
|
26
|
+
layers.map{ |l| l['backend'] }.uniq.should == ['testunit']
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
4
|
+
name: augment
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-10-27 00:00:00 -07:00
|
8
|
+
summary: Augment is a system for collecting and displaying code metadata.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: technomancy@gmail.com
|
12
|
+
homepage: " by Phil Hagelberg (c) 2007"
|
13
|
+
rubyforge_project: augment
|
14
|
+
description: "== Usage The +augment+ executable gathers metadata in the form of layers for a given file via a backend. Some backends gather data for a file other than the original one passed in. (The test backend will store data for the test if you pass in the implementation.) Example: $ augment test lib/foo.rb # will store metadata for test/test_foo.rb"
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Phil Hagelberg
|
31
|
+
files:
|
32
|
+
- COPYING
|
33
|
+
- TODO
|
34
|
+
- History.txt
|
35
|
+
- Manifest.txt
|
36
|
+
- README.txt
|
37
|
+
- Rakefile
|
38
|
+
- bin/augment
|
39
|
+
- lib/augment.rb
|
40
|
+
- lib/layer.rb
|
41
|
+
- lib/flet.rb
|
42
|
+
- lib/backends/backend.rb
|
43
|
+
- lib/backends/coloring_backend.rb
|
44
|
+
- lib/backends/test_unit_backend.rb
|
45
|
+
- lib/frontends/frontend.rb
|
46
|
+
- lib/frontends/ansi_color_frontend.rb
|
47
|
+
- lib/frontends/html_frontend.rb
|
48
|
+
- lib/frontends/augment.el
|
49
|
+
- spec/ansi_frontend_spec.rb
|
50
|
+
- spec/color_backend_spec.rb
|
51
|
+
- spec/emacs-frontend-test.el
|
52
|
+
- spec/html_frontend_spec.rb
|
53
|
+
- spec/spec_helper.rb
|
54
|
+
- spec/test_backend_spec.rb
|
55
|
+
- spec/fixtures/augment-output.txt
|
56
|
+
- spec/fixtures/layers.json
|
57
|
+
- spec/fixtures/drinks/lib/drink.rb
|
58
|
+
- spec/fixtures/drinks/test/test_drink.rb
|
59
|
+
test_files: []
|
60
|
+
|
61
|
+
rdoc_options:
|
62
|
+
- --main
|
63
|
+
- README.txt
|
64
|
+
extra_rdoc_files:
|
65
|
+
- History.txt
|
66
|
+
- Manifest.txt
|
67
|
+
- README.txt
|
68
|
+
- spec/fixtures/augment-output.txt
|
69
|
+
executables:
|
70
|
+
- augment
|
71
|
+
extensions: []
|
72
|
+
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
dependencies:
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: miniunit
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 1.0.1
|
84
|
+
version:
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: json
|
87
|
+
version_requirement:
|
88
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 1.1.1
|
93
|
+
version:
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: hoe
|
96
|
+
version_requirement:
|
97
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.2.2
|
102
|
+
version:
|