hekate 0.1.0.pre10 → 0.1.0.pre11

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e421cf40f19f3a6b58e2de1433c8961f8b65070
4
- data.tar.gz: 22512f20df4ab3c7c89ae15c3237cbf3599261b4
3
+ metadata.gz: 0d5fc4f9a9438fcd1d5b3b00d52813b5a90c906d
4
+ data.tar.gz: 1dc957f9854963f89177b85ccda292775e64c7a7
5
5
  SHA512:
6
- metadata.gz: da498c3707e99df15c5fecf3dca7151d323ee471454ff23412f5b7a119f69730033df9d8d8e237a6b0cc1dc5658d2cdee4fffdace5a40e7e2ca8b90604efd997
7
- data.tar.gz: 2680c8a1e65ba867b3a462a82b1ee17f8851eb3b0da22ab9f1a57c7037b3d3cf601be7ed336ab1c933e7b9931f37a16eb20bb3dd91cdf134154fc7ad325834cf
6
+ metadata.gz: a7d6f64a8316dffec60080925e4fafdea8eb09a395219289d9e694893ea3420b73dc28d6cba4e7303a1fa8e89edd80eba2b9da55306b789059d15fc64ddebf5f
7
+ data.tar.gz: 720918abe4cade9ce47816afea156c4aae3cf90ece89842d1ec2e949df35a83048e96aa71ee29ae3e150d61bdaf9e1fc5e761e1615fbf8dd6e6486d6c0727a04
@@ -0,0 +1,55 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ # specify the version you desire here
10
+ - image: circleci/ruby:2.3.4-node-browsers
11
+
12
+ # Specify service dependencies here if necessary
13
+ # CircleCI maintains a library of pre-built images
14
+ # documented at https://circleci.com/docs/2.0/circleci-images/
15
+ # - image: circleci/postgres:9.4
16
+
17
+ working_directory: ~/repo
18
+
19
+ steps:
20
+ - checkout
21
+
22
+ # Download and cache dependencies
23
+ - restore_cache:
24
+ keys:
25
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
26
+ # fallback to using the latest cache if no exact match is found
27
+ - v1-dependencies-
28
+
29
+ - run:
30
+ name: install dependencies
31
+ command: |
32
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
33
+
34
+ - save_cache:
35
+ paths:
36
+ - ./venv
37
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
38
+
39
+ # run tests!
40
+ - run:
41
+ name: run tests
42
+ command: |
43
+ mkdir /tmp/test-results
44
+
45
+ bundle exec rspec --format progress \
46
+ --format RspecJunitFormatter \
47
+ --out /tmp/test-results/rspec.xml \
48
+ --format progress
49
+
50
+ # collect reports
51
+ - store_test_results:
52
+ path: /tmp/test-results
53
+ - store_artifacts:
54
+ path: /tmp/test-results
55
+ destination: test-results
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hekate (0.1.0.10)
4
+ hekate (0.1.0.pre10)
5
5
  aws-sdk (~> 2.9, >= 2.9.0)
6
6
  commander (~> 4.4, >= 4.4.0)
7
- dotenv
7
+ dotenv (>= 2.2.1, >= 2.2)
8
8
  ec2-metadata (~> 0.2, >= 0.2.0)
9
9
  rails (~> 4)
10
10
  railties (~> 4.2, >= 4.2.0)
@@ -49,21 +49,26 @@ GEM
49
49
  addressable (2.5.1)
50
50
  public_suffix (~> 2.0, >= 2.0.2)
51
51
  arel (6.0.4)
52
- aws-sdk (2.10.21)
53
- aws-sdk-resources (= 2.10.21)
54
- aws-sdk-core (2.10.21)
52
+ aws-sdk (2.10.23)
53
+ aws-sdk-resources (= 2.10.23)
54
+ aws-sdk-core (2.10.23)
55
55
  aws-sigv4 (~> 1.0)
56
56
  jmespath (~> 1.0)
57
- aws-sdk-resources (2.10.21)
58
- aws-sdk-core (= 2.10.21)
57
+ aws-sdk-resources (2.10.23)
58
+ aws-sdk-core (= 2.10.23)
59
59
  aws-sigv4 (1.0.1)
60
60
  builder (3.2.3)
61
+ codecov (0.1.10)
62
+ json
63
+ simplecov
64
+ url
61
65
  commander (4.4.3)
62
66
  highline (~> 1.7.2)
63
67
  concurrent-ruby (1.0.5)
64
68
  crack (0.4.3)
65
69
  safe_yaml (~> 1.0.0)
66
70
  diff-lcs (1.3)
71
+ docile (1.1.5)
67
72
  dotenv (2.2.1)
68
73
  ec2-metadata (0.2.2)
69
74
  erubis (2.7.0)
@@ -73,6 +78,7 @@ GEM
73
78
  highline (1.7.8)
74
79
  i18n (0.8.6)
75
80
  jmespath (1.3.1)
81
+ json (2.1.0)
76
82
  loofah (2.0.3)
77
83
  nokogiri (>= 1.5.9)
78
84
  mail (2.6.6)
@@ -112,21 +118,28 @@ GEM
112
118
  activesupport (= 4.2.9)
113
119
  rake (>= 0.8.7)
114
120
  thor (>= 0.18.1, < 2.0)
115
- rake (10.4.2)
116
- rspec (3.5.0)
117
- rspec-core (~> 3.5.0)
118
- rspec-expectations (~> 3.5.0)
119
- rspec-mocks (~> 3.5.0)
120
- rspec-core (3.5.4)
121
- rspec-support (~> 3.5.0)
122
- rspec-expectations (3.5.0)
121
+ rake (10.5.0)
122
+ rspec (3.6.0)
123
+ rspec-core (~> 3.6.0)
124
+ rspec-expectations (~> 3.6.0)
125
+ rspec-mocks (~> 3.6.0)
126
+ rspec-core (3.6.0)
127
+ rspec-support (~> 3.6.0)
128
+ rspec-expectations (3.6.0)
123
129
  diff-lcs (>= 1.2.0, < 2.0)
124
- rspec-support (~> 3.5.0)
125
- rspec-mocks (3.5.0)
130
+ rspec-support (~> 3.6.0)
131
+ rspec-mocks (3.6.0)
126
132
  diff-lcs (>= 1.2.0, < 2.0)
127
- rspec-support (~> 3.5.0)
128
- rspec-support (3.5.0)
133
+ rspec-support (~> 3.6.0)
134
+ rspec-support (3.6.0)
135
+ rspec_junit_formatter (0.3.0)
136
+ rspec-core (>= 2, < 4, != 2.12.0)
129
137
  safe_yaml (1.0.4)
138
+ simplecov (0.14.1)
139
+ docile (~> 1.1.0)
140
+ json (>= 1.8, < 3)
141
+ simplecov-html (~> 0.10.0)
142
+ simplecov-html (0.10.1)
130
143
  sprockets (3.7.1)
131
144
  concurrent-ruby (~> 1.0)
132
145
  rack (> 1, < 3)
@@ -138,7 +151,7 @@ GEM
138
151
  thread_safe (0.3.6)
139
152
  tzinfo (1.2.3)
140
153
  thread_safe (~> 0.1)
141
- vcr (3.0.3)
154
+ url (0.3.2)
142
155
  webmock (3.0.1)
143
156
  addressable (>= 2.3.6)
144
157
  crack (>= 0.3.2)
@@ -149,11 +162,12 @@ PLATFORMS
149
162
 
150
163
  DEPENDENCIES
151
164
  bundler (~> 1.15)
165
+ codecov (~> 0.1.0, ~> 0.1)
152
166
  hekate!
153
167
  rake (~> 10.0)
154
168
  rspec (~> 3.0)
155
- vcr
156
- webmock
169
+ rspec_junit_formatter (~> 0.3.0)
170
+ webmock (~> 3.0.0, ~> 3.0)
157
171
 
158
172
  BUNDLED WITH
159
173
  1.15.3
data/README.md CHANGED
@@ -1,4 +1,9 @@
1
- # Hekate
1
+ # [Hekate](http://www.ancient.eu/Hecate/)
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/hekate.svg)](https://badge.fury.io/rb/hekate)
4
+ [![CircleCI](https://circleci.com/gh/krimsonkla/hekate.svg?style=svg)](https://circleci.com/gh/krimsonkla/hekate)
5
+ [![codecov](https://codecov.io/gh/krimsonkla/hekate/branch/master/graph/badge.svg)](https://codecov.io/gh/krimsonkla/hekate)
6
+ [![Dependency Status](https://gemnasium.com/badges/github.com/krimsonkla/hekate.svg)](https://gemnasium.com/github.com/krimsonkla/hekate)
2
7
 
3
8
  Hekate is a gem for encrypting, storing and consuming rails application secrets as Amazon SSM parameters
4
9
 
@@ -117,6 +122,9 @@ import - imports a .env formatted secrets file
117
122
 
118
123
  export - exports to a .env formatted secrets file
119
124
 
125
+ ### Working when offline
126
+ In the event that you need to work offline hekate can fall back to using dotenv files. Offline mode is only available for development and test. Be sure to use `hekate export` to create the necessary files before going offline.
127
+
120
128
  ## Contributing
121
129
 
122
130
  Bug reports and pull requests are welcome on GitHub at https://github.com/jasonrisch/hekate. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
data/codecov.yml ADDED
@@ -0,0 +1,3 @@
1
+ codecov:
2
+ ci:
3
+ - CircleCI
data/hekate.gemspec CHANGED
@@ -26,11 +26,12 @@ Gem::Specification.new do |spec|
26
26
  spec.add_runtime_dependency 'ec2-metadata', '~> 0.2', '>= 0.2.0'
27
27
  spec.add_runtime_dependency 'railties', '~> 4.2', '>= 4.2.0'
28
28
  spec.add_runtime_dependency 'rails', '~> 4'
29
- spec.add_runtime_dependency 'dotenv', '~> 0'
29
+ spec.add_runtime_dependency 'dotenv', '>= 2.2', '>= 2.2.1'
30
30
 
31
31
  spec.add_development_dependency 'bundler', '~> 1.15'
32
+ spec.add_development_dependency 'codecov', '~> 0.1', '~> 0.1.0'
32
33
  spec.add_development_dependency 'rake', '~> 10.0'
33
34
  spec.add_development_dependency 'rspec', '~> 3.0'
34
- spec.add_development_dependency 'webmock', '~>3.0.0'
35
- spec.add_development_dependency 'vcr', '~>3.0.0'
35
+ spec.add_development_dependency 'rspec_junit_formatter', '~> 0.3.0'
36
+ spec.add_development_dependency 'webmock', '~> 3.0', '~> 3.0.0'
36
37
  end
data/lib/hekate.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rails'
2
+ require 'hekate/aws'
2
3
  require 'hekate/version'
3
4
  require 'hekate/railtie'
4
5
  require 'hekate/engine'
data/lib/hekate/aws.rb ADDED
@@ -0,0 +1,98 @@
1
+ require 'aws-sdk'
2
+
3
+ module Hekate
4
+ class Aws
5
+ def initialize(region)
6
+ @region = region
7
+ end
8
+
9
+ def get_parameter(name)
10
+ parameters = ssm.get_parameters(
11
+ names: [name],
12
+ with_decryption: true
13
+ ).parameters
14
+
15
+ if parameters.to_a.empty?
16
+ puts "Could not find parameter #{parameter_key}"
17
+ else
18
+ parameters.first['value']
19
+ end
20
+ end
21
+
22
+ def list_parameters(environment)
23
+ get_app_env_parameters(environment)
24
+ end
25
+
26
+ def get_parameters(names)
27
+ ssm.get_parameters(
28
+ names: names,
29
+ with_decryption: true
30
+ ).parameters
31
+ end
32
+
33
+ def put_parameter(name, value)
34
+ ssm.put_parameter(name: name,
35
+ value: value,
36
+ type: 'SecureString',
37
+ key_id: kms_key,
38
+ overwrite: true)
39
+ end
40
+
41
+ def delete_parameter(name)
42
+ ssm.delete_parameter(name: name)
43
+ end
44
+
45
+ private
46
+
47
+ def kms
48
+ @kms ||= ::Aws::KMS::Client.new(region: @region)
49
+ end
50
+
51
+ def ssm
52
+ @ssm ||= ::Aws::SSM::Client.new(region: @region)
53
+ end
54
+
55
+ def kms_key
56
+ return @kms_key if @kms_key
57
+
58
+ alias_name = "alias/#{Hekate::Engine.application}_#{@environment}"
59
+
60
+ if kms_alias_exists? alias_name
61
+ key = kms.describe_key(key_id: alias_name).key_metadata
62
+ else
63
+ key = kms.create_key.key_metadata
64
+ kms.create_alias(
65
+ alias_name: alias_name,
66
+ target_key_id: key.key_id
67
+ )
68
+ end
69
+
70
+ key.key_id
71
+ end
72
+
73
+ def kms_alias_exists?(kms_alias)
74
+ aliases = kms.list_aliases.aliases.map(&:alias_name)
75
+ aliases.include? kms_alias
76
+ end
77
+
78
+ def get_app_env_parameters(env, parameters = [], next_token = nil)
79
+ query = {
80
+ filters: [
81
+ {
82
+ key: 'Name',
83
+ values: ["#{Hekate::Engine.application}.#{env}"]
84
+ }
85
+ ],
86
+ max_results: 50
87
+ }
88
+ query[:next_token] = next_token if next_token
89
+ response = ssm.describe_parameters(query)
90
+
91
+ parameters += response.parameters
92
+
93
+ parameters = get_app_env_parameters(env, parameters, response.next_token) if response.next_token
94
+
95
+ parameters
96
+ end
97
+ end
98
+ end
data/lib/hekate/engine.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'aws-sdk'
2
1
  require 'commander/user_interaction'
3
2
  require 'dotenv'
4
3
  require 'ec2_metadata'
@@ -35,14 +34,20 @@ module Hekate
35
34
  end
36
35
  end
37
36
 
37
+ def root
38
+ @root ||= Rails::Engine.find_root_with_flag('config.ru', File.dirname($PROGRAM_NAME))
39
+ end
40
+
38
41
  def dotenv_files
39
- root = Rails::Engine.find_root_with_flag("config.ru", File.dirname($0))
40
- [
42
+ files = [
41
43
  root.join(".env.#{Rails.env}.local"),
42
44
  (root.join('.env.local') unless Rails.env.test?),
43
45
  root.join(".env.#{Rails.env}"),
44
46
  root.join('.env')
45
- ].compact
47
+ ].compact.select { |file| File.exist? file }
48
+
49
+ raise 'Could not find .env files while falling back to dotenv' if files.empty?
50
+ files
46
51
  end
47
52
  end
48
53
 
@@ -52,19 +57,20 @@ module Hekate
52
57
  Hekate::Engine.application = application
53
58
  end
54
59
 
60
+ def awsclient
61
+ @awsclient ||= Hekate::Aws.new(@region)
62
+ end
63
+
55
64
  def load_environment
56
65
  if Hekate::Engine.online?
57
66
  ['root', @environment].each do |env|
58
67
  parameter_key = "#{Hekate::Engine.application}.#{env}."
59
68
 
60
- parameters = get_app_env_parameters(env)
69
+ parameters = awsclient.list_parameters(env)
61
70
  parameters = parameters.map(&:name)
62
71
 
63
72
  parameters.each_slice(10) do |slice|
64
- result = ssm.get_parameters(
65
- names: slice,
66
- with_decryption: true
67
- ).parameters
73
+ result = awsclient.get_parameters(slice)
68
74
 
69
75
  result.each do |parameter|
70
76
  parameter_name = parameter.name.gsub(parameter_key, '')
@@ -75,7 +81,7 @@ module Hekate
75
81
  elsif Rails.env.development? || Rails.env.test?
76
82
  Dotenv.load(*Hekate::Engine.dotenv_files)
77
83
  else
78
- Fail 'Could not find an internet connection or .env files'
84
+ raise 'Could not connect to parameter store'
79
85
  end
80
86
  end
81
87
 
@@ -100,56 +106,38 @@ module Hekate
100
106
  end
101
107
 
102
108
  def put(key, value)
103
- ssm.put_parameter(name: "#{Hekate::Engine.application}.#{@environment}.#{key}",
104
- value: value,
105
- type: 'SecureString',
106
- key_id: kms_key.key_id,
107
- overwrite: true)
109
+ parameter_key = "#{Hekate::Engine.application}.#{@environment}.#{key}"
110
+ awsclient.put_parameter(parameter_key, value)
108
111
  end
109
112
 
110
113
  def get(key)
111
114
  parameter_key = "#{Hekate::Engine.application}.#{@environment}.#{key}"
112
- parameters = ssm.get_parameters(
113
- names: [parameter_key],
114
- with_decryption: true
115
- ).parameters
116
-
117
- if parameters.to_a.empty?
118
- puts "Could not find parameter #{parameter_key}"
119
- else
120
- parameters.first['value']
121
- end
115
+ awsclient.get_parameter(parameter_key)
122
116
  end
123
117
 
124
118
  def delete_all
125
- parameters = get_app_env_parameters(@environment)
126
- parameters = parameters.map(&:name)
119
+ parameters = awsclient.list_parameters(@environment).map(&:name)
127
120
  progress = Commander::UI::ProgressBar.new(parameters.length)
128
- parameters.each_slice(10) do |slice|
129
- slice.each do |parameter|
130
- progress.increment
131
- ssm.delete_parameter(name: parameter)
132
- end
121
+ parameters.each do |parameter|
122
+ progress.increment
123
+ awsclient.delete_parameter(parameter)
133
124
  end
134
125
  end
135
126
 
136
127
  def delete(key)
137
- ssm.delete_parameter(name: "#{Hekate::Engine.application}.#{@environment}.#{key}")
128
+ parameter_key = "#{Hekate::Engine.application}.#{@environment}.#{key}"
129
+ awsclient.delete_parameter(parameter_key)
138
130
  end
139
131
 
140
132
  def export(env_file)
141
133
  parameter_key = "#{Hekate::Engine.application}.#{@environment}."
142
134
 
143
- parameters = get_app_env_parameters(@environment)
144
- parameters = parameters.map(&:name)
135
+ parameters = awsclient.list_parameters(@environment).map(&:name)
145
136
 
146
137
  progress = Commander::UI::ProgressBar.new(parameters.length)
147
138
  open(env_file, 'w') do |file|
148
139
  parameters.each_slice(10) do |slice|
149
- result = ssm.get_parameters(
150
- names: slice,
151
- with_decryption: true
152
- ).parameters
140
+ result = awsclient.get_parameters(slice)
153
141
 
154
142
  result.each do |parameter|
155
143
  progress.increment
@@ -159,58 +147,5 @@ module Hekate
159
147
  end
160
148
  end
161
149
  end
162
-
163
- private
164
-
165
- def kms
166
- @kms ||= Aws::KMS::Client.new(region: @region)
167
- end
168
-
169
- def ssm
170
- @ssm ||= Aws::SSM::Client.new(region: @region)
171
- end
172
-
173
- def kms_key
174
- return @kms_key if @kms_key
175
-
176
- alias_name = "alias/#{Hekate::Engine.application}_#{@environment}"
177
-
178
- if kms_alias_exists? alias_name
179
- key = kms.describe_key(key_id: alias_name).key_metadata
180
- else
181
- key = kms.create_key.key_metadata
182
- kms.create_alias(
183
- alias_name: alias_name,
184
- target_key_id: key.key_id
185
- )
186
- end
187
-
188
- key
189
- end
190
-
191
- def kms_alias_exists?(kms_alias)
192
- aliases = kms.list_aliases.aliases.map(&:alias_name)
193
- aliases.include? kms_alias
194
- end
195
-
196
- def get_app_env_parameters(env, parameters = [], next_token = nil)
197
- query = {
198
- filters: [
199
- {
200
- key: 'Name',
201
- values: ["#{Hekate::Engine.application}.#{env}"]
202
- }
203
- ],
204
- max_results: 50
205
- }
206
- query[:next_token] = next_token if next_token
207
- response = ssm.describe_parameters(query)
208
-
209
- parameters += response.parameters
210
-
211
- parameters = get_app_env_parameters(env, parameters, response.next_token) if response.next_token
212
-
213
- parameters
214
- end
215
150
  end
216
151
  end
@@ -1,3 +1,3 @@
1
1
  module Hekate
2
- VERSION = '0.1.0.pre10'.freeze
2
+ VERSION = '0.1.0.pre11'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hekate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre10
4
+ version: 0.1.0.pre11
5
5
  platform: ruby
6
6
  authors:
7
7
  - jasonrisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-09 00:00:00.000000000 Z
11
+ date: 2017-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -108,16 +108,22 @@ dependencies:
108
108
  name: dotenv
109
109
  requirement: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - "~>"
111
+ - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: '0'
113
+ version: '2.2'
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 2.2.1
114
117
  type: :runtime
115
118
  prerelease: false
116
119
  version_requirements: !ruby/object:Gem::Requirement
117
120
  requirements:
118
- - - "~>"
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '2.2'
124
+ - - ">="
119
125
  - !ruby/object:Gem::Version
120
- version: '0'
126
+ version: 2.2.1
121
127
  - !ruby/object:Gem::Dependency
122
128
  name: bundler
123
129
  requirement: !ruby/object:Gem::Requirement
@@ -132,6 +138,26 @@ dependencies:
132
138
  - - "~>"
133
139
  - !ruby/object:Gem::Version
134
140
  version: '1.15'
141
+ - !ruby/object:Gem::Dependency
142
+ name: codecov
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '0.1'
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 0.1.0
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '0.1'
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 0.1.0
135
161
  - !ruby/object:Gem::Dependency
136
162
  name: rake
137
163
  requirement: !ruby/object:Gem::Requirement
@@ -161,23 +187,26 @@ dependencies:
161
187
  - !ruby/object:Gem::Version
162
188
  version: '3.0'
163
189
  - !ruby/object:Gem::Dependency
164
- name: webmock
190
+ name: rspec_junit_formatter
165
191
  requirement: !ruby/object:Gem::Requirement
166
192
  requirements:
167
193
  - - "~>"
168
194
  - !ruby/object:Gem::Version
169
- version: 3.0.0
195
+ version: 0.3.0
170
196
  type: :development
171
197
  prerelease: false
172
198
  version_requirements: !ruby/object:Gem::Requirement
173
199
  requirements:
174
200
  - - "~>"
175
201
  - !ruby/object:Gem::Version
176
- version: 3.0.0
202
+ version: 0.3.0
177
203
  - !ruby/object:Gem::Dependency
178
- name: vcr
204
+ name: webmock
179
205
  requirement: !ruby/object:Gem::Requirement
180
206
  requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '3.0'
181
210
  - - "~>"
182
211
  - !ruby/object:Gem::Version
183
212
  version: 3.0.0
@@ -185,6 +214,9 @@ dependencies:
185
214
  prerelease: false
186
215
  version_requirements: !ruby/object:Gem::Requirement
187
216
  requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '3.0'
188
220
  - - "~>"
189
221
  - !ruby/object:Gem::Version
190
222
  version: 3.0.0
@@ -196,6 +228,7 @@ executables:
196
228
  extensions: []
197
229
  extra_rdoc_files: []
198
230
  files:
231
+ - ".circleci/config.yml"
199
232
  - ".gitignore"
200
233
  - ".idea/vcs.xml"
201
234
  - ".rspec"
@@ -208,6 +241,7 @@ files:
208
241
  - bin/console
209
242
  - bin/hekate
210
243
  - bin/setup
244
+ - codecov.yml
211
245
  - docs/delete.md
212
246
  - docs/delete_all.md
213
247
  - docs/export.md
@@ -216,6 +250,7 @@ files:
216
250
  - docs/put.md
217
251
  - hekate.gemspec
218
252
  - lib/hekate.rb
253
+ - lib/hekate/aws.rb
219
254
  - lib/hekate/engine.rb
220
255
  - lib/hekate/railtie.rb
221
256
  - lib/hekate/version.rb