xdr 3.0.1 → 3.0.2

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -9
  3. data/README.md +4 -2
  4. data/lib/xdr/concerns/converts_to_xdr.rb +30 -31
  5. data/lib/xdr/union.rb +7 -4
  6. data/lib/xdr/version.rb +1 -1
  7. metadata +43 -114
  8. data/.gitignore +0 -15
  9. data/.travis.yml +0 -9
  10. data/.yardopts +0 -7
  11. data/Gemfile +0 -4
  12. data/Guardfile +0 -5
  13. data/Rakefile +0 -9
  14. data/examples/enum.rb +0 -30
  15. data/examples/struct.rb +0 -24
  16. data/examples/union.rb +0 -29
  17. data/spec/lib/xdr/array_spec.rb +0 -73
  18. data/spec/lib/xdr/bool_spec.rb +0 -43
  19. data/spec/lib/xdr/concerns/converts_to_xdr_spec.rb +0 -88
  20. data/spec/lib/xdr/concerns/reads_bytes_spec.rb +0 -57
  21. data/spec/lib/xdr/double_spec.rb +0 -38
  22. data/spec/lib/xdr/dsl/enum_spec.rb +0 -44
  23. data/spec/lib/xdr/dsl/struct_spec.rb +0 -29
  24. data/spec/lib/xdr/dsl/union_spec.rb +0 -69
  25. data/spec/lib/xdr/enum_spec.rb +0 -70
  26. data/spec/lib/xdr/float_spec.rb +0 -37
  27. data/spec/lib/xdr/hyper_spec.rb +0 -40
  28. data/spec/lib/xdr/int_spec.rb +0 -40
  29. data/spec/lib/xdr/opaque_spec.rb +0 -40
  30. data/spec/lib/xdr/option_spec.rb +0 -36
  31. data/spec/lib/xdr/quadruple_spec.rb +0 -14
  32. data/spec/lib/xdr/rpc/record_reader_spec.rb +0 -27
  33. data/spec/lib/xdr/string_spec.rb +0 -47
  34. data/spec/lib/xdr/struct_spec.rb +0 -101
  35. data/spec/lib/xdr/union_spec.rb +0 -258
  36. data/spec/lib/xdr/unsigned_hyper_spec.rb +0 -36
  37. data/spec/lib/xdr/unsigned_int_spec.rb +0 -36
  38. data/spec/lib/xdr/var_array_spec.rb +0 -71
  39. data/spec/lib/xdr/var_opaque_spec.rb +0 -50
  40. data/spec/lib/xdr/void_spec.rb +0 -46
  41. data/spec/spec_helper.rb +0 -15
  42. data/spec/support/matchers/eq_bytes.rb +0 -6
  43. data/xdr.gemspec +0 -28
data/.gitignore DELETED
@@ -1,15 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/generated
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.bundle
11
- *.so
12
- *.o
13
- *.a
14
- mkmf.log
15
- .DS_Store
@@ -1,9 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.6
4
- - 2.3.3
5
- - 2.4.0
6
- - jruby
7
- notifications:
8
- slack:
9
- secure: fXYggrDRoLB/4yvyW0kWwyrV5yWa/GC0btPyGu7Hx6ZOaXDC+ejiXSfx7nRyY+uZBs5UF12O4gkUXwBbnWDT5JtQRxzZd5s0cyeGQfAakALexI+FuR2jDcV1prCCaYI4IYoUt61MlfDmuCYVm8hGZ3qsgk/GPHHPnZ8a1FBd2ls=
data/.yardopts DELETED
@@ -1,7 +0,0 @@
1
- --output-dir doc/generated
2
- --protected
3
- --no-private
4
- --embed-mixin ClassMethods
5
- lib/**/*.rb
6
- -
7
- doc/*.md
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in xdr.gemspec
4
- gemspec
data/Guardfile DELETED
@@ -1,5 +0,0 @@
1
- guard :rspec, cmd: 'bundle exec rspec' do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
- watch('spec/spec_helper.rb') { "spec" }
5
- end
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
3
- begin
4
- require 'rspec/core/rake_task'
5
- RSpec::Core::RakeTask.new(:spec)
6
- task :default => :spec
7
- rescue LoadError
8
- end
9
-
@@ -1,30 +0,0 @@
1
- require 'xdr'
2
-
3
- class Color < XDR::Enum
4
- member :red, 0
5
- member :green, 1
6
- member :blue, 2
7
-
8
- seal
9
- end
10
-
11
- class ResultType < XDR::Enum
12
- member :ok, 0
13
- member :error, 1
14
- seal
15
- end
16
-
17
- Color.members # => {:red => 0, :green => 1, :blue => 2}
18
- Color.members.keys # => [:red, :green, :blue]
19
-
20
- # string and symbol work
21
- # any casing that can be underscored to the correct value will work
22
- Color.from_name(:RED) # => #<Color:... @name="red", @value=0>
23
- Color.from_name("RED") # => #<Color:... @name="red", @value=0>
24
- Color.from_name("red") # => #<Color:... @name="red", @value=0>
25
- Color.from_name(:red) # => #<Color:... @name="red", @value=0>
26
-
27
- Color.from_xdr("\x00\x00\x00\x00") # => #<Color:... @name="red", @value=0>
28
- Color.to_xdr(Color.green) # => "\x00\x00\x00\x01"
29
-
30
- Color.red == ResultType.ok # => false
@@ -1,24 +0,0 @@
1
- require 'xdr'
2
-
3
- class Signature < XDR::Struct
4
- attribute :public_key, XDR::Opaque[32]
5
- attribute :data, XDR::Opaque[32]
6
- end
7
-
8
- class Envelope < XDR::Struct
9
- attribute :body, XDR::VarOpaque[]
10
- attribute :timestamp, XDR::Int
11
- attribute :signature, Signature
12
- end
13
-
14
- sig = Signature.new()
15
- sig.public_key = "\x01" * 32
16
- sig.data = "\x00" * 32
17
-
18
- env = Envelope.new({
19
- signature: sig,
20
- body: "hello",
21
- timestamp: Time.now.to_i
22
- })
23
-
24
- env.to_xdr
@@ -1,29 +0,0 @@
1
- require 'xdr'
2
-
3
- class ResultType < XDR::Enum
4
- member :ok, 0
5
- member :error, 1
6
- member :nonsense, 2
7
- seal
8
- end
9
-
10
- class Result < XDR::Union
11
- switch_on ResultType, :type
12
-
13
- switch :ok
14
- switch :error, :message
15
- switch :default
16
-
17
- attribute :message, XDR::String[]
18
- end
19
-
20
- r = Result.new()
21
- r.set(:error, "hello")
22
- r.message! # => "hello"
23
- r.get # => "hello"
24
-
25
- r.set(:ok)
26
- r.get # => nil
27
-
28
- r.set(:nonsense)
29
- r.get # => nil
@@ -1,73 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe XDR::Array, "#read" do
4
- let(:empty) { XDR::Array[XDR::Int, 0] }
5
- let(:one) { XDR::Array[XDR::Int, 1] }
6
- let(:many) { XDR::Array[XDR::Int, 2] }
7
-
8
- it "decodes values correctly" do
9
- expect( read empty, "" ).to eq([])
10
- expect( read empty, "\x00\x00\x00\x00" ).to eq([])
11
- expect( read one, "\x00\x00\x00\x00" ).to eq([0])
12
- expect( read one, "\x00\x00\x00\x01" ).to eq([1])
13
- expect( read many, "\x00\x00\x00\x00\x00\x00\x00\x01" ).to eq([0, 1])
14
- expect( read many, "\x00\x00\x00\x01\x00\x00\x00\x01" ).to eq([1, 1])
15
- end
16
-
17
- it "raises EOFError the byte stream isn't large enough" do
18
- expect{ read many, "\x00\x00\x00\x00" }.to raise_error(EOFError)
19
- end
20
-
21
- def read(reader, str)
22
- io = StringIO.new(str)
23
- reader.read(io)
24
- end
25
- end
26
-
27
- describe XDR::Array, "#write" do
28
- subject{ XDR::Array[XDR::Int, 2] }
29
-
30
- it "encodes values correctly" do
31
- expect(write [1,2]).to eq("\x00\x00\x00\x01\x00\x00\x00\x02")
32
- expect(write [1,4]).to eq("\x00\x00\x00\x01\x00\x00\x00\x04")
33
- end
34
-
35
- it "raises a WriteError if the value is not the correct length" do
36
- expect{ write nil }.to raise_error(XDR::WriteError)
37
- expect{ write [] }.to raise_error(XDR::WriteError)
38
- expect{ write [1] }.to raise_error(XDR::WriteError)
39
- expect{ write [1,2,3] }.to raise_error(XDR::WriteError)
40
- end
41
-
42
- it "raises a WriteError if a child element is of the wrong type" do
43
- expect{ write [nil] }.to raise_error(XDR::WriteError)
44
- expect{ write ["hi"] }.to raise_error(XDR::WriteError)
45
- expect{ write [1,2,"hi"] }.to raise_error(XDR::WriteError)
46
- end
47
-
48
- def write(val)
49
- io = StringIO.new()
50
- subject.write(val, io)
51
- io.string
52
- end
53
- end
54
-
55
- describe XDR::Array, "#valid?" do
56
- subject{ XDR::Array[XDR::Int, 2] }
57
-
58
- it "rejects an empty array" do
59
- expect(subject.valid?([])).to be_falsey
60
- end
61
-
62
- it "accepts a filled array provided each element passes the child_type validator" do
63
- expect(subject.valid?([1,2])).to be_truthy
64
- expect(subject.valid?([2,3])).to be_truthy
65
- end
66
-
67
- it "rejects a filled array if any element is rejected by the child_type validator" do
68
- expect(subject.valid?(["hello", "hello"])).to be_falsey
69
- expect(subject.valid?([1, "hello"])).to be_falsey
70
- expect(subject.valid?([1, nil])).to be_falsey
71
- expect(subject.valid?([nil])).to be_falsey
72
- end
73
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe XDR::Bool, ".read" do
4
- subject{ XDR::Bool }
5
-
6
- let(:false_s) { "\x00\x00\x00\x00" }
7
- let(:true_s) { "\x00\x00\x00\x01" }
8
- let(:two) { "\x00\x00\x00\x02" }
9
-
10
- it "decodes values correctly" do
11
- expect(read(false_s)).to eq(false)
12
- expect(read(true_s)).to eq(true)
13
- end
14
-
15
- it "raises ReadError if the decoded value is not 0 or 1" do
16
- expect{ read two }.to raise_error XDR::ReadError
17
- end
18
-
19
- def read(str)
20
- io = StringIO.new(str)
21
- subject.read(io)
22
- end
23
- end
24
-
25
- describe XDR::Bool, ".write" do
26
- subject{ XDR::Bool }
27
-
28
- it "encodes values correctly" do
29
- expect(write false).to eq("\x00\x00\x00\x00")
30
- expect(write true).to eq("\x00\x00\x00\x01")
31
- end
32
-
33
- it "raises WriteError if the value is boolean" do
34
- expect{ write 1 }.to raise_error XDR::WriteError
35
- expect{ write "hello" }.to raise_error XDR::WriteError
36
- end
37
-
38
- def write(val)
39
- io = StringIO.new()
40
- subject.write(val, io)
41
- io.string
42
- end
43
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe XDR::Concerns::ConvertsToXDR do
4
- subject{ UnimplementedConvertible.new }
5
-
6
- it "requires an implementation of #read" do
7
- expect{ subject.read(StringIO.new) }.to raise_error(NotImplementedError)
8
- end
9
-
10
- it "requires an implementation of #write" do
11
- expect{ subject.write(3, StringIO.new) }.to raise_error(NotImplementedError)
12
- end
13
-
14
- it "requires an implementation of #valid?" do
15
- expect{ subject.valid?(3) }.to raise_error(NotImplementedError)
16
- end
17
- end
18
-
19
- describe XDR::Concerns::ConvertsToXDR, "#to_xdr" do
20
- subject{ ImplementedConvertible.new }
21
-
22
- it "calls through to write" do
23
- expect(subject).to receive(:write).with("hiya", kind_of(StringIO))
24
- subject.to_xdr("hiya")
25
- end
26
-
27
- context "using an actual xdr type" do
28
- subject{ XDR::Opaque.new(4) }
29
-
30
- it "encodes to hex" do
31
- r = subject.to_xdr("\x00\x01\x02\x03", "hex")
32
- expect(r).to eql("00010203")
33
- end
34
-
35
- it "encodes to base64" do
36
- r = subject.to_xdr("\x00\x01\x02\x03", "base64")
37
- expect(r).to eql("AAECAw==")
38
- end
39
- end
40
- end
41
-
42
- describe XDR::Concerns::ConvertsToXDR, "#from_xdr" do
43
- subject{ ImplementedConvertible.new }
44
-
45
- it "calls through to read" do
46
- allow(subject).to receive(:read).and_call_original
47
- subject.from_xdr("hiya")
48
- expect(subject).to have_received(:read).with(kind_of(StringIO))
49
- end
50
-
51
- context "using an actual xdr type" do
52
- subject{ XDR::Opaque.new(4) }
53
-
54
- it "decodes from hex" do
55
- r = subject.from_xdr("00010203", "hex")
56
- expect(r).to eql("\x00\x01\x02\x03")
57
- end
58
-
59
- it "decodes from base64" do
60
- r = subject.from_xdr("AAECAw==", "base64")
61
- expect(r).to eql("\x00\x01\x02\x03")
62
- end
63
-
64
- it "raises an ArgumentError if the input is not fully consumed" do
65
- expect{ subject.from_xdr("\x00\x00\x00\x00\x00") }.to raise_error(ArgumentError)
66
- end
67
- end
68
- end
69
-
70
- class UnimplementedConvertible
71
- include XDR::Concerns::ConvertsToXDR
72
- end
73
-
74
- class ImplementedConvertible
75
- include XDR::Concerns::ConvertsToXDR
76
-
77
- def read(io)
78
- read_bytes(io, 4)
79
- end
80
-
81
- def write(val, io)
82
- io.write(val)
83
- end
84
-
85
- def valid?(val)
86
- true
87
- end
88
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class TestReader
4
- include XDR::Concerns::ReadsBytes
5
- public :read_bytes
6
- public :read_zeros
7
- end
8
-
9
-
10
- describe XDR::Concerns::ReadsBytes, "#read_bytes" do
11
- subject{ TestReader.new }
12
-
13
- it "raises EOFError when the requested length goes beyond the length of the stream" do
14
- expect{ read("", 1) }.to raise_error(EOFError)
15
- expect{ read("", 2) }.to raise_error(EOFError)
16
- expect{ read("", 10) }.to raise_error(EOFError)
17
- expect{ read("\x00\x01\x02", 4) }.to raise_error(EOFError)
18
- expect{ read("\x00\x01\x02", 10) }.to raise_error(EOFError)
19
- end
20
-
21
- it "returns the read data" do
22
- expect(read("", 0)).to eq("")
23
- expect(read("\x00", 1)).to eq("\x00")
24
- expect(read("\x01", 1)).to eq("\x01")
25
- expect(read("\x00\x01\x02", 3)).to eq("\x00\x01\x02")
26
- end
27
-
28
- def read(str, length)
29
- io = StringIO.new(str)
30
- subject.read_bytes(io, length)
31
- end
32
- end
33
-
34
-
35
- describe XDR::Concerns::ReadsBytes, "#read_zeros" do
36
- subject{ TestReader.new }
37
-
38
- it "raises XDR::ReadError when the bytes read do not equal zero" do
39
- expect{ read("\x01", 1) }.to raise_error(XDR::ReadError)
40
- end
41
-
42
- it "succeeds when all the bytes read are zero" do
43
- expect{ read("\x00\x00\x00\x00", 1) }.to_not raise_error
44
- expect{ read("\x00\x00\x00\x00", 2) }.to_not raise_error
45
- expect{ read("\x00\x00\x00\x00", 3) }.to_not raise_error
46
- expect{ read("\x00\x00\x00\x00", 4) }.to_not raise_error
47
- end
48
-
49
- it "raises EOFError when the requested length goes beyond the length of the stream" do
50
- expect{ read("\x00\x00\x00\x00", 5) }.to raise_error(EOFError)
51
- end
52
-
53
- def read(str, length)
54
- io = StringIO.new(str)
55
- subject.read_zeros(io, length)
56
- end
57
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::Double, ".read" do
5
-
6
- it "decodes values correctly" do
7
- expect(read("\x00\x00\x00\x00\x00\x00\x00\x00")).to eq(0.0)
8
- expect(read("\x80\x00\x00\x00\x00\x00\x00\x00")).to eq(-0.0)
9
- expect(read("\x3F\xF0\x00\x00\x00\x00\x00\x00")).to eq(1.0)
10
- expect(read("\xBF\xF0\x00\x00\x00\x00\x00\x00")).to eq(-1.0)
11
- end
12
-
13
- def read(str)
14
- io = StringIO.new(str)
15
- subject.read(io)
16
- end
17
- end
18
-
19
- describe XDR::Double, ".write" do
20
- it "encodes values correctly" do
21
- expect(write 0.0).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x00")
22
- expect(write -0.0).to eq_bytes("\x80\x00\x00\x00\x00\x00\x00\x00")
23
- expect(write 1.0).to eq_bytes("\x3F\xF0\x00\x00\x00\x00\x00\x00")
24
- expect(write -1.0).to eq_bytes("\xBF\xF0\x00\x00\x00\x00\x00\x00")
25
- end
26
-
27
- it "raises a WriteError when the value is not Float" do
28
- expect{ write 3 }.to raise_error(XDR::WriteError)
29
- expect{ write "hi" }.to raise_error(XDR::WriteError)
30
- expect{ write "1.0" }.to raise_error(XDR::WriteError)
31
- end
32
-
33
- def write(val)
34
- io = StringIO.new()
35
- subject.write(val, io)
36
- io.string
37
- end
38
- end