funl 0.7 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/funl/blobber.rb +35 -3
- data/lib/funl/client.rb +5 -2
- data/lib/funl/stream.rb +6 -6
- data/lib/funl/version.rb +1 -1
- data/test/test-blobber.rb +58 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b9cbf42dd9f7a6813d6a0fcd2882d677c1d72fa
|
4
|
+
data.tar.gz: 1ad336d8811f9effcb413610177a374383431164
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e037b7343642c8d08fc0d45c10c06e032ddd7054ba47fc06d60fecf107ee7aac3c74d641063875c522b4fa7de98ebcd1ab71a5a5b9508781cab678a219f97b5a
|
7
|
+
data.tar.gz: 23fdd84f5d8146083979031de31d6a4a309b17a30c573afc07787df98d46c15d386ad43e18f94b6203d8d6687469fd4f92c55bbcccaaeeedb65b8d3edd88c42c
|
data/lib/funl/blobber.rb
CHANGED
@@ -6,23 +6,55 @@ module Funl
|
|
6
6
|
YAML_TYPE = ObjectStream::YAML_TYPE
|
7
7
|
JSON_TYPE = ObjectStream::JSON_TYPE
|
8
8
|
MSGPACK_TYPE = ObjectStream::MSGPACK_TYPE
|
9
|
+
|
10
|
+
module JSON_SYM
|
11
|
+
def self.load arg
|
12
|
+
JSON.parse arg, symbolize_keys: true
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.dump arg
|
16
|
+
JSON.dump arg
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module MessagePack_SYM
|
21
|
+
def self.load arg
|
22
|
+
MessagePack.load arg, symbolize_keys: true
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.dump arg
|
26
|
+
MessagePack.dump arg
|
27
|
+
end
|
28
|
+
end
|
9
29
|
|
10
30
|
# Returns something which responds to #dump(obj) and #load(str).
|
11
|
-
def self.for type
|
31
|
+
def self.for type, symbolize_keys: false
|
12
32
|
case type
|
13
33
|
when MARSHAL_TYPE
|
14
34
|
Marshal
|
35
|
+
|
15
36
|
when YAML_TYPE
|
16
37
|
require 'yaml'
|
17
38
|
YAML
|
39
|
+
|
18
40
|
when JSON_TYPE
|
19
41
|
require 'yajl'
|
20
42
|
require 'yajl/json_gem'
|
21
43
|
## would 'json' conflict with yajl required from other libs?
|
22
|
-
|
44
|
+
if symbolize_keys
|
45
|
+
JSON_SYM
|
46
|
+
else
|
47
|
+
JSON
|
48
|
+
end
|
49
|
+
|
23
50
|
when MSGPACK_TYPE
|
24
51
|
require 'msgpack'
|
25
|
-
|
52
|
+
if symbolize_keys
|
53
|
+
MessagePack_SYM
|
54
|
+
else
|
55
|
+
MessagePack
|
56
|
+
end
|
57
|
+
|
26
58
|
else
|
27
59
|
raise ArgumentError, "unknown type: #{type.inspect}"
|
28
60
|
end
|
data/lib/funl/client.rb
CHANGED
@@ -21,15 +21,18 @@ module Funl
|
|
21
21
|
attr_reader :start_tick
|
22
22
|
attr_reader :blob_type
|
23
23
|
attr_reader :blobber
|
24
|
+
attr_reader :symbolize_keys
|
24
25
|
|
25
26
|
def initialize(seq: seq!, cseq: cseq!, arc: nil,
|
26
27
|
log: Logger.new($stderr),
|
27
28
|
stream_type: ObjectStream::MSGPACK_TYPE,
|
28
|
-
message_class: Message
|
29
|
+
message_class: Message,
|
30
|
+
symbolize_keys: false)
|
29
31
|
|
30
32
|
@log = log
|
31
33
|
@stream_type = stream_type ## discover this thru connections
|
32
34
|
@message_class = message_class
|
35
|
+
@symbolize_keys = symbolize_keys
|
33
36
|
|
34
37
|
@seq = client_stream_for(seq)
|
35
38
|
@cseq = client_stream_for(cseq)
|
@@ -109,7 +112,7 @@ module Funl
|
|
109
112
|
log.info "start_tick = #{start_tick}"
|
110
113
|
@blob_type = greeting["blob"]
|
111
114
|
log.info "blob_type = #{blob_type}"
|
112
|
-
@blobber = Blobber.for(blob_type)
|
115
|
+
@blobber = Blobber.for(blob_type, symbolize_keys: symbolize_keys)
|
113
116
|
seq.expect message_class
|
114
117
|
|
115
118
|
@arc = @arcio && client_stream_for(@arcio, type: blob_type)
|
data/lib/funl/stream.rb
CHANGED
@@ -8,15 +8,15 @@ module Funl
|
|
8
8
|
|
9
9
|
# Mixin depends on stream_type, log, client_id, message_class.
|
10
10
|
module Stream
|
11
|
-
def client_stream_for io, type: stream_type
|
12
|
-
ObjectStreamWrapper.new(io, type: type).tap do |stream|
|
11
|
+
def client_stream_for io, type: stream_type, **opts
|
12
|
+
ObjectStreamWrapper.new(io, type: type, **opts).tap do |stream|
|
13
13
|
stream.write_to_outbox {{"client_id" => client_id}}
|
14
14
|
# client_id will be nil in the case of cseq, but that's ok.
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def server_stream_for io, type: stream_type
|
19
|
-
ObjectStreamWrapper.new(io, type: type).tap do |stream|
|
18
|
+
def server_stream_for io, type: stream_type, **opts
|
19
|
+
ObjectStreamWrapper.new(io, type: type, **opts).tap do |stream|
|
20
20
|
stream.consume do |h|
|
21
21
|
raise StreamError, "bad handshake: #{h.class}" unless h.kind_of? Hash
|
22
22
|
client_id = h["client_id"]
|
@@ -26,8 +26,8 @@ module Funl
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def message_server_stream_for io, type: stream_type
|
30
|
-
ObjectStreamWrapper.new(io, type: type).tap do |stream|
|
29
|
+
def message_server_stream_for io, type: stream_type, **opts
|
30
|
+
ObjectStreamWrapper.new(io, type: type, **opts).tap do |stream|
|
31
31
|
stream.consume do |h|
|
32
32
|
raise StreamError, "bad handshake: #{h.class}" unless h.kind_of? Hash
|
33
33
|
client_id = h["client_id"]
|
data/lib/funl/version.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'funl/blobber'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
class TestBlobber < Minitest::Test
|
6
|
+
OBJECTS = [
|
7
|
+
[ {a: 1, b: 2}, {"a" => 1, "b" => 2} ]
|
8
|
+
]
|
9
|
+
|
10
|
+
def test_marshal
|
11
|
+
blobber = Funl::Blobber.for ObjectStream::MARSHAL_TYPE
|
12
|
+
OBJECTS.each do |sym_obj, str_obj|
|
13
|
+
assert_equal sym_obj, blobber.load(blobber.dump(sym_obj))
|
14
|
+
assert_equal str_obj, blobber.load(blobber.dump(str_obj))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_yaml
|
19
|
+
blobber = Funl::Blobber.for ObjectStream::YAML_TYPE
|
20
|
+
OBJECTS.each do |sym_obj, str_obj|
|
21
|
+
assert_equal sym_obj, blobber.load(blobber.dump(sym_obj))
|
22
|
+
assert_equal str_obj, blobber.load(blobber.dump(str_obj))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_json_string_keys
|
27
|
+
blobber = Funl::Blobber.for ObjectStream::JSON_TYPE
|
28
|
+
OBJECTS.each do |sym_obj, str_obj|
|
29
|
+
assert_equal str_obj, blobber.load(blobber.dump(sym_obj))
|
30
|
+
assert_equal str_obj, blobber.load(blobber.dump(str_obj))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_json_symbol_keys
|
35
|
+
blobber = Funl::Blobber.for ObjectStream::JSON_TYPE, symbolize_keys: true
|
36
|
+
OBJECTS.each do |sym_obj, str_obj|
|
37
|
+
assert_equal sym_obj, blobber.load(blobber.dump(sym_obj))
|
38
|
+
assert_equal sym_obj, blobber.load(blobber.dump(str_obj))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_msgpack_string_keys
|
43
|
+
blobber = Funl::Blobber.for ObjectStream::MSGPACK_TYPE
|
44
|
+
OBJECTS.each do |sym_obj, str_obj|
|
45
|
+
assert_equal str_obj, blobber.load(blobber.dump(sym_obj))
|
46
|
+
assert_equal str_obj, blobber.load(blobber.dump(str_obj))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_msgpack_symbol_keys
|
51
|
+
blobber = Funl::Blobber.for ObjectStream::MSGPACK_TYPE, symbolize_keys: true
|
52
|
+
OBJECTS.each do |sym_obj, str_obj|
|
53
|
+
assert_equal sym_obj, blobber.load(blobber.dump(sym_obj))
|
54
|
+
assert_equal sym_obj, blobber.load(blobber.dump(str_obj))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: funl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel VanderWerf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: object-stream
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- lib/funl/stream.rb
|
64
64
|
- lib/funl/subscription-tracker.rb
|
65
65
|
- lib/funl/version.rb
|
66
|
+
- test/test-blobber.rb
|
66
67
|
- test/test-client-sequencer.rb
|
67
68
|
- test/test-client.rb
|
68
69
|
- test/test-message-sequencer.rb
|
@@ -97,16 +98,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
98
|
version: '0'
|
98
99
|
requirements: []
|
99
100
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.2.
|
101
|
+
rubygems_version: 2.2.2
|
101
102
|
signing_key:
|
102
103
|
specification_version: 4
|
103
104
|
summary: Sequences messages
|
104
105
|
test_files:
|
105
|
-
- test/test-
|
106
|
-
- test/test-message.rb
|
107
|
-
- test/test-client.rb
|
106
|
+
- test/test-message-sequencer.rb
|
108
107
|
- test/test-client-sequencer.rb
|
109
|
-
- test/test-subscribe.rb
|
110
108
|
- test/test-reflect.rb
|
111
|
-
- test/test-message
|
109
|
+
- test/test-message.rb
|
110
|
+
- test/test-stream.rb
|
111
|
+
- test/test-subscribe.rb
|
112
|
+
- test/test-client.rb
|
113
|
+
- test/test-blobber.rb
|
112
114
|
has_rdoc:
|