stellar-base 0.0.13 → 0.0.14

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f51401d7010310f5feb34a26a2a20542ad106eb
4
- data.tar.gz: 76596cf728cf008b6fd9756dc50e68c3dc2843ba
3
+ metadata.gz: 062552ef5cccd186214542007e7c896a77c8d27d
4
+ data.tar.gz: 6612c84a962b96295677d3d1c8902a9649f7a461
5
5
  SHA512:
6
- metadata.gz: ba86a0c9b6acec0cd7b54f5bc83daf48627eee8bf88bea61820a861a3f22b0d49352a54dd836dcf5874df77107548016e0be7d9be02bed2b3b72a12c48a7d95d
7
- data.tar.gz: 9dd22660277d073d5a52f7f3738f74facba9a521ded608155714bc623fe687b6fbd6a4b4abfc3fd82cc08618390ed403f976ad341a57326f55f398163500376a
6
+ metadata.gz: 234682c2b9fbdb75608640587e1c6c219372a15ea9688b262a4efdb3899550c1f8ea5c1563af8a7c24039c28ef77fb4ecbd3b7a1a0ac1defd9335cc28eeea5fb
7
+ data.tar.gz: e3a5db925b179732ee9c61177c0f156989dabc75bb1ef4825b7320921429ac0b5132776b35ba7fa10b7a04fa2c4518caea7f1ce9a9d154b42be388fbac0e33fa
@@ -2,12 +2,12 @@ module Stellar
2
2
  class AccountFlags
3
3
 
4
4
 
5
- #
5
+ #
6
6
  # Converts an array of Stellar::AccountFlags members into
7
7
  # an Integer suitable for use in a SetOptionsOp.
8
- #
8
+ #
9
9
  # @param flags=nil [Array<Stellar::AccountFlags>] the flags to combine
10
- #
10
+ #
11
11
  # @return [Fixnum] the combined result
12
12
  def self.make_mask(flags=nil)
13
13
  flags ||= []
@@ -15,5 +15,14 @@ module Stellar
15
15
  flags.map(&:value).inject(&:|) || 0
16
16
  end
17
17
 
18
+ #
19
+ # Converts an integer used in SetOptionsOp on the set/clear flag options
20
+ # into an array of Stellar::AccountFlags members
21
+ #
22
+ # @param combined [Fixnum]
23
+ # @return [Array<Stellar::AccountFlags>]
24
+ def self.parse_mask(combined)
25
+ members.select{|m| (m.value & combined) != 0}
26
+ end
18
27
  end
19
- end
28
+ end
@@ -1,5 +1,5 @@
1
1
  module Stellar
2
2
  module Base
3
- VERSION = "0.0.13"
3
+ VERSION = "0.0.14"
4
4
  end
5
5
  end
@@ -188,6 +188,7 @@ module Stellar
188
188
  op.clear_flags = Stellar::AccountFlags.make_mask attributes[:clear]
189
189
  op.thresholds = attributes[:thresholds]
190
190
  op.signer = attributes[:signer]
191
+ op.home_domain = attributes[:home_domain]
191
192
 
192
193
 
193
194
  inflation_dest = attributes[:inflation_dest]
@@ -0,0 +1,39 @@
1
+ module Stellar
2
+ class << Thresholds
3
+ COMPONENTS = [:master_weight, :low, :medium, :high]
4
+ VALID_RANGE = 0..255
5
+
6
+ def make(thresholds={})
7
+
8
+ # error if any of the needed components are not provided
9
+ if COMPONENTS.any?{|c| thresholds[c].blank? }
10
+ raise ArgumentError, "invalid thresholds hash, must have #{COMPONENTS.inspect} keys, had: #{thresholds.keys.inspect}"
11
+ end
12
+
13
+ # error if any of the needed components are not numbers 0 <= N <= 255
14
+ COMPONENTS.each do |c|
15
+ good = true
16
+
17
+ good &&= thresholds[c].is_a?(Fixnum)
18
+ good &&= VALID_RANGE.include? thresholds[c]
19
+
20
+ unless good
21
+ raise ArgumentError, "invalid #{c.inspect}, must be number in (0..255), got #{thresholds[c].inspect}"
22
+ end
23
+ end
24
+
25
+
26
+ thresholds.values_at(*COMPONENTS).pack("C*")
27
+ end
28
+
29
+ def parse(combined)
30
+ master_weight, low, medium, high = combined.unpack("C*")
31
+ {
32
+ master_weight: master_weight,
33
+ low: low,
34
+ medium: medium,
35
+ high: high,
36
+ }
37
+ end
38
+ end
39
+ end
data/lib/stellar-base.rb CHANGED
@@ -22,6 +22,7 @@ require_relative './stellar/currency'
22
22
  require_relative './stellar/key_pair'
23
23
  require_relative './stellar/operation'
24
24
  require_relative './stellar/price'
25
+ require_relative './stellar/thresholds'
25
26
  require_relative './stellar/transaction'
26
27
  require_relative './stellar/transaction_envelope'
27
28
  require_relative './stellar/util/base58'
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Stellar::Convert, "hex encoding" do
3
+ describe Stellar::Convert do
4
4
  subject{ Stellar::Convert }
5
5
  let(:raw) { "\x01\x02\x03\x04" }
6
6
  let(:hex) { "01020304" }
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe Stellar::Thresholds, ".parse" do
4
+ subject{ Stellar::Thresholds }
5
+ let(:raw) { "\x01\x02\x03\x04" }
6
+ let(:result) { subject.parse raw }
7
+
8
+ it "sets master_weight as the 1st byte" do
9
+ expect(result[:master_weight]).to eq(1)
10
+ end
11
+
12
+ it "sets low as the 2nd byte" do
13
+ expect(result[:low]).to eq(2)
14
+ end
15
+
16
+ it "sets medium as the 3rd byte" do
17
+ expect(result[:medium]).to eq(3)
18
+ end
19
+
20
+ it "sets high as the 4th byte" do
21
+ expect(result[:high]).to eq(4)
22
+ end
23
+ end
24
+
25
+ describe Stellar::Thresholds, ".make" do
26
+ subject{ Stellar::Thresholds }
27
+ let(:good){{master_weight: 1, low: 2, medium: 3, high: 4}}
28
+
29
+ it "works" do
30
+ expect(subject.make(good)).to eq("\x01\x02\x03\x04")
31
+ end
32
+
33
+ it "errors unless all components are provided" do
34
+ expect{ subject.make(good.except(:master_weight)) }.to raise_error
35
+ expect{ subject.make(good.except(:low)) }.to raise_error
36
+ expect{ subject.make(good.except(:medium)) }.to raise_error
37
+ expect{ subject.make(good.except(:high)) }.to raise_error
38
+ end
39
+
40
+ it "errors unless all components are numbers" do
41
+ expect{ subject.make(good.merge(master_weight: "hello")) }.to raise_error
42
+ expect{ subject.make(good.merge(low: "hello")) }.to raise_error
43
+ expect{ subject.make(good.merge(medium: "hello")) }.to raise_error
44
+ expect{ subject.make(good.merge(high: "hello")) }.to raise_error
45
+ end
46
+
47
+ it "errors unless all components are in (0..255)" do
48
+ expect{ subject.make(good.merge(master_weight: -1)) }.to raise_error
49
+ expect{ subject.make(good.merge(master_weight: 256)) }.to raise_error
50
+ expect{ subject.make(good.merge(low: -1)) }.to raise_error
51
+ expect{ subject.make(good.merge(low: 256)) }.to raise_error
52
+ expect{ subject.make(good.merge(medium: -1)) }.to raise_error
53
+ expect{ subject.make(good.merge(medium: 256)) }.to raise_error
54
+ expect{ subject.make(good.merge(high: -1)) }.to raise_error
55
+ expect{ subject.make(good.merge(high: 256)) }.to raise_error
56
+ end
57
+
58
+ it "ignores additional keys" do
59
+ expect{ subject.make(good.merge(foo: "a string")) }.not_to raise_error
60
+ end
61
+
62
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stellar-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Fleckenstein
@@ -317,6 +317,7 @@ files:
317
317
  - lib/stellar/key_pair.rb
318
318
  - lib/stellar/operation.rb
319
319
  - lib/stellar/price.rb
320
+ - lib/stellar/thresholds.rb
320
321
  - lib/stellar/transaction.rb
321
322
  - lib/stellar/transaction_envelope.rb
322
323
  - lib/stellar/util/base58.rb
@@ -325,6 +326,7 @@ files:
325
326
  - spec/lib/stellar/convert_spec.rb
326
327
  - spec/lib/stellar/key_pair_spec.rb
327
328
  - spec/lib/stellar/price_spec.rb
329
+ - spec/lib/stellar/thresholds_spec.rb
328
330
  - spec/lib/stellar/transaction_envelope_spec.rb
329
331
  - spec/lib/stellar/transaction_spec.rb
330
332
  - spec/lib/stellar/util/base58_spec.rb
@@ -371,6 +373,7 @@ test_files:
371
373
  - spec/lib/stellar/convert_spec.rb
372
374
  - spec/lib/stellar/key_pair_spec.rb
373
375
  - spec/lib/stellar/price_spec.rb
376
+ - spec/lib/stellar/thresholds_spec.rb
374
377
  - spec/lib/stellar/transaction_envelope_spec.rb
375
378
  - spec/lib/stellar/transaction_spec.rb
376
379
  - spec/lib/stellar/util/base58_spec.rb