inspected_by 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +10 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +51 -0
- data/README.md +46 -0
- data/Rakefile +7 -0
- data/bin/inspected_by +25 -0
- data/inspected_by.gemspec +45 -0
- data/lib/inspected_by.rb +14 -0
- data/lib/inspected_by/core.rb +109 -0
- data/lib/inspected_by/server.rb +47 -0
- data/lib/inspected_by/server/views/branches.slim +6 -0
- data/lib/inspected_by/server/views/commit.slim +31 -0
- data/lib/inspected_by/server/views/commits.slim +11 -0
- data/lib/inspected_by/server/views/layout.slim +9 -0
- data/lib/inspected_by/server/views/note.slim +6 -0
- data/lib/inspected_by/version.rb +3 -0
- data/test/helper.rb +25 -0
- data/test/inspection_test.rb +31 -0
- metadata +177 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
inspected_by (0.0.1)
|
5
|
+
grit
|
6
|
+
simple_uuid
|
7
|
+
sinatra
|
8
|
+
sinatra-partial
|
9
|
+
slim
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: https://rubygems.org/
|
13
|
+
specs:
|
14
|
+
coderay (1.0.7)
|
15
|
+
diff-lcs (1.1.3)
|
16
|
+
grit (2.5.0)
|
17
|
+
diff-lcs (~> 1.1)
|
18
|
+
mime-types (~> 1.15)
|
19
|
+
posix-spawn (~> 0.3.6)
|
20
|
+
method_source (0.8)
|
21
|
+
mime-types (1.19)
|
22
|
+
posix-spawn (0.3.6)
|
23
|
+
pry (0.9.10)
|
24
|
+
coderay (~> 1.0.5)
|
25
|
+
method_source (~> 0.8)
|
26
|
+
slop (~> 3.3.1)
|
27
|
+
rack (1.4.1)
|
28
|
+
rack-protection (1.2.0)
|
29
|
+
rack
|
30
|
+
rake (0.9.2.2)
|
31
|
+
simple_uuid (0.2.0)
|
32
|
+
sinatra (1.3.3)
|
33
|
+
rack (~> 1.3, >= 1.3.6)
|
34
|
+
rack-protection (~> 1.2)
|
35
|
+
tilt (~> 1.3, >= 1.3.3)
|
36
|
+
sinatra-partial (0.3.2)
|
37
|
+
sinatra
|
38
|
+
slim (1.3.3)
|
39
|
+
temple (~> 0.5.5)
|
40
|
+
tilt (~> 1.3.3)
|
41
|
+
slop (3.3.3)
|
42
|
+
temple (0.5.5)
|
43
|
+
tilt (1.3.3)
|
44
|
+
|
45
|
+
PLATFORMS
|
46
|
+
ruby
|
47
|
+
|
48
|
+
DEPENDENCIES
|
49
|
+
inspected_by!
|
50
|
+
pry
|
51
|
+
rake
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Inspected By
|
2
|
+
|
3
|
+
This is a Sinatra-based experiment for Inspected By.
|
4
|
+
|
5
|
+
The Junto will attempt to make it entirely Git-centric without need of a database.
|
6
|
+
|
7
|
+
## Learn
|
8
|
+
|
9
|
+
Inspected By uses the [git-notes](http://www.kernel.org/pub/software/scm/git/docs/git-notes.html) feature of Git.
|
10
|
+
|
11
|
+
Here are some resources to get up to speed:
|
12
|
+
|
13
|
+
* [Note to Self](http://git-scm.com/2010/08/25/notes.html)
|
14
|
+
* [Git Notes & GitHub](https://vimeo.com/34273537)
|
15
|
+
* [Git Notes Display](https://github.com/blog/707-git-notes-display)
|
16
|
+
* [Git Tip of the Week: Git Notes](http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html)
|
17
|
+
* [git-notes Manual Page](http://www.kernel.org/pub/software/scm/git/docs/git-notes.html)
|
18
|
+
|
19
|
+
## Development
|
20
|
+
|
21
|
+
### Dependencies
|
22
|
+
|
23
|
+
* Ruby
|
24
|
+
* Bundler
|
25
|
+
|
26
|
+
### Getting started
|
27
|
+
|
28
|
+
```sh
|
29
|
+
git clone git@github.com:highgroove/inspected-by.git
|
30
|
+
cd inspected-by
|
31
|
+
bundle install
|
32
|
+
```
|
33
|
+
|
34
|
+
### Starting up
|
35
|
+
|
36
|
+
```sh
|
37
|
+
bin/inspected_by --server [PORT] [--repo /Path/to/repo]
|
38
|
+
```
|
39
|
+
|
40
|
+
Visit http://localhost:4000
|
41
|
+
|
42
|
+
### Console
|
43
|
+
|
44
|
+
```sh
|
45
|
+
irb -r ./lib/inspected_by.rb
|
46
|
+
```
|
data/Rakefile
ADDED
data/bin/inspected_by
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w(.. lib))
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
require 'inspected_by'
|
7
|
+
|
8
|
+
options = {
|
9
|
+
port: 4000
|
10
|
+
}
|
11
|
+
|
12
|
+
option_parser = OptionParser.new do |opts|
|
13
|
+
opts.on('--repo PATH', 'Repository path') do |repo_path|
|
14
|
+
ENV['INSPECTED_BY_REPO_PATH'] = repo_path
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on('--server [PORT]', 'Start web server (default port 4000)') do |port|
|
18
|
+
options[:server] = true
|
19
|
+
options[:port] = port unless port.nil?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
option_parser.parse!
|
24
|
+
|
25
|
+
InspectedBy::Server.run!(port: options[:port]) if options[:server]
|
@@ -0,0 +1,45 @@
|
|
1
|
+
$LOAD_PATH.unshift 'lib'
|
2
|
+
require 'inspected_by/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'inspected_by'
|
6
|
+
s.version = InspectedBy::VERSION.dup
|
7
|
+
s.summary = 'Code reviews using Git'
|
8
|
+
s.description = 'InspectedBy is a code review tool based on Git'
|
9
|
+
s.homepage = 'http://inspected.by'
|
10
|
+
s.email = 'hello@inspected.by'
|
11
|
+
s.authors = ['Zac Stewart', 'Brandon Beacher']
|
12
|
+
|
13
|
+
s.require_paths = ['lib']
|
14
|
+
s.executables = ['inspected_by']
|
15
|
+
|
16
|
+
s.add_runtime_dependency 'grit'
|
17
|
+
s.add_runtime_dependency 'simple_uuid'
|
18
|
+
s.add_runtime_dependency 'slim'
|
19
|
+
s.add_runtime_dependency 'sinatra'
|
20
|
+
s.add_runtime_dependency 'sinatra-partial'
|
21
|
+
|
22
|
+
s.add_development_dependency 'rake'
|
23
|
+
s.add_development_dependency 'pry'
|
24
|
+
|
25
|
+
s.files = %w(
|
26
|
+
.gitignore
|
27
|
+
Gemfile
|
28
|
+
Gemfile.lock
|
29
|
+
README.md
|
30
|
+
Rakefile
|
31
|
+
bin/inspected_by
|
32
|
+
inspected_by.gemspec
|
33
|
+
lib/inspected_by.rb
|
34
|
+
lib/inspected_by/core.rb
|
35
|
+
lib/inspected_by/server.rb
|
36
|
+
lib/inspected_by/server/views/branches.slim
|
37
|
+
lib/inspected_by/server/views/commit.slim
|
38
|
+
lib/inspected_by/server/views/commits.slim
|
39
|
+
lib/inspected_by/server/views/layout.slim
|
40
|
+
lib/inspected_by/server/views/note.slim
|
41
|
+
lib/inspected_by/version.rb
|
42
|
+
test/helper.rb
|
43
|
+
test/inspection_test.rb
|
44
|
+
)
|
45
|
+
end
|
data/lib/inspected_by.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
# default to current dir for repo
|
4
|
+
ENV['INSPECTED_BY_REPO_PATH'] ||= File.expand_path('.')
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
|
8
|
+
# internals
|
9
|
+
require 'inspected_by/version'
|
10
|
+
require 'inspected_by/core'
|
11
|
+
require 'inspected_by/server'
|
12
|
+
|
13
|
+
module InspectedBy
|
14
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# stdlib
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
# 3rd party
|
5
|
+
require 'grit'
|
6
|
+
require 'simple_uuid'
|
7
|
+
|
8
|
+
module InspectedBy
|
9
|
+
REPO = Grit::Repo.new(ENV['INSPECTED_BY_REPO_PATH'])
|
10
|
+
|
11
|
+
class Decorator
|
12
|
+
def initialize(object)
|
13
|
+
@object = object
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.decorates(klass)
|
17
|
+
define_method(klass) { @object }
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.decorate(objects)
|
21
|
+
objects.map(&method(:new))
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.method_missing(method, *args, &block)
|
25
|
+
@object.send method, *args, &block
|
26
|
+
end
|
27
|
+
|
28
|
+
def method_missing(method, *args, &block)
|
29
|
+
@object.send method, *args, &block
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class DiffDecorator < Decorator
|
34
|
+
decorates :diff
|
35
|
+
|
36
|
+
def lines
|
37
|
+
lines = diff.diff.split("\n").drop(2)
|
38
|
+
LineDecorator.decorate(lines)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class LineDecorator < Decorator
|
43
|
+
decorates :line
|
44
|
+
|
45
|
+
def type
|
46
|
+
case line
|
47
|
+
when /^@@.*@@$/
|
48
|
+
'context'
|
49
|
+
when /^\+/
|
50
|
+
'add'
|
51
|
+
when /^-/
|
52
|
+
'remove'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_s
|
57
|
+
line.force_encoding('UTF-8')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Inspection
|
62
|
+
attr_reader :comment, :inspected_at, :inspector_email, :inspector_name, :guid, :sha
|
63
|
+
|
64
|
+
def initialize(repo, params)
|
65
|
+
@repo = repo
|
66
|
+
@comment = params['comment']
|
67
|
+
@inspected_at = params['inspected_at']
|
68
|
+
@inspector_email = params['inspector_email']
|
69
|
+
@inspector_name = params['inspector_name']
|
70
|
+
@guid = params['guid']
|
71
|
+
@sha = params['sha']
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.find_all(repo, sha)
|
75
|
+
repo.git.notes({raise: true, ref: 'inspected-by'}, ['show', sha]).
|
76
|
+
split("\n").
|
77
|
+
map {|note| Inspection.new(repo, JSON.parse(note)) }
|
78
|
+
rescue Grit::Git::CommandFailed => e
|
79
|
+
if /No note found for object/ === e.message
|
80
|
+
[]
|
81
|
+
else
|
82
|
+
raise e
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def append
|
87
|
+
@repo.git.notes({raise: true, ref: 'inspected-by'},
|
88
|
+
['append', "--message=#{shell_escaped_message}", @sha])
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def shell_escaped_message
|
94
|
+
@repo.git.shell_escape(message)
|
95
|
+
end
|
96
|
+
|
97
|
+
def message
|
98
|
+
JSON.generate(
|
99
|
+
'inspected_by' => true,
|
100
|
+
'inspected_at' => Time.now.utc,
|
101
|
+
'inspector_email' => @repo.config['user.email'],
|
102
|
+
'inspector_name' => @repo.config['user.name'],
|
103
|
+
'guid' => @guid || SimpleUUID::UUID.new.to_guid,
|
104
|
+
'inspected_sha' => @sha,
|
105
|
+
'comment' => @comment
|
106
|
+
)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'sinatra/partial'
|
3
|
+
require 'slim'
|
4
|
+
|
5
|
+
module InspectedBy
|
6
|
+
class Server < Sinatra::Base
|
7
|
+
dir = File.dirname(File.expand_path(__FILE__))
|
8
|
+
set :views, File.join(dir, %w(server views))
|
9
|
+
|
10
|
+
register Sinatra::Partial
|
11
|
+
set :partial_template_engine, :slim
|
12
|
+
|
13
|
+
def repo
|
14
|
+
@_repo ||= REPO
|
15
|
+
end
|
16
|
+
|
17
|
+
get '/' do
|
18
|
+
redirect to('/branches/master/commits')
|
19
|
+
end
|
20
|
+
|
21
|
+
get '/branches' do
|
22
|
+
@branches = repo.branches
|
23
|
+
slim :branches
|
24
|
+
end
|
25
|
+
|
26
|
+
get '/branches/:branch/commits' do
|
27
|
+
@commits = repo.commits(params[:branch])
|
28
|
+
slim :commits
|
29
|
+
end
|
30
|
+
|
31
|
+
get '/branches/:branch/commits/:sha' do
|
32
|
+
@commit = repo.commit(params[:sha])
|
33
|
+
@notes = Inspection.find_all(repo, @commit.sha)
|
34
|
+
@diffs = DiffDecorator.decorate(@commit.diffs)
|
35
|
+
slim :commit
|
36
|
+
end
|
37
|
+
|
38
|
+
post '/branches/:branch/commits/:sha/notes' do
|
39
|
+
inspection = Inspection.new(repo, params[:inspection])
|
40
|
+
inspection.append
|
41
|
+
|
42
|
+
redirect "/branches/#{params[:branch]}/commits/#{params[:sha]}"
|
43
|
+
end
|
44
|
+
|
45
|
+
run! if app_file == $0
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
h2
|
2
|
+
a(href="/branches") Branches
|
3
|
+
| /
|
4
|
+
a(href="/branches/#{params[:branch]}/commits")= params[:branch]
|
5
|
+
header
|
6
|
+
h1= @commit.sha
|
7
|
+
h2 #{@commit.date} by #{@commit.author}
|
8
|
+
|
9
|
+
section.message
|
10
|
+
p= @commit.message
|
11
|
+
|
12
|
+
section.diffs
|
13
|
+
h3 Diffs
|
14
|
+
ul
|
15
|
+
- @diffs.each do |diff|
|
16
|
+
li
|
17
|
+
#{diff.a_path} → #{diff.b_path}
|
18
|
+
pre.diff
|
19
|
+
- diff.lines.each do |line|
|
20
|
+
.line(class=line.type)= line
|
21
|
+
|
22
|
+
section.commit_notes
|
23
|
+
h3 Notes
|
24
|
+
== partial :note, collection: @notes
|
25
|
+
|
26
|
+
form action="/branches/#{params[:branch]}/commits/#{@commit.sha}/notes" method="post"
|
27
|
+
input type="hidden" name="inspection[sha]" value=params[:sha]
|
28
|
+
p
|
29
|
+
textarea name="inspection[comment]" cols="40" rows="5"
|
30
|
+
p
|
31
|
+
input type="submit"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
h2
|
2
|
+
a(href="/branches") Branches
|
3
|
+
| /
|
4
|
+
span= params[:branch]
|
5
|
+
h1 Commits
|
6
|
+
ul
|
7
|
+
- @commits.each do |commit|
|
8
|
+
li
|
9
|
+
h2 #{commit.date} by #{commit.author}
|
10
|
+
a(href="/branches/#{params[:branch]}/commits/#{commit.sha}")= commit.sha
|
11
|
+
blockquote= commit.message
|
data/test/helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pry'
|
4
|
+
require File.join(File.dirname(__FILE__), *%w(.. lib inspected_by))
|
5
|
+
include InspectedBy
|
6
|
+
|
7
|
+
class GitFactory
|
8
|
+
def self.repo(&block)
|
9
|
+
Dir.chdir(Dir.mktmpdir('inspected_by')) do |path|
|
10
|
+
repo = Grit::Repo.init(path, template: File.join(*%w('test data repo_template')))
|
11
|
+
block.call(repo)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.commit_with_no_inspections(&block)
|
16
|
+
repo do |repo|
|
17
|
+
file = File.new('README', 'w')
|
18
|
+
file.write('INSPECTED BY TEST REPO')
|
19
|
+
file.close
|
20
|
+
repo.add('README')
|
21
|
+
repo.commit_index('Add project name to repo')
|
22
|
+
block.call(repo, repo.commits.first)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class InspectionTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
end
|
6
|
+
|
7
|
+
def teardown
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_find_all_on_commit_with_no_notes
|
11
|
+
GitFactory.commit_with_no_inspections do |repo, commit|
|
12
|
+
inspections = Inspection.find_all(repo, commit.sha)
|
13
|
+
assert_equal inspections, []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_appending_a_note_to_a_commit
|
18
|
+
comment = 'You should add more information'
|
19
|
+
GitFactory.commit_with_no_inspections do |repo, commit|
|
20
|
+
Inspection.new(repo,
|
21
|
+
'sha' => commit.sha,
|
22
|
+
'comment' => comment).append
|
23
|
+
assert Inspection.find_all(repo, commit.sha).length > 0
|
24
|
+
|
25
|
+
inspection = Inspection.find_all(repo, commit.sha).first
|
26
|
+
assert_equal inspection.comment, comment
|
27
|
+
assert_equal inspection.inspector_email, repo.config['user.email']
|
28
|
+
assert_equal inspection.inspector_name, repo.config['user.name']
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: inspected_by
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Zac Stewart
|
9
|
+
- Brandon Beacher
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-10-29 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: grit
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: simple_uuid
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: slim
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: sinatra
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: sinatra-partial
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :runtime
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rake
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
description: InspectedBy is a code review tool based on Git
|
128
|
+
email: hello@inspected.by
|
129
|
+
executables:
|
130
|
+
- inspected_by
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- .gitignore
|
135
|
+
- Gemfile
|
136
|
+
- Gemfile.lock
|
137
|
+
- README.md
|
138
|
+
- Rakefile
|
139
|
+
- bin/inspected_by
|
140
|
+
- inspected_by.gemspec
|
141
|
+
- lib/inspected_by.rb
|
142
|
+
- lib/inspected_by/core.rb
|
143
|
+
- lib/inspected_by/server.rb
|
144
|
+
- lib/inspected_by/server/views/branches.slim
|
145
|
+
- lib/inspected_by/server/views/commit.slim
|
146
|
+
- lib/inspected_by/server/views/commits.slim
|
147
|
+
- lib/inspected_by/server/views/layout.slim
|
148
|
+
- lib/inspected_by/server/views/note.slim
|
149
|
+
- lib/inspected_by/version.rb
|
150
|
+
- test/helper.rb
|
151
|
+
- test/inspection_test.rb
|
152
|
+
homepage: http://inspected.by
|
153
|
+
licenses: []
|
154
|
+
post_install_message:
|
155
|
+
rdoc_options: []
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 1.8.24
|
173
|
+
signing_key:
|
174
|
+
specification_version: 3
|
175
|
+
summary: Code reviews using Git
|
176
|
+
test_files: []
|
177
|
+
has_rdoc:
|