chamber 3.0.0rc1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +5 -5
  4. data/lib/chamber/binary/runner.rb +10 -12
  5. data/lib/chamber/commands/base.rb +4 -4
  6. data/lib/chamber/commands/initialize.rb +5 -5
  7. data/lib/chamber/commands/securable.rb +5 -9
  8. data/lib/chamber/commands/show.rb +0 -1
  9. data/lib/chamber/context_resolver.rb +5 -4
  10. data/lib/chamber/encryption_methods/public_key.rb +26 -14
  11. data/lib/chamber/encryption_methods/ssl.rb +36 -28
  12. data/lib/chamber/errors/disallowed_class.rb +8 -0
  13. data/lib/chamber/errors/invalid_key_type.rb +8 -0
  14. data/lib/chamber/errors/missing_index.rb +13 -0
  15. data/lib/chamber/errors/missing_setting.rb +13 -0
  16. data/lib/chamber/errors/non_conforming_key.rb +8 -0
  17. data/lib/chamber/file.rb +18 -7
  18. data/lib/chamber/file_set.rb +5 -1
  19. data/lib/chamber/files/signature.rb +6 -6
  20. data/lib/chamber/filters/decryption_filter.rb +9 -11
  21. data/lib/chamber/filters/encryption_filter.rb +8 -9
  22. data/lib/chamber/filters/environment_filter.rb +16 -18
  23. data/lib/chamber/filters/failed_decryption_filter.rb +3 -3
  24. data/lib/chamber/filters/namespace_filter.rb +10 -12
  25. data/lib/chamber/filters/secure_filter.rb +3 -3
  26. data/lib/chamber/filters/translate_secure_keys_filter.rb +3 -3
  27. data/lib/chamber/instance.rb +4 -7
  28. data/lib/chamber/integrations/sinatra.rb +1 -1
  29. data/lib/chamber/keys/base.rb +11 -7
  30. data/lib/chamber/namespace_set.rb +2 -2
  31. data/lib/chamber/rails.rb +1 -1
  32. data/lib/chamber/refinements/deep_dup.rb +12 -36
  33. data/lib/chamber/refinements/enumerable.rb +8 -20
  34. data/lib/chamber/refinements/hash.rb +10 -36
  35. data/lib/chamber/rubinius_fix.rb +1 -1
  36. data/lib/chamber/settings.rb +39 -23
  37. data/lib/chamber/types/secured.rb +8 -8
  38. data/lib/chamber/version.rb +1 -1
  39. data/lib/chamber.rb +0 -5
  40. data.tar.gz.sig +0 -0
  41. metadata +29 -34
  42. metadata.gz.sig +0 -0
  43. data/lib/chamber/adapters/cloud/circle_ci.rb +0 -85
  44. data/lib/chamber/adapters/cloud/heroku.rb +0 -74
  45. data/lib/chamber/binary/circle_ci.rb +0 -123
  46. data/lib/chamber/binary/heroku.rb +0 -111
  47. data/lib/chamber/binary/travis.rb +0 -37
  48. data/lib/chamber/commands/cloud/base.rb +0 -35
  49. data/lib/chamber/commands/cloud/clear.rb +0 -25
  50. data/lib/chamber/commands/cloud/compare.rb +0 -26
  51. data/lib/chamber/commands/cloud/pull.rb +0 -29
  52. data/lib/chamber/commands/cloud/push.rb +0 -44
  53. data/lib/chamber/commands/travis/secure.rb +0 -37
  54. data/lib/chamber/refinements/array.rb +0 -20
@@ -37,14 +37,14 @@ class Secured < CHAMBER_TYPE_VALUE_SUPERCLASS
37
37
 
38
38
  def cast(value)
39
39
  case value
40
- when ::Hash
40
+ when Hash
41
41
  value
42
- when ::String
42
+ when String
43
43
  ::JSON.parse(value)
44
- when ::NilClass
44
+ when NilClass
45
45
  nil
46
46
  else
47
- fail ::ArgumentError, 'Any attributes encrypted with Chamber must be either a Hash or a valid JSON string'
47
+ fail ArgumentError, 'Any attributes encrypted with Chamber must be either a Hash or a valid JSON string'
48
48
  end
49
49
  end
50
50
  alias type_cast_from_user cast
@@ -54,14 +54,14 @@ class Secured < CHAMBER_TYPE_VALUE_SUPERCLASS
54
54
 
55
55
  return if value.nil?
56
56
 
57
- ::Chamber.decrypt(value,
58
- decryption_keys: decryption_keys,
59
- encryption_keys: encryption_keys)
57
+ Chamber.decrypt(value,
58
+ decryption_keys: decryption_keys,
59
+ encryption_keys: encryption_keys)
60
60
  end
61
61
  alias type_cast_from_database deserialize
62
62
 
63
63
  def serialize(value)
64
- fail ::ArgumentError, 'Any attributes encrypted with Chamber must be a Hash' unless value.is_a?(::Hash)
64
+ fail ArgumentError, 'Any attributes encrypted with Chamber must be a Hash' unless value.is_a?(Hash)
65
65
 
66
66
  ::JSON.dump(
67
67
  ::Chamber.encrypt(value,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Chamber
4
- VERSION = '3.0.0rc1'
4
+ VERSION = '3.0.0'
5
5
  end
data/lib/chamber.rb CHANGED
@@ -11,10 +11,6 @@ module Chamber
11
11
  self.instance = Instance.new(**args)
12
12
  end
13
13
 
14
- def env
15
- instance.settings
16
- end
17
-
18
14
  def instance
19
15
  @instance ||= Instance.new
20
16
  end
@@ -87,7 +83,6 @@ module Chamber
87
83
  :dig!,
88
84
  :dig,
89
85
  :encrypt,
90
- :env,
91
86
  :filenames,
92
87
  :files,
93
88
  :instance,
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chamber
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0rc1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - thekompanee
8
8
  - jfelchner
9
9
  - stevenhallen
10
10
  - m5rk
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain:
14
14
  - |
15
15
  -----BEGIN CERTIFICATE-----
16
- MIIEGDCCAoCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdhY2Nv
17
- dW50c19ydWJ5Z2Vtcy9EQz10aGVrb21wYW5lZS9EQz1jb20wHhcNMjAxMjI2MjIy
18
- NTE5WhcNMjExMjI2MjIyNTE5WjAyMTAwLgYDVQQDDCdhY2NvdW50c19ydWJ5Z2Vt
16
+ MIIEdjCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdhY2Nv
17
+ dW50c19ydWJ5Z2Vtcy9EQz10aGVrb21wYW5lZS9EQz1jb20wHhcNMjMwMzA2MDM0
18
+ ODUxWhcNMjYwMzA1MDM0ODUxWjAyMTAwLgYDVQQDDCdhY2NvdW50c19ydWJ5Z2Vt
19
19
  cy9EQz10aGVrb21wYW5lZS9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw
20
20
  ggGKAoIBgQD0Z84PxtE0iiWCMTQbnit6D4w55GGBQZnhpWUCJwC0SpQ/jnT0Fsma
21
21
  g8oAIdDclLvLC9jzqSAmkOujlpkJMb5NabgkhKFwHi6cVW/gz/cVnISAv8LQTIM5
@@ -25,18 +25,20 @@ cert_chain:
25
25
  NBRKSuO15kpPo2G55N0HLy8abUzbu5cqjhSbIk9hzD6AmdGCT4DqlsdHI5gOrGP0
26
26
  BO6VxGpRuRETKoZ4epPCsXC2XAwk3TJXkuuqYkgdcv8ZR4rPW2CiPvRqgG1YVwWj
27
27
  SrIy5Dt/dlMvxdIMiTj6ytAQP1kfdKPFWrJTIA2tspl/eNB+LiYsVdj8d0UU/KTY
28
- y7jqKMpOE1UCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
29
- BBYEFO/l0LjdONn2Rr8y4WGyMA37MWVfMA0GCSqGSIb3DQEBCwUAA4IBgQDBGn+T
30
- HS7SCuLgjCimsT5e3v+Q0VaML1+yJPPqvIVM+HMyTYDpV2ogdAcX1I0lNbUHT9w7
31
- 5y8pQ7BtYq8LDX6D8EufjvlgpJzunuPpNVh2QQdtkYC2zGabTnk+BJC5scYckBxW
32
- PxYXSuOxjXAkFe1r9RhPzeMY8lPVh6aEQKNLVkzbpIjoGzUgAPGPZG/ylKSWycwE
33
- qfHiDXzCAqMzSsb3sMQO1+0euciY1oTOyYCHYKo+gemWEI/p8PyJe/qB2tWC9GYs
34
- m+we5ul7O4Sq8qKnX0KCqHneqaXakcbuEkhViW6Def432jH8JjYums6EW2mg9570
35
- pHS20TH4u9o0+5DIhayfGrmAtdtQutQNCclONqBlk7r3/16Y8Lr376dDHrISZlwd
36
- fdbUKgJXqJeb4GYhiKV07l67XExVjmAklMuA6bcB7mk+aSYUkoWNic4ZYGNjVv88
37
- AapqLKNG/UPfrJhdhTtFR4ARb8f54rgzONhTaAqVk23Bdp1yoDXaulFCkmU=
28
+ y7jqKMpOE1UCAwEAAaOBljCBkzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
29
+ HQ4EFgQU7+XQuN042fZGvzLhYbIwDfsxZV8wLAYDVR0RBCUwI4EhYWNjb3VudHMr
30
+ cnVieWdlbXNAdGhla29tcGFuZWUuY29tMCwGA1UdEgQlMCOBIWFjY291bnRzK3J1
31
+ YnlnZW1zQHRoZWtvbXBhbmVlLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAIaR7p1yv
32
+ +nE+JX/7nItZ0YKE71L6JdAuAlUfvTuHq8S1dpKdewrm3ewNPGt2nK9svy8vxNUQ
33
+ AqT3KWIaGVwkslL/y/MRxBQHOOZz9XCMmUYXIencNXqNzkWLubcCK7uF1h8mRS46
34
+ jvGfiXfYDwi8QzqJA8IFEK/oyKCCKlNiIbz8Q4yHM4wTqLwjYQqlHiBEgCF2UHc6
35
+ 0tCTD8eixdZUeuexdB7M7F/M086y1wjWyYCeijqbKmTPqKb8n6AmLo0fqkNBVibJ
36
+ nYVEOECVzKt/f3PoG0Z2oMnZ6FKqpFiDpPqgAlRDmVznjpMdZR204/t79NoEVlLf
37
+ lxz9Q1u83TUBUPvDRzKg6Kq9P28JV1Ipnst0ecQZOsnoLjl1BmxUt29hQPJKjd11
38
+ Z6HMkN0PHJ6eG0Zl3/H4H8Xb+KreWlEx3sXXfZj6UscrdHAVffRQnM1E98PCqnRX
39
+ l5EwT4ShG/HorJMQSTY1EoBLZf54NrD5WlWcfM0CLrcvT7QM77dIqmue
38
40
  -----END CERTIFICATE-----
39
- date: 2020-12-31 00:00:00.000000000 Z
41
+ date: 2023-03-07 00:00:00.000000000 Z
40
42
  dependencies:
41
43
  - !ruby/object:Gem::Dependency
42
44
  name: thor
@@ -142,18 +144,8 @@ files:
142
144
  - README.md
143
145
  - bin/chamber
144
146
  - lib/chamber.rb
145
- - lib/chamber/adapters/cloud/circle_ci.rb
146
- - lib/chamber/adapters/cloud/heroku.rb
147
- - lib/chamber/binary/circle_ci.rb
148
- - lib/chamber/binary/heroku.rb
149
147
  - lib/chamber/binary/runner.rb
150
- - lib/chamber/binary/travis.rb
151
148
  - lib/chamber/commands/base.rb
152
- - lib/chamber/commands/cloud/base.rb
153
- - lib/chamber/commands/cloud/clear.rb
154
- - lib/chamber/commands/cloud/compare.rb
155
- - lib/chamber/commands/cloud/pull.rb
156
- - lib/chamber/commands/cloud/push.rb
157
149
  - lib/chamber/commands/comparable.rb
158
150
  - lib/chamber/commands/compare.rb
159
151
  - lib/chamber/commands/files.rb
@@ -163,7 +155,6 @@ files:
163
155
  - lib/chamber/commands/show.rb
164
156
  - lib/chamber/commands/sign.rb
165
157
  - lib/chamber/commands/travis.rb
166
- - lib/chamber/commands/travis/secure.rb
167
158
  - lib/chamber/commands/verify.rb
168
159
  - lib/chamber/configuration.rb
169
160
  - lib/chamber/context_resolver.rb
@@ -171,7 +162,12 @@ files:
171
162
  - lib/chamber/encryption_methods/public_key.rb
172
163
  - lib/chamber/encryption_methods/ssl.rb
173
164
  - lib/chamber/errors/decryption_failure.rb
165
+ - lib/chamber/errors/disallowed_class.rb
174
166
  - lib/chamber/errors/environment_conversion.rb
167
+ - lib/chamber/errors/invalid_key_type.rb
168
+ - lib/chamber/errors/missing_index.rb
169
+ - lib/chamber/errors/missing_setting.rb
170
+ - lib/chamber/errors/non_conforming_key.rb
175
171
  - lib/chamber/file.rb
176
172
  - lib/chamber/file_set.rb
177
173
  - lib/chamber/files/signature.rb
@@ -192,7 +188,6 @@ files:
192
188
  - lib/chamber/keys/encryption.rb
193
189
  - lib/chamber/namespace_set.rb
194
190
  - lib/chamber/rails.rb
195
- - lib/chamber/refinements/array.rb
196
191
  - lib/chamber/refinements/deep_dup.rb
197
192
  - lib/chamber/refinements/enumerable.rb
198
193
  - lib/chamber/refinements/hash.rb
@@ -212,7 +207,7 @@ metadata:
212
207
  homepage_uri: https://github.com/thekompanee/chamber
213
208
  source_code_uri: https://github.com/thekompanee/chamber
214
209
  wiki_uri: https://github.com/thekompanee/chamber/wiki
215
- post_install_message:
210
+ post_install_message:
216
211
  rdoc_options: []
217
212
  require_paths:
218
213
  - lib
@@ -220,15 +215,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
215
  requirements:
221
216
  - - ">="
222
217
  - !ruby/object:Gem::Version
223
- version: 2.1.0
218
+ version: 2.7.5
224
219
  required_rubygems_version: !ruby/object:Gem::Requirement
225
220
  requirements:
226
- - - ">"
221
+ - - ">="
227
222
  - !ruby/object:Gem::Version
228
- version: 1.3.1
223
+ version: '0'
229
224
  requirements: []
230
- rubygems_version: 3.2.3
231
- signing_key:
225
+ rubygems_version: 3.1.6
226
+ signing_key:
232
227
  specification_version: 4
233
228
  summary: A surprisingly configurable convention-based approach to managing your application's
234
229
  custom configuration settings.
metadata.gz.sig CHANGED
Binary file
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'net/http'
5
- require 'uri'
6
-
7
- module Chamber
8
- module Adapters
9
- module Cloud
10
- class CircleCi
11
- API_HOST = 'circleci.com'
12
- API_PORT = 443
13
- API_BASE_URI = '/api/v1.1'
14
-
15
- attr_accessor :api_token,
16
- :project,
17
- :username,
18
- :vcs_type
19
-
20
- def initialize(api_token:, project:, username:, vcs_type:)
21
- self.api_token = api_token
22
- self.project = project
23
- self.username = username
24
- self.vcs_type = vcs_type
25
- end
26
-
27
- def add_environment_variable(name, value)
28
- value = value.gsub(/\n/, '\n')
29
- request = ::Net::HTTP::Post.new(request_uri(resource: 'envvar'))
30
-
31
- request.basic_auth api_token, ''
32
- request['Content-Type'] = 'application/json'
33
- request.body = ::JSON.dump(name: name, value: value)
34
-
35
- response = ::JSON.parse(response(request).body)
36
-
37
- fail NameError, response['message'] if response['message']
38
-
39
- response['name']
40
- end
41
-
42
- # rubocop:disable Layout/MultilineAssignmentLayout
43
- def environment_variables
44
- @environment_variables ||= \
45
- begin
46
- request = ::Net::HTTP::Get.new(request_uri(resource: 'envvar'))
47
-
48
- request.basic_auth api_token, ''
49
- request['Content-Type'] = 'application/json'
50
-
51
- ::JSON
52
- .parse(response(request).body)
53
- .each_with_object({}) { |e, m| m[e['name']] = e['value'] }
54
- end
55
- end
56
- # rubocop:enable Layout/MultilineAssignmentLayout
57
-
58
- def remove_environment_variable(name)
59
- request = ::Net::HTTP::Delete.new(request_uri(resource: "envvar/#{name}"))
60
-
61
- request.basic_auth api_token, ''
62
- request['Content-Type'] = 'application/json'
63
-
64
- ::JSON.parse(response(request).body)['message'] == 'ok'
65
- end
66
-
67
- private
68
-
69
- def request_uri(resource:)
70
- "#{API_BASE_URI}/project/#{vcs_type}/#{username}/#{project}/#{resource}"
71
- end
72
-
73
- def response(request)
74
- connection.request(request)
75
- end
76
-
77
- def connection
78
- @connection ||= ::Net::HTTP.new(API_HOST, API_PORT).tap do |conn|
79
- conn.use_ssl = true
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'net/http'
5
- require 'uri'
6
-
7
- module Chamber
8
- module Adapters
9
- module Cloud
10
- class Heroku
11
- API_HOST = 'api.heroku.com'
12
- API_PORT = 443
13
- API_BASE_URI = ''
14
-
15
- attr_accessor :api_token,
16
- :app
17
-
18
- def initialize(api_token:, app:)
19
- self.api_token = api_token
20
- self.app = app
21
- end
22
-
23
- def add_environment_variable(name, value) # rubocop:disable Metrics/AbcSize
24
- value = value.gsub(/\n/, '\n') if value
25
- request = ::Net::HTTP::Patch.new(config_vars_uri)
26
-
27
- request['Authorization'] = "Bearer #{api_token}"
28
- request['Accept'] = 'application/vnd.heroku+json; version=3'
29
- request['Content-Type'] = 'application/json'
30
- request.body = ::JSON.dump(::Hash[name, value])
31
-
32
- response = ::JSON.parse(response(request).body)
33
-
34
- fail ::NameError, response['message'] if response['message']
35
-
36
- response
37
- end
38
-
39
- def environment_variables
40
- request = ::Net::HTTP::Get.new(config_vars_uri)
41
-
42
- request['Authorization'] = "Bearer #{api_token}"
43
- request['Accept'] = 'application/vnd.heroku+json; version=3'
44
-
45
- response = ::JSON.parse(response(request).body)
46
-
47
- fail ::NameError, response['message'] if response['message']
48
-
49
- response
50
- end
51
-
52
- def remove_environment_variable(name)
53
- add_environment_variable(name, nil)
54
- end
55
-
56
- private
57
-
58
- def config_vars_uri
59
- "#{API_BASE_URI}/apps/#{app}/config-vars"
60
- end
61
-
62
- def response(request)
63
- connection.request(request)
64
- end
65
-
66
- def connection
67
- @connection ||= ::Net::HTTP.new(API_HOST, API_PORT).tap do |conn|
68
- conn.use_ssl = true
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,123 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thor'
4
- require 'chamber/commands/cloud/clear'
5
- require 'chamber/commands/cloud/push'
6
- require 'chamber/commands/cloud/pull'
7
- require 'chamber/commands/cloud/compare'
8
- require 'chamber/refinements/hash'
9
-
10
- module Chamber
11
- module Binary
12
- class CircleCi < ::Thor
13
- include ::Thor::Actions
14
- using ::Chamber::Refinements::Hash
15
-
16
- class_option :api_token,
17
- type: :string,
18
- aliases: '-t',
19
- required: true,
20
- desc: 'The API token to access your CircleCI project.'
21
-
22
- class_option :project,
23
- type: :string,
24
- aliases: '-p',
25
- required: true,
26
- desc: 'The project name in your VCS (eg Github).'
27
-
28
- class_option :username,
29
- type: :string,
30
- aliases: '-u',
31
- required: true,
32
- desc: 'The user/organization name in your VCS (eg Github).'
33
-
34
- class_option :vcs_type,
35
- type: :string,
36
- aliases: '-v',
37
- default: 'github',
38
- desc: 'The type of VCS your project is using.',
39
- enum: %w{github bitbucket}
40
-
41
- desc 'clear',
42
- 'Removes all CircleCi environment variables which match settings that Chamber ' \
43
- 'knows about'
44
-
45
- method_option :dry_run,
46
- type: :boolean,
47
- aliases: '-d',
48
- desc: 'Does not actually remove anything, but instead displays what ' \
49
- 'would change if cleared'
50
-
51
- def clear
52
- Commands::Cloud::Clear.call(**options
53
- .deep_transform_keys(&:to_sym)
54
- .merge(shell: self, adapter: 'circle_ci'))
55
- end
56
-
57
- desc 'push',
58
- 'Sends settings to CircleCi so that they may be used in the application ' \
59
- 'once it is deployed'
60
-
61
- method_option :dry_run,
62
- type: :boolean,
63
- aliases: '-d',
64
- desc: 'Does not actually push anything to CircleCi, but instead ' \
65
- 'displays what would change if pushed'
66
-
67
- method_option :keys,
68
- type: :boolean,
69
- aliases: '-k',
70
- desc: 'Pushes private Chamber keys to CircleCi as environment ' \
71
- 'variables. Chamber will automatically detect it and ' \
72
- 'transparently decrypt your secure settings without any ' \
73
- 'further synchronization.'
74
-
75
- method_option :only_sensitive,
76
- type: :boolean,
77
- aliases: '-o',
78
- default: true,
79
- desc: 'When enabled, only settings contained in files which have ' \
80
- 'been gitignored or settings which are marked as "_secure" ' \
81
- 'will be pushed'
82
-
83
- def push
84
- Commands::Cloud::Push.call(**options
85
- .deep_transform_keys(&:to_sym)
86
- .merge(shell: self, adapter: 'circle_ci'))
87
- end
88
-
89
- desc 'pull',
90
- 'Retrieves the environment variables for the application and stores them in a ' \
91
- 'temporary file'
92
-
93
- method_option :into,
94
- type: :string,
95
- desc: 'The file into which the CircleCi config information should be ' \
96
- 'stored. This file WILL BE OVERRIDDEN.'
97
-
98
- def pull
99
- Commands::Cloud::Pull.call(**options
100
- .deep_transform_keys(&:to_sym)
101
- .merge(shell: self, adapter: 'circle_ci'))
102
- end
103
-
104
- desc 'compare',
105
- 'Displays the difference between what is currently stored in the ' \
106
- 'CircleCi application\'s config and what Chamber knows about locally'
107
-
108
- method_option :only_sensitive,
109
- type: :boolean,
110
- aliases: '-o',
111
- default: true,
112
- desc: 'When enabled, the diff will only consider settings ' \
113
- 'contained in files which have been gitignored or settings ' \
114
- 'which are marked as "_secure"'
115
-
116
- def compare
117
- Commands::Cloud::Compare.call(**options
118
- .deep_transform_keys(&:to_sym)
119
- .merge(shell: self, adapter: 'circle_ci'))
120
- end
121
- end
122
- end
123
- end
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thor'
4
- require 'chamber/commands/cloud/clear'
5
- require 'chamber/commands/cloud/push'
6
- require 'chamber/commands/cloud/pull'
7
- require 'chamber/commands/cloud/compare'
8
- require 'chamber/refinements/hash'
9
-
10
- module Chamber
11
- module Binary
12
- class Heroku < ::Thor
13
- include ::Thor::Actions
14
- using ::Chamber::Refinements::Hash
15
-
16
- class_option :app,
17
- type: :string,
18
- aliases: '-a',
19
- required: true,
20
- desc: 'The name of the Heroku application whose config values will ' \
21
- 'be affected'
22
-
23
- class_option :api_token,
24
- type: :string,
25
- aliases: '-t',
26
- required: true,
27
- desc: 'The API token to access your Heroku project.'
28
-
29
- desc 'clear',
30
- 'Removes all Heroku environment variables which match settings that ' \
31
- 'Chamber knows about'
32
-
33
- method_option :dry_run,
34
- type: :boolean,
35
- aliases: '-d',
36
- desc: 'Does not actually remove anything, but instead displays what ' \
37
- 'would change if cleared'
38
-
39
- def clear
40
- Commands::Cloud::Clear.call(**options
41
- .deep_transform_keys(&:to_sym)
42
- .merge(shell: self, adapter: 'heroku'))
43
- end
44
-
45
- desc 'push',
46
- 'Sends settings to Heroku so that they may be used in the application ' \
47
- 'once it is deployed'
48
-
49
- method_option :dry_run,
50
- type: :boolean,
51
- aliases: '-d',
52
- desc: 'Does not actually push anything to Heroku, but instead ' \
53
- 'displays what would change if pushed'
54
-
55
- method_option :keys,
56
- type: :boolean,
57
- aliases: '-k',
58
- desc: 'Pushes private Chamber keys to Heroku as environment ' \
59
- 'variables. Chamber will automatically detect it and ' \
60
- 'transparently decrypt your secure settings without any ' \
61
- 'further synchronization.'
62
-
63
- method_option :only_sensitive,
64
- type: :boolean,
65
- aliases: '-o',
66
- default: true,
67
- desc: 'When enabled, only settings contained in files which have ' \
68
- 'been gitignored or settings which are marked as "_secure" ' \
69
- 'will be pushed'
70
-
71
- def push
72
- Commands::Cloud::Push.call(**options
73
- .deep_transform_keys(&:to_sym)
74
- .merge(shell: self, adapter: 'heroku'))
75
- end
76
-
77
- desc 'pull',
78
- 'Retrieves the environment variables for the application and stores ' \
79
- 'them in a temporary file'
80
-
81
- method_option :into,
82
- type: :string,
83
- desc: 'The file into which the Heroku config information should be ' \
84
- 'stored. This file WILL BE OVERRIDDEN.'
85
-
86
- def pull
87
- Commands::Cloud::Pull.call(**options
88
- .deep_transform_keys(&:to_sym)
89
- .merge(shell: self, adapter: 'heroku'))
90
- end
91
-
92
- desc 'compare',
93
- 'Displays the difference between what is currently stored in the ' \
94
- 'Heroku application\'s config and what Chamber knows about locally'
95
-
96
- method_option :only_sensitive,
97
- type: :boolean,
98
- aliases: '-o',
99
- default: true,
100
- desc: 'When enabled, the diff will only consider settings ' \
101
- 'contained in files which have been gitignored or settings ' \
102
- 'which are marked as "_secure"'
103
-
104
- def compare
105
- Commands::Cloud::Compare.call(**options
106
- .deep_transform_keys(&:to_sym)
107
- .merge(shell: self, adapter: 'heroku'))
108
- end
109
- end
110
- end
111
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thor'
4
- require 'chamber/commands/travis/secure'
5
- require 'chamber/refinements/hash'
6
-
7
- module Chamber
8
- module Binary
9
- class Travis < ::Thor
10
- using ::Chamber::Refinements::Hash
11
-
12
- desc 'secure',
13
- 'Uses your Travis CI public key to encrypt the settings you have ' \
14
- 'chosen not to commit to the repo'
15
-
16
- method_option :dry_run,
17
- type: :boolean,
18
- aliases: '-d',
19
- desc: 'Does not actually encrypt anything to .travis.yml, but ' \
20
- 'instead displays what values would be encrypted'
21
-
22
- method_option :only_sensitive,
23
- type: :boolean,
24
- aliases: '-o',
25
- default: true,
26
- desc: 'Does not encrypt settings into .travis.yml unless they are ' \
27
- 'contained in files which have been gitignored or settings ' \
28
- 'which are marked as "_secure"'
29
-
30
- def secure
31
- Commands::Travis::Secure.call(**options
32
- .deep_transform_keys(&:to_sym)
33
- .merge(shell: self))
34
- end
35
- end
36
- end
37
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'chamber/commands/base'
4
-
5
- module Chamber
6
- module Commands
7
- module Cloud
8
- class Base < Chamber::Commands::Base
9
- attr_accessor :adapter
10
-
11
- def initialize(adapter:, **args)
12
- super(**args)
13
-
14
- self.adapter = adapter_class(adapter).new(**args)
15
- end
16
-
17
- private
18
-
19
- def adapter_class(adapter_name)
20
- require "chamber/adapters/cloud/#{adapter_name}"
21
-
22
- @adapter_class ||= case adapter_name
23
- when 'circle_ci'
24
- Chamber::Adapters::Cloud::CircleCi
25
- when 'heroku'
26
- Chamber::Adapters::Cloud::Heroku
27
- else
28
- fail ArgumentError,
29
- "Invalid Chamber cloud adapter name: #{adapter_name}"
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end