saorin 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5d731d83b57e3aa94b1496a35d8d635ac7f0e4b1
4
+ data.tar.gz: 58702ec40e1322e327f8813da93c36e87345d27d
5
+ SHA512:
6
+ metadata.gz: ee7f2206ee8092b8549961d0d517dc792dcddd5e23c4b06c6ad045b6a4668e84ed594d66aade15b7b3b202deaef0367a7968e706909167d810fdc70701dfc31a
7
+ data.tar.gz: a0e9be370c67bf3d7bd589941a7a9d7bc3d2b1b1ebc08bad9ff17707b1895496081e17d5053cf94e7f6d46e5c2f7400de2f9ce85273901c5c3de4f2d0cba30dc
@@ -1,7 +1,8 @@
1
- require 'multi_json'
2
1
  require 'saorin/request'
3
2
  require 'saorin/response'
4
3
  require 'saorin/client'
4
+ require 'multi_json'
5
+ require 'securerandom'
5
6
 
6
7
  module Saorin
7
8
  module Client
@@ -12,7 +13,7 @@ module Saorin
12
13
  end
13
14
 
14
15
  def call(method, *args)
15
- apply Saorin::Request.new(method, args, :id => seqid!)
16
+ apply Saorin::Request.new(method, args, :id => uuid)
16
17
  end
17
18
 
18
19
  def notify(method, *args)
@@ -20,7 +21,7 @@ module Saorin
20
21
  end
21
22
 
22
23
  def apply(request)
23
- response = send_request request.to_json
24
+ response = send_request dump_request(request)
24
25
  content = process_response response
25
26
  raise content if content.is_a?(Saorin::RPCError)
26
27
  content
@@ -42,17 +43,19 @@ module Saorin
42
43
  rescue Saorin::InvalidResponse => e
43
44
  raise e
44
45
  rescue => e
45
- p e
46
- print e.backtrace.join("\t\n")
47
46
  raise Saorin::InvalidResponse, e.to_s
48
47
  end
49
48
 
50
49
  def parse_response(content)
51
- MultiJson.decode content
50
+ MultiJson.load content
52
51
  rescue MultiJson::LoadError => e
53
52
  raise Saorin::InvalidResponse, e.to_s
54
53
  end
55
54
 
55
+ def dump_request(request)
56
+ MultiJson.dump request
57
+ end
58
+
56
59
  def to_content(response)
57
60
  return nil if response.nil?
58
61
  if response.error?
@@ -72,20 +75,8 @@ module Saorin
72
75
  to_content response
73
76
  end
74
77
 
75
- def seqid
76
- @@seqid ||= 0
77
- end
78
-
79
- def seqid=(value)
80
- @@seqid = value
81
- @@seqid = 0 if @@seqid >= (1 << 31)
82
- @@seqid
83
- end
84
-
85
- def seqid!
86
- id = self.seqid
87
- self.seqid += 1
88
- id
78
+ def uuid
79
+ SecureRandom.uuid
89
80
  end
90
81
  end
91
82
  end
data/lib/saorin/error.rb CHANGED
@@ -22,7 +22,7 @@ module Saorin
22
22
  end
23
23
 
24
24
  def to_json(*args)
25
- options = args.last.is_a?(::Hash) ? args.pop : {}
25
+ options = Saorin::Utility.extract_options!(args)
26
26
  MultiJson.dump to_h, options
27
27
  end
28
28
  end
@@ -44,7 +44,7 @@ module Saorin
44
44
  end
45
45
 
46
46
  def to_json(*args)
47
- options = args.last.is_a?(::Hash) ? args.pop : {}
47
+ options = Saorin::Utility.extract_options!(args)
48
48
  MultiJson.dump to_h, options
49
49
  end
50
50
 
@@ -42,7 +42,7 @@ module Saorin
42
42
  end
43
43
 
44
44
  def to_json(*args)
45
- options = args.last.is_a?(::Hash) ? args.pop : {}
45
+ options = Saorin::Utility.extract_options!(args)
46
46
  MultiJson.dump to_h, options
47
47
  end
48
48
 
@@ -2,6 +2,7 @@ require 'saorin/error'
2
2
  require 'saorin/request'
3
3
  require 'saorin/response'
4
4
  require 'saorin/server'
5
+ require 'multi_json'
5
6
 
6
7
  module Saorin
7
8
  module Server
@@ -34,15 +35,19 @@ module Saorin
34
35
  Response.new(:error => e)
35
36
  end
36
37
 
37
- response && MultiJson.dump(response)
38
+ dump_response response if response
38
39
  end
39
40
 
40
41
  def parse_request(content)
41
- MultiJson.decode content
42
+ MultiJson.load content
42
43
  rescue MultiJson::LoadError
43
44
  raise Saorin::ParseError
44
45
  end
45
46
 
47
+ def dump_response(response)
48
+ MultiJson.dump response
49
+ end
50
+
46
51
  def handle_request(hash)
47
52
  begin
48
53
  request = Request.from_hash(hash)
data/lib/saorin/test.rb CHANGED
@@ -57,12 +57,11 @@ module Saorin
57
57
  }.merge(options))
58
58
  @server.start
59
59
  end
60
- sleep 2
60
+ sleep 1
61
61
  end
62
62
 
63
63
  def shutdown_test_server
64
64
  Process.kill :INT, @pid
65
- sleep 2
66
65
  end
67
66
 
68
67
  def create_test_client(options = {})
@@ -79,19 +78,17 @@ module Saorin
79
78
  @client.notify *args
80
79
  end
81
80
 
82
- shared_context 'setup rpc server client' do
83
- let(:server_adapter) {}
84
- let(:client_adapter) {}
81
+ shared_context 'setup rpc server client' do |options|
85
82
  before(:all) do
86
- create_test_server :adapter => server_adapter
87
- create_test_client :adapter => client_adapter
83
+ create_test_server :adapter => options[:server]
84
+ create_test_client :adapter => options[:client]
88
85
  end
89
86
  after(:all) do
90
87
  shutdown_test_server
91
88
  end
92
89
  end
93
90
 
94
- shared_examples 'rpc server client' do
91
+ shared_examples 'rpc communicatable' do
95
92
  it 'string' do
96
93
  value = '123'
97
94
  test_call('identity', value).should eq value
@@ -1,6 +1,10 @@
1
1
  module Saorin
2
2
  module Utility
3
3
  class << self
4
+ def extract_options!(args)
5
+ args.last.is_a?(::Hash) ? args.pop : {}
6
+ end
7
+
4
8
  def symbolized_keys(hash)
5
9
  hash = hash.dup
6
10
  hash.keys.each do |key|
@@ -1,3 +1,3 @@
1
1
  module Saorin
2
- VERSION = '0.3.2'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'saorin/server/base'
3
3
 
4
4
  describe Saorin::Server::Base do
5
- it_should_behave_like 'rpc call' do
5
+ it_should_behave_like 'returning valid response' do
6
6
  let(:process) do
7
7
  handler = Saorin::Test::Handler.new
8
8
  class VanillaServer
@@ -10,7 +10,8 @@ describe Saorin::Server::Base do
10
10
  end
11
11
  server = VanillaServer.new handler
12
12
  proc do |input|
13
- server.process_request input
13
+ data = server.process_request input
14
+ data && JSON.load(data)
14
15
  end
15
16
  end
16
17
  end
@@ -4,8 +4,6 @@ require 'saorin/server/rack'
4
4
 
5
5
  describe Saorin::Server::Rack do
6
6
  include Saorin::Test
7
-
8
- let(:server_adapter) { :rack }
9
- include_context 'setup rpc server client'
10
- it_should_behave_like 'rpc server client'
7
+ include_context 'setup rpc server client', :server => :rack
8
+ it_should_behave_like 'rpc communicatable'
11
9
  end
@@ -1,5 +1,4 @@
1
1
  require 'support/utils'
2
- require 'json'
3
2
 
4
3
  shared_examples 'rpc call with positional parameters' do
5
4
  it 'rpc call with positional parameters' do
@@ -142,7 +141,7 @@ shared_examples 'rpc call Batch (all notifications)' do
142
141
  end
143
142
  end
144
143
 
145
- shared_examples 'rpc call' do
144
+ shared_examples 'returning valid response' do
146
145
  let(:inputs) { [] }
147
146
  let(:answers) { [] }
148
147
  include_examples 'rpc call with positional parameters'
@@ -1,13 +1,13 @@
1
1
  require 'saorin/test'
2
2
 
3
- def deserialize(data)
3
+ def json_decode(data)
4
4
  data && JSON.load(data)
5
5
  end
6
6
 
7
7
  def validates(process, inputs, answers)
8
8
  inputs.zip(answers).each do |input, answer|
9
- output = deserialize process.call(input)
10
- answer = deserialize answer
9
+ output = process.call(input)
10
+ answer = json_decode answer
11
11
  output.should eq answer
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saorin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - mashiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
11
+ date: 2013-05-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: multi_json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rack
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: faraday
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: JSON-RPC 2.0 implementation
@@ -124,37 +113,30 @@ files:
124
113
  - spec/server/base_spec.rb
125
114
  - spec/server/rack_spec.rb
126
115
  - spec/spec_helper.rb
127
- - spec/support/rpc_call.rb
116
+ - spec/support/response.rb
128
117
  - spec/support/utils.rb
129
118
  homepage: ''
130
119
  licenses: []
120
+ metadata: {}
131
121
  post_install_message:
132
122
  rdoc_options: []
133
123
  require_paths:
134
124
  - lib
135
125
  required_ruby_version: !ruby/object:Gem::Requirement
136
- none: false
137
126
  requirements:
138
- - - ! '>='
127
+ - - '>='
139
128
  - !ruby/object:Gem::Version
140
129
  version: '0'
141
- segments:
142
- - 0
143
- hash: 2282161111462653130
144
130
  required_rubygems_version: !ruby/object:Gem::Requirement
145
- none: false
146
131
  requirements:
147
- - - ! '>='
132
+ - - '>='
148
133
  - !ruby/object:Gem::Version
149
134
  version: '0'
150
- segments:
151
- - 0
152
- hash: 2282161111462653130
153
135
  requirements: []
154
136
  rubyforge_project:
155
- rubygems_version: 1.8.24
137
+ rubygems_version: 2.0.0
156
138
  signing_key:
157
- specification_version: 3
139
+ specification_version: 4
158
140
  summary: JSON-RPC 2.0 server and client implementation for any protocols
159
141
  test_files:
160
142
  - spec/request_spec.rb
@@ -162,5 +144,5 @@ test_files:
162
144
  - spec/server/base_spec.rb
163
145
  - spec/server/rack_spec.rb
164
146
  - spec/spec_helper.rb
165
- - spec/support/rpc_call.rb
147
+ - spec/support/response.rb
166
148
  - spec/support/utils.rb