metior 0.1.4 → 0.2.0
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/.travis.yml +2 -0
- data/.yardopts +1 -0
- data/Changelog.md +23 -0
- data/Gemfile +1 -17
- data/Gemfile.lock +28 -21
- data/README.md +66 -20
- data/lib/metior.rb +30 -14
- data/lib/metior/actor.rb +28 -22
- data/lib/metior/auto_include_vcs.rb +43 -0
- data/lib/metior/collections/actor_collection.rb +97 -0
- data/lib/metior/collections/collection.rb +84 -0
- data/lib/metior/collections/commit_collection.rb +309 -0
- data/lib/metior/commit.rb +128 -48
- data/lib/metior/errors.rb +2 -2
- data/lib/metior/git/commit.rb +32 -31
- data/lib/metior/git/repository.rb +71 -6
- data/lib/metior/github/commit.rb +5 -16
- data/lib/metior/github/repository.rb +68 -40
- data/lib/metior/report.rb +139 -0
- data/lib/metior/report/view.rb +120 -0
- data/lib/metior/report/view_helper.rb +47 -0
- data/lib/metior/repository.rb +225 -56
- data/lib/metior/vcs.rb +12 -3
- data/lib/metior/version.rb +1 -1
- data/metior.gemspec +28 -26
- data/reports/default.rb +17 -0
- data/reports/default/images/favicon.png +0 -0
- data/reports/default/stylesheets/default.css +128 -0
- data/reports/default/templates/actor/minimal.mustache +1 -0
- data/reports/default/templates/commit/minimal.mustache +1 -0
- data/reports/default/templates/index.mustache +27 -0
- data/reports/default/templates/most_significant_authors.mustache +11 -0
- data/reports/default/templates/most_significant_commits.mustache +13 -0
- data/reports/default/templates/repository_information.mustache +17 -0
- data/reports/default/templates/top_committers.mustache +11 -0
- data/reports/default/views/index.rb +33 -0
- data/reports/default/views/most_significant_authors.rb +19 -0
- data/reports/default/views/most_significant_commits.rb +19 -0
- data/reports/default/views/repository_information.rb +47 -0
- data/reports/default/views/top_committers.rb +21 -0
- data/test/fixtures.rb +54 -36
- data/test/helper.rb +10 -3
- data/test/{test_class_loading.rb → test_1st_class_loading.rb} +1 -1
- data/test/test_actor_colletion.rb +78 -0
- data/test/test_collection.rb +61 -0
- data/test/test_commit_collection.rb +139 -0
- data/test/test_git.rb +58 -5
- data/test/test_github.rb +52 -9
- data/test/test_metior.rb +22 -1
- data/test/test_report.rb +49 -0
- data/test/test_repository.rb +46 -9
- data/test/test_vcs.rb +36 -13
- metadata +105 -43
data/test/test_git.rb
CHANGED
@@ -25,8 +25,7 @@ class TestGit < Test::Unit::TestCase
|
|
25
25
|
setup do
|
26
26
|
@repo = Metior::Git::Repository.new File.dirname(File.dirname(__FILE__))
|
27
27
|
@@grit_commits ||= Fixtures.commits_as_grit_commits(''..'master')
|
28
|
-
|
29
|
-
@commits_stub.returns @@grit_commits
|
28
|
+
Grit::Repo.any_instance.stubs(:commits).returns @@grit_commits.values
|
30
29
|
end
|
31
30
|
|
32
31
|
should 'be able to load all commits from the repository\'s default branch' do
|
@@ -39,9 +38,11 @@ class TestGit < Test::Unit::TestCase
|
|
39
38
|
end
|
40
39
|
|
41
40
|
should 'be able to load a range of commits from the repository' do
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
api_response = Fixtures.commits_as_grit_commits('ef2870b'..'4c592b4').values
|
42
|
+
Grit::Repo.any_instance.stubs(:commits).once.returns(api_response)
|
43
|
+
|
44
|
+
@repo.expects(:id_for_ref).with('ef2870b').once.returns('ef2870b')
|
45
|
+
@repo.expects(:id_for_ref).with('4c592b4').once.returns('4c592b4')
|
45
46
|
|
46
47
|
commits = @repo.commits 'ef2870b'..'4c592b4'
|
47
48
|
assert_equal 6, commits.size
|
@@ -101,6 +102,9 @@ class TestGit < Test::Unit::TestCase
|
|
101
102
|
end
|
102
103
|
|
103
104
|
should 'provide easy access to simple repository statistics' do
|
105
|
+
Metior::Git::Repository.any_instance.expects(:id_for_ref).twice.
|
106
|
+
with('master').returns('1b2fe77')
|
107
|
+
|
104
108
|
stats = Metior.simple_stats :git, File.dirname(File.dirname(__FILE__))
|
105
109
|
|
106
110
|
assert_equal 157, stats[:active_days].size
|
@@ -111,6 +115,55 @@ class TestGit < Test::Unit::TestCase
|
|
111
115
|
assert_equal 5, stats[:top_contributors].size
|
112
116
|
end
|
113
117
|
|
118
|
+
should 'be able to load all the branches of a repository' do
|
119
|
+
branches = {
|
120
|
+
'master' => '1b2fe77',
|
121
|
+
'branch1' => '1234567',
|
122
|
+
'branch2' => '0abcdef'
|
123
|
+
}
|
124
|
+
grit_branches = branches.map do |branch|
|
125
|
+
commit = Grit::Commit.new(nil, branch.last, [], nil, nil, nil, nil, nil, [])
|
126
|
+
Grit::Head.new branch.first, commit
|
127
|
+
end
|
128
|
+
Grit::Repo.any_instance.expects(:branches).once.returns(grit_branches)
|
129
|
+
|
130
|
+
assert_equal %w{branch1 branch2 master}, @repo.branches
|
131
|
+
assert_equal branches, @repo.instance_variable_get(:@refs)
|
132
|
+
end
|
133
|
+
|
134
|
+
should 'be able to load all tags of a repository' do
|
135
|
+
tags = {
|
136
|
+
'v2.3.1' => '034fc81',
|
137
|
+
'v2.4.0' => 'a3c5139',
|
138
|
+
'v2.4.1' => '91940c2'
|
139
|
+
}
|
140
|
+
grit_tags = tags.map do |tag|
|
141
|
+
commit = Grit::Commit.new(nil, tag.last, [], nil, nil, nil, nil, nil, [])
|
142
|
+
Grit::Tag.new tag.first, commit
|
143
|
+
end
|
144
|
+
Grit::Repo.any_instance.expects(:tags).once.returns(grit_tags)
|
145
|
+
|
146
|
+
assert_equal %w{v2.3.1 v2.4.0 v2.4.1}, @repo.tags
|
147
|
+
assert_equal tags, @repo.instance_variable_get(:@refs)
|
148
|
+
end
|
149
|
+
|
150
|
+
should 'be able to load the name and description of the project' do
|
151
|
+
description = "grit\n\nGrit gives you object oriented read/write access to Git repositories via Ruby."
|
152
|
+
Grit::Repo.any_instance.expects(:description).once.returns description
|
153
|
+
@repo.expects(:load_description).never
|
154
|
+
|
155
|
+
assert_equal 'grit', @repo.name
|
156
|
+
assert_equal 'Grit gives you object oriented read/write access to Git repositories via Ruby.', @repo.description
|
157
|
+
end
|
158
|
+
|
159
|
+
should 'ignore the default Git description file' do
|
160
|
+
description = "Unnamed repository; edit this file 'description' to name the repository."
|
161
|
+
Grit::Repo.any_instance.expects(:description).once.returns description
|
162
|
+
|
163
|
+
assert_equal '', @repo.name
|
164
|
+
assert_equal '', @repo.description
|
165
|
+
end
|
166
|
+
|
114
167
|
end
|
115
168
|
|
116
169
|
end
|
data/test/test_github.rb
CHANGED
@@ -25,13 +25,18 @@ class TestGitHub < Test::Unit::TestCase
|
|
25
25
|
setup do
|
26
26
|
@repo = Metior::GitHub::Repository.new 'mojombo', 'grit'
|
27
27
|
|
28
|
-
|
28
|
+
@@github_commits = Fixtures.commits_as_rashies(''..'master')
|
29
|
+
api_response = @@github_commits.values
|
29
30
|
@commits_stub = Octokit.stubs :commits
|
30
31
|
14.times { @commits_stub.returns api_response.shift(35) }
|
31
32
|
@commits_stub.then.raises Octokit::NotFound.new(nil)
|
33
|
+
|
34
|
+
@repo.stubs(:id_for_ref).with('master').returns('1b2fe77')
|
32
35
|
end
|
33
36
|
|
34
37
|
should 'be able to load all commits from the repository\'s default branch' do
|
38
|
+
@repo.expects(:id_for_ref).with('master').once.returns('1b2fe77')
|
39
|
+
|
35
40
|
commits = @repo.commits
|
36
41
|
assert_equal 460, commits.size
|
37
42
|
assert commits.all? { |commit| commit.is_a? Metior::GitHub::Commit }
|
@@ -41,13 +46,12 @@ class TestGitHub < Test::Unit::TestCase
|
|
41
46
|
end
|
42
47
|
|
43
48
|
should 'be able to load a range of commits from the repository' do
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@commits_stub.then.raises Octokit::NotFound.new(nil)
|
49
|
+
api_response = Fixtures.commits_as_rashies('ef2870b'..'4c592b4').values
|
50
|
+
Octokit.stubs(:commits).returns(api_response).
|
51
|
+
raises(Octokit::NotFound.new nil)
|
52
|
+
|
53
|
+
@repo.expects(:id_for_ref).with('ef2870b').once.returns('ef2870b')
|
54
|
+
@repo.expects(:id_for_ref).with('4c592b4').once.returns('4c592b4')
|
51
55
|
|
52
56
|
commits = @repo.commits 'ef2870b'..'4c592b4'
|
53
57
|
assert_equal 6, commits.size
|
@@ -125,7 +129,10 @@ class TestGitHub < Test::Unit::TestCase
|
|
125
129
|
end
|
126
130
|
|
127
131
|
should 'provide easy access to simple repository statistics' do
|
128
|
-
|
132
|
+
Metior::GitHub::Repository.any_instance.expects(:id_for_ref).twice.
|
133
|
+
with('master').returns('1b2fe77')
|
134
|
+
|
135
|
+
stats = Metior.simple_stats :github, 'mojombo/grit'
|
129
136
|
|
130
137
|
assert_equal 157, stats[:active_days].size
|
131
138
|
assert_equal 460, stats[:commit_count]
|
@@ -135,6 +142,42 @@ class TestGitHub < Test::Unit::TestCase
|
|
135
142
|
assert_equal 5, stats[:top_contributors].size
|
136
143
|
end
|
137
144
|
|
145
|
+
should 'be able to load all the branches of a repository' do
|
146
|
+
branches = {
|
147
|
+
'master' => '1b2fe77',
|
148
|
+
'branch1' => '1234567',
|
149
|
+
'branch2' => '0abcdef'
|
150
|
+
}
|
151
|
+
Octokit.expects(:branches).with('mojombo/grit').once.returns(branches)
|
152
|
+
|
153
|
+
assert_equal %w{branch1 branch2 master}, @repo.branches
|
154
|
+
assert_equal branches, @repo.instance_variable_get(:@refs)
|
155
|
+
end
|
156
|
+
|
157
|
+
should 'be able to load all tags of a repository' do
|
158
|
+
tags = {
|
159
|
+
'v2.3.1' => '034fc81',
|
160
|
+
'v2.4.0' => 'a3c5139',
|
161
|
+
'v2.4.1' => '91940c2'
|
162
|
+
}
|
163
|
+
Octokit.expects(:tags).with('mojombo/grit').once.returns(tags)
|
164
|
+
|
165
|
+
assert_equal %w{v2.3.1 v2.4.0 v2.4.1}, @repo.tags
|
166
|
+
assert_equal tags, @repo.instance_variable_get(:@refs)
|
167
|
+
end
|
168
|
+
|
169
|
+
should 'be able to load the name and description of the project' do
|
170
|
+
repo = Hashie::Mash.new({
|
171
|
+
:name => 'grit',
|
172
|
+
:description => 'Grit gives you object oriented read/write access to Git repositories via Ruby.'
|
173
|
+
})
|
174
|
+
Octokit.expects(:repo).with('mojombo/grit').once.returns repo
|
175
|
+
@repo.expects(:load_description).never
|
176
|
+
|
177
|
+
assert_equal repo.name, @repo.name
|
178
|
+
assert_equal repo.description, @repo.description
|
179
|
+
end
|
180
|
+
|
138
181
|
end
|
139
182
|
|
140
183
|
end
|
data/test/test_metior.rb
CHANGED
@@ -19,7 +19,7 @@ class TestMetior < Test::Unit::TestCase
|
|
19
19
|
Metior.vcs :unknown
|
20
20
|
assert false
|
21
21
|
rescue
|
22
|
-
|
22
|
+
assert_instance_of RuntimeError, $!
|
23
23
|
assert_equal 'No VCS registered for :unknown', $!.message
|
24
24
|
end
|
25
25
|
end
|
@@ -29,6 +29,27 @@ class TestMetior < Test::Unit::TestCase
|
|
29
29
|
assert_kind_of GitHub::Repository, Metior.repository(:github, 'some', 'user')
|
30
30
|
end
|
31
31
|
|
32
|
+
should 'allow easy generation of a report' do
|
33
|
+
require File.join(Report::REPORTS_PATH, 'default')
|
34
|
+
|
35
|
+
report1 = mock
|
36
|
+
report1.expects(:generate).once
|
37
|
+
report2 = mock
|
38
|
+
report2.expects(:generate).once
|
39
|
+
|
40
|
+
Report::Default.expects(:new).with() do |repository, range|
|
41
|
+
repository.instance_of?(Git::Repository) &&
|
42
|
+
range == 'master'
|
43
|
+
end.once.returns(report1)
|
44
|
+
Report::Default.expects(:new).with() do |repository, range|
|
45
|
+
repository.instance_of?(GitHub::Repository) &&
|
46
|
+
range == 'development'
|
47
|
+
end.once.returns(report2)
|
48
|
+
|
49
|
+
Metior.report(:git, File.dirname(File.dirname(__FILE__)), '/target/dir' )
|
50
|
+
Metior.report(:github, 'some/user', '/target/dir', 'development')
|
51
|
+
end
|
52
|
+
|
32
53
|
end
|
33
54
|
|
34
55
|
end
|
data/test/test_report.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# This code is free software; you can redistribute it and/or modify it under
|
2
|
+
# the terms of the new BSD License.
|
3
|
+
#
|
4
|
+
# Copyright (c) 2011, Sebastian Staudt
|
5
|
+
|
6
|
+
require 'helper'
|
7
|
+
|
8
|
+
class TestReport < Test::Unit::TestCase
|
9
|
+
|
10
|
+
context 'A report' do
|
11
|
+
|
12
|
+
setup do
|
13
|
+
require 'metior/repository'
|
14
|
+
|
15
|
+
r = Metior::Repository.new('dummy')
|
16
|
+
r.stubs(:vcs).returns Metior::Git
|
17
|
+
@report = Metior::Report.create 'default', r
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'have some basic information' do
|
21
|
+
assert_instance_of Metior::Report::Default, @report
|
22
|
+
assert_equal 'default', @report.class.name
|
23
|
+
assert_equal [:index], @report.class.views
|
24
|
+
assert_equal File.join(Metior::Report::REPORTS_PATH, 'default'),
|
25
|
+
@report.class.path
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'be able to generate a HTML report using Mustache' do
|
29
|
+
view = mock
|
30
|
+
view.expects(:render).once.returns 'content'
|
31
|
+
view_class = mock
|
32
|
+
view_class.expects(:new).with(@report).once.returns view
|
33
|
+
file = mock
|
34
|
+
file.expects(:write).with('content').once
|
35
|
+
file.expects(:close).once
|
36
|
+
|
37
|
+
target_dir = File.expand_path './a/target/dir'
|
38
|
+
@report.expects(:copy_assets).with(target_dir).once
|
39
|
+
Mustache.expects(:view_namespace=).with(Metior::Report::Default).once
|
40
|
+
Mustache.expects(:view_class).with(:index).once.returns view_class
|
41
|
+
File.expects(:open).with(File.join(target_dir, 'index.html'), 'w').once.
|
42
|
+
returns file
|
43
|
+
|
44
|
+
@report.generate './a/target/dir'
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/test_repository.rb
CHANGED
@@ -15,27 +15,64 @@ class TestRepository < Test::Unit::TestCase
|
|
15
15
|
@repo = Metior::Repository.new('dummy')
|
16
16
|
end
|
17
17
|
|
18
|
+
should 'load the description of the project on demand' do
|
19
|
+
@repo.expects(:load_description).once
|
20
|
+
@repo.description
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'load the name of the project on demand' do
|
24
|
+
@repo.expects(:load_name).once
|
25
|
+
@repo.name
|
26
|
+
end
|
27
|
+
|
28
|
+
should 'not implement the #id_for_ref method' do
|
29
|
+
assert_raise NotImplementedError do
|
30
|
+
@repo.send :id_for_ref, nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should 'not implement the #load_branches method' do
|
35
|
+
assert_raise NotImplementedError do
|
36
|
+
@repo.send :load_branches
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
18
40
|
should 'not implement the #load_commits method' do
|
19
41
|
assert_raise NotImplementedError do
|
20
42
|
@repo.send(:load_commits, nil)
|
21
43
|
end
|
22
44
|
end
|
23
45
|
|
24
|
-
should '
|
25
|
-
|
26
|
-
|
27
|
-
|
46
|
+
should 'not implement the #load_description' do
|
47
|
+
assert_raise NotImplementedError do
|
48
|
+
@repo.send :load_description
|
49
|
+
end
|
28
50
|
end
|
29
51
|
|
30
|
-
should '
|
31
|
-
|
52
|
+
should 'not implement the #load_name method' do
|
53
|
+
assert_raise NotImplementedError do
|
54
|
+
@repo.send :load_name
|
55
|
+
end
|
56
|
+
end
|
32
57
|
|
33
|
-
|
34
|
-
|
58
|
+
should 'not implement the #load_tags method' do
|
59
|
+
assert_raise NotImplementedError do
|
60
|
+
@repo.send :load_tags
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
should 'parse commit ranges correctly' do
|
65
|
+
@repo.expects(:id_for_ref).with('master').times(3).returns('abc')
|
66
|
+
@repo.expects(:id_for_ref).with('development').twice.returns('def')
|
67
|
+
assert_equal 'abc'..'def', @repo.send(:parse_range, 'master'..'development')
|
68
|
+
assert_equal 'abc'..'def', @repo.send(:parse_range, 'master..development')
|
69
|
+
assert_equal ''..'abc', @repo.send(:parse_range, 'master')
|
35
70
|
end
|
36
71
|
|
37
72
|
should 'miss the cache when loading a different commit range' do
|
38
|
-
@repo.expects(:
|
73
|
+
@repo.expects(:id_for_ref).with('master').returns('abc')
|
74
|
+
@repo.expects(:id_for_ref).with('HEAD').returns('abc')
|
75
|
+
@repo.expects(:load_commits).twice.returns([nil, []])
|
39
76
|
|
40
77
|
@repo.commits 'master'
|
41
78
|
@repo.commits 'HEAD'
|
data/test/test_vcs.rb
CHANGED
@@ -4,34 +4,57 @@
|
|
4
4
|
# Copyright (c) 2011, Sebastian Staudt
|
5
5
|
|
6
6
|
require 'helper'
|
7
|
+
require 'metior/vcs'
|
8
|
+
|
9
|
+
module MockVCS
|
10
|
+
NAME = :mock
|
11
|
+
include VCS
|
12
|
+
not_supported :some_feature
|
13
|
+
end
|
14
|
+
Metior.module_exec { @@vcs_types.delete :mock }
|
7
15
|
|
8
16
|
class TestVCS < Test::Unit::TestCase
|
9
17
|
|
10
18
|
context 'The VCS module' do
|
11
19
|
|
12
20
|
setup do
|
13
|
-
|
14
|
-
|
15
|
-
module MockVCS
|
16
|
-
NAME = :mock
|
17
|
-
include VCS
|
18
|
-
not_supported :some_feature
|
19
|
-
end
|
21
|
+
Metior.module_exec { @@vcs_types[:mock] = MockVCS }
|
20
22
|
|
21
|
-
@
|
22
|
-
@
|
23
|
+
@vcs_object = Object.new
|
24
|
+
@vcs_object.extend MockVCS
|
23
25
|
end
|
24
26
|
|
25
27
|
should 'allow access to the features of a VCS' do
|
26
28
|
assert_not MockVCS.supports? :some_feature
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
should 'automatically try to load the VCS implementation files' do
|
32
|
+
MockVCS.expects(:require).with('metior/mock/actor').once
|
33
|
+
MockVCS.expects(:require).with('metior/mock/commit').once
|
34
|
+
MockVCS.expects(:require).with('metior/mock/repository').once
|
35
|
+
|
36
|
+
begin
|
37
|
+
MockVCS::Commit
|
38
|
+
rescue NameError
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
should 'allow an object of a specific VCS to access the VCS module' do
|
43
|
+
assert_equal MockVCS, @vcs_object.vcs
|
44
|
+
end
|
45
|
+
|
46
|
+
should 'allow an object of a specific VCS to access the VCS features' do
|
47
|
+
assert_not @vcs_object.supports? :some_feature
|
48
|
+
begin
|
49
|
+
@vcs_object.support! :some_feature
|
50
|
+
assert false
|
51
|
+
rescue
|
52
|
+
assert_instance_of UnsupportedError, $!
|
53
|
+
assert_equal "Operation not supported by the current VCS (:mock).", $!.message
|
30
54
|
end
|
31
55
|
end
|
32
56
|
|
33
57
|
teardown do
|
34
|
-
@vcs = nil
|
35
58
|
Metior.module_exec { @@vcs_types.delete :mock }
|
36
59
|
end
|
37
60
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metior
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sebastian Staudt
|
@@ -15,11 +15,10 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-08-12 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
22
|
none: false
|
24
23
|
requirements:
|
25
24
|
- - ~>
|
@@ -30,60 +29,60 @@ dependencies:
|
|
30
29
|
- 4
|
31
30
|
- 1
|
32
31
|
version: 2.4.1
|
33
|
-
prerelease: false
|
34
32
|
name: grit
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
prerelease: false
|
37
34
|
type: :runtime
|
38
|
-
requirement:
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
40
39
|
requirements:
|
41
40
|
- - ~>
|
42
41
|
- !ruby/object:Gem::Version
|
43
|
-
hash:
|
42
|
+
hash: 7
|
44
43
|
segments:
|
44
|
+
- 1
|
45
|
+
- 4
|
45
46
|
- 0
|
46
|
-
|
47
|
-
|
48
|
-
version: 0.6.3
|
47
|
+
version: 1.4.0
|
48
|
+
name: hashery
|
49
49
|
prerelease: false
|
50
|
-
|
51
|
-
|
50
|
+
type: :runtime
|
51
|
+
requirement: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
53
|
-
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
54
|
none: false
|
56
55
|
requirements:
|
57
56
|
- - ~>
|
58
57
|
- !ruby/object:Gem::Version
|
59
|
-
hash:
|
58
|
+
hash: 411
|
60
59
|
segments:
|
61
60
|
- 0
|
62
|
-
-
|
63
|
-
-
|
64
|
-
version: 0.
|
61
|
+
- 99
|
62
|
+
- 4
|
63
|
+
version: 0.99.4
|
64
|
+
name: mustache
|
65
65
|
prerelease: false
|
66
|
-
|
67
|
-
|
66
|
+
type: :runtime
|
67
|
+
requirement: *id003
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
|
70
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
71
70
|
none: false
|
72
71
|
requirements:
|
73
72
|
- - ~>
|
74
73
|
- !ruby/object:Gem::Version
|
75
|
-
hash:
|
74
|
+
hash: 15
|
76
75
|
segments:
|
77
76
|
- 0
|
78
|
-
-
|
79
|
-
-
|
80
|
-
version: 0.
|
77
|
+
- 6
|
78
|
+
- 4
|
79
|
+
version: 0.6.4
|
80
|
+
name: octokit
|
81
81
|
prerelease: false
|
82
|
-
|
83
|
-
|
82
|
+
type: :runtime
|
83
|
+
requirement: *id004
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
|
86
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
87
86
|
none: false
|
88
87
|
requirements:
|
89
88
|
- - ~>
|
@@ -94,12 +93,28 @@ dependencies:
|
|
94
93
|
- 9
|
95
94
|
- 12
|
96
95
|
version: 0.9.12
|
97
|
-
prerelease: false
|
98
96
|
name: mocha
|
99
|
-
|
97
|
+
prerelease: false
|
98
|
+
type: :development
|
99
|
+
requirement: *id005
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ~>
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 63
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
- 9
|
110
|
+
- 2
|
111
|
+
version: 0.9.2
|
112
|
+
name: rake
|
113
|
+
prerelease: false
|
101
114
|
type: :development
|
102
|
-
requirement:
|
115
|
+
requirement: *id006
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
103
118
|
none: false
|
104
119
|
requirements:
|
105
120
|
- - ~>
|
@@ -110,9 +125,26 @@ dependencies:
|
|
110
125
|
- 11
|
111
126
|
- 3
|
112
127
|
version: 2.11.3
|
113
|
-
prerelease: false
|
114
128
|
name: shoulda
|
115
|
-
|
129
|
+
prerelease: false
|
130
|
+
type: :development
|
131
|
+
requirement: *id007
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
hash: 7
|
139
|
+
segments:
|
140
|
+
- 0
|
141
|
+
- 7
|
142
|
+
- 2
|
143
|
+
version: 0.7.2
|
144
|
+
name: yard
|
145
|
+
prerelease: false
|
146
|
+
type: :development
|
147
|
+
requirement: *id008
|
116
148
|
description: Metior is a source code history analyzer that provides various statistics about a source code repository and its change over time.
|
117
149
|
email:
|
118
150
|
- koraktor@gmail.com
|
@@ -135,6 +167,10 @@ files:
|
|
135
167
|
- lib/core_ext/object.rb
|
136
168
|
- lib/metior.rb
|
137
169
|
- lib/metior/actor.rb
|
170
|
+
- lib/metior/auto_include_vcs.rb
|
171
|
+
- lib/metior/collections/actor_collection.rb
|
172
|
+
- lib/metior/collections/collection.rb
|
173
|
+
- lib/metior/collections/commit_collection.rb
|
138
174
|
- lib/metior/commit.rb
|
139
175
|
- lib/metior/errors.rb
|
140
176
|
- lib/metior/git.rb
|
@@ -145,17 +181,39 @@ files:
|
|
145
181
|
- lib/metior/github/actor.rb
|
146
182
|
- lib/metior/github/commit.rb
|
147
183
|
- lib/metior/github/repository.rb
|
184
|
+
- lib/metior/report.rb
|
185
|
+
- lib/metior/report/view.rb
|
186
|
+
- lib/metior/report/view_helper.rb
|
148
187
|
- lib/metior/repository.rb
|
149
188
|
- lib/metior/vcs.rb
|
150
189
|
- lib/metior/version.rb
|
151
190
|
- metior.gemspec
|
191
|
+
- reports/default.rb
|
192
|
+
- reports/default/images/favicon.png
|
193
|
+
- reports/default/stylesheets/default.css
|
194
|
+
- reports/default/templates/actor/minimal.mustache
|
195
|
+
- reports/default/templates/commit/minimal.mustache
|
196
|
+
- reports/default/templates/index.mustache
|
197
|
+
- reports/default/templates/most_significant_authors.mustache
|
198
|
+
- reports/default/templates/most_significant_commits.mustache
|
199
|
+
- reports/default/templates/repository_information.mustache
|
200
|
+
- reports/default/templates/top_committers.mustache
|
201
|
+
- reports/default/views/index.rb
|
202
|
+
- reports/default/views/most_significant_authors.rb
|
203
|
+
- reports/default/views/most_significant_commits.rb
|
204
|
+
- reports/default/views/repository_information.rb
|
205
|
+
- reports/default/views/top_committers.rb
|
152
206
|
- test/fixtures.rb
|
153
207
|
- test/fixtures/mojombo-grit-master-1b2fe77.txt
|
154
208
|
- test/helper.rb
|
155
|
-
- test/
|
209
|
+
- test/test_1st_class_loading.rb
|
210
|
+
- test/test_actor_colletion.rb
|
211
|
+
- test/test_collection.rb
|
212
|
+
- test/test_commit_collection.rb
|
156
213
|
- test/test_git.rb
|
157
214
|
- test/test_github.rb
|
158
215
|
- test/test_metior.rb
|
216
|
+
- test/test_report.rb
|
159
217
|
- test/test_repository.rb
|
160
218
|
- test/test_vcs.rb
|
161
219
|
homepage: http://koraktor.de/metior
|
@@ -187,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
187
245
|
requirements: []
|
188
246
|
|
189
247
|
rubyforge_project:
|
190
|
-
rubygems_version: 1.8.
|
248
|
+
rubygems_version: 1.8.7
|
191
249
|
signing_key:
|
192
250
|
specification_version: 3
|
193
251
|
summary: A source code history analyzer API
|
@@ -195,9 +253,13 @@ test_files:
|
|
195
253
|
- test/fixtures.rb
|
196
254
|
- test/fixtures/mojombo-grit-master-1b2fe77.txt
|
197
255
|
- test/helper.rb
|
198
|
-
- test/
|
256
|
+
- test/test_1st_class_loading.rb
|
257
|
+
- test/test_actor_colletion.rb
|
258
|
+
- test/test_collection.rb
|
259
|
+
- test/test_commit_collection.rb
|
199
260
|
- test/test_git.rb
|
200
261
|
- test/test_github.rb
|
201
262
|
- test/test_metior.rb
|
263
|
+
- test/test_report.rb
|
202
264
|
- test/test_repository.rb
|
203
265
|
- test/test_vcs.rb
|