sha_header 0.0.2 → 0.0.3
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/.rvmrc +52 -1
- data/README.md +41 -0
- data/Rakefile +2 -0
- data/lib/sha_header/middleware.rb +8 -10
- data/lib/sha_header/version.rb +1 -1
- data/sha_header.gemspec +3 -5
- data/spec/models/middleware_spec.rb +7 -9
- data/spec/spec_helper.rb +11 -7
- data/spec/support/fakefs.rb +2 -15
- data/spec/support/rack.rb +1 -0
- metadata +66 -81
data/.rvmrc
CHANGED
@@ -1 +1,52 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
+
# development environment upon cd'ing into the directory
|
5
|
+
|
6
|
+
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
|
+
# Only full ruby name is supported here, for short names use:
|
8
|
+
# echo "rvm use 1.9.3" > .rvmrc
|
9
|
+
environment_id="ruby-1.9.3-p327@sha_header"
|
10
|
+
|
11
|
+
# Uncomment the following lines if you want to verify rvm version per project
|
12
|
+
# rvmrc_rvm_version="1.16.20 (version)" # 1.10.1 seams as a safe start
|
13
|
+
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
|
14
|
+
# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
|
15
|
+
# return 1
|
16
|
+
# }
|
17
|
+
|
18
|
+
# First we attempt to load the desired environment directly from the environment
|
19
|
+
# file. This is very fast and efficient compared to running through the entire
|
20
|
+
# CLI and selector. If you want feedback on which environment was used then
|
21
|
+
# insert the word 'use' after --create as this triggers verbose mode.
|
22
|
+
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
23
|
+
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
24
|
+
then
|
25
|
+
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
26
|
+
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
27
|
+
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
28
|
+
if [[ $- == *i* ]] # check for interactive shells
|
29
|
+
then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
|
30
|
+
else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
|
31
|
+
fi
|
32
|
+
else
|
33
|
+
# If the environment file has not yet been created, use the RVM CLI to select.
|
34
|
+
rvm --create use "$environment_id" || {
|
35
|
+
echo "Failed to create RVM environment '${environment_id}'."
|
36
|
+
return 1
|
37
|
+
}
|
38
|
+
fi
|
39
|
+
|
40
|
+
# If you use bundler, this might be useful to you:
|
41
|
+
# if [[ -s Gemfile ]] && {
|
42
|
+
# ! builtin command -v bundle >/dev/null ||
|
43
|
+
# builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
|
44
|
+
# }
|
45
|
+
# then
|
46
|
+
# printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
|
47
|
+
# gem install bundler
|
48
|
+
# fi
|
49
|
+
# if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
|
50
|
+
# then
|
51
|
+
# bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
|
52
|
+
# fi
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# SHAHeader
|
2
|
+
|
3
|
+
SHAHeader is a simple Rack middleware gem for Rails 3. When required, it
|
4
|
+
will instruct Rails to automatically insert its middleware into the Rack
|
5
|
+
stack and inject your current git SHA hash into all of your dynamic
|
6
|
+
response headers.
|
7
|
+
|
8
|
+
## Compatibility
|
9
|
+
|
10
|
+
The SHAHeader gem is both Ruby 1.8.7 and 1.9.2 compatible. Currently,
|
11
|
+
it is compatible with Rails 3.x.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
In Rails 3, modify your `Gemfile` to add the following line:
|
16
|
+
|
17
|
+
gem 'sha_header'
|
18
|
+
|
19
|
+
That's it. It is distributed with a `Railtie` to instruct Rails on how
|
20
|
+
to set it up, so no other coding is required.
|
21
|
+
|
22
|
+
## Example
|
23
|
+
|
24
|
+
Here's a simple example for a Rails application running locally. The
|
25
|
+
application has added the above `Gemfile` line. Using curl:
|
26
|
+
|
27
|
+
curl -I http://localhost:3000/
|
28
|
+
|
29
|
+
And, the following response is received:
|
30
|
+
|
31
|
+
HTTP/1.1 200 OK
|
32
|
+
Content-Type: text/html; charset=utf-8
|
33
|
+
ETag: "25ec427afba8daa376f309559b1b3c5c"
|
34
|
+
Cache-Control: max-age=0, private, must-revalidate
|
35
|
+
X-Git-SHA: 8c139c519c731be597d0c37a6e5ce46a27bab174
|
36
|
+
X-UA-Compatible: IE=Edge
|
37
|
+
X-Runtime: 0.120340
|
38
|
+
Content-Length: 0
|
39
|
+
Connection: Keep-Alive
|
40
|
+
|
41
|
+
(Notice the `X-Git-SHA` header)
|
data/Rakefile
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'active_support/core_ext/object/blank'
|
2
|
-
require 'active_support/memoizable'
|
3
2
|
|
4
3
|
module SHAHeader
|
5
4
|
class Middleware
|
6
|
-
extend ::ActiveSupport::Memoizable
|
7
|
-
|
8
5
|
def initialize(app, options = {})
|
9
6
|
@app = app
|
10
7
|
end
|
@@ -28,14 +25,15 @@ module SHAHeader
|
|
28
25
|
end
|
29
26
|
|
30
27
|
def current_git_sha
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
@current_git_sha ||= begin
|
29
|
+
if revision_present?
|
30
|
+
File.read(::Rails.root.join('REVISION')).strip
|
31
|
+
elsif on_heroku?
|
32
|
+
ENV['COMMIT_HASH'].strip
|
33
|
+
else
|
34
|
+
`cd "#{::Rails.root}" && git rev-parse HEAD 2>/dev/null`.strip
|
35
|
+
end
|
37
36
|
end
|
38
37
|
end
|
39
|
-
memoize :current_git_sha
|
40
38
|
end
|
41
39
|
end
|
data/lib/sha_header/version.rb
CHANGED
data/sha_header.gemspec
CHANGED
@@ -12,12 +12,10 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{Add a header to the response of your Rails 3 application containing the current commit SHA.}
|
13
13
|
s.description = %q{This library adds a new, custom X-Git-SHA header to your Rails 3 application's response which contains the SHA hash that your application is currently running.}
|
14
14
|
|
15
|
-
s.
|
15
|
+
s.add_dependency 'railties', '~>3.0'
|
16
16
|
|
17
|
-
s.
|
18
|
-
|
19
|
-
s.add_development_dependency 'rspec', '~>2.5.0'
|
20
|
-
s.add_development_dependency 'fakefs', '~>0.3.0'
|
17
|
+
s.add_development_dependency 'rspec', '~>2.5'
|
18
|
+
s.add_development_dependency 'fakefs', '~>0.4'
|
21
19
|
|
22
20
|
s.files = `git ls-files`.split("\n")
|
23
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe SHAHeader::Middleware do
|
4
|
-
include FakeFS::SpecHelpers
|
5
|
-
|
6
4
|
let(:parent_app) {lambda { |env| [200, {'Content-Type' => 'text/plain'}, ['Hello']] }}
|
7
5
|
let(:middleware) { SHAHeader::Middleware.new(parent_app) }
|
8
6
|
let(:env) { Rack::MockRequest.env_for('/hello') }
|
@@ -21,14 +19,14 @@ describe SHAHeader::Middleware do
|
|
21
19
|
it { should == 'ABCDEFG' }
|
22
20
|
end
|
23
21
|
|
24
|
-
context 'with a REVISION file' do
|
25
|
-
use_fakefs
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
after(:each) { File.delete(path) }
|
22
|
+
context 'with a REVISION file', :fakefs do
|
23
|
+
use_fakefs(self) do
|
24
|
+
let(:path) { Rails.root.join('REVISION') }
|
25
|
+
before(:each) { File.open(path, 'w') { |file| file.write 'HIJKLMNO' }}
|
26
|
+
after(:each) { File.delete(path) }
|
30
27
|
|
31
|
-
|
28
|
+
it { should == 'HIJKLMNO' }
|
29
|
+
end
|
32
30
|
end
|
33
31
|
|
34
32
|
context 'when querying git' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
$:.unshift(File.expand_path('../', __FILE__))
|
2
|
-
$:.unshift(File.expand_path('../../lib', __FILE__))
|
3
|
-
|
4
|
-
require 'rspec'
|
5
|
-
require 'rack'
|
6
1
|
require 'sha_header'
|
7
2
|
|
8
|
-
|
9
|
-
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
5
|
+
config.run_all_when_everything_filtered = true
|
6
|
+
config.filter_run :focus
|
7
|
+
|
8
|
+
# Run specs in random order to surface order dependencies. If you find an
|
9
|
+
# order dependency and want to debug it, you can fix the order by providing
|
10
|
+
# the seed, which is printed after each run.
|
11
|
+
# --seed 1234
|
12
|
+
config.order = 'random'
|
10
13
|
end
|
11
14
|
|
15
|
+
Dir[File.expand_path("../support/*.rb", __FILE__)].each { |f| require f }
|
data/spec/support/fakefs.rb
CHANGED
@@ -1,18 +1,5 @@
|
|
1
|
-
require 'fakefs'
|
2
|
-
|
3
|
-
module FakeFS::SpecHelpers
|
4
|
-
def use_fakefs
|
5
|
-
before(:each) do
|
6
|
-
FakeFS.activate!
|
7
|
-
end
|
8
|
-
|
9
|
-
after(:each) do
|
10
|
-
FakeFS.deactivate!
|
11
|
-
FakeFS::FileSystem.clear
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
1
|
+
require 'fakefs/spec_helpers'
|
15
2
|
|
16
3
|
RSpec.configure do |config|
|
17
|
-
config.
|
4
|
+
config.include FakeFS::SpecHelpers, :fakefs
|
18
5
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'rack'
|
metadata
CHANGED
@@ -1,84 +1,76 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sha_header
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 0.0.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Nathaniel Bibler
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
name: rails
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: railties
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
18
|
+
requirements:
|
27
19
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 3
|
32
|
-
- 0
|
33
|
-
- 0
|
34
|
-
version: 3.0.0
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
35
22
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rspec
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
41
33
|
none: false
|
42
|
-
requirements:
|
34
|
+
requirements:
|
43
35
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 2
|
48
|
-
- 5
|
49
|
-
- 0
|
50
|
-
version: 2.5.0
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.5'
|
51
38
|
type: :development
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: fakefs
|
55
39
|
prerelease: false
|
56
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
41
|
none: false
|
58
|
-
requirements:
|
42
|
+
requirements:
|
59
43
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.5'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: fakefs
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.4'
|
67
54
|
type: :development
|
68
|
-
|
69
|
-
|
70
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.4'
|
62
|
+
description: This library adds a new, custom X-Git-SHA header to your Rails 3 application's
|
63
|
+
response which contains the SHA hash that your application is currently running.
|
64
|
+
email:
|
71
65
|
- gem@nathanielbibler.com
|
72
66
|
executables: []
|
73
|
-
|
74
67
|
extensions: []
|
75
|
-
|
76
68
|
extra_rdoc_files: []
|
77
|
-
|
78
|
-
files:
|
69
|
+
files:
|
79
70
|
- .gitignore
|
80
71
|
- .rvmrc
|
81
72
|
- Gemfile
|
73
|
+
- README.md
|
82
74
|
- Rakefile
|
83
75
|
- lib/sha_header.rb
|
84
76
|
- lib/sha_header/middleware.rb
|
@@ -88,43 +80,36 @@ files:
|
|
88
80
|
- spec/models/middleware_spec.rb
|
89
81
|
- spec/spec_helper.rb
|
90
82
|
- spec/support/fakefs.rb
|
83
|
+
- spec/support/rack.rb
|
91
84
|
- spec/support/rails.rb
|
92
|
-
has_rdoc: true
|
93
85
|
homepage: https://github.com/nbibler/sha_header
|
94
86
|
licenses: []
|
95
|
-
|
96
87
|
post_install_message:
|
97
88
|
rdoc_options: []
|
98
|
-
|
99
|
-
require_paths:
|
89
|
+
require_paths:
|
100
90
|
- lib
|
101
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
92
|
none: false
|
103
|
-
requirements:
|
104
|
-
- -
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
|
107
|
-
|
108
|
-
- 0
|
109
|
-
version: "0"
|
110
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
98
|
none: false
|
112
|
-
requirements:
|
113
|
-
- -
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
|
116
|
-
segments:
|
117
|
-
- 0
|
118
|
-
version: "0"
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
119
103
|
requirements: []
|
120
|
-
|
121
|
-
|
122
|
-
rubygems_version: 1.6.2
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 1.8.24
|
123
106
|
signing_key:
|
124
107
|
specification_version: 3
|
125
|
-
summary: Add a header to the response of your Rails 3 application containing the current
|
126
|
-
|
108
|
+
summary: Add a header to the response of your Rails 3 application containing the current
|
109
|
+
commit SHA.
|
110
|
+
test_files:
|
127
111
|
- spec/models/middleware_spec.rb
|
128
112
|
- spec/spec_helper.rb
|
129
113
|
- spec/support/fakefs.rb
|
114
|
+
- spec/support/rack.rb
|
130
115
|
- spec/support/rails.rb
|