ruby_gpg2 0.9.0.pre.6 → 0.9.0.pre.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +50 -13
  4. data/Rakefile +83 -46
  5. data/bin/console +4 -3
  6. data/lib/ruby_gpg2/colon_output.rb +61 -42
  7. data/lib/ruby_gpg2/colon_record.rb +257 -222
  8. data/lib/ruby_gpg2/commands/base.rb +9 -13
  9. data/lib/ruby_gpg2/commands/decrypt.rb +3 -2
  10. data/lib/ruby_gpg2/commands/encrypt.rb +3 -2
  11. data/lib/ruby_gpg2/commands/export.rb +2 -0
  12. data/lib/ruby_gpg2/commands/export_secret_keys.rb +2 -0
  13. data/lib/ruby_gpg2/commands/generate_key.rb +5 -1
  14. data/lib/ruby_gpg2/commands/import.rb +2 -0
  15. data/lib/ruby_gpg2/commands/list_public_keys.rb +3 -2
  16. data/lib/ruby_gpg2/commands/list_secret_keys.rb +3 -2
  17. data/lib/ruby_gpg2/commands/mixins/armor_config.rb +2 -0
  18. data/lib/ruby_gpg2/commands/mixins/batch_config.rb +2 -0
  19. data/lib/ruby_gpg2/commands/mixins/colon_config.rb +2 -0
  20. data/lib/ruby_gpg2/commands/mixins/global_config.rb +7 -2
  21. data/lib/ruby_gpg2/commands/mixins/input_config.rb +2 -0
  22. data/lib/ruby_gpg2/commands/mixins/output_config.rb +7 -2
  23. data/lib/ruby_gpg2/commands/mixins/passphrase_config.rb +7 -2
  24. data/lib/ruby_gpg2/commands/mixins/pinentry_config.rb +7 -2
  25. data/lib/ruby_gpg2/commands/mixins/recipient_config.rb +7 -2
  26. data/lib/ruby_gpg2/commands/mixins/status_config.rb +7 -2
  27. data/lib/ruby_gpg2/commands/mixins/trust_mode_config.rb +7 -2
  28. data/lib/ruby_gpg2/commands/mixins/with_captured_output.rb +10 -5
  29. data/lib/ruby_gpg2/commands/mixins/with_captured_status.rb +11 -7
  30. data/lib/ruby_gpg2/commands/mixins/with_result.rb +2 -0
  31. data/lib/ruby_gpg2/commands/mixins/without_passphrase.rb +8 -3
  32. data/lib/ruby_gpg2/commands/result.rb +3 -3
  33. data/lib/ruby_gpg2/commands.rb +3 -2
  34. data/lib/ruby_gpg2/key.rb +34 -25
  35. data/lib/ruby_gpg2/parameter_file_contents.rb +101 -51
  36. data/lib/ruby_gpg2/status_line.rb +15 -12
  37. data/lib/ruby_gpg2/status_lines/import_ok.rb +29 -25
  38. data/lib/ruby_gpg2/status_lines/import_problem.rb +19 -15
  39. data/lib/ruby_gpg2/status_lines/imported.rb +13 -9
  40. data/lib/ruby_gpg2/status_lines/key_considered.rb +18 -14
  41. data/lib/ruby_gpg2/status_lines/key_created.rb +20 -16
  42. data/lib/ruby_gpg2/status_lines/unimplemented.rb +6 -3
  43. data/lib/ruby_gpg2/status_lines.rb +2 -1
  44. data/lib/ruby_gpg2/status_output.rb +2 -0
  45. data/lib/ruby_gpg2/user_id.rb +19 -16
  46. data/lib/ruby_gpg2/version.rb +3 -1
  47. data/lib/ruby_gpg2.rb +2 -0
  48. data/ruby_gpg2.gemspec +55 -0
  49. 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.6'
4
+ VERSION = '0.9.0.pre.8'
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.6
4
+ version: 0.9.0.pre.8
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-21 00:00:00.000000000 Z
11
+ date: 2022-10-28 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: