iostreams 1.2.1 → 1.4.0

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.
@@ -42,7 +42,7 @@ module Paths
42
42
 
43
43
  describe "#reader" do
44
44
  it "reads" do
45
- assert_equal raw, existing_path.reader(&:read)
45
+ assert_equal raw, existing_path.read
46
46
  end
47
47
 
48
48
  it "fails when the file does not exist" do
@@ -60,7 +60,7 @@ module Paths
60
60
 
61
61
  describe "#writer" do
62
62
  it "writes" do
63
- assert_equal raw.size, write_path.writer { |io| io.write(raw) }
63
+ assert_equal(raw.size, write_path.writer { |io| io.write(raw) })
64
64
  assert_equal raw, write_path.read
65
65
  end
66
66
 
@@ -77,7 +77,7 @@ module Paths
77
77
 
78
78
  it "writes" do
79
79
  skip "No identity file env var set: SFTP_IDENTITY_FILE" unless ENV["SFTP_IDENTITY_FILE"]
80
- assert_equal raw.size, write_path.writer { |io| io.write(raw) }
80
+ assert_equal(raw.size, write_path.writer { |io| io.write(raw) })
81
81
  assert_equal raw, write_path.read
82
82
  end
83
83
  end
@@ -90,7 +90,7 @@ module Paths
90
90
 
91
91
  it "writes" do
92
92
  skip "No identity file env var set: SFTP_IDENTITY_FILE" unless ENV["SFTP_IDENTITY_FILE"]
93
- assert_equal raw.size, write_path.writer { |io| io.write(raw) }
93
+ assert_equal(raw.size, write_path.writer { |io| io.write(raw) })
94
94
  assert_equal raw, write_path.read
95
95
  end
96
96
  end
@@ -70,7 +70,7 @@ class PgpTest < Minitest::Test
70
70
  refute IOStreams::Pgp.delete_keys(email: "random@iostreams.net", public: true, private: true)
71
71
  end
72
72
 
73
- it "deletes existing keys" do
73
+ it "deletes existing keys with specified email" do
74
74
  generated_key_id
75
75
  # There is a timing issue with creating and then deleting keys.
76
76
  # Call list_keys again to give GnuPGP time.
@@ -78,7 +78,16 @@ class PgpTest < Minitest::Test
78
78
  assert IOStreams::Pgp.delete_keys(email: email, public: true, private: true)
79
79
  end
80
80
 
81
- it "deletes just the private key" do
81
+ it "deletes existing keys with specified key_id" do
82
+ generated_key_id
83
+
84
+ # There is a timing issue with creating and then deleting keys.
85
+ # Call list_keys again to give GnuPGP time.
86
+ IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
87
+ assert IOStreams::Pgp.delete_keys(key_id: generated_key_id, public: true, private: true)
88
+ end
89
+
90
+ it "deletes just the private key with specified email" do
82
91
  generated_key_id
83
92
  # There is a timing issue with creating and then deleting keys.
84
93
  # Call list_keys again to give GnuPGP time.
@@ -87,6 +96,16 @@ class PgpTest < Minitest::Test
87
96
  refute IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
88
97
  assert IOStreams::Pgp.key?(key_id: generated_key_id, private: false)
89
98
  end
99
+
100
+ it "deletes just the private key with specified key_id" do
101
+ generated_key_id
102
+ # There is a timing issue with creating and then deleting keys.
103
+ # Call list_keys again to give GnuPGP time.
104
+ IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
105
+ assert IOStreams::Pgp.delete_keys(key_id: generated_key_id, public: false, private: true)
106
+ refute IOStreams::Pgp.key?(key_id: generated_key_id, private: true)
107
+ assert IOStreams::Pgp.key?(key_id: generated_key_id, private: false)
108
+ end
90
109
  end
91
110
 
92
111
  describe ".export" do
@@ -113,7 +132,7 @@ class PgpTest < Minitest::Test
113
132
  IOStreams::Pgp.list_keys(email: email)
114
133
  end
115
134
 
116
- it "lists public keys" do
135
+ it "lists public keys for email" do
117
136
  assert keys = IOStreams::Pgp.list_keys(email: email)
118
137
  assert_equal 1, keys.size
119
138
  assert key = keys.first
@@ -130,7 +149,24 @@ class PgpTest < Minitest::Test
130
149
  assert_equal "ultimate", key[:trust] if (ver.to_f >= 2) && (maint >= 30)
131
150
  end
132
151
 
133
- it "lists private keys" do
152
+ it "lists public keys for key_id" do
153
+ assert keys = IOStreams::Pgp.list_keys(key_id: generated_key_id)
154
+ assert_equal 1, keys.size
155
+ assert key = keys.first
156
+
157
+ assert_equal Date.today, key[:date]
158
+ assert_equal email, key[:email]
159
+ assert_includes key[:key_id], generated_key_id
160
+ assert_equal 1024, key[:key_length]
161
+ assert_includes %w[R rsa], key[:key_type]
162
+ assert_equal user_name, key[:name]
163
+ refute key[:private], key
164
+ ver = IOStreams::Pgp.pgp_version
165
+ maint = ver.split(".").last.to_i
166
+ assert_equal "ultimate", key[:trust] if (ver.to_f >= 2) && (maint >= 30)
167
+ end
168
+
169
+ it "lists private keys for email" do
134
170
  assert keys = IOStreams::Pgp.list_keys(email: email, private: true)
135
171
  assert_equal 1, keys.size
136
172
  assert key = keys.first
@@ -143,6 +179,20 @@ class PgpTest < Minitest::Test
143
179
  assert_equal user_name, key[:name]
144
180
  assert key[:private], key
145
181
  end
182
+
183
+ it "lists private keys for key_id" do
184
+ assert keys = IOStreams::Pgp.list_keys(key_id: generated_key_id, private: true)
185
+ assert_equal 1, keys.size
186
+ assert key = keys.first
187
+
188
+ assert_equal Date.today, key[:date]
189
+ assert_equal email, key[:email]
190
+ assert_includes key[:key_id], generated_key_id
191
+ assert_equal 1024, key[:key_length]
192
+ assert_includes %w[R rsa], key[:key_type]
193
+ assert_equal user_name, key[:name]
194
+ assert key[:private], key
195
+ end
146
196
  end
147
197
 
148
198
  describe ".key_info" do
@@ -53,9 +53,9 @@ class PgpWriterTest < Minitest::Test
53
53
  end
54
54
 
55
55
  it "supports multiple recipients" do
56
- IOStreams::Pgp::Writer.file(file_name, recipient: %w[receiver@example.org receiver2@example.org], signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
57
- io.write(decrypted)
58
- end
56
+ IOStreams::Pgp::Writer.file(file_name, recipient: %w[receiver@example.org receiver2@example.org], signer: "sender@example.org", signer_passphrase: "sender_passphrase") do |io|
57
+ io.write(decrypted)
58
+ end
59
59
 
60
60
  result = IOStreams::Pgp::Reader.file(file_name, passphrase: "receiver_passphrase", &:read)
61
61
  assert_equal decrypted, result
@@ -138,33 +138,47 @@ class TabularTest < Minitest::Test
138
138
  describe ":fixed format" do
139
139
  let :tabular do
140
140
  layout = [
141
- {key: "name", size: 23},
142
- {key: "address", size: 40},
143
- {key: "zip", size: 5}
141
+ {size: 23, key: :name},
142
+ {size: 40, key: :address},
143
+ {size: 2},
144
+ {size: 5, key: :zip, type: :integer},
145
+ {size: 8, key: :age, type: :integer},
146
+ {size: 10, key: :weight, type: :float, decimals: 2}
144
147
  ]
145
148
  IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
146
149
  end
147
150
 
148
151
  it "parses to hash" do
149
- assert hash = tabular.record_parse("Jack over there 34618")
150
- assert_equal({"name" => "Jack", "address" => "over there", "zip" => "34618"}, hash)
152
+ assert hash = tabular.record_parse("Jack over there XX34618012345670012345.01")
153
+ assert_equal({name: "Jack", address: "over there", zip: 34_618, age: 1_234_567, weight: 12_345.01}, hash)
151
154
  end
152
155
 
153
156
  it "parses short string" do
154
- # TODO: Raise exception on lines that are too short?
155
- assert hash = tabular.record_parse("Jack over th")
156
- assert_equal({"name" => "Jack", "address" => "over th", "zip" => ""}, hash)
157
+ assert_raises IOStreams::Errors::InvalidLineLength do
158
+ tabular.record_parse("Jack over th")
159
+ end
157
160
  end
158
161
 
159
162
  it "parses longer string" do
160
- # TODO: Raise exception on lines that are too long?
161
- assert hash = tabular.record_parse("Jack over there 34618........................................")
162
- assert_equal({"name" => "Jack", "address" => "over there", "zip" => "34618"}, hash)
163
+ assert_raises IOStreams::Errors::InvalidLineLength do
164
+ tabular.record_parse("Jack over there XX34618012345670012345.01............")
165
+ end
166
+ end
167
+
168
+ it "parses zero values" do
169
+ assert hash = tabular.record_parse(" 00000000000000000000000")
170
+ assert_equal({name: "", address: "", zip: 0, age: 0, weight: 0.0}, hash)
171
+ end
172
+
173
+ it "parses empty values" do
174
+ assert hash = tabular.record_parse(" XX ")
175
+ assert_equal({name: "", address: "", zip: nil, age: nil, weight: nil}, hash)
163
176
  end
164
177
 
165
- it "parses empty strings" do
166
- assert hash = tabular.record_parse(" 34618")
167
- assert_equal({"name" => "", "address" => "", "zip" => "34618"}, hash)
178
+ it "parses blank strings" do
179
+ skip "TODO: Part of tabular refactor to get this working"
180
+ assert hash = tabular.record_parse(" ")
181
+ assert_equal({name: "", address: "", zip: nil, age: nil, weight: nil}, hash)
168
182
  end
169
183
 
170
184
  it "parses nil data as nil" do
@@ -224,31 +238,46 @@ class TabularTest < Minitest::Test
224
238
  describe ":fixed format" do
225
239
  let :tabular do
226
240
  layout = [
227
- {key: "name", size: 23},
228
- {key: "address", size: 40},
229
- {key: "zip", size: 5}
241
+ {size: 23, key: :name},
242
+ {size: 40, key: :address},
243
+ {size: 2},
244
+ {size: 5, key: :zip, type: :integer},
245
+ {size: 8, key: :age, type: :integer},
246
+ {size: 10, key: :weight, type: :float, decimals: 2}
230
247
  ]
231
248
  IOStreams::Tabular.new(format: :fixed, format_options: {layout: layout})
232
249
  end
233
250
 
234
251
  it "renders fixed data" do
235
- assert string = tabular.render({"name" => "Jack", "address" => "over there", "zip" => 34_618, "phone" => "5551231234"})
236
- assert_equal "Jack over there 34618", string
252
+ assert string = tabular.render(name: "Jack", address: "over there", zip: 34_618, weight: 123_456.789123, age: 21)
253
+ assert_equal "Jack over there 34618000000210123456.79", string
237
254
  end
238
255
 
239
- it "truncates long data" do
240
- assert string = tabular.render({"name" => "Jack", "address" => "over there", "zip" => 3_461_832_653_653_265, "phone" => "5551231234"})
241
- assert_equal "Jack over there 34618", string
256
+ it "truncates long strings" do
257
+ assert string = tabular.render(name: "Jack ran up the beanstalk and when jack reached the top it was truncated", address: "over there", zip: 34_618)
258
+ assert_equal "Jack ran up the beanstaover there 34618000000000000000.00", string
259
+ end
260
+
261
+ it "when integer is too large" do
262
+ assert_raises IOStreams::Errors::ValueTooLong do
263
+ tabular.render(zip: 3_461_832_653_653_265)
264
+ end
265
+ end
266
+
267
+ it "when float is too large" do
268
+ assert_raises IOStreams::Errors::ValueTooLong do
269
+ tabular.render(weight: 3_461_832_653_653_265.234)
270
+ end
242
271
  end
243
272
 
244
273
  it "renders nil as empty string" do
245
- assert string = tabular.render("zip" => 3_461_832_653_653_265)
246
- assert_equal " 34618", string
274
+ assert string = tabular.render(zip: 34_618)
275
+ assert_equal " 34618000000000000000.00", string
247
276
  end
248
277
 
249
278
  it "renders boolean" do
250
- assert string = tabular.render({"name" => true, "address" => false, "zip" => nil, "phone" => "5551231234"})
251
- assert_equal "true false ", string
279
+ assert string = tabular.render(name: true, address: false)
280
+ assert_equal "true false 00000000000000000000.00", string
252
281
  end
253
282
 
254
283
  it "renders no data as nil" do
@@ -4,7 +4,7 @@ require "yaml"
4
4
  require "minitest/autorun"
5
5
  require "minitest/reporters"
6
6
  require "iostreams"
7
- require "awesome_print"
7
+ require "amazing_print"
8
8
  require "symmetric-encryption"
9
9
 
10
10
  # Since PGP libraries use UTC for Dates
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iostreams
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2020-09-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -130,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubygems_version: 3.0.6
133
+ rubygems_version: 3.1.2
134
134
  signing_key:
135
135
  specification_version: 4
136
136
  summary: Input and Output streaming for Ruby.