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.
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