metior 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/.travis.yml +2 -0
  2. data/.yardopts +1 -0
  3. data/Changelog.md +23 -0
  4. data/Gemfile +1 -17
  5. data/Gemfile.lock +28 -21
  6. data/README.md +66 -20
  7. data/lib/metior.rb +30 -14
  8. data/lib/metior/actor.rb +28 -22
  9. data/lib/metior/auto_include_vcs.rb +43 -0
  10. data/lib/metior/collections/actor_collection.rb +97 -0
  11. data/lib/metior/collections/collection.rb +84 -0
  12. data/lib/metior/collections/commit_collection.rb +309 -0
  13. data/lib/metior/commit.rb +128 -48
  14. data/lib/metior/errors.rb +2 -2
  15. data/lib/metior/git/commit.rb +32 -31
  16. data/lib/metior/git/repository.rb +71 -6
  17. data/lib/metior/github/commit.rb +5 -16
  18. data/lib/metior/github/repository.rb +68 -40
  19. data/lib/metior/report.rb +139 -0
  20. data/lib/metior/report/view.rb +120 -0
  21. data/lib/metior/report/view_helper.rb +47 -0
  22. data/lib/metior/repository.rb +225 -56
  23. data/lib/metior/vcs.rb +12 -3
  24. data/lib/metior/version.rb +1 -1
  25. data/metior.gemspec +28 -26
  26. data/reports/default.rb +17 -0
  27. data/reports/default/images/favicon.png +0 -0
  28. data/reports/default/stylesheets/default.css +128 -0
  29. data/reports/default/templates/actor/minimal.mustache +1 -0
  30. data/reports/default/templates/commit/minimal.mustache +1 -0
  31. data/reports/default/templates/index.mustache +27 -0
  32. data/reports/default/templates/most_significant_authors.mustache +11 -0
  33. data/reports/default/templates/most_significant_commits.mustache +13 -0
  34. data/reports/default/templates/repository_information.mustache +17 -0
  35. data/reports/default/templates/top_committers.mustache +11 -0
  36. data/reports/default/views/index.rb +33 -0
  37. data/reports/default/views/most_significant_authors.rb +19 -0
  38. data/reports/default/views/most_significant_commits.rb +19 -0
  39. data/reports/default/views/repository_information.rb +47 -0
  40. data/reports/default/views/top_committers.rb +21 -0
  41. data/test/fixtures.rb +54 -36
  42. data/test/helper.rb +10 -3
  43. data/test/{test_class_loading.rb → test_1st_class_loading.rb} +1 -1
  44. data/test/test_actor_colletion.rb +78 -0
  45. data/test/test_collection.rb +61 -0
  46. data/test/test_commit_collection.rb +139 -0
  47. data/test/test_git.rb +58 -5
  48. data/test/test_github.rb +52 -9
  49. data/test/test_metior.rb +22 -1
  50. data/test/test_report.rb +49 -0
  51. data/test/test_repository.rb +46 -9
  52. data/test/test_vcs.rb +36 -13
  53. metadata +105 -43
@@ -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
- @commits_stub = Grit::Repo.any_instance.stubs :commits
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
- @commits_stub = Grit::Repo.any_instance.stubs :commits
43
- api_response = Fixtures.commits_as_grit_commits('ef2870b'..'4c592b4')
44
- @commits_stub.returns api_response
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
@@ -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
- api_response = Fixtures.commits_as_rashies(''..'master')
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
- @commits_stub = Octokit.stubs :commits
45
- api_response = Fixtures.commits_as_rashies(''..'4c592b4')
46
- 14.times { @commits_stub.returns api_response.shift(35) }
47
- @commits_stub.raises Octokit::NotFound.new(nil)
48
- api_response = Fixtures.commits_as_rashies(''..'ef2870b')
49
- 13.times { @commits_stub.returns api_response.shift(35) }
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
- stats = Metior.simple_stats :github, 'mojombo', 'grit'
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
@@ -19,7 +19,7 @@ class TestMetior < Test::Unit::TestCase
19
19
  Metior.vcs :unknown
20
20
  assert false
21
21
  rescue
22
- assert $!.is_a? RuntimeError
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
@@ -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
@@ -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 'parse commit ranges correctly' do
25
- assert_equal 'master'..'development', @repo.send(:parse_range, 'master'..'development')
26
- assert_equal 'master'..'development', @repo.send(:parse_range, 'master..development')
27
- assert_equal ''..'master', @repo.send(:parse_range, 'master')
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 'hit the cache when loading the same commit range' do
31
- @repo.expects(:load_commits).once.returns([])
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
- @repo.commits 'master'
34
- @repo.commits 'master'
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(:load_commits).twice.returns([])
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'
@@ -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
- require 'metior/vcs'
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
- @vcs = Object.new
22
- @vcs.extend MockVCS
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
- assert_not @vcs.supports? :some_feature
28
- assert_raise UnsupportedError do
29
- @vcs.support! :some_feature
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: 19
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
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-06-16 00:00:00 Z
18
+ date: 2011-08-12 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- type: :runtime
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
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
33
+ prerelease: false
37
34
  type: :runtime
38
- requirement: &id002 !ruby/object:Gem::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: 1
42
+ hash: 7
44
43
  segments:
44
+ - 1
45
+ - 4
45
46
  - 0
46
- - 6
47
- - 3
48
- version: 0.6.3
47
+ version: 1.4.0
48
+ name: hashery
49
49
  prerelease: false
50
- name: octokit
51
- version_requirements: *id002
50
+ type: :runtime
51
+ requirement: *id002
52
52
  - !ruby/object:Gem::Dependency
53
- type: :development
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: 57
58
+ hash: 411
60
59
  segments:
61
60
  - 0
62
- - 9
63
- - 1
64
- version: 0.9.1
61
+ - 99
62
+ - 4
63
+ version: 0.99.4
64
+ name: mustache
65
65
  prerelease: false
66
- name: rake
67
- version_requirements: *id003
66
+ type: :runtime
67
+ requirement: *id003
68
68
  - !ruby/object:Gem::Dependency
69
- type: :development
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: 1
74
+ hash: 15
76
75
  segments:
77
76
  - 0
78
- - 7
79
- - 1
80
- version: 0.7.1
77
+ - 6
78
+ - 4
79
+ version: 0.6.4
80
+ name: octokit
81
81
  prerelease: false
82
- name: yard
83
- version_requirements: *id004
82
+ type: :runtime
83
+ requirement: *id004
84
84
  - !ruby/object:Gem::Dependency
85
- type: :development
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
- version_requirements: *id005
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: &id006 !ruby/object:Gem::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
- version_requirements: *id006
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/test_class_loading.rb
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.5
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/test_class_loading.rb
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