hekate 0.1.0.pre10 → 0.1.0.pre11

Sign up to get free protection for your applications and to get access to all the features.
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