vault-tools 0.5.4 → 0.5.5

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/lib/vault-tools.rb CHANGED
@@ -10,6 +10,12 @@ Honeybadger.configure do |config|
10
10
  config.api_key = ENV['HONEYBADGER_API_KEY']
11
11
  end
12
12
 
13
+ # Yes, there's a lot of stuff on STDERR. But its on
14
+ # stderr and not stdout so you can pipe to /dev/null if
15
+ # you hate it. These methods do some pretty heavy-handed
16
+ # environment munging and could lead to some hair-pulling
17
+ # errors if you're not aware of whats going on.
18
+
13
19
  module Vault
14
20
  #require bundler and the proper gems for the ENV
15
21
  def self.require
@@ -45,6 +51,14 @@ module Vault
45
51
  Object.const_set(:Config, Vault::Config)
46
52
  end
47
53
 
54
+ def self.load_shared_config
55
+ return unless Config.production?
56
+ if Config[:config_app]
57
+ $stderr.puts "Loading shared config from app: #{Config[:config_app]}..."
58
+ Config.load_shared!(Config[:config_app])
59
+ end
60
+ end
61
+
48
62
  # all in one go
49
63
  def self.setup
50
64
  self.require
@@ -52,6 +66,7 @@ module Vault
52
66
  self.set_timezones
53
67
  self.hack_time_class
54
68
  self.override_global_config
69
+ self.load_shared_config
55
70
  end
56
71
  end
57
72
 
@@ -1,6 +1,48 @@
1
1
  module Vault
2
2
  module Config
3
3
  @@defaults = {}
4
+ @@shared = {}
5
+
6
+ # Get a Config value
7
+ #
8
+ # This is the preferred and uniform way to access config vars because
9
+ # defaults and shared config are included in the lookup
10
+ #
11
+ # Uses defaults and shared if available. Converts upper-case ENV var names
12
+ # to lower-case default names.
13
+ #
14
+ # Order of precedence is:
15
+ # 1) app's local ENV
16
+ # 2) shared config vars
17
+ # 3) default values
18
+ #
19
+ # Config[:foo] == nil
20
+ #
21
+ # Config.default(:foo, 'bar')
22
+ # Config[:foo] == 'bar'
23
+ #
24
+ # ENV['FOO'] = 'baz'
25
+ # Config[:foo] == 'baz'
26
+ #
27
+ # @param key [Symbol] The lower-case name of the ENV value
28
+ # @return [String] The value of the ENV value or default.
29
+ def self.[](name)
30
+ var_name = name.to_s.upcase
31
+ default_name = name.to_s.downcase.to_sym
32
+ ENV[var_name] || @@shared[var_name] || @@defaults[default_name]
33
+ end
34
+
35
+ # Loads config from another app.
36
+ def self.load_shared!(app = nil)
37
+ heroku = Heroku::API.new
38
+ @@shared = heroku.get_config_vars(app).body
39
+ end
40
+
41
+ # Reset defaults and shared values
42
+ def self.reset!
43
+ @@defaults = {}
44
+ @@shared = {}
45
+ end
4
46
 
5
47
  # An environment variable from another app.
6
48
  #
@@ -39,26 +81,6 @@ module Vault
39
81
  @@defaults
40
82
  end
41
83
 
42
- # Get a Config value
43
- # Uses defaults if available. Converts upper-case ENV var names
44
- # to lower-case default names.
45
- #
46
- # Config[:foo] == nil
47
- #
48
- # Config.default(:foo, 'bar')
49
- # Config[:foo] == 'bar'
50
- #
51
- # ENV['FOO'] = 'baz'
52
- # Config[:foo] == 'baz'
53
- #
54
- # @param key [Symbol] The lower-case name of the ENV value
55
- # @return [String] The value of the ENV value or default.
56
- def self.[](name)
57
- var_name = name.to_s.upcase
58
- default_name = name.to_s.downcase.to_sym
59
- ENV[var_name] || @@defaults[default_name]
60
- end
61
-
62
84
  # An environment variable.
63
85
  #
64
86
  # @param name [String] The name of the environment variable to fetch a
@@ -0,0 +1,44 @@
1
+ # Documentation Tasks
2
+ #
3
+ #
4
+ require 'vault-tools/s3'
5
+
6
+ namespace :docs do
7
+ desc "Publish Docs to S3"
8
+ task :publish do
9
+ DOC_BUCKET = "heroku-vault-docs2"
10
+ DOC_DIR_NAME = Dir.pwd.split("/").last
11
+
12
+ # Check for s3cmd CLI
13
+ response = system('s3cmd --version')
14
+ raise "\n\n\033[1;31m Install s3cmd through 'brew install s3cmd' if you are on a Mac or from 'http://s3tools.org/s3cmd' to use this feature.\033[0m\n\n\n" unless response
15
+
16
+ # Configure your docs amazon creds if you haven't already
17
+ unless File.exist?("#{Dir.home}/.s3cfg_docs")
18
+ puts "Configuring S3 Doc Creds - make sure you answer 'y' when asked to save ..."
19
+ sh 's3cmd --configure --config ~/.s3cfg_docs'
20
+ end
21
+
22
+ # Build Docs
23
+ Rake::Task["yard"].invoke
24
+
25
+ # Copy
26
+ sh 'mkdir -p ~/tmp'
27
+ sh "cp -R doc ~/tmp/#{DOC_DIR_NAME}"
28
+
29
+ system "s3cmd mb s3://#{DOC_BUCKET} --config ~/.s3cfg_docs"
30
+ res = system("s3cmd -P put -r ~/tmp/#{DOC_DIR_NAME} s3://#{DOC_BUCKET}/ --config ~/.s3cfg_docs")
31
+
32
+ unless res
33
+ puts "\n\033[1;31m Make sure you put the doc credentials in .s3cfg_docs file. If you don't have them talk to the S3 doc administrator.\033[0m\n\n"
34
+ exit
35
+ end
36
+
37
+ # Cleanup
38
+ sh "rm -r ~/tmp/#{DOC_DIR_NAME}"
39
+
40
+ # Restart Vault Docs
41
+ sh "hk restart -a vault-docs"
42
+ puts "\n\033[1;32m Make sure to restart the vault-docs app to see NEW docs ( If hk restart fails )! \033[0m\n"
43
+ end
44
+ end
@@ -3,11 +3,11 @@
3
3
  # include in Rakefile via:
4
4
  #
5
5
  # require 'vault-tools/tasks'
6
-
7
6
  require 'vault-tools/core_db_tasks'
8
7
  require 'vault-tools/vault_db_tasks'
9
8
  require 'vault-tools/usage_db_tasks'
10
9
  require 'vault-tools/analytics_db_tasks'
10
+ require 'vault-tools/doc_tasks'
11
11
 
12
12
  desc "Run all pull schema tasks (all tasks that match pull_.*_schema)"
13
13
  task :pull_schemas do
@@ -1,5 +1,5 @@
1
1
  module Vault
2
2
  module Tools
3
- VERSION = '0.5.4'
3
+ VERSION = '0.5.5'
4
4
  end
5
5
  end
data/test/config_test.rb CHANGED
@@ -4,6 +4,11 @@ require 'minitest/mock'
4
4
  class ConfigTest < Vault::TestCase
5
5
  include Vault::Test::EnvironmentHelpers
6
6
 
7
+ def teardown
8
+ super
9
+ Config.reset!
10
+ end
11
+
7
12
  # Config.remote_env uses the Heroku API to read config vars from
8
13
  # other apps.
9
14
  def test_remote_env
@@ -16,6 +21,23 @@ class ConfigTest < Vault::TestCase
16
21
  end
17
22
  end
18
23
 
24
+ # Config.remote_env uses the Heroku API to read config vars from
25
+ # other apps.
26
+ def test_shared_config_loads_shared_with_correct_precedence
27
+ set_env('CONFIG_APP', 'vault-config')
28
+ api_mock = MiniTest::Mock.new
29
+ api_response = OpenStruct.new(body: {'HELLO' => 'world'})
30
+ Heroku::API.stub(:new, api_mock) do
31
+ api_mock.expect(:get_config_vars, api_response, ['vault-config'])
32
+ assert_equal(nil, Config[:hello])
33
+ Config.default(:hello, 'foo')
34
+ assert_equal('foo', Config[:hello])
35
+ # this is how we'll call it in the code
36
+ Config.load_shared!(Config[:config_app])
37
+ assert_equal('world', Config[:hello])
38
+ end
39
+ end
40
+
19
41
  # Config.env returns the value matching the specified environment
20
42
  # variable name.
21
43
  def test_env
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.5.4
4
+ version: 0.5.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-03-19 00:00:00.000000000 Z
13
+ date: 2014-04-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: scrolls
@@ -197,6 +197,7 @@ files:
197
197
  - lib/vault-tools/app.rb
198
198
  - lib/vault-tools/config.rb
199
199
  - lib/vault-tools/core_db_tasks.rb
200
+ - lib/vault-tools/doc_tasks.rb
200
201
  - lib/vault-tools/hid.rb
201
202
  - lib/vault-tools/log.rb
202
203
  - lib/vault-tools/pipeline.rb
@@ -239,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
240
  version: '0'
240
241
  segments:
241
242
  - 0
242
- hash: 229862795146143839
243
+ hash: 915007437591633538
243
244
  required_rubygems_version: !ruby/object:Gem::Requirement
244
245
  none: false
245
246
  requirements:
@@ -248,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
249
  version: '0'
249
250
  segments:
250
251
  - 0
251
- hash: 229862795146143839
252
+ hash: 915007437591633538
252
253
  requirements: []
253
254
  rubyforge_project:
254
255
  rubygems_version: 1.8.23