vault-tools 0.0.5 → 0.0.7
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/.gitignore +2 -1
- data/README.md +21 -3
- data/lib/vault-tools.rb +6 -2
- data/lib/vault-tools/app.rb +35 -0
- data/lib/vault-tools/hid.rb +21 -0
- data/lib/vault-tools/product.rb +20 -0
- data/lib/vault-tools/user.rb +36 -0
- data/lib/vault-tools/version.rb +1 -1
- data/test/app_test.rb +34 -0
- data/test/hid_test.rb +40 -0
- data/test/product_test.rb +29 -0
- data/test/user_test.rb +34 -0
- data/vault-tools.gemspec +8 -5
- metadata +30 -9
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,23 @@
|
|
1
|
-
# Vault
|
1
|
+
# Vault::Tools
|
2
|
+
|
3
|
+
Tooling for the Heroku Vault team to enable faster bootstrapping for
|
4
|
+
Ruby projects.
|
5
|
+
|
6
|
+
## Setting up a development environment
|
7
|
+
|
8
|
+
Install the dependencies:
|
9
|
+
|
10
|
+
bundle install --binstubs vendor/bin
|
11
|
+
rbenv rehash
|
12
|
+
|
13
|
+
Run the tests:
|
14
|
+
|
15
|
+
vendor/bin/t
|
16
|
+
|
17
|
+
Generate the API documentation:
|
18
|
+
|
19
|
+
vendor/bin/d
|
2
20
|
|
3
|
-
Tooling for the Heroku Vault team to enable faster bootstrapping for Ruby projects.
|
4
21
|
|
5
22
|
## Installation
|
6
23
|
|
@@ -8,6 +25,7 @@ Add this line to your application's Gemfile:
|
|
8
25
|
|
9
26
|
gem 'vault-tools'
|
10
27
|
|
28
|
+
|
11
29
|
## Usage
|
12
30
|
|
13
31
|
### Logging
|
@@ -20,7 +38,7 @@ Add this line to your application's Gemfile:
|
|
20
38
|
# => "measure=true at=foo"
|
21
39
|
```
|
22
40
|
|
23
|
-
### Sinatra
|
41
|
+
### Sinatra base class
|
24
42
|
|
25
43
|
Includes request logging and health endpoints
|
26
44
|
|
data/lib/vault-tools.rb
CHANGED
@@ -11,7 +11,11 @@ module Vault
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
require 'vault-tools/
|
14
|
+
require 'vault-tools/app'
|
15
|
+
require 'vault-tools/config'
|
16
|
+
require 'vault-tools/hid'
|
15
17
|
require 'vault-tools/log'
|
18
|
+
require 'vault-tools/product'
|
19
|
+
require 'vault-tools/sinatra_helpers/html_serializer'
|
20
|
+
require 'vault-tools/user'
|
16
21
|
require 'vault-tools/web'
|
17
|
-
require 'vault-tools/config'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'uuidtools'
|
2
|
+
|
3
|
+
module Vault
|
4
|
+
module App
|
5
|
+
# Convert an app ID into a Heroku app ID.
|
6
|
+
#
|
7
|
+
# @param app_id [Fixnum] An app ID.
|
8
|
+
# @return [String] A Heroku ID that uniquely represents the app.
|
9
|
+
def self.id_to_hid(app_id)
|
10
|
+
"app#{app_id}@heroku.com"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Convert an app ID into a v5 UUID.
|
14
|
+
#
|
15
|
+
# @param app_id [Fixnum] An app ID.
|
16
|
+
# @return [String] A v5 UUID that uniquely represents the app.
|
17
|
+
def self.id_to_uuid(app_id)
|
18
|
+
url = "https://vault.heroku.com/apps/#{app_id}"
|
19
|
+
UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
# Convert a Heroku app ID into a v5 UUID.
|
23
|
+
#
|
24
|
+
# @param heroku_id [String] A Heroku app ID, such as `app1234@heroku.com`.
|
25
|
+
# @raise [ArgumentError] Raised if a malformed Heroku ID is provided.
|
26
|
+
# @return [String] A v5 UUID that uniquely represents the app.
|
27
|
+
def self.hid_to_uuid(heroku_id)
|
28
|
+
if app_id = heroku_id.slice(/^app(\d+)\@heroku\.com$/, 1)
|
29
|
+
id_to_uuid(app_id)
|
30
|
+
else
|
31
|
+
raise ArgumentError, "#{heroku_id} is not a valid Heroku app ID."
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'uuidtools'
|
2
|
+
|
3
|
+
module Vault
|
4
|
+
module HID
|
5
|
+
# Convert a Heroku app ID or user ID into a v5 UUID.
|
6
|
+
#
|
7
|
+
# @param heroku_id [String] A Heroku app ID over user ID
|
8
|
+
# @raise [ArgumentError] Raised if a malformed Heroku ID is provided.
|
9
|
+
# @return [String] A v5 UUID that uniquely represents the app.
|
10
|
+
def self.hid_to_uuid(string)
|
11
|
+
case string
|
12
|
+
when /^user/
|
13
|
+
User.hid_to_uuid(string)
|
14
|
+
when /^app/
|
15
|
+
App.hid_to_uuid(string)
|
16
|
+
else
|
17
|
+
raise ArgumentError, "#{string} is not a valid Heroku app or user ID."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'uuidtools'
|
2
|
+
|
3
|
+
module Vault
|
4
|
+
module Product
|
5
|
+
# Convert a product name into a v5 UUID.
|
6
|
+
#
|
7
|
+
# @param name [String] A product name.
|
8
|
+
# @raise [RuntimeError] Raised if the product name is empty or contains
|
9
|
+
# illegal characters. A product name may only contain 'a-z', '0-9' and
|
10
|
+
# ':' characters.
|
11
|
+
# @return [String] A v5 UUID that uniquely represents the product.
|
12
|
+
def self.name_to_uuid(name)
|
13
|
+
unless name =~ /[a-z,0-9,:]+/
|
14
|
+
raise "Product name empty or contains illegal characters."
|
15
|
+
end
|
16
|
+
url = "https://vault.heroku.com/products/#{name}"
|
17
|
+
UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'uuidtools'
|
2
|
+
|
3
|
+
module Vault
|
4
|
+
module User
|
5
|
+
# Convert a user ID into a Heroku user ID.
|
6
|
+
#
|
7
|
+
# @param user_id [Fixnum] A user ID.
|
8
|
+
# @return [String] A Heroku ID that uniquely represents the user.
|
9
|
+
def self.id_to_hid(user_id)
|
10
|
+
"user#{user_id}@heroku.com"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Convert a user ID into a v5 UUID.
|
14
|
+
#
|
15
|
+
# @param user_id [Fixnum] A user ID.
|
16
|
+
# @return [String] A v5 UUID that uniquely represents the user.
|
17
|
+
def self.id_to_uuid(user_id)
|
18
|
+
url = "https://vault.heroku.com/users/#{user_id}"
|
19
|
+
UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
# Convert a Heroku user ID into a v5 UUID.
|
23
|
+
#
|
24
|
+
# @param heroku_id [String] A Heroku user ID, such as
|
25
|
+
# `user1234@heroku.com`.
|
26
|
+
# @raise [ArgumentError] Raised if a malformed Heroku ID is provided.
|
27
|
+
# @return [String] A v5 UUID that uniquely represents the user.
|
28
|
+
def self.hid_to_uuid(heroku_id)
|
29
|
+
if user_id = heroku_id.slice(/^user(\d+)\@heroku\.com$/, 1)
|
30
|
+
id_to_uuid(user_id)
|
31
|
+
else
|
32
|
+
raise ArgumentError,"#{heroku_id} is not a valid Heroku user ID."
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/vault-tools/version.rb
CHANGED
data/test/app_test.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'uuidtools'
|
3
|
+
|
4
|
+
class AppTest < Vault::TestCase
|
5
|
+
# App.id_to_hid converts an app ID to a Heroku app ID.
|
6
|
+
def test_id_to_hid
|
7
|
+
assert_equal('app1234@heroku.com', Vault::App.id_to_hid(1234))
|
8
|
+
end
|
9
|
+
|
10
|
+
# App.id_to_uuid converts an app ID to a v5 UUID based on a URL scheme.
|
11
|
+
def test_id_to_uuid
|
12
|
+
url = "https://vault.heroku.com/apps/1234"
|
13
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
14
|
+
assert_equal(uuid, Vault::App.id_to_uuid(1234))
|
15
|
+
end
|
16
|
+
|
17
|
+
# App.hid_to_uuid converts a Heroku app ID to a v5 UUID based on a URL
|
18
|
+
# scheme.
|
19
|
+
def test_hid_to_uuid
|
20
|
+
url = "https://vault.heroku.com/apps/1234"
|
21
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
22
|
+
assert_equal(uuid, Vault::App.hid_to_uuid('app1234@heroku.com'))
|
23
|
+
end
|
24
|
+
|
25
|
+
# App.hid_to_uuid raises a ArgumentError if the specified ID doesn't match
|
26
|
+
# the expected format.
|
27
|
+
def test_hid_to_uuid_with_invalid_heroku_id
|
28
|
+
error = assert_raises(ArgumentError) do
|
29
|
+
Vault::App.hid_to_uuid('invalid1234@heroku.com')
|
30
|
+
end
|
31
|
+
assert_equal('invalid1234@heroku.com is not a valid Heroku app ID.',
|
32
|
+
error.message)
|
33
|
+
end
|
34
|
+
end
|
data/test/hid_test.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'uuidtools'
|
3
|
+
|
4
|
+
class HIDTest < Vault::TestCase
|
5
|
+
|
6
|
+
# HID.hid_to_uuid converts an app ID to a v5 UUID based on a URL scheme.
|
7
|
+
def test_app_id_to_uuid
|
8
|
+
url = "https://vault.heroku.com/apps/1234"
|
9
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
10
|
+
assert_equal(uuid, Vault::HID.hid_to_uuid('app1234@heroku.com'))
|
11
|
+
end
|
12
|
+
|
13
|
+
# HID.hid_to_uuid converts a Heroku app ID to a v5 UUID based on a URL
|
14
|
+
# scheme.
|
15
|
+
def test_user_id_to_uuid
|
16
|
+
url = "https://vault.heroku.com/users/1234"
|
17
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
18
|
+
assert_equal(uuid, Vault::HID.hid_to_uuid('user1234@heroku.com'))
|
19
|
+
end
|
20
|
+
|
21
|
+
# HID.hid_to_uuid raises a ArgumentError if the specified ID doesn't match
|
22
|
+
# the expected format.
|
23
|
+
def test_hid_to_uuid_with_invalid_heroku_id
|
24
|
+
error = assert_raises(ArgumentError) do
|
25
|
+
Vault::HID.hid_to_uuid('invalid1234@heroku.com')
|
26
|
+
end
|
27
|
+
assert_equal('invalid1234@heroku.com is not a valid Heroku app or user ID.',
|
28
|
+
error.message)
|
29
|
+
end
|
30
|
+
|
31
|
+
# HID.hid_to_uuid raises a ArgumentError if the specified ID doesn't match
|
32
|
+
# the expected format.
|
33
|
+
def test_hid_to_uuid_with_subtly_invalid_heroku_id
|
34
|
+
error = assert_raises(ArgumentError) do
|
35
|
+
Vault::HID.hid_to_uuid('app1234--afasd-afas')
|
36
|
+
end
|
37
|
+
assert_equal('app1234--afasd-afas is not a valid Heroku app ID.',
|
38
|
+
error.message)
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'uuidtools'
|
3
|
+
|
4
|
+
class ProductTest < Vault::TestCase
|
5
|
+
# Product.name_to_uuid converts a product name to a v5 UUID based on a URL
|
6
|
+
# scheme.
|
7
|
+
def test_name_to_uuid
|
8
|
+
url = 'https://vault.heroku.com/products/platform:dyno:logical'
|
9
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
10
|
+
assert_equal(uuid, Vault::Product.name_to_uuid('platform:dyno:logical'))
|
11
|
+
end
|
12
|
+
|
13
|
+
# Product.name_to_uuid raises a RuntimeError if an empty name is provided.
|
14
|
+
def test_name_to_uuid_with_empty_name
|
15
|
+
error = assert_raises(RuntimeError) do
|
16
|
+
Vault::Product.name_to_uuid('')
|
17
|
+
end
|
18
|
+
assert_equal("Product name empty or contains illegal characters.",
|
19
|
+
error.message)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Product.name_to_uuid raises a RuntimeError if the product name contains
|
23
|
+
# illegal characters.
|
24
|
+
def test_name_to_uuid_with_illegal_characters
|
25
|
+
assert_raises(RuntimeError) { Vault::Product.name_to_uuid('!') }
|
26
|
+
assert_raises(RuntimeError) { Vault::Product.name_to_uuid(' ') }
|
27
|
+
assert_raises(RuntimeError) { Vault::Product.name_to_uuid('A') }
|
28
|
+
end
|
29
|
+
end
|
data/test/user_test.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'uuidtools'
|
3
|
+
|
4
|
+
class UserTest < Vault::TestCase
|
5
|
+
# User.id_to_hid converts a user ID to a Heroku user ID.
|
6
|
+
def test_id_to_hid
|
7
|
+
assert_equal('user1234@heroku.com', Vault::User.id_to_hid(1234))
|
8
|
+
end
|
9
|
+
|
10
|
+
# User.id_to_uuid converts a user ID to a v5 UUID based on a URL scheme.
|
11
|
+
def test_id_to_uuid
|
12
|
+
url = "https://vault.heroku.com/users/1234"
|
13
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
14
|
+
assert_equal(uuid, Vault::User.id_to_uuid(1234))
|
15
|
+
end
|
16
|
+
|
17
|
+
# User.hid_to_uuid converts a Heroku user ID to a v5 UUID based on a URL
|
18
|
+
# scheme.
|
19
|
+
def test_hid_to_uuid
|
20
|
+
url = "https://vault.heroku.com/users/1234"
|
21
|
+
uuid = UUIDTools::UUID.sha1_create(UUIDTools::UUID_URL_NAMESPACE, url).to_s
|
22
|
+
assert_equal(uuid, Vault::User.hid_to_uuid('user1234@heroku.com'))
|
23
|
+
end
|
24
|
+
|
25
|
+
# User.hid_to_uuid raises a ArgumentError if the specified ID doesn't match
|
26
|
+
# the expected format.
|
27
|
+
def test_hid_to_uuid_with_invalid_heroku_id
|
28
|
+
error = assert_raises(ArgumentError) do
|
29
|
+
Vault::User.hid_to_uuid('invalid1234@heroku.com')
|
30
|
+
end
|
31
|
+
assert_equal('invalid1234@heroku.com is not a valid Heroku user ID.',
|
32
|
+
error.message)
|
33
|
+
end
|
34
|
+
end
|
data/vault-tools.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'vault-tools/version'
|
@@ -7,15 +8,17 @@ Gem::Specification.new do |gem|
|
|
7
8
|
gem.name = "vault-tools"
|
8
9
|
gem.version = Vault::Tools::VERSION
|
9
10
|
gem.authors = ["Chris Continanza", "Jamu Kakar"]
|
10
|
-
gem.email = ["chriscontinanza@gmail.com", "csquared@heroku.com",
|
11
|
-
|
12
|
-
gem.
|
11
|
+
gem.email = ["chriscontinanza@gmail.com", "csquared@heroku.com",
|
12
|
+
"jkakar@heroku.com"]
|
13
|
+
gem.description = "Basic tools for Heroku Vault's Ruby projects"
|
14
|
+
gem.summary = "Test classes, base web classes, and helpers - oh my!"
|
13
15
|
gem.homepage = ""
|
14
16
|
|
15
17
|
gem.files = `git ls-files`.split($/)
|
16
|
-
gem.test_files = gem.files.grep(
|
18
|
+
gem.test_files = gem.files.grep('^(test|spec|features)/')
|
17
19
|
gem.require_paths = ["lib"]
|
18
20
|
|
19
|
-
gem.add_dependency 'sinatra'
|
20
21
|
gem.add_dependency 'scrolls'
|
22
|
+
gem.add_dependency 'sinatra'
|
23
|
+
gem.add_dependency 'uuidtools'
|
21
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vault-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: scrolls
|
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'
|
15
31
|
- !ruby/object:Gem::Dependency
|
16
32
|
name: sinatra
|
17
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -29,7 +45,7 @@ dependencies:
|
|
29
45
|
- !ruby/object:Gem::Version
|
30
46
|
version: '0'
|
31
47
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
48
|
+
name: uuidtools
|
33
49
|
requirement: !ruby/object:Gem::Requirement
|
34
50
|
none: false
|
35
51
|
requirements:
|
@@ -68,14 +84,22 @@ files:
|
|
68
84
|
- bin/turn
|
69
85
|
- bin/vault-tools
|
70
86
|
- lib/vault-tools.rb
|
87
|
+
- lib/vault-tools/app.rb
|
71
88
|
- lib/vault-tools/config.rb
|
89
|
+
- lib/vault-tools/hid.rb
|
72
90
|
- lib/vault-tools/log.rb
|
91
|
+
- lib/vault-tools/product.rb
|
73
92
|
- lib/vault-tools/sinatra_helpers/html_serializer.rb
|
93
|
+
- lib/vault-tools/user.rb
|
74
94
|
- lib/vault-tools/version.rb
|
75
95
|
- lib/vault-tools/web.rb
|
96
|
+
- test/app_test.rb
|
76
97
|
- test/config_test.rb
|
77
98
|
- test/helper.rb
|
99
|
+
- test/hid_test.rb
|
100
|
+
- test/product_test.rb
|
78
101
|
- test/test_spec.rb
|
102
|
+
- test/user_test.rb
|
79
103
|
- vault-tools.gemspec
|
80
104
|
homepage: ''
|
81
105
|
licenses: []
|
@@ -91,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
115
|
version: '0'
|
92
116
|
segments:
|
93
117
|
- 0
|
94
|
-
hash:
|
118
|
+
hash: 233434446101266212
|
95
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
120
|
none: false
|
97
121
|
requirements:
|
@@ -100,15 +124,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
124
|
version: '0'
|
101
125
|
segments:
|
102
126
|
- 0
|
103
|
-
hash:
|
127
|
+
hash: 233434446101266212
|
104
128
|
requirements: []
|
105
129
|
rubyforge_project:
|
106
130
|
rubygems_version: 1.8.23
|
107
131
|
signing_key:
|
108
132
|
specification_version: 3
|
109
133
|
summary: Test classes, base web classes, and helpers - oh my!
|
110
|
-
test_files:
|
111
|
-
- test/config_test.rb
|
112
|
-
- test/helper.rb
|
113
|
-
- test/test_spec.rb
|
134
|
+
test_files: []
|
114
135
|
has_rdoc:
|