xdr 0.1.0 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +7 -2
  4. data/lib/xdr.rb +0 -1
  5. data/lib/xdr/concerns/converts_to_xdr.rb +47 -24
  6. data/lib/xdr/concerns/reads_bytes.rb +8 -0
  7. data/lib/xdr/dsl/enum.rb +1 -1
  8. data/lib/xdr/opaque.rb +1 -1
  9. data/lib/xdr/string.rb +1 -1
  10. data/lib/xdr/struct.rb +1 -1
  11. data/lib/xdr/union.rb +15 -6
  12. data/lib/xdr/var_opaque.rb +1 -1
  13. data/lib/xdr/version.rb +1 -1
  14. metadata +47 -133
  15. data/.gitignore +0 -15
  16. data/.travis.yml +0 -14
  17. data/.yardopts +0 -7
  18. data/Gemfile +0 -4
  19. data/Guardfile +0 -5
  20. data/Rakefile +0 -9
  21. data/examples/enum.rb +0 -30
  22. data/examples/struct.rb +0 -24
  23. data/examples/union.rb +0 -29
  24. data/spec/lib/xdr/array_spec.rb +0 -73
  25. data/spec/lib/xdr/bool_spec.rb +0 -43
  26. data/spec/lib/xdr/concerns/converts_to_xdr_spec.rb +0 -55
  27. data/spec/lib/xdr/concerns/reads_bytes_spec.rb +0 -31
  28. data/spec/lib/xdr/double_spec.rb +0 -38
  29. data/spec/lib/xdr/dsl/enum_spec.rb +0 -44
  30. data/spec/lib/xdr/dsl/struct_spec.rb +0 -29
  31. data/spec/lib/xdr/dsl/union_spec.rb +0 -69
  32. data/spec/lib/xdr/enum_spec.rb +0 -70
  33. data/spec/lib/xdr/float_spec.rb +0 -37
  34. data/spec/lib/xdr/hyper_spec.rb +0 -40
  35. data/spec/lib/xdr/int_spec.rb +0 -40
  36. data/spec/lib/xdr/opaque_spec.rb +0 -36
  37. data/spec/lib/xdr/option_spec.rb +0 -36
  38. data/spec/lib/xdr/quadruple_spec.rb +0 -14
  39. data/spec/lib/xdr/rpc/record_reader_spec.rb +0 -27
  40. data/spec/lib/xdr/string_spec.rb +0 -41
  41. data/spec/lib/xdr/struct_spec.rb +0 -101
  42. data/spec/lib/xdr/union_spec.rb +0 -248
  43. data/spec/lib/xdr/unsigned_hyper_spec.rb +0 -36
  44. data/spec/lib/xdr/unsigned_int_spec.rb +0 -36
  45. data/spec/lib/xdr/var_array_spec.rb +0 -71
  46. data/spec/lib/xdr/var_opaque_spec.rb +0 -43
  47. data/spec/lib/xdr/void_spec.rb +0 -46
  48. data/spec/spec_helper.rb +0 -15
  49. data/spec/support/matchers/eq_bytes.rb +0 -6
  50. data/xdr.gemspec +0 -29
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,14 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.0
4
- - 2.1.5
5
- - 2.0.0
6
- - 1.9.3
7
- - jruby-1.7.9
8
- - jruby-head
9
- notifications:
10
- slack:
11
- secure: fXYggrDRoLB/4yvyW0kWwyrV5yWa/GC0btPyGu7Hx6ZOaXDC+ejiXSfx7nRyY+uZBs5UF12O4gkUXwBbnWDT5JtQRxzZd5s0cyeGQfAakALexI+FuR2jDcV1prCCaYI4IYoUt61MlfDmuCYVm8hGZ3qsgk/GPHHPnZ8a1FBd2ls=
12
- matrix:
13
- allow_failures:
14
- - rvm: jruby-head
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,55 +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
- end
27
-
28
- describe XDR::Concerns::ConvertsToXDR, "#from_xdr" do
29
- subject{ ImplementedConvertible.new }
30
-
31
- it "calls through to write" do
32
- expect(subject).to receive(:read).with(kind_of(StringIO))
33
- subject.from_xdr("hiya")
34
- end
35
- end
36
-
37
- class UnimplementedConvertible
38
- include XDR::Concerns::ConvertsToXDR
39
- end
40
-
41
- class ImplementedConvertible
42
- include XDR::Concerns::ConvertsToXDR
43
-
44
- def read(io)
45
- read_bytes(4)
46
- end
47
-
48
- def write(val, io)
49
- io.write(val)
50
- end
51
-
52
- def valid?(val)
53
- true
54
- end
55
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class TestReader
4
- include XDR::Concerns::ReadsBytes
5
- public :read_bytes
6
- end
7
-
8
-
9
- describe XDR::Concerns::ReadsBytes, "#read_bytes" do
10
- subject{ TestReader.new }
11
-
12
- it "raises EOFError when the requested length goes beyond the length of the stream" do
13
- expect{ read("", 1) }.to raise_error(EOFError)
14
- expect{ read("", 2) }.to raise_error(EOFError)
15
- expect{ read("", 10) }.to raise_error(EOFError)
16
- expect{ read("\x00\x01\x02", 4) }.to raise_error(EOFError)
17
- expect{ read("\x00\x01\x02", 10) }.to raise_error(EOFError)
18
- end
19
-
20
- it "returns the read data" do
21
- expect(read("", 0)).to eq("")
22
- expect(read("\x00", 1)).to eq("\x00")
23
- expect(read("\x01", 1)).to eq("\x01")
24
- expect(read("\x00\x01\x02", 3)).to eq("\x00\x01\x02")
25
- end
26
-
27
- def read(str, length)
28
- io = StringIO.new(str)
29
- subject.read_bytes(io, length)
30
- end
31
- 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
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::DSL::Enum, "#member" do
5
- subject do
6
- Class.new(XDR::Enum) do
7
- member :one, 1
8
- member :two, 2
9
- end
10
- end
11
-
12
- it "adds to the members collection of the class" do
13
- expect(subject.members.length).to eq(2)
14
- expect(subject.members[:one]).to eq(subject.one)
15
- expect(subject.members[:two]).to eq(subject.two)
16
- end
17
-
18
- it "raises ArgumentError if a non-fixnum value is used" do
19
- expect {
20
- Class.new(XDR::Enum) do
21
- member :one, "hi!"
22
- end
23
- }.to raise_error(ArgumentError)
24
- end
25
- end
26
-
27
- describe XDR::DSL::Enum, "#seal" do
28
- subject do
29
- Class.new(XDR::Enum) do
30
- member :one, 1
31
- member :two, 2
32
- seal
33
- end
34
- end
35
-
36
- it "marks the class as sealed" do
37
- expect(subject.sealed).to eq(true)
38
- end
39
-
40
- it "prevents you from adding members after being sealed" do
41
- expect{ subject.member :three, 3 }.to raise_error(ArgumentError)
42
- end
43
-
44
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe XDR::DSL::Struct, "#attribute" do
5
- subject do
6
- Class.new(XDR::Struct) do
7
- attribute :attr1, XDR::Int
8
- attribute :attr2, XDR::String[]
9
- end
10
- end
11
-
12
-
13
- it "adds to the fields collection of the class" do
14
- expect(subject.fields.length).to eq(2)
15
- expect(subject.fields[:attr1]).to eq(XDR::Int)
16
- expect(subject.fields[:attr2]).to be_a(XDR::String)
17
- end
18
-
19
-
20
-
21
- it "raises ArgumentError if a non-convertible type is used" do
22
- expect do
23
- Class.new(XDR::Struct) do
24
- attribute :attr1, String
25
- end
26
- end.to raise_error(ArgumentError)
27
- end
28
-
29
- end