nis-ruby 0.0.16 → 0.0.17

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -33
  3. data/examples/account/generate.rb +29 -0
  4. data/examples/account/get.rb +26 -0
  5. data/examples/account/harvests.rb +8 -0
  6. data/examples/account/historical.rb +13 -0
  7. data/examples/account/importances.rb +8 -0
  8. data/examples/account/lock.rb +8 -0
  9. data/examples/account/mosaic.rb +9 -0
  10. data/examples/account/namespace.rb +8 -0
  11. data/examples/account/status.rb +8 -0
  12. data/examples/account/transfers.rb +16 -0
  13. data/examples/account/unconfirmed_transactions.rb +8 -0
  14. data/examples/account/unlock.rb +8 -0
  15. data/examples/account/unlocked.rb +8 -0
  16. data/examples/block/at_public.rb +4 -0
  17. data/examples/block/get.rb +4 -0
  18. data/examples/debug/connections.rb +13 -0
  19. data/examples/debug/time_synchronization.rb +6 -0
  20. data/examples/local/account_transfers.rb +20 -0
  21. data/examples/local/chain_blocks_after.rb +8 -0
  22. data/examples/namespace/mosaic_definition.rb +6 -0
  23. data/examples/namespace/root.rb +6 -0
  24. data/examples/nis.rb +11 -7
  25. data/examples/node/active_peers.rb +6 -0
  26. data/examples/node/boot.rb +25 -0
  27. data/examples/node/info.rb +8 -0
  28. data/examples/node/peerlist.rb +14 -0
  29. data/examples/time_sync/network_time.rb +6 -0
  30. data/examples/transactions/get.rb +42 -0
  31. data/examples/transactions/importance_transfer.rb +6 -4
  32. data/examples/transactions/mosaic_definition_creation.rb +6 -4
  33. data/examples/transactions/mosaic_supply_change.rb +6 -4
  34. data/examples/transactions/multisig.rb +6 -4
  35. data/examples/transactions/multisig_add_cosignatory.rb +3 -1
  36. data/examples/transactions/multisig_aggregate_modification.rb +6 -4
  37. data/examples/transactions/multisig_signature.rb +6 -3
  38. data/examples/transactions/provision_namespace.rb +6 -4
  39. data/examples/transactions/transfer.rb +14 -7
  40. data/examples/transactions/transfer_mosaic.rb +5 -3
  41. data/examples/transactions/transfer_remote.rb +6 -4
  42. data/lib/nis.rb +6 -0
  43. data/lib/nis/client.rb +11 -0
  44. data/lib/nis/configuration.rb +23 -0
  45. data/lib/nis/endpoint/account/transfers.rb +24 -0
  46. data/lib/nis/endpoint/debug/connections.rb +17 -0
  47. data/lib/nis/endpoint/local/account/transfers.rb +14 -0
  48. data/lib/nis/endpoint/node/peer_list.rb +20 -0
  49. data/lib/nis/endpoint/time_sync.rb +4 -0
  50. data/lib/nis/endpoint/time_sync/network_time.rb +10 -0
  51. data/lib/nis/endpoint/transaction/get.rb +12 -0
  52. data/lib/nis/keypair.rb +13 -7
  53. data/lib/nis/struct.rb +1 -0
  54. data/lib/nis/struct/importance_transfer_transaction.rb +10 -0
  55. data/lib/nis/struct/message.rb +9 -2
  56. data/lib/nis/struct/mosaic_definition_creation_transaction.rb +15 -0
  57. data/lib/nis/struct/mosaic_supply_change_transaction.rb +12 -0
  58. data/lib/nis/struct/multisig_aggregate_modification_transaction.rb +10 -0
  59. data/lib/nis/struct/multisig_signature_transaction.rb +12 -0
  60. data/lib/nis/struct/multisig_transaction.rb +15 -0
  61. data/lib/nis/struct/network_time.rb +17 -0
  62. data/lib/nis/struct/provision_namespace_transaction.rb +16 -0
  63. data/lib/nis/struct/transaction.rb +4 -81
  64. data/lib/nis/struct/transaction_meta_data_pair.rb +17 -1
  65. data/lib/nis/struct/transfer_transaction.rb +11 -0
  66. data/lib/nis/unit/address.rb +11 -4
  67. data/lib/nis/util.rb +3 -1
  68. data/lib/nis/util/convert.rb +44 -51
  69. data/lib/nis/util/deserializer.rb +62 -77
  70. data/lib/nis/util/ed25519.rb +10 -12
  71. data/lib/nis/util/serializer.rb +117 -185
  72. data/lib/nis/version.rb +1 -1
  73. data/nis.gemspec +0 -3
  74. metadata +43 -26
  75. data/bin/nis +0 -60
  76. data/examples/account.rb +0 -44
  77. data/examples/block.rb +0 -9
  78. data/examples/debug.rb +0 -33
  79. data/examples/local.rb +0 -19
  80. data/examples/namespace.rb +0 -9
  81. data/examples/node.rb +0 -44
  82. data/examples/shutdown.rb +0 -6
@@ -4,61 +4,60 @@ module Nis::Util
4
4
  # @param [Hash] entity
5
5
  # @return [Array]
6
6
  def self.serialize_transaction(entity)
7
- method = case entity[:type]
8
- when 0x0101 then method(:serialize_transfer)
9
- when 0x0801 then method(:serialize_importance_transfer)
10
- when 0x1001 then method(:serialize_multisig_aggregate_modification)
11
- when 0x1002 then method(:serialize_multisig_signature)
12
- when 0x1004 then method(:serialize_multisig)
13
- when 0x2001 then method(:serialize_provision_namespace)
14
- when 0x4001 then method(:serialize_mosaic_definition_creation)
15
- when 0x4002 then method(:serialize_mosaic_supply_change)
7
+ specific = case entity[:type]
8
+ when 0x0101 then serialize_transfer(entity)
9
+ when 0x0801 then serialize_importance_transfer(entity)
10
+ when 0x1001 then serialize_multisig_aggregate_modification(entity)
11
+ when 0x1002 then serialize_multisig_signature(entity)
12
+ when 0x1004 then serialize_multisig(entity)
13
+ when 0x2001 then serialize_provision_namespace(entity)
14
+ when 0x4001 then serialize_mosaic_definition_creation(entity)
15
+ when 0x4002 then serialize_mosaic_supply_change(entity)
16
16
  else raise "Not implemented entity type: #{entity[:type]}"
17
17
  end
18
- method.call(entity)
18
+ serialize_common(entity) + specific
19
19
  end
20
20
 
21
+ private
22
+
21
23
  def self.serialize_transfer(entity)
22
24
  a = []
23
- # Common transaction part
24
- a += serialize_common(entity)
25
- # Transfer transaction part
26
- a += serialize_safe_string(entity[:recipient])
27
- a += serialize_long(entity[:amount])
28
- temp = hex2ua(entity[:message][:payload])
29
- if temp.size == 0
30
- a += [0, 0, 0, 0]
25
+ a.concat serialize_safe_string(entity[:recipient])
26
+ a.concat serialize_long(entity[:amount])
27
+ payload = Nis::Util::Convert.hex2ua(entity[:message][:payload])
28
+ if payload.size == 0
29
+ a.concat [0, 0, 0, 0]
31
30
  else
32
- a += serialize_int(temp.size + 8)
33
- a += serialize_int(entity[:message][:type])
34
- a += serialize_int(temp.size)
35
- a += temp
31
+ a.concat serialize_int(payload.size + 8)
32
+ a.concat serialize_int(entity[:message][:type])
33
+ a.concat serialize_int(payload.size)
34
+ a.concat payload
35
+ end
36
+ if entity[:mosaics] && entity[:mosaics].size > 0
37
+ a.concat serialize_mosaics(entity[:mosaics])
36
38
  end
37
39
  a
38
40
  end
39
41
 
40
42
  def self.serialize_importance_transfer(entity)
41
43
  a = []
42
- a += serialize_common(entity)
43
- a += serialize_int(entity[:mode])
44
- temp = hex2ua(entity[:remoteAccount])
45
- a += serialize_int(temp.size)
46
- a += temp
47
- a
44
+ a.concat serialize_int(entity[:mode])
45
+ temp = Nis::Util::Convert.hex2ua(entity[:remoteAccount])
46
+ a.concat serialize_int(temp.size)
47
+ a.concat temp
48
48
  end
49
49
 
50
50
  def self.serialize_multisig_aggregate_modification(entity)
51
51
  a = []
52
- a += serialize_common(entity)
53
- a += serialize_int(entity[:modifications].size)
54
- a += entity[:modifications].map do |mod|
55
- b = []
56
- b += serialize_int(40)
57
- b += serialize_int(mod[:modificationType])
58
- b += serialize_int(32)
59
- b += hex2ua(mod[:cosignatoryAccount])
52
+ a.concat serialize_int(entity[:modifications].size)
53
+ mods = entity[:modifications].inject([]) do |b, mod|
54
+ b.concat serialize_int(40)
55
+ b.concat serialize_int(mod[:modificationType])
56
+ b.concat serialize_int(32)
57
+ b.concat Nis::Util::Convert.hex2ua(mod[:cosignatoryAccount])
60
58
  b
61
- end.flatten
59
+ end
60
+ a.concat mods
62
61
 
63
62
  # The following part describes the minimum cosignatories modification.
64
63
  # The part is optional. Version 1 aggregate modification transactions should omit this part.
@@ -66,10 +65,10 @@ module Nis::Util
66
65
  # should only write the length field with value 0x00, 0x00, 0x00, 0x00.
67
66
  if true # only version2
68
67
  if entity[:minCosignatories][:relativeChange] > 0
69
- a += serialize_int(4)
70
- a += serialize_int(entity[:minCosignatories][:relativeChange])
68
+ a.concat serialize_int(4)
69
+ a.concat serialize_int(entity[:minCosignatories][:relativeChange])
71
70
  else
72
- a += [0, 0, 0, 0]
71
+ a.concat [0, 0, 0, 0]
73
72
  end
74
73
  end
75
74
  a
@@ -77,105 +76,86 @@ module Nis::Util
77
76
 
78
77
  def self.serialize_multisig_signature(entity)
79
78
  a = []
80
- a += serialize_common(entity)
81
- temp = hex2ua(entity[:otherHash][:data])
82
- a += serialize_int(4 + temp.size)
83
- a += serialize_int(temp.size)
84
- a += temp
85
- a += serialize_safe_string(entity[:otherAccount])
79
+ temp = Nis::Util::Convert.hex2ua(entity[:otherHash][:data])
80
+ a.concat serialize_int(4 + temp.size)
81
+ a.concat serialize_int(temp.size)
82
+ a.concat temp
83
+ a.concat serialize_safe_string(entity[:otherAccount])
86
84
  end
87
85
 
88
86
  def self.serialize_multisig(entity)
89
87
  a = []
90
- a += serialize_common(entity)
91
- other_tx = entity[:otherTrans]
92
- tx = case other_tx[:type]
93
- when 0x0101 then serialize_transfer(other_tx)
94
- when 0x0801 then serialize_importance_transfer(other_tx)
95
- when 0x1001 then serialize_multisig_aggregate_modification(other_tx)
88
+ other = entity[:otherTrans]
89
+ tx = case other[:type]
90
+ when 0x0101 then serialize_transfer(other)
91
+ when 0x0801 then serialize_importance_transfer(other)
92
+ when 0x1001 then serialize_multisig_aggregate_modification(other)
96
93
  else raise "Unexpected type #{other_tx[:type]}"
97
94
  end
98
- a += serialize_int(tx.size)
99
- a += tx
100
- a
95
+ tx = serialize_common(other) + tx
96
+ a.concat serialize_int(tx.size)
97
+ a.concat tx
101
98
  end
102
99
 
103
100
  def self.serialize_provision_namespace(entity)
104
101
  a = []
105
- a += serialize_common(entity)
106
- a += serialize_safe_string(entity[:rentalFeeSink])
107
- a += serialize_long(entity[:rentalFee])
108
- temp = hex2ua(utf8_to_hex(entity[:newPart]))
109
- a += serialize_int(temp.size)
110
- a += temp
102
+ a.concat serialize_safe_string(entity[:rentalFeeSink])
103
+ a.concat serialize_long(entity[:rentalFee])
104
+ temp = Nis::Util::Convert.hex2ua(Nis::Util::Convert.utf8_to_hex(entity[:newPart]))
105
+ a.concat serialize_int(temp.size)
106
+ a.concat temp
111
107
  if entity[:parent]
112
- temp = hex2ua(utf8_to_hex(entity[:parent]))
113
- a += serialize_int(temp.size)
114
- a += temp
108
+ temp = Nis::Util::Convert.hex2ua(Nis::Util::Convert.utf8_to_hex(entity[:parent]))
109
+ a.concat serialize_int(temp.size)
110
+ a.concat temp
115
111
  else
116
- a += [255, 255, 255, 255]
112
+ a.concat [255, 255, 255, 255]
117
113
  end
118
114
  a
119
115
  end
120
116
 
121
117
  def self.serialize_mosaic_definition_creation(entity)
122
118
  a = []
123
- a += serialize_common(entity)
124
- a += serialize_mosaic_definition(entity[:mosaicDefinition])
125
- a += serialize_safe_string(entity[:creationFeeSink])
126
- a += serialize_long(entity[:creationFee])
127
- a
119
+ a.concat serialize_mosaic_definition(entity[:mosaicDefinition])
120
+ a.concat serialize_safe_string(entity[:creationFeeSink])
121
+ a.concat serialize_long(entity[:creationFee])
128
122
  end
129
123
 
130
124
  def self.serialize_mosaic_supply_change(entity)
131
125
  a = []
132
- a += serialize_common(entity)
133
- mo_id = entity[:mosaicId]
134
- a_ns = hex2ua(utf8_to_hex(mo_id[:namespaceId]))
135
- a_ns_len = serialize_int(a_ns.size)
136
- a_mo = hex2ua(utf8_to_hex(mo_id[:name]))
137
- a_mo_len = serialize_int(a_mo.size)
138
- a += serialize_int((a_ns_len + a_ns + a_mo_len + a_mo).size)
139
- a += a_ns_len
140
- a += a_ns
141
- a += a_mo_len
142
- a += a_mo
143
- a += serialize_int(entity[:supplyType])
144
- a += serialize_long(entity[:delta])
145
- a
126
+ a.concat serialize_mosaic_id(entity[:mosaicId])
127
+ a.concat serialize_int(entity[:supplyType])
128
+ a.concat serialize_long(entity[:delta])
146
129
  end
147
130
 
148
- private
149
-
150
131
  def self.serialize_common(entity)
151
132
  a = []
152
- a += serialize_int(entity[:type])
153
- a += serialize_int(entity[:version])
154
- a += serialize_int(entity[:timeStamp])
133
+ a.concat serialize_int(entity[:type])
134
+ a.concat serialize_int(entity[:version])
135
+ a.concat serialize_int(entity[:timeStamp])
155
136
 
156
- temp = hex2ua(entity[:signer])
157
- a += serialize_int(temp.size)
158
- a += temp
137
+ signer = Nis::Util::Convert.hex2ua(entity[:signer])
138
+ a.concat serialize_int(signer.size)
139
+ a.concat signer
159
140
 
160
- a += serialize_long(entity[:fee].to_i)
161
- a += serialize_int(entity[:deadline])
162
- a
141
+ a.concat serialize_long(entity[:fee].to_i)
142
+ a.concat serialize_int(entity[:deadline])
163
143
  end
164
144
 
165
145
  # Safe String - Each char is 8 bit
166
146
  # @param [String] str
167
147
  # @return [Array]
168
148
  def self.serialize_safe_string(str)
169
- return [].fill(255, 0, 4) if str.nil?
170
- return [].fill(0, 0, 4) if str.empty?
149
+ return [255, 255, 255, 255] if str.nil?
150
+ return [0, 0, 0, 0] if str.empty?
171
151
  [str.size, 0, 0, 0] + str.bytes
172
152
  end
173
153
 
174
154
  # @param [String] str
175
155
  # @return [Array]
176
156
  def self.serialize_bin_string(str)
177
- return [].fill(255, 0, 4) if str.nil?
178
- return [].fill(0, 0, 4) if str.empty?
157
+ return [255, 255, 255, 255] if str.nil?
158
+ return [0, 0, 0, 0] if str.empty?
179
159
  chars = str.is_a?(String) ? str.chars : str
180
160
  [chars.size, 0, 0, 0] + chars.map(&:to_i)
181
161
  end
@@ -183,19 +163,20 @@ module Nis::Util
183
163
  # @param [Integer] value
184
164
  # @return [Array]
185
165
  def self.serialize_int(value)
186
- a = [].fill(0, 0, 4)
187
- bin = sprintf('%032b', [value].pack('L').unpack('L')[0])
188
- 0.upto(bin.size / 8 - 1) do |i|
189
- a[i] = 0xFF & (value >> 8 * i)
190
- end
191
- a
166
+ [value].pack('I').unpack('C4')
167
+ # a = [0, 0, 0, 0]
168
+ # bin = sprintf('%032b', value)
169
+ # 0.upto(bin.size / 8 - 1) do |i|
170
+ # a[i] = 0xFF & (value >> 8 * i)
171
+ # end
172
+ # a
192
173
  end
193
174
 
194
175
  # @param [Integer] value
195
176
  # @return [Array]
196
177
  def self.serialize_long(value)
197
- a = [].fill(0, 0, 8)
198
- bin = sprintf('%040b', [value].pack('L').unpack('L')[0])
178
+ a = [0, 0, 0, 0, 0, 0, 0, 0]
179
+ bin = sprintf('%040b', value)
199
180
  0.upto(bin.size / 8 - 1) do |i|
200
181
  a[i] = 0xFF & (value >> 8 * i)
201
182
  end
@@ -204,39 +185,30 @@ module Nis::Util
204
185
 
205
186
  # @param [Nis::Struct::Mosaic] mosaic
206
187
  # @return [Array]
207
- def self.serialize_mosaic_and_quantity(mosaic)
208
- a = [].fill(0, 0, 4)
209
- serialized_mosaic_id = serialize_mosaic_id(mosaic.mosaic_id)
210
- serialized_quantity = serialize_long(mosaic.quantity)
211
- a[0] = serialized_mosaic_id.size + serialized_quantity.size
212
- a += serialized_mosaic_id + serialized_quantity
188
+ def self.serialize_mosaic_and_quantity(mosaic_attachment)
189
+ a = []
190
+ a.concat serialize_mosaic_id(mosaic_attachment[:mosaicId])
191
+ a.concat serialize_long(mosaic_attachment[:quantity])
213
192
  end
214
193
 
215
194
  # @param [Array <Nis::Struct::Mosaic>] entities
216
195
  # @return [Array]
217
196
  def self.serialize_mosaics(entities)
218
- a = [].fill(0, 0, 4)
219
- a[0] = entities.size
220
- a + entities.map do |ent|
221
- { entity: ent,
222
- value: [
223
- ent.mosaic_id.namespace_id,
224
- ent.mosaic_id.name,
225
- ent.quantity,
226
- ].join(':') }
227
- end.sort_by do |ent|
228
- ent[:value]
229
- end.map do |ent|
230
- serialize_mosaic_and_quantity(ent[:entity])
231
- end.flatten
197
+ a = []
198
+ a.concat serialize_int(entities.size)
199
+ mosaics = entities.inject([]) do |memo, ent|
200
+ memo.concat serialize_mosaic_and_quantity(ent)
201
+ end
202
+ a.concat serialize_int(mosaics.size)
203
+ a.concat mosaics
232
204
  end
233
205
 
234
206
  # @param [Hash] entity
235
207
  # @return [Array]
236
208
  def self.serialize_mosaic_id(entity)
237
209
  a = []
238
- a += serialize_safe_string(entity[:namespaceId])
239
- a += serialize_safe_string(entity[:name])
210
+ a.concat serialize_safe_string(entity[:namespaceId])
211
+ a.concat serialize_safe_string(entity[:name])
240
212
  serialize_int(a.size) + a
241
213
  end
242
214
 
@@ -244,8 +216,8 @@ module Nis::Util
244
216
  # @return [Array]
245
217
  def self.serialize_property(entity)
246
218
  a = []
247
- a += serialize_safe_string(entity[:name])
248
- a += serialize_safe_string(entity[:value])
219
+ a.concat serialize_safe_string(entity[:name])
220
+ a.concat serialize_safe_string(entity[:value])
249
221
  serialize_int(a.size) + a
250
222
  end
251
223
 
@@ -258,10 +230,9 @@ module Nis::Util
258
230
  'supplyMutable' => 3,
259
231
  'transferable' => 4
260
232
  }
261
- a = []
262
- a = entities.sort_by { |ent| order[ent[:name]] }
263
- .map { |ent| serialize_property(ent) }.flatten
264
- serialize_int(entities.size) + a
233
+ serialize_int(entities.size) + entities
234
+ .sort_by { |ent| order[ent[:name]] }
235
+ .inject([]) { |memo, ent| memo + serialize_property(ent) }
265
236
  end
266
237
 
267
238
  # @param [Hash] entity
@@ -269,10 +240,10 @@ module Nis::Util
269
240
  def self.serialize_levy(entity)
270
241
  return [0, 0, 0, 0] if entity.nil?
271
242
  a = []
272
- a += serialize_int(entity[:type])
273
- a += serialize_safe_string(entity[:recipient])
274
- a += serialize_mosaic_id(entity[:mosaicId])
275
- a += serialize_long(entity[:fee])
243
+ a.concat serialize_int(entity[:type])
244
+ a.concat serialize_safe_string(entity[:recipient])
245
+ a.concat serialize_mosaic_id(entity[:mosaicId])
246
+ a.concat serialize_long(entity[:fee])
276
247
  serialize_int(a.size) + a
277
248
  end
278
249
 
@@ -280,53 +251,14 @@ module Nis::Util
280
251
  # @return [Array]
281
252
  def self.serialize_mosaic_definition(entity)
282
253
  a = []
283
- temp = hex2ua(entity[:creator])
284
- a += serialize_int(temp.size)
285
- a += temp
286
- a += serialize_mosaic_id(entity[:id])
287
- a += serialize_bin_string(hex2ua(utf8_to_hex(entity[:description])))
288
- a += serialize_properties(entity[:properties])
289
- a += serialize_levy(entity[:levy])
254
+ creator = Nis::Util::Convert.hex2ua(entity[:creator])
255
+ a.concat serialize_int(creator.size)
256
+ a.concat creator
257
+ a.concat serialize_mosaic_id(entity[:id])
258
+ a.concat serialize_bin_string(Nis::Util::Convert.hex2ua(Nis::Util::Convert.utf8_to_hex(entity[:description])))
259
+ a.concat serialize_properties(entity[:properties])
260
+ a.concat serialize_levy(entity[:levy])
290
261
  serialize_int(a.size) + a
291
262
  end
292
-
293
- # @param [String] hex
294
- # @return [Array]
295
- def self.hex2ua(hex)
296
- hex.scan(/../).map(&:hex)
297
- end
298
-
299
- # @param [String] hex
300
- # @return [Array]
301
- def self.hex2ua_reversed(hex)
302
- hex2ua(hex).reverse
303
- end
304
-
305
- # @param [Array] bin
306
- # @return [String]
307
- def self.bin2hex(bin)
308
- bin.map { |v| '%02x' % v }.join
309
- end
310
-
311
- # @param [String] str
312
- # @return [String]
313
- def self.utf8_to_hex(str)
314
- rstr2utf8(str).each_byte.map { |b| b.to_s(16) }.join
315
- end
316
-
317
- # @param [String] str
318
- # @return [String]
319
- def self.rstr2utf8(str)
320
- str.unpack('U*').map do |c|
321
- case
322
- when c < 128
323
- c
324
- when 128 < c && c < 2048
325
- [((c >> 6) | 192), ((c & 63) | 128)]
326
- else
327
- [((c >> 12) | 224), (((c >> 6) & 63) | 128), ((c & 63) | 128)]
328
- end
329
- end.flatten.map(&:chr).join
330
- end
331
263
  end
332
264
  end
@@ -1,3 +1,3 @@
1
1
  class Nis
2
- VERSION = '0.0.16'.freeze
2
+ VERSION = '0.0.17'.freeze
3
3
  end
@@ -21,8 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
22
22
  f.match(%r{^(test|spec|features)/})
23
23
  end
24
- spec.bindir = 'bin'
25
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
24
  spec.require_paths = ['lib']
27
25
 
28
26
  spec.post_install_message = '
@@ -45,5 +43,4 @@ Gem::Specification.new do |spec|
45
43
  spec.add_dependency 'base32', '~> 0.3'
46
44
  spec.add_dependency 'faraday', '~> 0.11'
47
45
  spec.add_dependency 'faraday_middleware', '~> 0.11'
48
- spec.add_dependency 'thor', '~> 0.19'
49
46
  end