param_store 0.0.1 → 1.0.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 +4 -4
 - data/Gemfile +4 -1
 - data/Gemfile.lock +15 -3
 - data/README.md +144 -37
 - data/lib/param_store/adapters/ejson_wrapper.rb +26 -0
 - data/lib/param_store/adapters/env.rb +4 -2
 - data/lib/param_store/adapters/secrets_manager.rb +46 -0
 - data/lib/param_store/adapters/ssm.rb +25 -9
 - data/lib/param_store/version.rb +1 -1
 - data/lib/param_store/wrapper.rb +14 -11
 - data/lib/param_store.rb +25 -5
 - data/param_store.gemspec +0 -2
 - metadata +6 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6a193054830d20294dc6f7beac7466aefd0dc0f34371ddcf97542277e5bcc76c
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 97afce05344af92e41b85d673c95d718f1ca8bfa3e2793f8d047bdfa718dad1e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c92d7d8b694ec738a2ba1e34d4f0366ceb2e2180e6332afaec9aef022899fd54e4610abe845130209bc85cf4a982e7598954bda98cc616846b9f2d6f6580ae7e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ce6bbe962abbf9e76ca08e7f268b763b25e0b7ef4e98c8b4df83c0ff33604e72702af33b56967e7110ec35cb6b6d91d0be73b49475d2c06167ed39504635ff76
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -6,6 +6,9 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } 
     | 
|
| 
       6 
6 
     | 
    
         
             
            gemspec
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            group :development, :test do
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem 'aws-sdk-secretsmanager', '~> 1'
         
     | 
| 
      
 10 
     | 
    
         
            +
              gem 'aws-sdk-ssm', '~> 1'
         
     | 
| 
      
 11 
     | 
    
         
            +
              gem 'ejson_wrapper', '~> 0.3.1'
         
     | 
| 
       9 
12 
     | 
    
         
             
              gem 'pry-byebug'
         
     | 
| 
       10 
13 
     | 
    
         
             
            end
         
     | 
| 
       11 
14 
     | 
    
         | 
| 
         @@ -13,4 +16,4 @@ group :test do 
     | 
|
| 
       13 
16 
     | 
    
         
             
              gem 'rspec', '~> 3.0'
         
     | 
| 
       14 
17 
     | 
    
         
             
              gem 'rspec_junit_formatter'
         
     | 
| 
       15 
18 
     | 
    
         
             
              gem 'stub_env'
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,8 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                param_store (0.0 
     | 
| 
       5 
     | 
    
         
            -
                  aws-sdk-ssm (~> 1)
         
     | 
| 
      
 4 
     | 
    
         
            +
                param_store (1.0.0)
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
            GEM
         
     | 
| 
       8 
7 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
         @@ -14,6 +13,12 @@ GEM 
     | 
|
| 
       14 
13 
     | 
    
         
             
                  aws-partitions (~> 1.0)
         
     | 
| 
       15 
14 
     | 
    
         
             
                  aws-sigv4 (~> 1.0)
         
     | 
| 
       16 
15 
     | 
    
         
             
                  jmespath (~> 1.0)
         
     | 
| 
      
 16 
     | 
    
         
            +
                aws-sdk-kms (1.13.0)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  aws-sdk-core (~> 3, >= 3.39.0)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  aws-sigv4 (~> 1.0)
         
     | 
| 
      
 19 
     | 
    
         
            +
                aws-sdk-secretsmanager (1.20.0)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  aws-sdk-core (~> 3, >= 3.39.0)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  aws-sigv4 (~> 1.0)
         
     | 
| 
       17 
22 
     | 
    
         
             
                aws-sdk-ssm (1.34.0)
         
     | 
| 
       18 
23 
     | 
    
         
             
                  aws-sdk-core (~> 3, >= 3.39.0)
         
     | 
| 
       19 
24 
     | 
    
         
             
                  aws-sigv4 (~> 1.0)
         
     | 
| 
         @@ -21,6 +26,10 @@ GEM 
     | 
|
| 
       21 
26 
     | 
    
         
             
                byebug (10.0.2)
         
     | 
| 
       22 
27 
     | 
    
         
             
                coderay (1.1.2)
         
     | 
| 
       23 
28 
     | 
    
         
             
                diff-lcs (1.3)
         
     | 
| 
      
 29 
     | 
    
         
            +
                ejson (1.2.1)
         
     | 
| 
      
 30 
     | 
    
         
            +
                ejson_wrapper (0.3.1)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  aws-sdk-kms
         
     | 
| 
      
 32 
     | 
    
         
            +
                  ejson
         
     | 
| 
       24 
33 
     | 
    
         
             
                jmespath (1.4.0)
         
     | 
| 
       25 
34 
     | 
    
         
             
                method_source (0.9.2)
         
     | 
| 
       26 
35 
     | 
    
         
             
                pry (0.12.2)
         
     | 
| 
         @@ -52,7 +61,10 @@ PLATFORMS 
     | 
|
| 
       52 
61 
     | 
    
         
             
              ruby
         
     | 
| 
       53 
62 
     | 
    
         | 
| 
       54 
63 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
      
 64 
     | 
    
         
            +
              aws-sdk-secretsmanager (~> 1)
         
     | 
| 
      
 65 
     | 
    
         
            +
              aws-sdk-ssm (~> 1)
         
     | 
| 
       55 
66 
     | 
    
         
             
              bundler (~> 1.16)
         
     | 
| 
      
 67 
     | 
    
         
            +
              ejson_wrapper (~> 0.3.1)
         
     | 
| 
       56 
68 
     | 
    
         
             
              param_store!
         
     | 
| 
       57 
69 
     | 
    
         
             
              pry-byebug
         
     | 
| 
       58 
70 
     | 
    
         
             
              rake (~> 10.0)
         
     | 
| 
         @@ -61,4 +73,4 @@ DEPENDENCIES 
     | 
|
| 
       61 
73 
     | 
    
         
             
              stub_env
         
     | 
| 
       62 
74 
     | 
    
         | 
| 
       63 
75 
     | 
    
         
             
            BUNDLED WITH
         
     | 
| 
       64 
     | 
    
         
            -
               1.17. 
     | 
| 
      
 76 
     | 
    
         
            +
               1.17.3
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -2,10 +2,9 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            # ParamStore
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            This gem goal is to <strike>DRY some code I have been copying around for a while</strike> make easy switching in between ENV  
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            This gem is not a replacement for [dotenv](https://github.com/bkeepers/dotenv). I still use and recommend it in development, in case it is "safe" to save your keys in `.env` files. Otherwise, you could also use AWS Parameter Store for development.
         
     | 
| 
      
 5 
     | 
    
         
            +
            This gem goal is to <strike>DRY some code I have been copying around for a while</strike> make easy switching in between ENV, [AWS Parameter Store (SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html), [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) and [EJSON](https://github.com/Shopify/ejson) for retrieving parameters.
         
     | 
| 
       8 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            This gem is not a replacement for [dotenv](https://github.com/bkeepers/dotenv). I still use and recommend it in development, in case it is "safe" to save your keys in `.env` files.
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
       10 
9 
     | 
    
         
             
            ## Installation
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
         @@ -17,46 +16,79 @@ gem 'param_store' 
     | 
|
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
            ## Usage
         
     | 
| 
       19 
18 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
            ### Configuring adapters
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Available adapters: `:env`, `:aws_ssm`, `:aws_secrets_manager` and `:ejson_wrapper`.
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            ```ruby
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            ParamStore.adapter = :aws_ssm
         
     | 
| 
       26 
     | 
    
         
            -
            # default path for SSM Hierarchies
         
     | 
| 
       27 
     | 
    
         
            -
            # see https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-su-organize.html
         
     | 
| 
       28 
     | 
    
         
            -
            ParamStore.path = '/Environment/Type of computer/Application/'
         
     | 
| 
      
 24 
     | 
    
         
            +
            ParamStore.adapter = adapter
         
     | 
| 
      
 25 
     | 
    
         
            +
            ```
         
     | 
| 
       29 
26 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
            ### Retrieving parameters
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 30 
     | 
    
         
            +
            # ParamStore.fetch is similar to Hash#fetch,
         
     | 
| 
      
 31 
     | 
    
         
            +
            # If the key is not found and there's no default given, it will raise a `KeyError`
         
     | 
| 
      
 32 
     | 
    
         
            +
            ParamStore.fetch('name')
         
     | 
| 
      
 33 
     | 
    
         
            +
            ParamStore.fetch('name', 'default value')
         
     | 
| 
      
 34 
     | 
    
         
            +
            ParamStore.fetch('name') { 'default value' }
         
     | 
| 
       33 
35 
     | 
    
         
             
            ```
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
            ### Copying from any adapter to ENV
         
     | 
| 
       36 
38 
     | 
    
         | 
| 
       37 
39 
     | 
    
         
             
            ```ruby
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
            ParamStore.copy_to_env('name1', 'name2', 'name3')
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            ENV['name1'] # => value for name1
         
     | 
| 
      
 43 
     | 
    
         
            +
            ENV['name2'] # => value for name2
         
     | 
| 
      
 44 
     | 
    
         
            +
            ENV['name3'] # => value for name3
         
     | 
| 
       41 
45 
     | 
    
         
             
            ```
         
     | 
| 
       42 
46 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 47 
     | 
    
         
            +
            ## Adapters
         
     | 
| 
       44 
48 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 49 
     | 
    
         
            +
            ### ENV
         
     | 
| 
       46 
50 
     | 
    
         | 
| 
       47 
51 
     | 
    
         
             
            ```ruby
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
            ParamStore.copy_to_env('key1', 'key2', 'key3')
         
     | 
| 
      
 52 
     | 
    
         
            +
            ParamStore.adapter :env
         
     | 
| 
      
 53 
     | 
    
         
            +
            ```
         
     | 
| 
       51 
54 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
            ### AWS Parameter Store (SSM)
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            Add to your Gemfile:
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 60 
     | 
    
         
            +
            gem 'aws-sdk-ssm', '~> 1'
         
     | 
| 
      
 61 
     | 
    
         
            +
            ```
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            Configure the adapter:
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 66 
     | 
    
         
            +
            ParamStore.adapter :aws_ssm, default_path: '/Prod/App/'
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            #### Retrieving parameters
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 72 
     | 
    
         
            +
            ParamStore.fetch('name')
         
     | 
| 
      
 73 
     | 
    
         
            +
            # => get parameter name, if default_path /Prod/App/ get parameter /Prod/App/name
         
     | 
| 
      
 74 
     | 
    
         
            +
            ParamStore.fetch('name', path: '/Prod/App/')
         
     | 
| 
      
 75 
     | 
    
         
            +
            # => get parameter /Prod/App/name
         
     | 
| 
      
 76 
     | 
    
         
            +
            ```
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            #### Copying from SSM adapter to ENV
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 81 
     | 
    
         
            +
            ParamStore.copy_to_env('name1', 'name2', 'name3', path: '/Environment/Type of computer/Application/')
         
     | 
| 
      
 82 
     | 
    
         
            +
            # path overrides default_path
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            ENV['name1'] # => value for name1
         
     | 
| 
      
 85 
     | 
    
         
            +
            ENV['name2'] # => value for name2
         
     | 
| 
      
 86 
     | 
    
         
            +
            ENV['name3'] # => value for name3
         
     | 
| 
       55 
87 
     | 
    
         
             
            ```
         
     | 
| 
       56 
88 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
            #### SSM client
         
     | 
| 
       58 
90 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
            By default  
     | 
| 
      
 91 
     | 
    
         
            +
            By default ParamStore will initiate `Aws::SSM::Client.new` without supplying any argument. If you want to control the initiation of the SSM client, you can define it by setting `ssm_client`.
         
     | 
| 
       60 
92 
     | 
    
         | 
| 
       61 
93 
     | 
    
         | 
| 
       62 
94 
     | 
    
         
             
            ```ruby
         
     | 
| 
         @@ -67,25 +99,100 @@ ParamStore.ssm_client = Aws::SSM::Client.new( 
     | 
|
| 
       67 
99 
     | 
    
         
             
            )
         
     | 
| 
       68 
100 
     | 
    
         
             
            ```
         
     | 
| 
       69 
101 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
      
 102 
     | 
    
         
            +
            #### CLI
         
     | 
| 
       71 
103 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
            A few useful [aws ssm](https://docs.aws.amazon.com/cli/latest/reference/ssm/index.html) commands:
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            ```sh
         
     | 
| 
      
 107 
     | 
    
         
            +
            aws ssm get-parameters-by-path --path /Prod/ERP/SAP --with-decryption
         
     | 
| 
      
 108 
     | 
    
         
            +
            aws ssm put-parameter --name /Prod/ERP/SAP --value ... --type SecureString
         
     | 
| 
      
 109 
     | 
    
         
            +
            ```
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            ### Secrets Manager
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            Add to your Gemfile:
         
     | 
| 
       73 
114 
     | 
    
         | 
| 
       74 
115 
     | 
    
         
             
            ```ruby
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
            # Bundler.require(*Rails.groups)
         
     | 
| 
       77 
     | 
    
         
            -
            ParamStore.require_keys!('key1', 'key2', 'key3')
         
     | 
| 
      
 116 
     | 
    
         
            +
            gem 'aws-sdk-secretsmanager', '~> 1'
         
     | 
| 
       78 
117 
     | 
    
         
             
            ```
         
     | 
| 
       79 
118 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
      
 119 
     | 
    
         
            +
            Configure the adapter:
         
     | 
| 
       81 
120 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
      
 121 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 122 
     | 
    
         
            +
            ParamStore.adapter :aws_secrets_manager
         
     | 
| 
      
 123 
     | 
    
         
            +
            # ParaStore.fetch('secret_id')
         
     | 
| 
      
 124 
     | 
    
         
            +
            # => {\n  \"password\":\"pwd\"\n}\n
         
     | 
| 
       83 
125 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
      
 126 
     | 
    
         
            +
            ParamStore.adapter :aws_secrets_manager, default_secret_id: 'secret_id'
         
     | 
| 
      
 127 
     | 
    
         
            +
            # ParaStore.fetch('password')
         
     | 
| 
      
 128 
     | 
    
         
            +
            # => pwd
         
     | 
| 
      
 129 
     | 
    
         
            +
            ```
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
            #### Retrieving parameters
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 134 
     | 
    
         
            +
            ParamStore.fetch('secret_id')
         
     | 
| 
      
 135 
     | 
    
         
            +
            ParamStore.fetch('password', secret_id: 'secret_id')
         
     | 
| 
      
 136 
     | 
    
         
            +
            ```
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            #### Copying from Secrets Manager adapter to ENV
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 141 
     | 
    
         
            +
            ParamStore.copy_to_env('key1', 'key2', 'key3', secret_id: 'secret_id')
         
     | 
| 
      
 142 
     | 
    
         
            +
            # secret_id overrides default_secret_id
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            ENV['key1'] # => value for key1
         
     | 
| 
      
 145 
     | 
    
         
            +
            ENV['key2'] # => value for key2
         
     | 
| 
      
 146 
     | 
    
         
            +
            ENV['key3'] # => value for key3
         
     | 
| 
      
 147 
     | 
    
         
            +
            ```
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            ### EJSON
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            Add to your Gemfile:
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 154 
     | 
    
         
            +
            gem 'ejson_wrapper', '~> 0.3.1'
         
     | 
| 
      
 155 
     | 
    
         
            +
            ```
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
            Configure the adapter:
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 160 
     | 
    
         
            +
            ParamStore.adapter(
         
     | 
| 
      
 161 
     | 
    
         
            +
              :ejson_wrapper,
         
     | 
| 
      
 162 
     | 
    
         
            +
              file_path: '...',
         
     | 
| 
      
 163 
     | 
    
         
            +
              key_dir: '...',
         
     | 
| 
      
 164 
     | 
    
         
            +
              private_key: '...',
         
     | 
| 
      
 165 
     | 
    
         
            +
              use_kms: '...',
         
     | 
| 
      
 166 
     | 
    
         
            +
              region: '...'
         
     | 
| 
      
 167 
     | 
    
         
            +
            )
         
     | 
| 
      
 168 
     | 
    
         
            +
            # see https://github.com/envato/ejson_wrapper#usage
         
     | 
| 
      
 169 
     | 
    
         
            +
            ```
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            #### Rails
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
            If you are using ParamStore in prod and dotenv in dev:
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 176 
     | 
    
         
            +
            # config/application.rb
         
     | 
| 
      
 177 
     | 
    
         
            +
            # Bundler.require(*Rails.groups)
         
     | 
| 
      
 178 
     | 
    
         
            +
            if Rails.env.production?
         
     | 
| 
      
 179 
     | 
    
         
            +
              ParamStore.adapter(:aws_ssm)
         
     | 
| 
      
 180 
     | 
    
         
            +
              ParamStore.copy_to_env('DATABASE_URL', require_keys: true, path: '/Prod/MyApp/')
         
     | 
| 
      
 181 
     | 
    
         
            +
            else
         
     | 
| 
      
 182 
     | 
    
         
            +
              Dotenv::Railtie.load
         
     | 
| 
      
 183 
     | 
    
         
            +
            end
         
     | 
| 
       87 
184 
     | 
    
         
             
            ```
         
     | 
| 
       88 
185 
     | 
    
         | 
| 
      
 186 
     | 
    
         
            +
            ### Fail-fast
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
            You can configure the required parameters for an app and fail at startup.
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 191 
     | 
    
         
            +
            # config/application.rb
         
     | 
| 
      
 192 
     | 
    
         
            +
            # Bundler.require(*Rails.groups)
         
     | 
| 
      
 193 
     | 
    
         
            +
            ParamStore.require_keys!('key1', 'key2', 'key3')
         
     | 
| 
      
 194 
     | 
    
         
            +
            # this will raise an error if any key is missing
         
     | 
| 
      
 195 
     | 
    
         
            +
            ```
         
     | 
| 
       89 
196 
     | 
    
         | 
| 
       90 
197 
     | 
    
         
             
            ## Development
         
     | 
| 
       91 
198 
     | 
    
         | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ParamStore
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Adapters
         
     | 
| 
      
 3 
     | 
    
         
            +
                class EJSONWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :file_path, :options
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(**opts)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @file_path = opts.delete(:file_path)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @options = opts
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def fetch(key, *args, **_opts, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    decrypt.fetch(key, *args, &block)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def fetch_all(*keys, **_opts)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    decrypt.select { |key, _value| keys.flatten.include?(key) }
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  private
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def decrypt
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @_decrypt ||= ::EJSONWrapper.decrypt(file_path, options)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,11 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ParamStore
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Adapters
         
     | 
| 
       3 
3 
     | 
    
         
             
                class Env
         
     | 
| 
       4 
     | 
    
         
            -
                  def  
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize(**_opts); end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def fetch(key, *args, **_opts, &block)
         
     | 
| 
       5 
7 
     | 
    
         
             
                    ENV.fetch(key, *args, &block)
         
     | 
| 
       6 
8 
     | 
    
         
             
                  end
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                  def fetch_all(*keys)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def fetch_all(*keys, **_opts)
         
     | 
| 
       9 
11 
     | 
    
         
             
                    keys = keys.flatten
         
     | 
| 
       10 
12 
     | 
    
         
             
                    keys.each_with_object({}) do |key, result|
         
     | 
| 
       11 
13 
     | 
    
         
             
                      result[key] = ENV[key]
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ParamStore
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Adapters
         
     | 
| 
      
 3 
     | 
    
         
            +
                class SecretsManager
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :default_secret_id
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(default_secret_id: nil)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @default_secret_id = default_secret_id
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def fetch(key, *args, secret_id: nil, version_id: nil, version_stage: nil, &block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    get_key = secret_id || default_secret_id || key
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    if cache[get_key].nil? &&
         
     | 
| 
      
 14 
     | 
    
         
            +
                       string = get_secret_value(get_key, version_id, version_stage)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      cache[get_key] = JSON.parse(string)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    (
         
     | 
| 
      
 19 
     | 
    
         
            +
                      secret_id.nil? && default_secret_id.nil? ? cache : cache[get_key]
         
     | 
| 
      
 20 
     | 
    
         
            +
                    ).fetch(key, *args, &block)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def fetch_all(*keys, **opts)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    # poor man's fetch all
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # I couldn't find a batch get for secrets manager :/
         
     | 
| 
      
 26 
     | 
    
         
            +
                    keys.map { |key| fetch(key, {}, **opts) }.inject(:merge)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  private
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  def get_secret_value(secret_id, version_id, version_stage)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    ParamStore.secrets_manager_client.get_secret_value(
         
     | 
| 
      
 33 
     | 
    
         
            +
                      secret_id: secret_id,
         
     | 
| 
      
 34 
     | 
    
         
            +
                      version_id: version_id,
         
     | 
| 
      
 35 
     | 
    
         
            +
                      version_stage: version_stage
         
     | 
| 
      
 36 
     | 
    
         
            +
                    ).secret_string
         
     | 
| 
      
 37 
     | 
    
         
            +
                  rescue Aws::SecretsManager::Errors::ResourceNotFoundException
         
     | 
| 
      
 38 
     | 
    
         
            +
                    # let the tmp.fetch below deal with key not found and defaults
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  def cache
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @_cache ||= {}
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,24 +1,40 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ParamStore
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Adapters
         
     | 
| 
       3 
3 
     | 
    
         
             
                class SSM
         
     | 
| 
       4 
     | 
    
         
            -
                   
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :default_path
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(default_path: nil)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @default_path = default_path
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def fetch(key, *args, path: nil, &block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    key = prepend_path(path, key)
         
     | 
| 
       5 
12 
     | 
    
         
             
                    tmp = {}
         
     | 
| 
       6 
     | 
    
         
            -
                     
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
                      tmp[key] = ParamStore.ssm_client.get_parameter(name: key, with_decryption: true).parameter.value
         
     | 
| 
       9 
     | 
    
         
            -
                    rescue Aws::SSM::Errors::ParameterNotFound
         
     | 
| 
       10 
     | 
    
         
            -
                      # let the tmp.fetch below deal with not found key and defaults
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if string = get_parameter(key)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      tmp[key] = string
         
     | 
| 
       11 
15 
     | 
    
         
             
                    end
         
     | 
| 
       12 
16 
     | 
    
         
             
                    tmp.fetch(key, *args, &block)
         
     | 
| 
       13 
17 
     | 
    
         
             
                  end
         
     | 
| 
       14 
18 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                  def fetch_all(*keys)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def fetch_all(*keys, path: nil)
         
     | 
| 
       16 
20 
     | 
    
         
             
                    keys = keys.flatten
         
     | 
| 
       17 
     | 
    
         
            -
                    keys = keys.map { |key|  
     | 
| 
      
 21 
     | 
    
         
            +
                    keys = keys.map { |key| prepend_path(path, key) } if path
         
     | 
| 
       18 
22 
     | 
    
         
             
                    ParamStore.ssm_client.get_parameters(names: keys, with_decryption: true).parameters.each_with_object({}) do |param, result|
         
     | 
| 
       19 
     | 
    
         
            -
                      result[param.name.gsub( 
     | 
| 
      
 23 
     | 
    
         
            +
                      result[param.name.gsub(path.to_s, '')] = param.value
         
     | 
| 
       20 
24 
     | 
    
         
             
                    end
         
     | 
| 
       21 
25 
     | 
    
         
             
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  private
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  def get_parameter(key)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    ParamStore.ssm_client.get_parameter(name: key, with_decryption: true).parameter.value
         
     | 
| 
      
 31 
     | 
    
         
            +
                  rescue Aws::SSM::Errors::ParameterNotFound
         
     | 
| 
      
 32 
     | 
    
         
            +
                    # let the tmp.fetch below deal with key not found and defaults
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def prepend_path(path, key)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    "#{path || default_path}#{key}"
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
       22 
38 
     | 
    
         
             
                end
         
     | 
| 
       23 
39 
     | 
    
         
             
              end
         
     | 
| 
       24 
40 
     | 
    
         
             
            end
         
     | 
    
        data/lib/param_store/version.rb
    CHANGED
    
    
    
        data/lib/param_store/wrapper.rb
    CHANGED
    
    | 
         @@ -1,28 +1,31 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ParamStore
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Wrapper
         
     | 
| 
       3 
     | 
    
         
            -
                def initialize(adapter_class)
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(adapter_class, **opts)
         
     | 
| 
       4 
4 
     | 
    
         
             
                  @adapter_class = adapter_class
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @opts = opts
         
     | 
| 
       5 
6 
     | 
    
         
             
                end
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
                def fetch(key, *args, &block)
         
     | 
| 
      
 8 
     | 
    
         
            +
                def fetch(key, *args, **opts, &block)
         
     | 
| 
       8 
9 
     | 
    
         
             
                  key = key.to_s
         
     | 
| 
       9 
10 
     | 
    
         
             
                  unless cache.key?(key)
         
     | 
| 
       10 
11 
     | 
    
         
             
                    # cache params to minimize number of requests
         
     | 
| 
       11 
     | 
    
         
            -
                    cache[key] = adapter_instance.fetch(key, *args, &block)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    cache[key] = adapter_instance.fetch(key, *args, **opts, &block)
         
     | 
| 
       12 
13 
     | 
    
         
             
                  end
         
     | 
| 
       13 
14 
     | 
    
         
             
                  cache[key]
         
     | 
| 
       14 
15 
     | 
    
         
             
                end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                def copy_to_env(*keys,  
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
      
 17 
     | 
    
         
            +
                def copy_to_env(*keys, **opts)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  require_keys = opts.delete(:require_keys)
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
      
 20 
     | 
    
         
            +
                  cache_all(*keys, **opts)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  require_keys!(*keys, **opts) if require_keys
         
     | 
| 
       20 
23 
     | 
    
         | 
| 
       21 
24 
     | 
    
         
             
                  keys.each { |key| ENV[key] = cache[key] }
         
     | 
| 
       22 
25 
     | 
    
         
             
                end
         
     | 
| 
       23 
26 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                def require_keys!(*keys)
         
     | 
| 
       25 
     | 
    
         
            -
                  cache_all(*keys)
         
     | 
| 
      
 27 
     | 
    
         
            +
                def require_keys!(*keys, **opts)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  cache_all(*keys, **opts)
         
     | 
| 
       26 
29 
     | 
    
         | 
| 
       27 
30 
     | 
    
         
             
                  missing = keys.flatten.map!(&:to_s) - cache.keys
         
     | 
| 
       28 
31 
     | 
    
         | 
| 
         @@ -35,9 +38,9 @@ module ParamStore 
     | 
|
| 
       35 
38 
     | 
    
         | 
| 
       36 
39 
     | 
    
         
             
                attr_accessor :adapter, :cache
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                def cache_all(*keys)
         
     | 
| 
      
 41 
     | 
    
         
            +
                def cache_all(*keys, **opts)
         
     | 
| 
       39 
42 
     | 
    
         
             
                  keys.flatten.map!(&:to_s)
         
     | 
| 
       40 
     | 
    
         
            -
                  adapter_instance.fetch_all(*keys).each do |key, value|
         
     | 
| 
      
 43 
     | 
    
         
            +
                  adapter_instance.fetch_all(*keys, **opts).each do |key, value|
         
     | 
| 
       41 
44 
     | 
    
         
             
                    cache[key] = value
         
     | 
| 
       42 
45 
     | 
    
         
             
                  end
         
     | 
| 
       43 
46 
     | 
    
         
             
                end
         
     | 
| 
         @@ -47,7 +50,7 @@ module ParamStore 
     | 
|
| 
       47 
50 
     | 
    
         
             
                end
         
     | 
| 
       48 
51 
     | 
    
         | 
| 
       49 
52 
     | 
    
         
             
                def adapter_instance
         
     | 
| 
       50 
     | 
    
         
            -
                  @_adapter_instance ||= @adapter_class.new
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @_adapter_instance ||= @adapter_class.new(**@opts)
         
     | 
| 
       51 
54 
     | 
    
         
             
                end
         
     | 
| 
       52 
55 
     | 
    
         
             
              end
         
     | 
| 
       53 
56 
     | 
    
         
             
            end
         
     | 
    
        data/lib/param_store.rb
    CHANGED
    
    | 
         @@ -1,10 +1,11 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'aws-sdk-ssm'
         
     | 
| 
       2 
1 
     | 
    
         
             
            require 'forwardable'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            require 'param_store/version'
         
     | 
| 
       5 
4 
     | 
    
         
             
            require 'param_store/wrapper'
         
     | 
| 
       6 
5 
     | 
    
         
             
            require 'param_store/adapters/env'
         
     | 
| 
       7 
6 
     | 
    
         
             
            require 'param_store/adapters/ssm'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'param_store/adapters/secrets_manager'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'param_store/adapters/ejson_wrapper'
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            module ParamStore
         
     | 
| 
       10 
11 
     | 
    
         
             
              extend SingleForwardable
         
     | 
| 
         @@ -17,16 +18,20 @@ module ParamStore 
     | 
|
| 
       17 
18 
     | 
    
         
             
              )
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
              class << self
         
     | 
| 
       20 
     | 
    
         
            -
                attr_accessor :path
         
     | 
| 
       21 
21 
     | 
    
         
             
                attr_reader :adapter, :wrapper
         
     | 
| 
      
 22 
     | 
    
         
            +
                attr_writer :ssm_client, :secrets_manager_client
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
                def ssm_client
         
     | 
| 
       24 
     | 
    
         
            -
                  @ 
     | 
| 
      
 25 
     | 
    
         
            +
                  @ssm_client ||= Aws::SSM::Client.new
         
     | 
| 
       25 
26 
     | 
    
         
             
                end
         
     | 
| 
       26 
27 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                def  
     | 
| 
      
 28 
     | 
    
         
            +
                def secrets_manager_client
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @secrets_manager_client ||= Aws::SecretsManager::Client.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                def adapter(adapter, **opts)
         
     | 
| 
       28 
33 
     | 
    
         
             
                  @adapter = adapter
         
     | 
| 
       29 
     | 
    
         
            -
                  @wrapper = Wrapper.new(adapter_class(adapter))
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @wrapper = Wrapper.new(adapter_class(adapter), **opts)
         
     | 
| 
       30 
35 
     | 
    
         
             
                end
         
     | 
| 
       31 
36 
     | 
    
         | 
| 
       32 
37 
     | 
    
         
             
                def adapter_class(adapter)
         
     | 
| 
         @@ -34,10 +39,25 @@ module ParamStore 
     | 
|
| 
       34 
39 
     | 
    
         
             
                  when :env
         
     | 
| 
       35 
40 
     | 
    
         
             
                    Adapters::Env
         
     | 
| 
       36 
41 
     | 
    
         
             
                  when :aws_ssm
         
     | 
| 
      
 42 
     | 
    
         
            +
                    require_adapter_dependency(adapter, 'aws-sdk-ssm')
         
     | 
| 
       37 
43 
     | 
    
         
             
                    Adapters::SSM
         
     | 
| 
      
 44 
     | 
    
         
            +
                  when :aws_secrets_manager
         
     | 
| 
      
 45 
     | 
    
         
            +
                    require_adapter_dependency(adapter, 'aws-sdk-secretsmanager')
         
     | 
| 
      
 46 
     | 
    
         
            +
                    Adapters::SecretsManager
         
     | 
| 
      
 47 
     | 
    
         
            +
                  when :ejson_wrapper
         
     | 
| 
      
 48 
     | 
    
         
            +
                    require_adapter_dependency(adapter, 'ejson_wrapper')
         
     | 
| 
      
 49 
     | 
    
         
            +
                    Adapters::EJSONWrapper
         
     | 
| 
       38 
50 
     | 
    
         
             
                  else
         
     | 
| 
       39 
51 
     | 
    
         
             
                    raise "Invalid adapter: #{adapter}"
         
     | 
| 
       40 
52 
     | 
    
         
             
                  end
         
     | 
| 
       41 
53 
     | 
    
         
             
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                private
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def require_adapter_dependency(adapter, dependency)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  require dependency
         
     | 
| 
      
 59 
     | 
    
         
            +
                rescue LoadError
         
     | 
| 
      
 60 
     | 
    
         
            +
                  fail "#{adapter} requires #{dependency} to be installed separately. Please add gem '#{dependency}' to your Gemfile"
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
       42 
62 
     | 
    
         
             
              end
         
     | 
| 
       43 
63 
     | 
    
         
             
            end
         
     | 
    
        data/param_store.gemspec
    CHANGED
    
    | 
         @@ -21,8 +21,6 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       21 
21 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       22 
22 
     | 
    
         
             
              spec.require_paths = ['lib']
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
              spec.add_dependency 'aws-sdk-ssm', '~> 1'
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
24 
     | 
    
         
             
              spec.add_development_dependency 'bundler', '~> 1.16'
         
     | 
| 
       27 
25 
     | 
    
         
             
              spec.add_development_dependency 'rake', '~> 10.0'
         
     | 
| 
       28 
26 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,29 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: param_store
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Pablo Cantero
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-02-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
     | 
    
         
            -
              name: aws-sdk-ssm
         
     | 
| 
       15 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
     | 
    
         
            -
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       18 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: '1'
         
     | 
| 
       20 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       21 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       22 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
     | 
    
         
            -
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       25 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: '1'
         
     | 
| 
       27 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
       29 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -73,7 +59,9 @@ files: 
     | 
|
| 
       73 
59 
     | 
    
         
             
            - bin/console
         
     | 
| 
       74 
60 
     | 
    
         
             
            - bin/setup
         
     | 
| 
       75 
61 
     | 
    
         
             
            - lib/param_store.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/param_store/adapters/ejson_wrapper.rb
         
     | 
| 
       76 
63 
     | 
    
         
             
            - lib/param_store/adapters/env.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/param_store/adapters/secrets_manager.rb
         
     | 
| 
       77 
65 
     | 
    
         
             
            - lib/param_store/adapters/ssm.rb
         
     | 
| 
       78 
66 
     | 
    
         
             
            - lib/param_store/version.rb
         
     | 
| 
       79 
67 
     | 
    
         
             
            - lib/param_store/wrapper.rb
         
     | 
| 
         @@ -97,7 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       97 
85 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       98 
86 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       99 
87 
     | 
    
         
             
            requirements: []
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
      
 88 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 89 
     | 
    
         
            +
            rubygems_version: 2.7.6.2
         
     | 
| 
       101 
90 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       102 
91 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       103 
92 
     | 
    
         
             
            summary: Easy switch in between ENV and AWS Parameter Store (SSM)
         
     |