toadie 0.0.1
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/.gitignore +18 -0
- data/.rvmrc +1 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +83 -0
- data/Rakefile +10 -0
- data/assets/bootstrap.min.css +558 -0
- data/assets/bootstrap.min.js +7 -0
- data/assets/jquery-1.8.2.min.js +2 -0
- data/assets/toadie.css +3 -0
- data/bin/toadie +28 -0
- data/lib/toadie/blame.rb +27 -0
- data/lib/toadie/configuration.rb +33 -0
- data/lib/toadie/report.rb +18 -0
- data/lib/toadie/todo.rb +37 -0
- data/lib/toadie/todolist.rb +17 -0
- data/lib/toadie/version.rb +3 -0
- data/lib/toadie.rb +19 -0
- data/spec/author_spec.rb +88 -0
- data/spec/blame_spec.rb +25 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/todo_spec.rb +39 -0
- data/spec/todolist_spec.rb +26 -0
- data/toadie.gemspec +24 -0
- data/views/report.slim +93 -0
- metadata +163 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
|
3
|
+
SimpleCov.adapters.define 'gem' do
|
4
|
+
add_filter '/spec/'
|
5
|
+
add_filter '/autotest/'
|
6
|
+
add_group 'Libraries', '/lib/'
|
7
|
+
end
|
8
|
+
SimpleCov.start 'gem'
|
9
|
+
|
10
|
+
require 'toadie'
|
11
|
+
Toadie.test = true
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.color_enabled = true
|
15
|
+
config.mock_with :rspec
|
16
|
+
|
17
|
+
config.after(:each) { Toadie::Author.destroy_all }
|
18
|
+
end
|
data/spec/todo_spec.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Toadie::Todo do
|
4
|
+
let(:todo) { Toadie::Todo.new('fakefile', 42, 'TODO text') }
|
5
|
+
|
6
|
+
describe "#initialize" do
|
7
|
+
it "assigns the given attributes" do
|
8
|
+
todo.file.should == 'fakefile'
|
9
|
+
todo.line.should == 42
|
10
|
+
todo.text.should == 'TODO text'
|
11
|
+
end
|
12
|
+
|
13
|
+
it "converts provided input into string without failing" do
|
14
|
+
todo = Toadie::Todo.new('fakefile', 42, self.class)
|
15
|
+
todo.text.should be_a String
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "finds reassignment if present" do
|
20
|
+
picard = Toadie::Author.create(emails: ['picard@uss-enterprise.com'], nicknames: ['captain', 'jean-luc'])
|
21
|
+
todo = Toadie::Todo.new('fakefile', 42, 'TODO jean-luc go to the doctor!')
|
22
|
+
crusher = Toadie::Author.find_by_email('crusher@uss-enterprise.com') # created by fake blame
|
23
|
+
|
24
|
+
todo.author.should == crusher
|
25
|
+
todo.responsible.should == picard
|
26
|
+
todo.should be_reassigned
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#to_s" do
|
30
|
+
it "returns the text is present" do
|
31
|
+
todo.to_s.should == todo.text
|
32
|
+
end
|
33
|
+
|
34
|
+
it "returns a no-text message otherwise" do
|
35
|
+
todo.text = ''
|
36
|
+
todo.to_s.should == '<no content>'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Toadie::Todolist do
|
4
|
+
let(:todolist) do
|
5
|
+
Toadie::Todolist.new([
|
6
|
+
['fakefile', 42, 'Refactor warp engine'],
|
7
|
+
['fakefile', 666, 'Clean up the bridge']
|
8
|
+
])
|
9
|
+
end
|
10
|
+
|
11
|
+
it "builds Todos for the input data" do
|
12
|
+
todolist.size.should == todolist.todos.size.should
|
13
|
+
todolist.size.should == 2
|
14
|
+
todolist.todos.first.should be_a Toadie::Todo
|
15
|
+
todolist.todos.last.should be_a Toadie::Todo
|
16
|
+
end
|
17
|
+
|
18
|
+
it "groups todos by responsible author" do
|
19
|
+
responsible = todolist.todos.first.responsible
|
20
|
+
grouped = todolist.grouped
|
21
|
+
|
22
|
+
grouped.should be_a Hash
|
23
|
+
grouped.should have_key responsible
|
24
|
+
grouped[responsible].should == todolist.todos
|
25
|
+
end
|
26
|
+
end
|
data/toadie.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/toadie/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Johannes Opper"]
|
6
|
+
gem.email = ["xijo@gmx.de"]
|
7
|
+
gem.description = "Analyze your source code, find open todos and output a nice html report."
|
8
|
+
gem.summary = "Analyze your source code, find open todos and output a nice html report."
|
9
|
+
gem.homepage = "http://github.com/xijo/toadie"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "toadie"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Toadie::VERSION
|
17
|
+
|
18
|
+
gem.add_runtime_dependency 'slop', '~> 3.3.3'
|
19
|
+
gem.add_runtime_dependency 'slim'
|
20
|
+
|
21
|
+
gem.add_development_dependency 'rake'
|
22
|
+
gem.add_development_dependency 'rspec'
|
23
|
+
gem.add_development_dependency 'simplecov'
|
24
|
+
end
|
data/views/report.slim
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title Toadie report
|
5
|
+
meta name='keywords' content='template language'
|
6
|
+
meta name='author' content='Toadwart'
|
7
|
+
link href=Toadie.assets_path('bootstrap.min.css') rel='stylesheet'
|
8
|
+
link href=Toadie.assets_path('toadie.css') rel='stylesheet'
|
9
|
+
script src=Toadie.assets_path('jquery-1.8.2.min.js')
|
10
|
+
script src=Toadie.assets_path('bootstrap.min.js')
|
11
|
+
|
12
|
+
body
|
13
|
+
.navbar.navbar-fixed-top
|
14
|
+
.navbar-inner
|
15
|
+
.container
|
16
|
+
a class="brand" href="#" Toadie
|
17
|
+
|
18
|
+
.container
|
19
|
+
h1 Report
|
20
|
+
p
|
21
|
+
' Toadie searched in
|
22
|
+
code= Toadie.root
|
23
|
+
' and found #{size}
|
24
|
+
span.label TODO
|
25
|
+
' tags, broken down by author email as follows:
|
26
|
+
|
27
|
+
.progress
|
28
|
+
- grouped.each_with_index do |group, index|
|
29
|
+
- author, todos = group
|
30
|
+
- percent = ((todos.size / size.to_f) * 100).round(2)
|
31
|
+
a.bar href="##{author.identifier}_tab" data-toggle='tab' style="width: #{percent}%;" rel='tooltip' title="#{author}, #{todos.size} hits, #{percent}%" data-placement='bottom' class=%w(bar-danger bar-success bar-info bar-warning)[index%5]
|
32
|
+
= author if percent > 5
|
33
|
+
|
34
|
+
.tabbable.tabs-left
|
35
|
+
ul.nav.nav-tabs
|
36
|
+
- grouped.each do |author, todos|
|
37
|
+
li
|
38
|
+
a href="##{author.identifier}_tab" data-toggle='tab'
|
39
|
+
span.badge=' todos.size
|
40
|
+
=' author
|
41
|
+
|
42
|
+
.tab-content
|
43
|
+
.tab-pane.active
|
44
|
+
| Erklaerung und so weiter ganz klasse und alles..
|
45
|
+
|
46
|
+
- grouped.each do |author, todos|
|
47
|
+
.tab-pane id="#{author.identifier}_tab"
|
48
|
+
.alert.alert-info
|
49
|
+
p.lead=' author.name
|
50
|
+
dl.dl-horizontal
|
51
|
+
- if !author.emails.empty?
|
52
|
+
dt Email adresses
|
53
|
+
dd= author.emails * ', '
|
54
|
+
- if !author.nicknames.empty?
|
55
|
+
dt Nicknames
|
56
|
+
dd= author.nicknames * ', '
|
57
|
+
|
58
|
+
- todos.each do |todo|
|
59
|
+
blockquote
|
60
|
+
p= todo
|
61
|
+
- if todo.reassigned?
|
62
|
+
span.muted
|
63
|
+
' assigned by
|
64
|
+
span.label.label-warning
|
65
|
+
=' todo.author
|
66
|
+
small= todo.file
|
67
|
+
|
68
|
+
|
69
|
+
- if false
|
70
|
+
- grouped.each do |author, todos|
|
71
|
+
h2= author
|
72
|
+
a href="##{author.gsub(/\W/, '')}" role="button" class="btn" data-toggle="modal" #{todos.size} Todos
|
73
|
+
|
74
|
+
.modal.hide tabindex='-1' role='dialog' id=author.gsub(/\W/, '')
|
75
|
+
.modal-header
|
76
|
+
button type='button' class='close' data-dismiss='modal' ×
|
77
|
+
h3= author
|
78
|
+
|
79
|
+
.modal-body
|
80
|
+
dl
|
81
|
+
- todos.each do |todo|
|
82
|
+
dt= todo.file
|
83
|
+
dd
|
84
|
+
= todo
|
85
|
+
- if todo.assigned_by
|
86
|
+
span.label.label-warning= todo.assigned_by
|
87
|
+
|
88
|
+
|
89
|
+
.modal-footer
|
90
|
+
button.btn data-dismiss='modal' Close
|
91
|
+
|
92
|
+
javascript:
|
93
|
+
$('[rel=tooltip]').tooltip()
|
metadata
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: toadie
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Johannes Opper
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: slop
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.3.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.3.3
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: slim
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: simplecov
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: Analyze your source code, find open todos and output a nice html report.
|
95
|
+
email:
|
96
|
+
- xijo@gmx.de
|
97
|
+
executables:
|
98
|
+
- toadie
|
99
|
+
extensions: []
|
100
|
+
extra_rdoc_files: []
|
101
|
+
files:
|
102
|
+
- .gitignore
|
103
|
+
- .rvmrc
|
104
|
+
- .travis.yml
|
105
|
+
- Gemfile
|
106
|
+
- LICENSE
|
107
|
+
- README.md
|
108
|
+
- Rakefile
|
109
|
+
- assets/bootstrap.min.css
|
110
|
+
- assets/bootstrap.min.js
|
111
|
+
- assets/jquery-1.8.2.min.js
|
112
|
+
- assets/toadie.css
|
113
|
+
- bin/toadie
|
114
|
+
- lib/toadie.rb
|
115
|
+
- lib/toadie/blame.rb
|
116
|
+
- lib/toadie/configuration.rb
|
117
|
+
- lib/toadie/report.rb
|
118
|
+
- lib/toadie/todo.rb
|
119
|
+
- lib/toadie/todolist.rb
|
120
|
+
- lib/toadie/version.rb
|
121
|
+
- spec/author_spec.rb
|
122
|
+
- spec/blame_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
- spec/todo_spec.rb
|
125
|
+
- spec/todolist_spec.rb
|
126
|
+
- toadie.gemspec
|
127
|
+
- views/report.slim
|
128
|
+
homepage: http://github.com/xijo/toadie
|
129
|
+
licenses: []
|
130
|
+
post_install_message:
|
131
|
+
rdoc_options: []
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
hash: 4139721596909819408
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
segments:
|
150
|
+
- 0
|
151
|
+
hash: 4139721596909819408
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 1.8.24
|
155
|
+
signing_key:
|
156
|
+
specification_version: 3
|
157
|
+
summary: Analyze your source code, find open todos and output a nice html report.
|
158
|
+
test_files:
|
159
|
+
- spec/author_spec.rb
|
160
|
+
- spec/blame_spec.rb
|
161
|
+
- spec/spec_helper.rb
|
162
|
+
- spec/todo_spec.rb
|
163
|
+
- spec/todolist_spec.rb
|