rack-commit-stats 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa1969bb30585c2b370d5f9ab29a923e50ee917f
4
- data.tar.gz: 39f81d487ee9d3305d0d7263d186a1fb0884541d
3
+ metadata.gz: 33cd6390c84f95343a8d60e31c3f7502b8d32717
4
+ data.tar.gz: e23b76420f3d499816f80c067a429eac109e40d6
5
5
  SHA512:
6
- metadata.gz: 884c460c19c327de728437ad2be96d50f150109834b2db136bfe0c1227a116c92ef76167a8ec35db0bf57cbffd7d3ef1166e6a3577d9091441e0a01efd6caded
7
- data.tar.gz: 22c23203b2085846b9de718b0e2b3ff1226a09240b328bfc5cb2e362d21776405dfb8cfdbfd5a1212957873c3ac2e674fa680e26e8d726646d95d020e5c7383c
6
+ metadata.gz: e86742e895139b597fce471ea999e9de4021342547d32fbbdb9b864b9165601fafc173e07ac2eb98097810da717929afe7fb7f95976e07a505d7a2bfa6f7fdd7
7
+ data.tar.gz: 98088766feac142a7ff0dda000a7639853f7300c26747ea000227ff8074846355c889b47b65ad91408c6f72f0211cddde63abd6ac814e4de56dd669a020d792a
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  rack-commit-stats
2
2
  ===========
3
+ [![Gem Version](https://badge.fury.io/rb/rack-commit-stats.svg)](http://badge.fury.io/rb/rack-commit-stats)
3
4
  [![Build Status](https://travis-ci.org/todd/rack-commit-stats.svg?branch=master)](https://travis-ci.org/todd/rack-commit-stats)
4
5
  [![Coverage Status](https://coveralls.io/repos/todd/rack-commit-stats/badge.png?branch=master)](https://coveralls.io/r/todd/rack-commit-stats?branch=master)
5
6
  [![Code Climate](https://codeclimate.com/github/todd/rack-commit-stats/badges/gpa.svg)](https://codeclimate.com/github/todd/rack-commit-stats)
@@ -23,7 +24,7 @@ on your system. CMake should be available through your package manager of choice
23
24
 
24
25
  ## For Rails
25
26
  Mount the application on a new endpoint within your `routes.rb` file. You will
26
- probably want to limit access to this endpoint using some sort of authentication
27
+ probably want to limit access to this endpoint using some sort of authorization
27
28
  constraint you've established, though this is totally optional.
28
29
 
29
30
  ```ruby
@@ -37,7 +38,7 @@ in the affected environment configuration files.
37
38
 
38
39
  ```ruby
39
40
  # production.rb
40
- config.rack_commit_stats.repo_path = '../repo'
41
+ config.rack_commit_stats.repo_path = '../.git'
41
42
  ```
42
43
 
43
44
  ## For Sinatra
@@ -60,6 +61,29 @@ RackCommitStats.configure do |config|
60
61
  end
61
62
  ```
62
63
 
64
+ ## Using with Capistrano
65
+ By default, the gem will attempt to read a Git repo on a standard path. However,
66
+ deploying with a tool like Capistrano does some things that make reading Git
67
+ state a bit trickier. The `.git` directory is moved outside of the project root
68
+ and the deployed branch is not checked out on the server. To work around this,
69
+ rack-commit-stats can read the branch and revision state from the `revisions.log`
70
+ file created by Capistrano on deploys and pull repository state based on that.
71
+
72
+ To enable this, you'll need to set a few additional configuration options:
73
+ ```ruby
74
+ # Rails - production.rb (or other environment configuration file)
75
+ config.rack_commit_stats.repo_path = "../../repo"
76
+ config.rack_commit_stats.mode = :file
77
+ config.rack_commit_stats.file_path_prefix = "../../"
78
+
79
+ # Sinatra
80
+ RackCommitStats.configure do |config|
81
+ config.repo_path = "../../repo"
82
+ config.mode = :file
83
+ config.file_path_prefix = "../../"
84
+ end
85
+ ```
86
+
63
87
  ## Example Output
64
88
  ```json
65
89
  {
@@ -3,25 +3,33 @@ require 'json'
3
3
  module RackCommitStats
4
4
  class App
5
5
  def self.call(env)
6
- status = 200
6
+ status = 200
7
7
  headers = {"Content-Type" => "application/json"}
8
8
 
9
9
  [status, headers, [response]]
10
10
  end
11
11
 
12
- private
12
+ class << self
13
+ def response
14
+ {
15
+ branch: commit.branch,
16
+ commit: {
17
+ revision: commit.revision,
18
+ message: commit.message,
19
+ author: commit.author
20
+ }
21
+ }.to_json
22
+ end
13
23
 
14
- def self.response
15
- commit = Commit.new
24
+ def commit
25
+ if RackCommitStats.config.file_mode?
26
+ @_commit ||= CommitFromEnv.new
27
+ else
28
+ @_commit ||= Commit.new
29
+ end
16
30
 
17
- {
18
- branch: commit.branch,
19
- commit: {
20
- revision: commit.revision,
21
- message: commit.message,
22
- author: commit.author
23
- }
24
- }.to_json
31
+ @_commit
32
+ end
25
33
  end
26
34
  end
27
35
  end
@@ -18,12 +18,14 @@ module RackCommitStats
18
18
  commit.author.reject { |k, _| k == :time }
19
19
  end
20
20
 
21
- private
21
+ protected
22
22
 
23
23
  def repo
24
24
  @_repo ||= Rugged::Repository.new(RackCommitStats.config.repo_path)
25
25
  end
26
26
 
27
+ private
28
+
27
29
  def head
28
30
  repo.head
29
31
  end
@@ -0,0 +1,31 @@
1
+ module RackCommitStats
2
+ class CommitFromEnv < Commit
3
+ REVISION_LOG_FILE = 'revisions.log'
4
+
5
+ def branch
6
+ current_revision[1]
7
+ end
8
+
9
+ def revision
10
+ commit.oid
11
+ end
12
+
13
+ private
14
+
15
+ def commit
16
+ @_commit ||= repo.lookup(sha_from_file)
17
+ end
18
+
19
+ def sha_from_file
20
+ current_revision[3].gsub(/[)]/, '')
21
+ end
22
+
23
+ def current_revision
24
+ @_current_revision ||= File.open(
25
+ File.join(
26
+ RackCommitStats.config.file_path_prefix, REVISION_LOG_FILE
27
+ ), 'r'
28
+ ).readlines.last.split
29
+ end
30
+ end
31
+ end
@@ -6,6 +6,10 @@ module RackCommitStats
6
6
  RackCommitStats.configure do |config|
7
7
  config.repo_path = app.config.rack_commit_stats.repo_path ||
8
8
  DEFAULT_REPO_PATH
9
+
10
+ config.mode = app.config.rack_commit_stats.mode || DEFAULT_MODE
11
+ config.file_path_prefix = app.config.rack_commit_stats.file_path_prefix ||
12
+ DEFAULT_FILE_PATH_PREFIX
9
13
  end
10
14
  end
11
15
  end
@@ -1,3 +1,3 @@
1
1
  module RackCommitStats
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,14 +1,24 @@
1
1
  module RackCommitStats
2
2
  require 'rack-commit-stats/app'
3
3
  require 'rack-commit-stats/commit'
4
+ require 'rack-commit-stats/commit_from_env'
4
5
  require 'rack-commit-stats/railtie' if defined? Rails
5
6
 
6
- DEFAULT_REPO_PATH = '.git'
7
+ DEFAULT_REPO_PATH = '.git'
8
+ DEFAULT_MODE = :default
9
+ FILE_MODE = :file
10
+ DEFAULT_FILE_PATH_PREFIX = '.'
7
11
 
8
- class Configuration < Struct.new(:repo_path); end
12
+ class Configuration < Struct.new(:repo_path, :mode, :file_path_prefix)
13
+ def file_mode?
14
+ mode == FILE_MODE
15
+ end
16
+ end
9
17
 
10
18
  def self.config
11
- @@_config ||= Configuration.new(DEFAULT_REPO_PATH)
19
+ @@_config ||= Configuration.new(
20
+ DEFAULT_REPO_PATH, DEFAULT_MODE, DEFAULT_FILE_PATH_PREFIX
21
+ )
12
22
  end
13
23
 
14
24
  def self.configure
@@ -0,0 +1 @@
1
+ Branch test_branch (at ce7a40f) deployed as release 20141210195915 by runner\n
@@ -23,22 +23,48 @@ RSpec.describe RackCommitStats::App do
23
23
  expect(headers).to eq({"Content-Type" => "application/json"})
24
24
  end
25
25
 
26
- it 'renders a JSON object with commit details as the body' do
27
- allow(RackCommitStats::Commit).to receive(:new).and_return commit_double
28
- _, _, response = subject
29
- expect(response.first).to eq(
30
- {
31
- branch: 'specs',
32
- commit: {
33
- revision: 'gibberish',
34
- message: 'hello',
35
- author: {
36
- name: 'Foo Bar',
37
- email: 'foo@bar.com'
26
+ context 'default mode' do
27
+ it 'renders a JSON object with commit details as the body' do
28
+ allow(described_class).to receive(:commit).and_return commit_double
29
+ _, _, response = subject
30
+ expect(response.first).to eq(
31
+ {
32
+ branch: 'specs',
33
+ commit: {
34
+ revision: 'gibberish',
35
+ message: 'hello',
36
+ author: {
37
+ name: 'Foo Bar',
38
+ email: 'foo@bar.com'
39
+ }
38
40
  }
39
- }
40
- }.to_json
41
- )
41
+ }.to_json
42
+ )
43
+ end
44
+ end
45
+
46
+ context 'file mode' do
47
+ before do
48
+ RackCommitStats.configure { |config| config.mode = :file }
49
+ end
50
+
51
+ it 'renders a JSON object with commit details as the body' do
52
+ allow(described_class).to receive(:commit).and_return commit_double
53
+ _, _, response = subject
54
+ expect(response.first).to eq(
55
+ {
56
+ branch: 'specs',
57
+ commit: {
58
+ revision: 'gibberish',
59
+ message: 'hello',
60
+ author: {
61
+ name: 'Foo Bar',
62
+ email: 'foo@bar.com'
63
+ }
64
+ }
65
+ }.to_json
66
+ )
67
+ end
42
68
  end
43
69
  end
44
70
 
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe RackCommitStats::CommitFromEnv do
4
+ before do
5
+ RackCommitStats.configure do |config|
6
+ config.repo_path = 'spec/fixtures/repo'
7
+ config.mode = :file
8
+ config.file_path_prefix = 'spec/fixtures'
9
+ end
10
+ end
11
+
12
+ describe '#branch' do
13
+ it 'returns the branch name at HEAD' do
14
+ expect(described_class.new.branch).to eq 'test_branch'
15
+ end
16
+ end
17
+
18
+ describe '#revision' do
19
+ it 'returns the revision SHA at HEAD' do
20
+ expect(described_class.new.revision).to eq(
21
+ "ce7a40f280665ce2e7bbc10b81a91632affe15ab"
22
+ )
23
+ end
24
+ end
25
+
26
+ describe '#message' do
27
+ it 'returns the commit message at HEAD' do
28
+ expect(described_class.new.message).to eq "bar"
29
+ end
30
+ end
31
+
32
+ describe '#author' do
33
+ it 'returns a hash of author information for the commit at HEAD' do
34
+ expect(described_class.new.author).to eq(
35
+ {
36
+ name: 'Foo Bar',
37
+ email: 'foo@bar.com'
38
+ }
39
+ )
40
+ end
41
+ end
42
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-commit-stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Bealmear
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-07 00:00:00.000000000 Z
11
+ date: 2014-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rugged
@@ -65,13 +65,16 @@ files:
65
65
  - lib/rack-commit-stats.rb
66
66
  - lib/rack-commit-stats/app.rb
67
67
  - lib/rack-commit-stats/commit.rb
68
+ - lib/rack-commit-stats/commit_from_env.rb
68
69
  - lib/rack-commit-stats/railtie.rb
69
70
  - lib/rack-commit-stats/version.rb
70
71
  - rack-commit-stats.gemspec
71
72
  - spec/fixtures/repo/HEAD
72
73
  - spec/fixtures/repo/objects/ce/7a40f280665ce2e7bbc10b81a91632affe15ab
73
74
  - spec/fixtures/repo/refs/heads/master
75
+ - spec/fixtures/revisions.log
74
76
  - spec/lib/rack-commit-stats/app_spec.rb
77
+ - spec/lib/rack-commit-stats/commit_from_env_spec.rb
75
78
  - spec/lib/rack-commit-stats/commit_spec.rb
76
79
  - spec/lib/rack-commit-stats_spec.rb
77
80
  - spec/spec_helper.rb