jrpc 0.4.3 → 0.4.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f52da03b123ed6f6db054664d281c87085172a8
4
- data.tar.gz: 8d1220f230a1f1f9aba9cd449510675ebe25095e
3
+ metadata.gz: 9700f88f401f9dc3008b7eb259e1033f2d33720e
4
+ data.tar.gz: 2fce76c9f94d75a47ae4b762df834ca66e54e2df
5
5
  SHA512:
6
- metadata.gz: 74f7ac05daa9badd03543cdfa88e0021fc17c2768f74f487cd615be8145fcd430228fe2e77231a85384ef7173ad7cf875328f4ddfb38223869cb69cd7600b2da
7
- data.tar.gz: 71c5d11bfbe0909f19f7b85d00771ccbc17f55d3376106bd80976bf0f8e0cf009fc23b2c6c29cf70c987c10721c08ec69fd4da9f4fb37007f59592b94bdc0939
6
+ metadata.gz: 5807025e3121cdf27a558da1f08d27cd9eb3c28c818a9a2c61b79256f0bffd964c61396c623200dafa7a9e462d7d3228511d5ae589c3d399e843ce884aec4489
7
+ data.tar.gz: 09401f47a4c06eb8e932ce4b16f1cb17dbbca466c7d5bea246dbc3a614e5f654b8ef6c0b81531da0f9e345370b5f7796133c1c7542fb99b4798900927fe5f7aa
data/jrpc.gemspec CHANGED
@@ -17,10 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_dependency 'netstring'
21
- spec.add_dependency 'net_tcp_client', '>= 1.0.2'
20
+ spec.add_dependency 'netstring', '~> 0'
21
+ spec.add_dependency 'net_tcp_client', '~> 1.0', '>= 1.0.2'
22
+ spec.add_dependency 'oj', '~> 2.0'
22
23
 
23
24
  spec.add_development_dependency 'bundler', '~> 1.10'
24
25
  spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'rspec', '~> 3.0'
26
27
  end
@@ -1,4 +1,4 @@
1
- require 'json'
1
+ require 'oj'
2
2
  require 'forwardable'
3
3
  module JRPC
4
4
  class BaseClient
@@ -22,8 +22,8 @@ module JRPC
22
22
  id = generate_id
23
23
  request['id'] = id
24
24
 
25
- response = send_command JSON.generate(request)
26
- response = JSON.parse response
25
+ response = send_command Oj.dump(request)
26
+ response = Oj.load(response)
27
27
 
28
28
  validate_response(response, id)
29
29
  parse_error(response['error']) if response.has_key?('error')
@@ -1,32 +1,47 @@
1
1
  require 'net/tcp_client'
2
2
  require 'netstring'
3
+ require 'logger'
4
+ require 'benchmark'
3
5
  module JRPC
4
6
  class TcpClient < BaseClient
5
- attr_reader :namespace
6
- def_delegators :@client, :logger, :logger=, :close, :closed?
7
+ attr_reader :namespace, :transport
8
+ attr_accessor :logger
9
+ def_delegators :@transport, :close, :closed?, :connect
10
+
11
+ MAX_LOGGED_MESSAGE_LENGTH = 255
7
12
 
8
13
  def initialize(uri, options = {})
9
14
  super
15
+ @logger = @options.delete(:logger) || Logger.new($null)
10
16
  @namespace = @options.delete(:namespace).to_s
11
17
  t = @options.fetch(:timeout, 5)
12
18
 
13
- @client = Net::TCPClient.new server: @uri,
19
+ @transport = Net::TCPClient.new server: @uri,
14
20
  connect_retry_count: t,
15
21
  connect_timeout: t,
16
22
  read_timeout: t, # write_timeout: t,
17
- buffered: false, # recommended for RPC
18
- logger: @options.delete(:logger)
23
+ buffered: false # recommended for RPC
19
24
  end
20
25
 
21
26
  private
22
27
 
23
28
  def send_command(request)
24
- send_request(request)
25
- receive_response
29
+ response = nil
30
+ t = Benchmark.realtime do
31
+ logger.debug "Request address: #{uri}"
32
+ logger.debug "Request message: #{Utils.truncate(request, MAX_LOGGED_MESSAGE_LENGTH)}"
33
+ send_request(request)
34
+ response = receive_response
35
+ end
36
+ logger.debug "(#{'%.2f' % (t * 1000)}ms) Response message: #{Utils.truncate(response, MAX_LOGGED_MESSAGE_LENGTH)}"
37
+ response
26
38
  end
27
39
 
28
40
  def send_notification(request)
41
+ logger.debug "Request address: #{uri}"
42
+ logger.debug "Request message: #{Utils.truncate(request, MAX_LOGGED_MESSAGE_LENGTH)}"
29
43
  send_request(request)
44
+ logger.debug 'No response required'
30
45
  end
31
46
 
32
47
  def create_message(method, params)
@@ -34,12 +49,12 @@ module JRPC
34
49
  end
35
50
 
36
51
  def send_request(request)
37
- @client.write Netstring.dump(request.to_s)
52
+ @transport.write Netstring.dump(request.to_s)
38
53
  end
39
54
 
40
55
  def receive_response
41
56
  length = get_msg_length
42
- response = @client.read(length+1)
57
+ response = @transport.read(length+1)
43
58
  raise ClientError.new('invalid response. missed comma as terminator') if response[-1] != ','
44
59
  response.chomp(',')
45
60
  end
@@ -47,7 +62,7 @@ module JRPC
47
62
  def get_msg_length
48
63
  length = ''
49
64
  while true do
50
- character = @client.read(1)
65
+ character = @transport.read(1)
51
66
  break if character == ':'
52
67
  length += character
53
68
  end
data/lib/jrpc/utils.rb ADDED
@@ -0,0 +1,9 @@
1
+ module JRPC
2
+ class Utils
3
+
4
+ def self.truncate(string, length, ommiter = '...')
5
+ "#{string[0..length]}#{ommiter if string.length > length}"
6
+ end
7
+
8
+ end
9
+ end
data/lib/jrpc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JRPC
2
- VERSION = '0.4.3'
2
+ VERSION = '0.4.4'
3
3
  end
data/lib/jrpc.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'jrpc/version'
2
+ require 'jrpc/utils'
2
3
  require 'jrpc/base_client'
3
4
  require 'jrpc/tcp_client'
4
5
  require 'jrpc/error/error'
metadata CHANGED
@@ -1,33 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Talakevich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-02 00:00:00.000000000 Z
11
+ date: 2015-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: netstring
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net_tcp_client
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
31
34
  - - ">="
32
35
  - !ruby/object:Gem::Version
33
36
  version: 1.0.2
@@ -35,9 +38,26 @@ dependencies:
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.0'
38
44
  - - ">="
39
45
  - !ruby/object:Gem::Version
40
46
  version: 1.0.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: oj
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: bundler
43
63
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +90,16 @@ dependencies:
70
90
  name: rspec
71
91
  requirement: !ruby/object:Gem::Requirement
72
92
  requirements:
73
- - - ">="
93
+ - - "~>"
74
94
  - !ruby/object:Gem::Version
75
- version: '0'
95
+ version: '3.0'
76
96
  type: :development
77
97
  prerelease: false
78
98
  version_requirements: !ruby/object:Gem::Requirement
79
99
  requirements:
80
- - - ">="
100
+ - - "~>"
81
101
  - !ruby/object:Gem::Version
82
- version: '0'
102
+ version: '3.0'
83
103
  description: JSON RPC client over TCP
84
104
  email:
85
105
  - senid231@gmail.com
@@ -108,6 +128,7 @@ files:
108
128
  - lib/jrpc/error/server_error.rb
109
129
  - lib/jrpc/error/unknown_error.rb
110
130
  - lib/jrpc/tcp_client.rb
131
+ - lib/jrpc/utils.rb
111
132
  - lib/jrpc/version.rb
112
133
  homepage: https://github.com/senid231/jrpc
113
134
  licenses: