remotenv 0.4.0
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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.simplecov +12 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +71 -0
- data/Rakefile +8 -0
- data/bin/setup +7 -0
- data/circle.yml +9 -0
- data/codecov.yml +13 -0
- data/lib/remotenv/adapters/base.rb +54 -0
- data/lib/remotenv/adapters/http.rb +31 -0
- data/lib/remotenv/adapters/s3.rb +55 -0
- data/lib/remotenv/adapters.rb +15 -0
- data/lib/remotenv/logger.rb +23 -0
- data/lib/remotenv/rails.rb +27 -0
- data/lib/remotenv/utils.rb +27 -0
- data/lib/remotenv/version.rb +3 -0
- data/lib/remotenv.rb +39 -0
- data/lib/tasks/remotenv.rake +23 -0
- data/remotenv.gemspec +29 -0
- data/script/console +14 -0
- metadata +166 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bcb4805fa505506602db8674f1aad2e30f2b3416
|
4
|
+
data.tar.gz: b1f367d03d37e1787499ab39a9c7feb680c0474f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a4c319a4ff15015b4a2c8c83c79be5be5de1eddc33ba521ab297e68823e16e074398a1e4097e27bcbbac85ca1608285390b4f8ed82be390f302ce0179854f04d
|
7
|
+
data.tar.gz: 43f988fc4350247afb0a3889dda2d09eb5b8881a774c2a530f92a90aa1ca7d0a9efe1970d05336bd5087ebbf4ffdc8a0dda4da2e6f924e43ea8e716752994081
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.4.1
|
data/.simplecov
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "codeclimate-test-reporter"
|
2
|
+
require 'codecov'
|
3
|
+
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
5
|
+
(CodeClimate::TestReporter::Formatter if ENV['CODECLIMATE_REPO_TOKEN']),
|
6
|
+
(SimpleCov::Formatter::Codecov if ENV['CODECOV_TOKEN']),
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
].compact)
|
9
|
+
SimpleCov.start do
|
10
|
+
add_filter "spec"
|
11
|
+
add_group "Adapters", "lib/remotenv/adapters/"
|
12
|
+
end
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015-2017 Marc Qualie
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Remotenv
|
2
|
+
|
3
|
+
[](https://badge.fury.io/rb/remotenv)
|
4
|
+
[](https://circleci.com/gh/signisto/remotenv-ruby/tree/master)
|
5
|
+
[](https://codeclimate.com/github/signisto/remotenv-ruby/coverage)
|
6
|
+
[](https://codeclimate.com/github/signisto/remotenv-ruby)
|
7
|
+
[](https://codeclimate.com/github/signisto/remotenv-ruby)
|
8
|
+
|
9
|
+
Securely store environment variables away from your application
|
10
|
+
|
11
|
+
**WIP:** This gem is currently under active development. Until **1.0** version backwards-incompatible changes may be introduced with each **0.x** minor version.
|
12
|
+
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
Add this line to your application's Gemfile:
|
17
|
+
|
18
|
+
``` ruby
|
19
|
+
gem 'remotenv'
|
20
|
+
```
|
21
|
+
|
22
|
+
And then execute:
|
23
|
+
|
24
|
+
$ bundle install
|
25
|
+
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
When Remotenv is loaded it automatically uses Dotenv in the background to preload and other configuration mechanisms you may have to make transitioning seamless.
|
30
|
+
|
31
|
+
|
32
|
+
### Rails
|
33
|
+
|
34
|
+
Remotenv automatically pre-loads itself during `before_configuration` phase so no configuration is required.
|
35
|
+
|
36
|
+
### Sinatra
|
37
|
+
|
38
|
+
Use the plain ruby method as early as possible, before any `ENV` variables are accessed. Usually at the top of `app.rb`.
|
39
|
+
|
40
|
+
|
41
|
+
### Plain ruby
|
42
|
+
|
43
|
+
Run the following code before you need access to the environment variables
|
44
|
+
|
45
|
+
``` ruby
|
46
|
+
Remotenv.load
|
47
|
+
```
|
48
|
+
|
49
|
+
|
50
|
+
## Todo
|
51
|
+
|
52
|
+
Below are the main features that will ideally be implemented before v1.0.
|
53
|
+
Contributions welcome.
|
54
|
+
|
55
|
+
- Local caching to protect against network errors
|
56
|
+
- Ordered override behaviour for more fine grained control
|
57
|
+
- Require/Desire to aid developer knowledge of configurations
|
58
|
+
- Add `Remotenv.configure {}` functionality
|
59
|
+
- Encrypted variables
|
60
|
+
|
61
|
+
|
62
|
+
## Development
|
63
|
+
|
64
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
65
|
+
|
66
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
67
|
+
|
68
|
+
|
69
|
+
## Contributing
|
70
|
+
|
71
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/signisto/remotenv-ruby.
|
data/Rakefile
ADDED
data/bin/setup
ADDED
data/circle.yml
ADDED
data/codecov.yml
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'remotenv/adapters'
|
2
|
+
|
3
|
+
module Remotenv
|
4
|
+
module Adapters
|
5
|
+
class Base
|
6
|
+
attr_reader :uri
|
7
|
+
attr_reader :data
|
8
|
+
attr_reader :options
|
9
|
+
|
10
|
+
def initialize(uri, options = {})
|
11
|
+
@uri = uri
|
12
|
+
@options = options
|
13
|
+
@data = {}
|
14
|
+
@content = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def load!
|
18
|
+
Remotenv.logger.debug("Adapter: #{self.class.name}")
|
19
|
+
before_load
|
20
|
+
load
|
21
|
+
after_load
|
22
|
+
apply_environment
|
23
|
+
set_refresh_timestamp
|
24
|
+
end
|
25
|
+
|
26
|
+
def before_load
|
27
|
+
end
|
28
|
+
|
29
|
+
def load
|
30
|
+
raise "Remotenv::Adapter::Base should not be used directly"
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_load
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_refresh_timestamp
|
37
|
+
ENV['REMOTENV_REFRESHED_AT'] = Time.now.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def apply_environment
|
41
|
+
Remotenv.logger.debug("Applying environment variables")
|
42
|
+
@data = Dotenv::Parser.call(@content)
|
43
|
+
Remotenv.logger.debug("ENV: #{@data.keys.join(', ')}")
|
44
|
+
@data.each do |key, value|
|
45
|
+
ENV[key] ||= value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def get(key)
|
50
|
+
@data[key]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'dotenv'
|
2
|
+
require 'remotenv/adapters'
|
3
|
+
require 'remotenv/adapters/base'
|
4
|
+
require 'net/http'
|
5
|
+
|
6
|
+
module Remotenv
|
7
|
+
module Adapters
|
8
|
+
class Http < Base
|
9
|
+
def load
|
10
|
+
Remotenv.logger.debug("Downloading HTTP File: #{remote_uri.to_s}")
|
11
|
+
download_file
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def remote_uri
|
17
|
+
@uri
|
18
|
+
end
|
19
|
+
|
20
|
+
def download_file
|
21
|
+
@content = http_get_content
|
22
|
+
Remotenv.logger.error("Error Downloading HTTP File: #{remote_uri.to_s}") unless @content
|
23
|
+
end
|
24
|
+
|
25
|
+
def http_get_content
|
26
|
+
response = Net::HTTP.get_response(remote_uri) rescue nil
|
27
|
+
response.body if response.is_a?(Net::HTTPSuccess)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
require 'dotenv'
|
3
|
+
require 'remotenv/adapters'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'net/http'
|
6
|
+
require 'openssl'
|
7
|
+
require 'base64'
|
8
|
+
|
9
|
+
module Remotenv
|
10
|
+
module Adapters
|
11
|
+
class S3 < Http
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def config
|
16
|
+
@_config ||= begin
|
17
|
+
uri = Remotenv.uri
|
18
|
+
return {} unless uri && uri.host && uri.path
|
19
|
+
{
|
20
|
+
'filename' => uri.path[1..-1],
|
21
|
+
'bucket_name' => uri.host,
|
22
|
+
'access_key_id' => uri.user,
|
23
|
+
'secret_access_key' => uri.password ? ::URI.unescape(uri.password) : nil,
|
24
|
+
}.compact
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def remote_uri
|
29
|
+
if config['access_key_id'] && config['secret_access_key']
|
30
|
+
URI(signed_s3_url)
|
31
|
+
else
|
32
|
+
URI(direct_s3_url)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def direct_s3_url
|
37
|
+
"https://#{config['bucket_name']}.s3.amazonaws.com/#{config['filename']}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def signed_s3_url
|
41
|
+
s3_resource = "/#{config['bucket_name']}/#{config['filename']}"
|
42
|
+
s3_expires_at = Time.now + 300
|
43
|
+
signature_payload = "GET\n\n\n#{s3_expires_at.to_i}\n#{s3_resource}"
|
44
|
+
digest = OpenSSL::Digest.new('sha1')
|
45
|
+
hmac = OpenSSL::HMAC.digest(digest, config['secret_access_key'], signature_payload)
|
46
|
+
query_params = [
|
47
|
+
"AWSAccessKeyId=#{config['access_key_id']}",
|
48
|
+
"Expires=#{s3_expires_at.to_i}",
|
49
|
+
"Signature=#{CGI.escape Base64.encode64(hmac).strip}"
|
50
|
+
]
|
51
|
+
"#{direct_s3_url}?#{query_params.join('&')}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Remotenv
|
2
|
+
module Adapters
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def for(uri)
|
6
|
+
if uri.scheme == 'http' || uri.scheme == 'https'
|
7
|
+
Remotenv::Adapters::Http.new(uri)
|
8
|
+
elsif uri.scheme == 's3'
|
9
|
+
Remotenv::Adapters::S3.new(uri)
|
10
|
+
else
|
11
|
+
raise "Could not find adapter for scheme - #{uri.scheme}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
module Remotenv
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def logger
|
8
|
+
@_logger ||= Remotenv::Logger.new(STDOUT)
|
9
|
+
end
|
10
|
+
|
11
|
+
def logger=(logger)
|
12
|
+
@_logger = logger
|
13
|
+
end
|
14
|
+
|
15
|
+
class Logger < ::Logger
|
16
|
+
def initialize(*args)
|
17
|
+
super
|
18
|
+
@progname = "remotenv"
|
19
|
+
log_level = (ENV["REMOTENV_LOG_LEVEL"] || ENV["LOG_LEVEL"] || "").upcase
|
20
|
+
@level = ["DEBUG", "INFO", "WARN", "ERROR", "FATAL", "UNKNOWN"].index(log_level) != nil ? Logger.const_get(log_level) : Logger::INFO
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "remotenv"
|
2
|
+
|
3
|
+
module Remotenv
|
4
|
+
# Remotenv Railtie for using Remotenv to load environment before application is loaded
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
config.before_configuration { load }
|
7
|
+
|
8
|
+
# Public: Load Remotenv
|
9
|
+
#
|
10
|
+
# This will get called during the `before_configuration` callback, but you
|
11
|
+
# can manually call `Remotenv::Railtie.load` if you needed it sooner.
|
12
|
+
def load
|
13
|
+
Remotenv.load
|
14
|
+
end
|
15
|
+
|
16
|
+
# Rails uses `#method_missing` to delegate all class methods to the
|
17
|
+
# instance, which means `Kernel#load` gets called here. We don't want that.
|
18
|
+
def self.load
|
19
|
+
instance.load
|
20
|
+
end
|
21
|
+
|
22
|
+
# Rake tasks
|
23
|
+
rake_tasks do
|
24
|
+
Rails::Railtie.instance_method(:load).bind(self).call("tasks/remotenv.rake")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "uri"
|
2
|
+
|
3
|
+
module Remotenv
|
4
|
+
module Utils
|
5
|
+
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def parsed_url
|
9
|
+
return nil if ENV['REMOTENV_URL'] == nil || ENV['REMOTENV_URL'] == ""
|
10
|
+
ENV['REMOTENV_URL']
|
11
|
+
end
|
12
|
+
|
13
|
+
def parsed_uri
|
14
|
+
return nil unless parsed_url
|
15
|
+
parser = ::URI::RFC2396_Parser.new
|
16
|
+
uri = parser.parse(parsed_url)
|
17
|
+
uri
|
18
|
+
rescue Exception => error
|
19
|
+
Remotenv.logger.error("URI Parse Error: URL = #{parsed_url || '[not set]'}")
|
20
|
+
Remotenv.logger.error(" #{error.message}")
|
21
|
+
(0..2).each do |index|
|
22
|
+
Remotenv.logger.error(" #{error.backtrace[index]}")
|
23
|
+
end
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/remotenv.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
require "remotenv/version"
|
4
|
+
require "remotenv/adapters/base"
|
5
|
+
require "remotenv/adapters/http"
|
6
|
+
require "remotenv/adapters/s3"
|
7
|
+
require "remotenv/logger"
|
8
|
+
require "remotenv/utils"
|
9
|
+
|
10
|
+
Dotenv.load("#{Dir.pwd}/.env") if defined?(Dotenv) && ENV['RAILS_ENV'] != "test"
|
11
|
+
|
12
|
+
require "remotenv/rails" if defined?(Rails)
|
13
|
+
|
14
|
+
module Remotenv
|
15
|
+
module_function
|
16
|
+
|
17
|
+
def url
|
18
|
+
@_url ||= Remotenv::Utils.parsed_url
|
19
|
+
end
|
20
|
+
|
21
|
+
def uri
|
22
|
+
@_uri ||= Remotenv::Utils.parsed_uri
|
23
|
+
end
|
24
|
+
|
25
|
+
def load(options = {})
|
26
|
+
adapter = Remotenv::Adapters.for(self.uri)
|
27
|
+
adapter.load!
|
28
|
+
@data = data.merge(adapter.data)
|
29
|
+
end
|
30
|
+
|
31
|
+
def data
|
32
|
+
@data || {}
|
33
|
+
end
|
34
|
+
|
35
|
+
def get(key)
|
36
|
+
return nil unless @data
|
37
|
+
@data[key]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'remotenv'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
namespace :remotenv do
|
5
|
+
|
6
|
+
desc "Load Remotenv variables"
|
7
|
+
task :load do
|
8
|
+
Remotenv.load
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Show Remotenv Info"
|
12
|
+
task :info => :load do
|
13
|
+
puts "URL: #{Remotenv.uri || '[not set]'}"
|
14
|
+
puts "URI: #{Remotenv.url.to_yaml}"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "List all keys"
|
18
|
+
task :list => :load do
|
19
|
+
Remotenv.data.each do |key, value|
|
20
|
+
puts "\e[33m#{key}\e[0m \e[90m=\e[0m #{value}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/remotenv.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'remotenv/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "remotenv"
|
8
|
+
spec.version = Remotenv::VERSION
|
9
|
+
spec.authors = ["Marc Qualie"]
|
10
|
+
spec.email = ["marc@marcqualie.com"]
|
11
|
+
spec.licenses = ['MIT']
|
12
|
+
|
13
|
+
spec.summary = "Securely store environment variables away from your application"
|
14
|
+
spec.homepage = "https://github.com/signisto/remotenv"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "dotenv", "~> 2.2"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.14"
|
24
|
+
spec.add_development_dependency "codecov", "~> 0.1.10"
|
25
|
+
spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0"
|
26
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
27
|
+
spec.add_development_dependency "rspec", "~> 3.6"
|
28
|
+
spec.add_development_dependency "rack", "~> 2.0"
|
29
|
+
end
|
data/script/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "remotenv"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
metadata
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: remotenv
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marc Qualie
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dotenv
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.14'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.14'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: codecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.1.10
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.10
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: codeclimate-test-reporter
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '12.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '12.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.6'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.6'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rack
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- marc@marcqualie.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".ruby-version"
|
121
|
+
- ".simplecov"
|
122
|
+
- ".travis.yml"
|
123
|
+
- Gemfile
|
124
|
+
- LICENSE
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- bin/setup
|
128
|
+
- circle.yml
|
129
|
+
- codecov.yml
|
130
|
+
- lib/remotenv.rb
|
131
|
+
- lib/remotenv/adapters.rb
|
132
|
+
- lib/remotenv/adapters/base.rb
|
133
|
+
- lib/remotenv/adapters/http.rb
|
134
|
+
- lib/remotenv/adapters/s3.rb
|
135
|
+
- lib/remotenv/logger.rb
|
136
|
+
- lib/remotenv/rails.rb
|
137
|
+
- lib/remotenv/utils.rb
|
138
|
+
- lib/remotenv/version.rb
|
139
|
+
- lib/tasks/remotenv.rake
|
140
|
+
- remotenv.gemspec
|
141
|
+
- script/console
|
142
|
+
homepage: https://github.com/signisto/remotenv
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.6.11
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Securely store environment variables away from your application
|
166
|
+
test_files: []
|