hessian2 2.0.5 → 2.0.6

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -10
  3. data/README.md +203 -199
  4. data/lib/hessian2.rb +14 -14
  5. data/lib/hessian2/client.rb +57 -57
  6. data/lib/hessian2/constants.rb +164 -164
  7. data/lib/hessian2/fault.rb +3 -3
  8. data/lib/hessian2/handler.rb +18 -18
  9. data/lib/hessian2/hessian_client.rb +3 -3
  10. data/lib/hessian2/parser.rb +619 -619
  11. data/lib/hessian2/type_wrapper.rb +49 -49
  12. data/lib/hessian2/version.rb +3 -3
  13. data/lib/hessian2/writer.rb +506 -504
  14. data/spec/binary_spec.rb +51 -51
  15. data/spec/boolean_spec.rb +26 -26
  16. data/spec/class_wrapper_spec.rb +52 -52
  17. data/spec/create_monkeys.rb +14 -14
  18. data/spec/date_spec.rb +45 -45
  19. data/spec/double_spec.rb +78 -78
  20. data/spec/int_spec.rb +54 -54
  21. data/spec/list_spec.rb +66 -66
  22. data/spec/long_spec.rb +68 -68
  23. data/spec/map_spec.rb +36 -36
  24. data/spec/null_spec.rb +17 -17
  25. data/spec/object_spec.rb +78 -78
  26. data/spec/ref_spec.rb +43 -43
  27. data/spec/spec_helper.rb +23 -23
  28. data/spec/string_spec.rb +61 -61
  29. data/spec/struct_wrapper_spec.rb +47 -47
  30. data/spec/type_wrapper_spec.rb +102 -102
  31. data/test/app.rb +24 -24
  32. data/test/async/em_http_asleep.rb +25 -25
  33. data/test/async/em_http_sleep.rb +25 -25
  34. data/test/async/monkey.asleep.rb +27 -27
  35. data/test/async/mysql2_aquery.rb +37 -37
  36. data/test/fault/monkey.undefined_method.rb +5 -5
  37. data/test/fault/monkey.wrong_arguments.rb +5 -5
  38. data/test/fiber_concurrency/em_http_asleep.rb +17 -17
  39. data/test/fiber_concurrency/em_http_sleep.rb +17 -17
  40. data/test/fiber_concurrency/monkey.asleep.fiber_aware.rb +18 -18
  41. data/test/fiber_concurrency/mysql2_query.rb +29 -29
  42. data/test/fiber_concurrency/net_http_asleep.rb +19 -19
  43. data/test/fiber_concurrency/net_http_sleep.rb +19 -19
  44. data/test/fibered_rainbows/Gemfile +15 -15
  45. data/test/fibered_rainbows/config.ru +11 -11
  46. data/test/fibered_rainbows/rainbows.rb +13 -13
  47. data/test/monkey_service.rb +16 -16
  48. data/test/prepare.rb +7 -7
  49. data/test/thread_concurrency/active_record_execute.rb +29 -29
  50. data/test/thread_concurrency/monkey.asleep.rb +22 -22
  51. data/test/thread_concurrency/net_http_asleep.rb +24 -24
  52. data/test/thread_concurrency/net_http_sleep.rb +24 -24
  53. data/test/threaded_rainbows/Gemfile +13 -13
  54. data/test/threaded_rainbows/config.ru +9 -9
  55. data/test/threaded_rainbows/rainbows.rb +13 -13
  56. metadata +46 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c29b58ed9dcdc79f7e81a7dc8e204f9846fbd8ce
4
- data.tar.gz: 868e420d3e2193979cac16c54fe1e8a72f0c3da8
3
+ metadata.gz: d080c91f86c463c0f5699a058ba3da810eb54789
4
+ data.tar.gz: 03aab8f86e1a4b4ea65e388cc4b9d0e33f896c4f
5
5
  SHA512:
6
- metadata.gz: b34738c7d43f403b072ba23ee182bfefe680da6f6534b036a18329ecbd8f916c62cec834d2c4322bc169f4d4598dc32f753821d48cc3f3d3c6a776e42766da9c
7
- data.tar.gz: ac41f701ff5b2cedd999be07986f8a4e58740a1fe9a3cd64e28f37d955d09943b328e2faf884797d85610a2600beea011be58cb8f6502899f4a836bdb5ca7e7e
6
+ metadata.gz: 2e81a9a692e8f88d3b64f96adb5067fa039877efa5f3611fee185f59bda640b329d2e0f62372249bdb128ec762b5c6d1242ef09b81fcdd5969701308e5ff009b
7
+ data.tar.gz: a9d1819e4434745126b74c44b524fbaaed68abfa2c4c677820b7bed8f11ca5ff76947c6b5f1a4f17ae27ee83c02ce0b122a5a454ee83a07c1d19687ac742e1b0
data/.gitignore CHANGED
@@ -1,10 +1,10 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- doc/*
5
- pkg/*
6
- spec/*.yml
7
- spec/*.jpg
8
- test/*.data
9
- test/*.txt
10
- test/*.yml
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ doc/*
5
+ pkg/*
6
+ spec/*.yml
7
+ spec/*.jpg
8
+ test/*.data
9
+ test/*.txt
10
+ test/*.yml
data/README.md CHANGED
@@ -1,199 +1,203 @@
1
- # hessian2
2
-
3
- like json, additionally, 麻绳2 parse your object as a struct.
4
-
5
- hessian2 implements hessian 2.0 protocol. look [web services protocol](http://hessian.caucho.com/doc/hessian-ws.html) and [serialization protocol](http://hessian.caucho.com/doc/hessian-serialization.html).
6
-
7
- Sequel::Mysql2::Dataset and ActiveRecord::Relation are also okey.
8
-
9
- ## comparing
10
-
11
- yajl-ruby: json, fast.
12
-
13
- msgpack: binary, faster.
14
-
15
- protobuf: encoding your object with schema.
16
-
17
- marshal: powerful, fast, but ruby only.
18
-
19
- hessian2: powerful as marshal but parse object to struct, clean api, smaller.
20
-
21
- ## install
22
-
23
- ```
24
- gem install hessian2
25
- ```
26
-
27
- ## serializing
28
-
29
- ```
30
- require 'hessian2'
31
- ```
32
-
33
- ``` ruby
34
- attributes = { born_at: Time.new(2009, 5, 8), name: '大鸡', price: 99.99 }
35
- monkey = Monkey.new(attributes)
36
- #=> #<Monkey id: nil, born_at: "2009-05-08 00:00:00", name: "\u5927\u9E21", price: #<BigDecimal:2b7c568,'0.9998999999 999999E2',27(45)>>
37
-
38
- bin = Hessian2.write(monkey)
39
- ```
40
-
41
- ## deserializing
42
-
43
- ``` ruby
44
- monkey = Hessian2.parse(bin)
45
- #=> #<struct id=nil, born_at=2009-05-08 00:00:00 +0800, name="\u5927\u9E21", price=99.99>
46
- ```
47
-
48
- ## struct wrapper
49
-
50
- for hash and object, only send values that specified.
51
-
52
- ``` ruby
53
- MonkeyStruct = Struct.new(:born_at, :name)
54
-
55
- wrapped_monkey = Hessian2::StructWrapper.new(MonkeyStruct, monkey)
56
- bin = Hessian2.write(wrapped_monkey)
57
- ```
58
-
59
- parsing values-binary to a monkey struct
60
-
61
- ``` ruby
62
- monkey = Hessian2.parse(bin, MonkeyStruct)
63
- #=> #<struct born_at=2009-05-08 00:00:00 +0800, name="\u5927\u9E21">
64
- ```
65
-
66
- monkeys
67
-
68
- ``` ruby
69
- wrapped_monkeys = Hessian2::StructWrapper.new([MonkeyStruct], monkeys)
70
- bin = Hessian2.write(wrapped_monkeys)
71
-
72
- monkeys = Hessian2.parse(bin, [MonkeyStruct])
73
- ```
74
-
75
- struct wrapper supports: hash, object, [hash, [object
76
-
77
- ## class wrapper
78
-
79
- for statically typed languages.
80
-
81
- ``` ruby
82
- wrapped_monkey = Hessian2::ClassWrapper.new('com.sun.java.Monkey', monkey)
83
- ```
84
-
85
- monkeys
86
-
87
- ``` ruby
88
- wrapped_monkeys = Hessian2::ClassWrapper.new('[com.sun.java.Monkey', monkeys)
89
- ```
90
-
91
- class wrapper supports: hash, object, [hash, [object
92
-
93
- ## type wrapper
94
-
95
- wrap a string to long
96
-
97
- ``` ruby
98
- str = '-0x8_000_000_000_000_000'
99
- heslong = Hessian2::TypeWrapper.new(:long, str)
100
- ```
101
-
102
- wrap a file to binary
103
-
104
- ``` ruby
105
- binstr = IO.binread(File.expand_path("../Lighthouse.jpg", __FILE__))
106
- hesbin = Hessian2::TypeWrapper.new(:bin, binstr)
107
- ```
108
-
109
- there are types: 'L', 'I', 'B', '[L', '[I', '[B', :long, :int, :bin, [:long], [:int], [:bin]
110
-
111
- ## :symbolize_keys parser option
112
-
113
- ``` ruby
114
- bin = Hessian2.write(attributes)
115
- hash = Hessian2.parse(bin, nil, symbolize_keys: true)
116
- #=> {:born_at=>2009-05-08 00:00:00 +0800, :name=>"\u5927\u9E21", :price=>99.99}
117
- ```
118
-
119
- ## client
120
-
121
- ``` ruby
122
- url = 'http://127.0.0.1:9292/monkey'
123
- client = Hessian2::Client.new(url)
124
- ```
125
-
126
- call remote method, send a monkey
127
-
128
- ``` ruby
129
- client.send_monkey(monkey)
130
- ```
131
-
132
- ## service
133
-
134
- extend hessian handler
135
-
136
- ``` ruby
137
- class MonkeyService
138
- extend Hessian2::Handler
139
-
140
- def self.send_monkey(monkey)
141
- # ...
142
- end
143
- ```
144
-
145
- handle request
146
-
147
- ``` ruby
148
- post '/monkey' do
149
- MonkeyService.handle(request.body.read)
150
- end
151
- ```
152
-
153
- ## fiber_aware
154
-
155
- fibered service, fiber aware client. use em-synchrony/em-http post.
156
-
157
- ``` ruby
158
- client = Hessian2::Client.new(url, fiber_aware: true)
159
- concurrency = 2
160
-
161
- EM.synchrony do
162
- EM::Synchrony::FiberIterator.new(0...10, concurrency).each do |i|
163
- puts client.asleep
164
- end
165
-
166
- EM.stop
167
- end
168
- ```
169
-
170
- ## async
171
-
172
- evented service, asynchronous callbacks. use em-synchrony/em-http apost.
173
-
174
- ``` ruby
175
- client = Hessian2::Client.new(url, async: true)
176
-
177
- EM.run do
178
- http = client.asleep
179
- http.callback do |r|
180
- puts Hessian2.parse_rpc(r.response)
181
- EM.stop
182
- end
183
-
184
- http.errback do |r|
185
- puts r.error
186
- EM.stop
187
- end
188
-
189
- puts "posted."
190
- end
191
- ```
192
-
193
- ## todo
194
-
195
- supports packet and envelope
196
-
197
- ## authors
198
-
199
- [takafan](http://hululuu.com)
1
+ # hessian2
2
+
3
+ like json, additionally, 麻绳2 parse your object as a struct.
4
+
5
+ hessian2 implements hessian 2.0 protocol. look [web services protocol](http://hessian.caucho.com/doc/hessian-ws.html) and [serialization protocol](http://hessian.caucho.com/doc/hessian-serialization.html).
6
+
7
+ Sequel::Mysql2::Dataset and ActiveRecord::Relation are also okey.
8
+
9
+ ## changelog
10
+
11
+ 2.0.6: support ruby 2.4 Integer
12
+
13
+ ## comparing
14
+
15
+ yajl-ruby: json, fast.
16
+
17
+ msgpack: binary, faster.
18
+
19
+ protobuf: encoding your object with schema.
20
+
21
+ marshal: powerful, fast, but ruby only.
22
+
23
+ hessian2: powerful as marshal but parse object to struct, clean api, smaller.
24
+
25
+ ## install
26
+
27
+ ```
28
+ gem install hessian2
29
+ ```
30
+
31
+ ## serializing
32
+
33
+ ```
34
+ require 'hessian2'
35
+ ```
36
+
37
+ ``` ruby
38
+ attributes = { born_at: Time.new(2009, 5, 8), name: '大鸡', price: 99.99 }
39
+ monkey = Monkey.new(attributes)
40
+ #=> #<Monkey id: nil, born_at: "2009-05-08 00:00:00", name: "\u5927\u9E21", price: #<BigDecimal:2b7c568,'0.9998999999 999999E2',27(45)>>
41
+
42
+ bin = Hessian2.write(monkey)
43
+ ```
44
+
45
+ ## deserializing
46
+
47
+ ``` ruby
48
+ monkey = Hessian2.parse(bin)
49
+ #=> #<struct id=nil, born_at=2009-05-08 00:00:00 +0800, name="\u5927\u9E21", price=99.99>
50
+ ```
51
+
52
+ ## struct wrapper
53
+
54
+ for hash and object, only send values that specified.
55
+
56
+ ``` ruby
57
+ MonkeyStruct = Struct.new(:born_at, :name)
58
+
59
+ wrapped_monkey = Hessian2::StructWrapper.new(MonkeyStruct, monkey)
60
+ bin = Hessian2.write(wrapped_monkey)
61
+ ```
62
+
63
+ parsing values-binary to a monkey struct
64
+
65
+ ``` ruby
66
+ monkey = Hessian2.parse(bin, MonkeyStruct)
67
+ #=> #<struct born_at=2009-05-08 00:00:00 +0800, name="\u5927\u9E21">
68
+ ```
69
+
70
+ monkeys
71
+
72
+ ``` ruby
73
+ wrapped_monkeys = Hessian2::StructWrapper.new([MonkeyStruct], monkeys)
74
+ bin = Hessian2.write(wrapped_monkeys)
75
+
76
+ monkeys = Hessian2.parse(bin, [MonkeyStruct])
77
+ ```
78
+
79
+ struct wrapper supports: hash, object, [hash, [object
80
+
81
+ ## class wrapper
82
+
83
+ for statically typed languages.
84
+
85
+ ``` ruby
86
+ wrapped_monkey = Hessian2::ClassWrapper.new('com.sun.java.Monkey', monkey)
87
+ ```
88
+
89
+ monkeys
90
+
91
+ ``` ruby
92
+ wrapped_monkeys = Hessian2::ClassWrapper.new('[com.sun.java.Monkey', monkeys)
93
+ ```
94
+
95
+ class wrapper supports: hash, object, [hash, [object
96
+
97
+ ## type wrapper
98
+
99
+ wrap a string to long
100
+
101
+ ``` ruby
102
+ str = '-0x8_000_000_000_000_000'
103
+ heslong = Hessian2::TypeWrapper.new(:long, str)
104
+ ```
105
+
106
+ wrap a file to binary
107
+
108
+ ``` ruby
109
+ binstr = IO.binread(File.expand_path("../Lighthouse.jpg", __FILE__))
110
+ hesbin = Hessian2::TypeWrapper.new(:bin, binstr)
111
+ ```
112
+
113
+ there are types: 'L', 'I', 'B', '[L', '[I', '[B', :long, :int, :bin, [:long], [:int], [:bin]
114
+
115
+ ## :symbolize_keys parser option
116
+
117
+ ``` ruby
118
+ bin = Hessian2.write(attributes)
119
+ hash = Hessian2.parse(bin, nil, symbolize_keys: true)
120
+ #=> {:born_at=>2009-05-08 00:00:00 +0800, :name=>"\u5927\u9E21", :price=>99.99}
121
+ ```
122
+
123
+ ## client
124
+
125
+ ``` ruby
126
+ url = 'http://127.0.0.1:9292/monkey'
127
+ client = Hessian2::Client.new(url)
128
+ ```
129
+
130
+ call remote method, send a monkey
131
+
132
+ ``` ruby
133
+ client.send_monkey(monkey)
134
+ ```
135
+
136
+ ## service
137
+
138
+ extend hessian handler
139
+
140
+ ``` ruby
141
+ class MonkeyService
142
+ extend Hessian2::Handler
143
+
144
+ def self.send_monkey(monkey)
145
+ # ...
146
+ end
147
+ ```
148
+
149
+ handle request
150
+
151
+ ``` ruby
152
+ post '/monkey' do
153
+ MonkeyService.handle(request.body.read)
154
+ end
155
+ ```
156
+
157
+ ## fiber_aware
158
+
159
+ fibered service, fiber aware client. use em-synchrony/em-http post.
160
+
161
+ ``` ruby
162
+ client = Hessian2::Client.new(url, fiber_aware: true)
163
+ concurrency = 2
164
+
165
+ EM.synchrony do
166
+ EM::Synchrony::FiberIterator.new(0...10, concurrency).each do |i|
167
+ puts client.asleep
168
+ end
169
+
170
+ EM.stop
171
+ end
172
+ ```
173
+
174
+ ## async
175
+
176
+ evented service, asynchronous callbacks. use em-synchrony/em-http apost.
177
+
178
+ ``` ruby
179
+ client = Hessian2::Client.new(url, async: true)
180
+
181
+ EM.run do
182
+ http = client.asleep
183
+ http.callback do |r|
184
+ puts Hessian2.parse_rpc(r.response)
185
+ EM.stop
186
+ end
187
+
188
+ http.errback do |r|
189
+ puts r.error
190
+ EM.stop
191
+ end
192
+
193
+ puts "posted."
194
+ end
195
+ ```
196
+
197
+ ## todo
198
+
199
+ supports packet and envelope
200
+
201
+ ## authors
202
+
203
+ [takafan](http://cacafan.com)
@@ -1,14 +1,14 @@
1
- require 'hessian2/class_wrapper'
2
- require 'hessian2/client'
3
- require 'hessian2/fault'
4
- require 'hessian2/handler'
5
- require 'hessian2/hessian_client'
6
- require 'hessian2/parser'
7
- require 'hessian2/struct_wrapper'
8
- require 'hessian2/type_wrapper'
9
- require 'hessian2/version'
10
- require 'hessian2/writer'
11
-
12
- module Hessian2
13
- extend Parser, Writer
14
- end
1
+ require 'hessian2/class_wrapper'
2
+ require 'hessian2/client'
3
+ require 'hessian2/fault'
4
+ require 'hessian2/handler'
5
+ require 'hessian2/hessian_client'
6
+ require 'hessian2/parser'
7
+ require 'hessian2/struct_wrapper'
8
+ require 'hessian2/type_wrapper'
9
+ require 'hessian2/version'
10
+ require 'hessian2/writer'
11
+
12
+ module Hessian2
13
+ extend Parser, Writer
14
+ end