ruby_gpg2 0.9.0.pre.4 → 0.9.0.pre.7

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +37 -2
  4. data/LICENSE.txt +1 -1
  5. data/Rakefile +83 -46
  6. data/bin/console +4 -3
  7. data/lib/ruby_gpg2/colon_output.rb +61 -42
  8. data/lib/ruby_gpg2/colon_record.rb +257 -222
  9. data/lib/ruby_gpg2/commands/base.rb +9 -13
  10. data/lib/ruby_gpg2/commands/decrypt.rb +3 -2
  11. data/lib/ruby_gpg2/commands/encrypt.rb +3 -2
  12. data/lib/ruby_gpg2/commands/export.rb +2 -0
  13. data/lib/ruby_gpg2/commands/export_secret_keys.rb +2 -0
  14. data/lib/ruby_gpg2/commands/generate_key.rb +5 -1
  15. data/lib/ruby_gpg2/commands/import.rb +2 -0
  16. data/lib/ruby_gpg2/commands/list_public_keys.rb +3 -2
  17. data/lib/ruby_gpg2/commands/list_secret_keys.rb +3 -2
  18. data/lib/ruby_gpg2/commands/mixins/armor_config.rb +2 -0
  19. data/lib/ruby_gpg2/commands/mixins/batch_config.rb +2 -0
  20. data/lib/ruby_gpg2/commands/mixins/colon_config.rb +2 -0
  21. data/lib/ruby_gpg2/commands/mixins/global_config.rb +7 -2
  22. data/lib/ruby_gpg2/commands/mixins/input_config.rb +2 -0
  23. data/lib/ruby_gpg2/commands/mixins/output_config.rb +7 -2
  24. data/lib/ruby_gpg2/commands/mixins/passphrase_config.rb +7 -2
  25. data/lib/ruby_gpg2/commands/mixins/pinentry_config.rb +7 -2
  26. data/lib/ruby_gpg2/commands/mixins/recipient_config.rb +7 -2
  27. data/lib/ruby_gpg2/commands/mixins/status_config.rb +7 -2
  28. data/lib/ruby_gpg2/commands/mixins/trust_mode_config.rb +7 -2
  29. data/lib/ruby_gpg2/commands/mixins/with_captured_output.rb +10 -5
  30. data/lib/ruby_gpg2/commands/mixins/with_captured_status.rb +11 -7
  31. data/lib/ruby_gpg2/commands/mixins/with_result.rb +2 -0
  32. data/lib/ruby_gpg2/commands/mixins/without_passphrase.rb +8 -3
  33. data/lib/ruby_gpg2/commands/result.rb +3 -3
  34. data/lib/ruby_gpg2/commands.rb +3 -2
  35. data/lib/ruby_gpg2/key.rb +34 -25
  36. data/lib/ruby_gpg2/parameter_file_contents.rb +101 -51
  37. data/lib/ruby_gpg2/status_line.rb +15 -12
  38. data/lib/ruby_gpg2/status_lines/import_ok.rb +29 -25
  39. data/lib/ruby_gpg2/status_lines/import_problem.rb +19 -15
  40. data/lib/ruby_gpg2/status_lines/imported.rb +13 -9
  41. data/lib/ruby_gpg2/status_lines/key_considered.rb +18 -14
  42. data/lib/ruby_gpg2/status_lines/key_created.rb +20 -16
  43. data/lib/ruby_gpg2/status_lines/unimplemented.rb +6 -3
  44. data/lib/ruby_gpg2/status_lines.rb +2 -1
  45. data/lib/ruby_gpg2/status_output.rb +2 -0
  46. data/lib/ruby_gpg2/user_id.rb +19 -16
  47. data/lib/ruby_gpg2/version.rb +3 -1
  48. data/lib/ruby_gpg2.rb +2 -0
  49. data/ruby_gpg2.gemspec +55 -0
  50. metadata +64 -6
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class ImportOK
4
6
  REASONS = {
5
- 1 => :new_key,
6
- 2 => :new_user_ids,
7
- 4 => :new_signatures,
8
- 8 => :new_subkeys,
9
- 16 => :private_key
10
- }
7
+ 1 => :new_key,
8
+ 2 => :new_user_ids,
9
+ 4 => :new_signatures,
10
+ 8 => :new_subkeys,
11
+ 16 => :private_key
12
+ }.freeze
11
13
 
12
14
  def self.parse(line)
13
15
  match = line.match(/^\[GNUPG:\] IMPORT_OK (\d+) (.*)$/)
14
16
  new(
15
- raw: line,
16
- reasons: reasons(match[1]),
17
- key_fingerprint: match[2])
17
+ raw: line,
18
+ reasons: reasons(match[1]),
19
+ key_fingerprint: match[2]
20
+ )
18
21
  end
19
22
 
20
23
  attr_reader(
21
- :raw,
22
- :reasons,
23
- :key_fingerprint)
24
+ :raw,
25
+ :reasons,
26
+ :key_fingerprint
27
+ )
24
28
 
25
29
  def initialize(opts)
26
30
  @raw = opts[:raw]
@@ -40,23 +44,23 @@ module RubyGPG2
40
44
 
41
45
  def state
42
46
  [
43
- @raw,
44
- @reasons,
45
- @key_fingerprint
47
+ @raw,
48
+ @reasons,
49
+ @key_fingerprint
46
50
  ]
47
51
  end
48
52
 
49
- private
53
+ class << self
54
+ protected
50
55
 
51
- def self.reasons(value)
52
- value = value.to_i
53
- if value == 0
54
- [:no_change]
55
- else
56
- REASONS.inject([]) do |r, entry|
57
- (value & entry[0]) > 0 ?
58
- (r << entry[1]) :
59
- r
56
+ def reasons(value)
57
+ value = value.to_i
58
+ if value.zero?
59
+ [:no_change]
60
+ else
61
+ REASONS.inject([]) do |r, entry|
62
+ (value & entry[0]).positive? ? (r << entry[1]) : r
63
+ end
60
64
  end
61
65
  end
62
66
  end
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class ImportProblem
4
6
  REASONS = {
5
- 0 => :no_reason_given,
6
- 1 => :invalid_certificate,
7
- 2 => :issuer_certificate_missing,
8
- 3 => :certificate_chain_too_long,
9
- 4 => :error_storing_certificate
10
- }
7
+ 0 => :no_reason_given,
8
+ 1 => :invalid_certificate,
9
+ 2 => :issuer_certificate_missing,
10
+ 3 => :certificate_chain_too_long,
11
+ 4 => :error_storing_certificate
12
+ }.freeze
11
13
 
12
14
  def self.parse(line)
13
15
  match = line.match(/^\[GNUPG:\] IMPORT_PROBLEM (\d+) (.*)$/)
14
16
  new(
15
- raw: line,
16
- reason: REASONS[match[1].to_i],
17
- key_fingerprint: match[2])
17
+ raw: line,
18
+ reason: REASONS[match[1].to_i],
19
+ key_fingerprint: match[2]
20
+ )
18
21
  end
19
22
 
20
23
  attr_reader(
21
- :raw,
22
- :reason,
23
- :key_fingerprint)
24
+ :raw,
25
+ :reason,
26
+ :key_fingerprint
27
+ )
24
28
 
25
29
  def initialize(opts)
26
30
  @raw = opts[:raw]
@@ -40,9 +44,9 @@ module RubyGPG2
40
44
 
41
45
  def state
42
46
  [
43
- @raw,
44
- @reason,
45
- @key_fingerprint
47
+ @raw,
48
+ @reason,
49
+ @key_fingerprint
46
50
  ]
47
51
  end
48
52
  end
@@ -1,18 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class Imported
4
6
  def self.parse(line)
5
7
  match = line.match(/^\[GNUPG:\] IMPORTED (.*?) (.*)$/)
6
8
  new(
7
- raw: line,
8
- key_id: match[1],
9
- user_id: match[2])
9
+ raw: line,
10
+ key_id: match[1],
11
+ user_id: match[2]
12
+ )
10
13
  end
11
14
 
12
15
  attr_reader(
13
- :raw,
14
- :key_id,
15
- :user_id)
16
+ :raw,
17
+ :key_id,
18
+ :user_id
19
+ )
16
20
 
17
21
  def initialize(opts)
18
22
  @raw = opts[:raw]
@@ -32,9 +36,9 @@ module RubyGPG2
32
36
 
33
37
  def state
34
38
  [
35
- @raw,
36
- @key_id,
37
- @user_id
39
+ @raw,
40
+ @key_id,
41
+ @user_id
38
42
  ]
39
43
  end
40
44
  end
@@ -1,24 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class KeyConsidered
4
6
  FLAGS = {
5
- '0' => [],
6
- '1' => [:key_not_selected],
7
- '2' => [:all_subkeys_expired_or_revoked]
8
- }
7
+ '0' => [],
8
+ '1' => [:key_not_selected],
9
+ '2' => [:all_subkeys_expired_or_revoked]
10
+ }.freeze
9
11
 
10
12
  def self.parse(line)
11
13
  match = line.match(/^\[GNUPG:\] KEY_CONSIDERED (.*) (.*)$/)
12
14
  new(
13
- raw: line,
14
- key_fingerprint: match[1],
15
- flags: FLAGS[match[2]])
15
+ raw: line,
16
+ key_fingerprint: match[1],
17
+ flags: FLAGS[match[2]]
18
+ )
16
19
  end
17
20
 
18
21
  attr_reader(
19
- :raw,
20
- :key_fingerprint,
21
- :flags)
22
+ :raw,
23
+ :key_fingerprint,
24
+ :flags
25
+ )
22
26
 
23
27
  def initialize(opts)
24
28
  @raw = opts[:raw]
@@ -38,11 +42,11 @@ module RubyGPG2
38
42
 
39
43
  def state
40
44
  [
41
- @raw,
42
- @key_fingerprint,
43
- @flags
45
+ @raw,
46
+ @key_fingerprint,
47
+ @flags
44
48
  ]
45
49
  end
46
50
  end
47
51
  end
48
- end
52
+ end
@@ -1,26 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class KeyCreated
4
6
  KEY_TYPES = {
5
- 'B' => :primary_and_subkey,
6
- 'P' => :primary,
7
- 'S' => :subkey
8
- }
7
+ 'B' => :primary_and_subkey,
8
+ 'P' => :primary,
9
+ 'S' => :subkey
10
+ }.freeze
9
11
 
10
12
  def self.parse(line)
11
13
  match = line.match(/^\[GNUPG:\] KEY_CREATED (.) (.*?)(?: (.*))?$/)
12
14
  new(
13
- raw: line,
14
- key_type: KEY_TYPES[match[1]],
15
- key_fingerprint: match[2],
16
- handle: match[3])
15
+ raw: line,
16
+ key_type: KEY_TYPES[match[1]],
17
+ key_fingerprint: match[2],
18
+ handle: match[3]
19
+ )
17
20
  end
18
21
 
19
22
  attr_reader(
20
- :raw,
21
- :key_type,
22
- :key_fingerprint,
23
- :handle)
23
+ :raw,
24
+ :key_type,
25
+ :key_fingerprint,
26
+ :handle
27
+ )
24
28
 
25
29
  def initialize(opts)
26
30
  @raw = opts[:raw]
@@ -41,11 +45,11 @@ module RubyGPG2
41
45
 
42
46
  def state
43
47
  [
44
- @raw,
45
- @key_type,
46
- @key_fingerprint
48
+ @raw,
49
+ @key_type,
50
+ @key_fingerprint
47
51
  ]
48
52
  end
49
53
  end
50
54
  end
51
- end
55
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  module StatusLines
3
5
  class Unimplemented
@@ -6,7 +8,8 @@ module RubyGPG2
6
8
  end
7
9
 
8
10
  attr_reader(
9
- :raw)
11
+ :raw
12
+ )
10
13
 
11
14
  def initialize(opts)
12
15
  @raw = opts[:raw]
@@ -24,9 +27,9 @@ module RubyGPG2
24
27
 
25
28
  def state
26
29
  [
27
- @raw
30
+ @raw
28
31
  ]
29
32
  end
30
33
  end
31
34
  end
32
- end
35
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'status_lines/import_ok'
2
4
  require_relative 'status_lines/import_problem'
3
5
  require_relative 'status_lines/imported'
@@ -7,6 +9,5 @@ require_relative 'status_lines/unimplemented'
7
9
 
8
10
  module RubyGPG2
9
11
  module StatusLines
10
-
11
12
  end
12
13
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'status_line'
2
4
 
3
5
  module RubyGPG2
@@ -1,14 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
4
  class UserID
3
5
  attr_reader(
4
- :name,
5
- :comment,
6
- :email,
7
- :validity,
8
- :creation_date,
9
- :expiration_date,
10
- :hash,
11
- :origin)
6
+ :name,
7
+ :comment,
8
+ :email,
9
+ :validity,
10
+ :creation_date,
11
+ :expiration_date,
12
+ :hash,
13
+ :origin
14
+ )
12
15
 
13
16
  def initialize(opts)
14
17
  @name = opts[:name]
@@ -29,14 +32,14 @@ module RubyGPG2
29
32
 
30
33
  def state
31
34
  [
32
- @name,
33
- @comment,
34
- @email,
35
- @validity,
36
- @creation_date,
37
- @expiration_date,
38
- @hash,
39
- @origin
35
+ @name,
36
+ @comment,
37
+ @email,
38
+ @validity,
39
+ @creation_date,
40
+ @expiration_date,
41
+ @hash,
42
+ @origin
40
43
  ]
41
44
  end
42
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyGPG2
2
- VERSION = '0.9.0.pre.4'
4
+ VERSION = '0.9.0.pre.7'
3
5
  end
data/lib/ruby_gpg2.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ruby_gpg2/version'
2
4
  require 'ruby_gpg2/commands'
3
5
  require 'ruby_gpg2/parameter_file_contents'
data/ruby_gpg2.gemspec ADDED
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'ruby_gpg2/version'
6
+
7
+ files = %w[
8
+ bin
9
+ lib
10
+ CODE_OF_CONDUCT.md
11
+ ruby_gpg2.gemspec
12
+ Gemfile
13
+ LICENSE.txt
14
+ Rakefile
15
+ README.md
16
+ ]
17
+
18
+ Gem::Specification.new do |spec|
19
+ spec.name = 'ruby_gpg2'
20
+ spec.version = RubyGPG2::VERSION
21
+ spec.authors = ['InfraBlocks Maintainers']
22
+ spec.email = ['maintainers@infrablocks.io']
23
+
24
+ spec.summary = 'A simple Ruby wrapper for invoking gpg (>= 2.0) commands.'
25
+ spec.description = 'Wraps the gpg binary (>= 2.0) so that it can be ' \
26
+ 'invoked from a Ruby script or Rakefile.'
27
+ spec.homepage = 'https://github.com/infrablocks/ruby_gpg2'
28
+ spec.license = 'MIT'
29
+
30
+ spec.files = `git ls-files -z`.split("\x0").select do |f|
31
+ f.match(/^(#{files.map { |g| Regexp.escape(g) }.join('|')})/)
32
+ end
33
+ spec.bindir = 'exe'
34
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
+ spec.require_paths = ['lib']
36
+
37
+ spec.required_ruby_version = '>= 2.7'
38
+
39
+ spec.add_dependency 'lino', '~> 3.0'
40
+
41
+ spec.add_development_dependency 'bundler'
42
+ spec.add_development_dependency 'gem-release'
43
+ spec.add_development_dependency 'rake'
44
+ spec.add_development_dependency 'rake_circle_ci'
45
+ spec.add_development_dependency 'rake_github'
46
+ spec.add_development_dependency 'rake_gpg'
47
+ spec.add_development_dependency 'rake_ssh'
48
+ spec.add_development_dependency 'rspec'
49
+ spec.add_development_dependency 'rubocop'
50
+ spec.add_development_dependency 'rubocop-rake'
51
+ spec.add_development_dependency 'rubocop-rspec'
52
+ spec.add_development_dependency 'simplecov'
53
+
54
+ spec.metadata['rubygems_mfa_required'] = 'false'
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_gpg2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0.pre.4
4
+ version: 0.9.0.pre.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-13 00:00:00.000000000 Z
11
+ date: 2022-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lino
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gem-release
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rake_ssh
98
+ name: rake_gpg
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: rake_gpg
112
+ name: rake_ssh
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -123,7 +137,49 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: gem-release
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: simplecov
127
183
  requirement: !ruby/object:Gem::Requirement
128
184
  requirements:
129
185
  - - ">="
@@ -194,10 +250,12 @@ files:
194
250
  - lib/ruby_gpg2/status_output.rb
195
251
  - lib/ruby_gpg2/user_id.rb
196
252
  - lib/ruby_gpg2/version.rb
253
+ - ruby_gpg2.gemspec
197
254
  homepage: https://github.com/infrablocks/ruby_gpg2
198
255
  licenses:
199
256
  - MIT
200
- metadata: {}
257
+ metadata:
258
+ rubygems_mfa_required: 'false'
201
259
  post_install_message:
202
260
  rdoc_options: []
203
261
  require_paths: