rmodbus-ccutrer 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +14 -7
  3. data/README.md +8 -8
  4. data/examples/perfomance_rtu.rb +55 -56
  5. data/examples/perfomance_rtu_via_tcp.rb +54 -55
  6. data/examples/perfomance_tcp.rb +54 -55
  7. data/examples/simple_xpca_gateway.rb +85 -0
  8. data/examples/use_rtu_via_tcp_modbus.rb +14 -11
  9. data/examples/use_tcp_modbus.rb +14 -11
  10. data/lib/rmodbus/client/slave.rb +58 -70
  11. data/lib/rmodbus/client.rb +11 -8
  12. data/lib/rmodbus/debug.rb +7 -4
  13. data/lib/rmodbus/errors.rb +26 -2
  14. data/lib/rmodbus/ext.rb +72 -51
  15. data/lib/rmodbus/options.rb +4 -1
  16. data/lib/rmodbus/proxy.rb +14 -9
  17. data/lib/rmodbus/rtu.rb +39 -32
  18. data/lib/rmodbus/rtu_client.rb +5 -2
  19. data/lib/rmodbus/rtu_server.rb +8 -6
  20. data/lib/rmodbus/rtu_slave.rb +6 -2
  21. data/lib/rmodbus/rtu_via_tcp_server.rb +6 -4
  22. data/lib/rmodbus/server/slave.rb +4 -2
  23. data/lib/rmodbus/server.rb +97 -73
  24. data/lib/rmodbus/sp.rb +5 -2
  25. data/lib/rmodbus/tcp.rb +5 -2
  26. data/lib/rmodbus/tcp_client.rb +3 -0
  27. data/lib/rmodbus/tcp_server.rb +27 -25
  28. data/lib/rmodbus/tcp_slave.rb +17 -16
  29. data/lib/rmodbus/version.rb +3 -1
  30. data/lib/rmodbus.rb +20 -18
  31. metadata +65 -36
  32. data/Rakefile +0 -9
  33. data/examples/simple-xpca-gateway.rb +0 -84
  34. data/spec/client_spec.rb +0 -88
  35. data/spec/exception_spec.rb +0 -120
  36. data/spec/ext_spec.rb +0 -52
  37. data/spec/logging_spec.rb +0 -82
  38. data/spec/proxy_spec.rb +0 -74
  39. data/spec/read_rtu_response_spec.rb +0 -92
  40. data/spec/response_mismach_spec.rb +0 -163
  41. data/spec/rtu_client_spec.rb +0 -80
  42. data/spec/rtu_server_spec.rb +0 -29
  43. data/spec/rtu_via_tcp_client_spec.rb +0 -76
  44. data/spec/rtu_via_tcp_server_spec.rb +0 -84
  45. data/spec/slave_spec.rb +0 -55
  46. data/spec/spec_helper.rb +0 -54
  47. data/spec/tcp_client_spec.rb +0 -88
  48. data/spec/tcp_server_spec.rb +0 -158
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
- require 'gserver'
4
+ require "gserver"
3
5
  rescue
4
6
  warn "[WARNING] Install `gserver` gem for use TCPServer"
5
7
  end
@@ -15,9 +17,9 @@ module ModBus
15
17
  # slave.input_registers = [1,2,3,4]
16
18
  # srv.logger = Logger.new($stdout)
17
19
  # srv.start
18
- class TCPServer < GServer
19
- include Debug
20
- include Server
20
+ class TCPServer < GServer
21
+ include Debug
22
+ include Server
21
23
 
22
24
  # Init server
23
25
  # @param [Integer] port listen port
@@ -25,11 +27,11 @@ module ModBus
25
27
  # @param [Hash] opts options of server
26
28
  # @option opts [String] :host host of server default '127.0.0.1'
27
29
  # @option opts [Float, Integer] :max_connection max of TCP connection with server default 4
28
- def initialize(port = 502, opts = {})
30
+ def initialize(port = 502, opts = {})
29
31
  opts[:host] = DEFAULT_HOST unless opts[:host]
30
32
  opts[:max_connection] = 4 unless opts[:max_connection]
31
- super(port, host = opts[:host], maxConnection = opts[:max_connection])
32
- end
33
+ super(port, opts[:host], opts[:max_connection])
34
+ end
33
35
 
34
36
  # set the default param
35
37
  def with_slave(uid = 255)
@@ -39,29 +41,29 @@ module ModBus
39
41
  # Serve requests
40
42
  # @param [TCPSocket] io socket
41
43
  def serve(io)
42
- while not stopped?
44
+ until stopped?
43
45
  header = io.read(7)
44
- tx_id = header[0,2]
45
- proto_id = header[2,2]
46
- len = header[4,2].unpack('n')[0]
46
+ tx_id = header[0, 2]
47
+ proto_id = header[2, 2]
48
+ len = header[4, 2].unpack1("n")
47
49
  unit_id = header.getbyte(6)
48
- if proto_id == "\x00\x00"
49
- req = io.read(len - 1)
50
- log "Server RX (#{req.size} bytes): #{logging_bytes(req)}"
50
+ next unless proto_id == "\x00\x00"
51
+
52
+ req = io.read(len - 1)
53
+ log "Server RX (#{req.size} bytes): #{logging_bytes(req)}"
51
54
 
52
- func = req.getbyte(0)
53
- params = parse_request(func, req)
54
- pdu = exec_req(unit_id, func, params, req)
55
+ func = req.getbyte(0)
56
+ params = parse_request(func, req)
57
+ pdu = exec_req(unit_id, func, params, req)
55
58
 
56
- if pdu
57
- resp = tx_id + "\0\0" + (pdu.size + 1).to_word + unit_id.chr + pdu
58
- log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}"
59
- io.write resp
60
- else
61
- log "Ignored server RX (invalid unit ID #{unit_id}, #{req.size} bytes): #{logging_bytes(req)}"
62
- end
59
+ if pdu
60
+ resp = "#{tx_id}\x00\x00#{(pdu.size + 1).to_word}#{unit_id.chr}#{pdu}"
61
+ log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}"
62
+ io.write resp
63
+ else
64
+ log "Ignored server RX (invalid unit ID #{unit_id}, #{req.size} bytes): #{logging_bytes(req)}"
63
65
  end
64
66
  end
65
67
  end
66
- end
68
+ end
67
69
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModBus
2
4
  # TCP slave implementation
3
5
  # @example
@@ -16,16 +18,17 @@ module ModBus
16
18
  # @see Slave::initialize
17
19
  def initialize(uid, io)
18
20
  @transaction = 0
19
- super(uid, io)
21
+ super
20
22
  end
21
23
 
22
24
  private
25
+
23
26
  # overide method for RTU over TCP implamentaion
24
27
  # @see Slave#query
25
28
  def send_pdu(pdu)
26
- @transaction = 0 if @transaction.next > 65535
29
+ @transaction = 0 if @transaction.next > 65_535
27
30
  @transaction += 1
28
- msg = @transaction.to_word + "\0\0" + (pdu.size + 1).to_word + @uid.chr + pdu
31
+ msg = "#{@transaction.to_word}\x00\x00#{(pdu.size + 1).to_word}#{@uid.chr}#{pdu}"
29
32
  @io.write msg
30
33
 
31
34
  log "Tx (#{msg.size} bytes): " + logging_bytes(msg)
@@ -36,19 +39,17 @@ module ModBus
36
39
  def read_pdu
37
40
  loop do
38
41
  header = @io.read(7)
39
- if header
40
- trn = header[0,2].unpack('n')[0]
41
- len = header[4,2].unpack('n')[0]
42
- msg = @io.read(len-1)
43
-
44
- log "Rx (#{(header + msg).size} bytes): " + logging_bytes(header + msg)
45
-
46
- if trn == @transaction
47
- return msg
48
- else
49
- log "Transaction number mismatch. A packet is ignored."
50
- end
51
- end
42
+ next unless header
43
+
44
+ trn = header[0, 2].unpack1("n")
45
+ len = header[4, 2].unpack1("n")
46
+ msg = @io.read(len - 1)
47
+
48
+ log "Rx (#{(header + msg).size} bytes): " + logging_bytes(header + msg)
49
+
50
+ return msg if trn == @transaction
51
+
52
+ log "Transaction number mismatch. A packet is ignored."
52
53
  end
53
54
  end
54
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModBus
2
- VERSION = '2.1.0'
4
+ VERSION = "2.1.1"
3
5
  end
data/lib/rmodbus.rb CHANGED
@@ -1,21 +1,23 @@
1
- require 'rmodbus/ext'
2
- require 'rmodbus/proxy'
3
- require 'rmodbus/version'
1
+ # frozen_string_literal: true
2
+
3
+ require "rmodbus/ext"
4
+ require "rmodbus/proxy"
5
+ require "rmodbus/version"
4
6
 
5
7
  module ModBus
6
- autoload :Errors, 'rmodbus/errors'
7
- autoload :Debug, 'rmodbus/debug'
8
- autoload :Options, 'rmodbus/options'
9
- autoload :SP, 'rmodbus/sp'
10
- autoload :RTU, 'rmodbus/rtu'
11
- autoload :TCP, 'rmodbus/tcp'
12
- autoload :Client, 'rmodbus/client'
13
- autoload :Server, 'rmodbus/server'
14
- autoload :TCPSlave, 'rmodbus/tcp_slave'
15
- autoload :TCPClient, 'rmodbus/tcp_client'
16
- autoload :TCPServer, 'rmodbus/tcp_server'
17
- autoload :RTUSlave, 'rmodbus/rtu_slave'
18
- autoload :RTUClient, 'rmodbus/rtu_client'
19
- autoload :RTUServer, 'rmodbus/rtu_server'
20
- autoload :RTUViaTCPServer, 'rmodbus/rtu_via_tcp_server'
8
+ autoload :Errors, "rmodbus/errors"
9
+ autoload :Debug, "rmodbus/debug"
10
+ autoload :Options, "rmodbus/options"
11
+ autoload :SP, "rmodbus/sp"
12
+ autoload :RTU, "rmodbus/rtu"
13
+ autoload :TCP, "rmodbus/tcp"
14
+ autoload :Client, "rmodbus/client"
15
+ autoload :Server, "rmodbus/server"
16
+ autoload :TCPSlave, "rmodbus/tcp_slave"
17
+ autoload :TCPClient, "rmodbus/tcp_client"
18
+ autoload :TCPServer, "rmodbus/tcp_server"
19
+ autoload :RTUSlave, "rmodbus/rtu_slave"
20
+ autoload :RTUClient, "rmodbus/rtu_client"
21
+ autoload :RTUServer, "rmodbus/rtu_server"
22
+ autoload :RTUViaTCPServer, "rmodbus/rtu_via_tcp_server"
21
23
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmodbus-ccutrer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - A.Timin, J. Sanders, K. Reynolds, F. Luizão, C. Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-26 00:00:00.000000000 Z
11
+ date: 2024-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ccutrer-serialport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gserver
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.0'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: rake
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -25,61 +67,61 @@ dependencies:
25
67
  - !ruby/object:Gem::Version
26
68
  version: '13.0'
27
69
  - !ruby/object:Gem::Dependency
28
- name: bundler
70
+ name: rspec
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '2.2'
75
+ version: '3.11'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
80
  - - "~>"
39
81
  - !ruby/object:Gem::Version
40
- version: '2.2'
82
+ version: '3.11'
41
83
  - !ruby/object:Gem::Dependency
42
- name: rspec
84
+ name: rubocop-inst
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '2.99'
89
+ version: '1.0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
- version: '2.99'
96
+ version: '1.0'
55
97
  - !ruby/object:Gem::Dependency
56
- name: ccutrer-serialport
98
+ name: rubocop-rake
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: 1.0.0
103
+ version: '0.6'
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
108
  - - "~>"
67
109
  - !ruby/object:Gem::Version
68
- version: 1.0.0
110
+ version: '0.6'
69
111
  - !ruby/object:Gem::Dependency
70
- name: gserver
112
+ name: rubocop-rspec
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: '0.0'
117
+ version: '3.0'
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
122
  - - "~>"
81
123
  - !ruby/object:Gem::Version
82
- version: '0.0'
124
+ version: '3.0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: digest-crc
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +137,7 @@ dependencies:
95
137
  - !ruby/object:Gem::Version
96
138
  version: '0.1'
97
139
  description:
98
- email: atimin@gmail.com
140
+ email: cody@cutrer.us
99
141
  executables: []
100
142
  extensions: []
101
143
  extra_rdoc_files:
@@ -104,11 +146,10 @@ extra_rdoc_files:
104
146
  files:
105
147
  - NEWS.md
106
148
  - README.md
107
- - Rakefile
108
149
  - examples/perfomance_rtu.rb
109
150
  - examples/perfomance_rtu_via_tcp.rb
110
151
  - examples/perfomance_tcp.rb
111
- - examples/simple-xpca-gateway.rb
152
+ - examples/simple_xpca_gateway.rb
112
153
  - examples/use_rtu_via_tcp_modbus.rb
113
154
  - examples/use_tcp_modbus.rb
114
155
  - lib/rmodbus.rb
@@ -132,25 +173,13 @@ files:
132
173
  - lib/rmodbus/tcp_server.rb
133
174
  - lib/rmodbus/tcp_slave.rb
134
175
  - lib/rmodbus/version.rb
135
- - spec/client_spec.rb
136
- - spec/exception_spec.rb
137
- - spec/ext_spec.rb
138
- - spec/logging_spec.rb
139
- - spec/proxy_spec.rb
140
- - spec/read_rtu_response_spec.rb
141
- - spec/response_mismach_spec.rb
142
- - spec/rtu_client_spec.rb
143
- - spec/rtu_server_spec.rb
144
- - spec/rtu_via_tcp_client_spec.rb
145
- - spec/rtu_via_tcp_server_spec.rb
146
- - spec/slave_spec.rb
147
- - spec/spec_helper.rb
148
- - spec/tcp_client_spec.rb
149
- - spec/tcp_server_spec.rb
150
- homepage: https://github.com/ccutrer/rmodbus
176
+ homepage: https://github.com/rmodbus/rmodbus
151
177
  licenses:
152
178
  - BSD-3-Clause
153
- metadata: {}
179
+ metadata:
180
+ changelog_uri: https://github.com/rmodbus/rmodbus/blob/main/NEWS.md
181
+ source_code_uri: https://github.com/rmodbus/rmodbus
182
+ rubygems_mfa_required: 'true'
154
183
  post_install_message:
155
184
  rdoc_options:
156
185
  - "--title"
@@ -164,14 +193,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
193
  requirements:
165
194
  - - ">="
166
195
  - !ruby/object:Gem::Version
167
- version: '0'
196
+ version: '2.7'
168
197
  required_rubygems_version: !ruby/object:Gem::Requirement
169
198
  requirements:
170
199
  - - ">="
171
200
  - !ruby/object:Gem::Version
172
201
  version: '0'
173
202
  requirements: []
174
- rubygems_version: 3.1.2
203
+ rubygems_version: 3.5.11
175
204
  signing_key:
176
205
  specification_version: 4
177
206
  summary: RModBus - free implementation of protocol ModBus
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
-
3
- begin
4
- require 'bundler/setup'
5
- rescue LoadError
6
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
- end
8
-
9
- Bundler::GemHelper.install_tasks
@@ -1,84 +0,0 @@
1
- =begin
2
- It's very simple example of implementation XPCA gateway (see http://www.xpca.org)
3
- for communication with TCP ModBus devices
4
- It receives REST requests (e.g http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17 )
5
- and returns data in JSON format addr : data:
6
- {"coils": {
7
- "6":{
8
- "value":0,
9
- "timestamp":"2011-07-12 18:11:03 +0000",
10
- "quality":"good"
11
- },
12
- "7":{
13
- "value":0,
14
- "timestamp":"2011-07-12 18:11:03 +0000",
15
- "quality":"good"
16
- }
17
- ...
18
- }
19
-
20
- This code requies gems: rmodbus, sinatra and json
21
- 2011 (c) Aleksey Timin
22
- =end
23
-
24
- require 'rubygems'
25
- require 'rmodbus'
26
- require 'sinatra'
27
- require 'json'
28
-
29
- # Launche TCP ModBus server for test
30
- IP = '127.0.0.1'
31
- PORT = 8502
32
-
33
- @srv = ModBus::TCPServer.new(PORT,1)
34
-
35
- @srv.holding_registers = Array.new(100) { |i| i = i + 1 }
36
- @srv.input_registers = Array.new(100) { |i| i = i + 1 }
37
- @srv.coils = Array.new(100) { |i| i = 0 }
38
- @srv.discrete_inputs = Array.new(100) { |i| i = 0 }
39
-
40
- @srv.start
41
-
42
-
43
- # Calc a GET request
44
- # @example
45
- # http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17
46
- #
47
- # HTTP route: GET http://localhost/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr
48
- #
49
- # :ip - ip addr of ModBus TCP Server
50
- # :port - port of ModBUs TCP Server
51
- # :slave - id of slave device
52
- # :dataplace - valid values: coils, discrete_inputs, input_registers, holding_registers
53
- # :firstaddr - first addr of registers(contacts)
54
- # :lastaddr - last addr of registers(contacts)
55
- get '/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr' do
56
- resp = {}
57
- begin
58
- data = []
59
- ModBus::TCPClient.new(params[:ip].to_s, params[:port].to_i) do |cl|
60
- cl.with_slave(params[:slave].to_i) do |slave|
61
- slave.debug = true
62
- dataplace = slave.send params[:dataplace]
63
- data = dataplace[params[:firstaddr].to_i .. params[:lastaddr].to_i]
64
- end
65
- end
66
-
67
- resp = { params[:dataplace] => {}}
68
- data.each_with_index do |v,i|
69
- resp[params[:dataplace]][params[:firstaddr].to_i + i] = {
70
- :value => v,
71
- :timestamp => Time.now.utc.strftime("%Y-%m-%d %H:%M:%S %z"),
72
- :quality => "good"
73
- }
74
- end
75
- rescue Exception => e
76
- resp = { :error => {
77
- :type => e.class,
78
- :message => e.message }
79
- }
80
- end
81
-
82
- content_type "application/json"
83
- resp.to_json
84
- end
data/spec/client_spec.rb DELETED
@@ -1,88 +0,0 @@
1
- # -*- coding: ascii
2
- require 'rmodbus'
3
-
4
- describe ModBus::Client do
5
- before do
6
- @cl = ModBus::Client.new
7
- end
8
-
9
- it "should give object provider for slave" do
10
- slave = @cl.with_slave(1)
11
- slave.uid.should eq(1)
12
- end
13
-
14
- it "should give object provider for slave in block" do
15
- @cl.with_slave(1) do |slave|
16
- slave.uid.should eq(1)
17
- end
18
- end
19
-
20
- it "should connect with TCP server" do
21
- ModBus::Client.connect do |cl|
22
- cl.should be_instance_of(ModBus::Client)
23
- end
24
- end
25
-
26
- it ":new alias :connect" do
27
- ModBus::Client.new do |cl|
28
- cl.should be_instance_of(ModBus::Client)
29
- end
30
- end
31
-
32
- it "should close the connection when an exception is raised in the given block" do
33
- expect {
34
- ModBus::Client.new do |client|
35
- client.should_receive(:close)
36
- raise
37
- end
38
- }.to raise_error
39
- end
40
-
41
- it 'should common for all slaves :debug flag' do
42
- @cl.logger = true
43
- @cl.with_slave(1) do |slave_1|
44
- slave_1.logger.should eq true
45
- end
46
- @cl.with_slave(2) do |slave_2|
47
- slave_2.logger = false
48
- slave_2.logger.should eq false
49
- end
50
- end
51
-
52
- it 'should common for all slaves :raise_exception_on_mismatch flag' do
53
- @cl.raise_exception_on_mismatch = true
54
- @cl.with_slave(1) do |slave_1|
55
- slave_1.raise_exception_on_mismatch.should be_truthy
56
- end
57
-
58
- @cl.with_slave(2) do |slave_2|
59
- slave_2.raise_exception_on_mismatch = false
60
- slave_2.raise_exception_on_mismatch.should be_falsey
61
- end
62
- end
63
-
64
- it 'should common for all slaves :read_retries options' do
65
- @cl.read_retries = 5
66
- @cl.with_slave(1) do |slave_1|
67
- slave_1.read_retries.should eql(5)
68
- end
69
-
70
- @cl.with_slave(2) do |slave_2|
71
- slave_2.read_retries = 15
72
- slave_2.read_retries.should eql(15)
73
- end
74
- end
75
-
76
- it 'should common for all slaves :read_retry_timeout options' do
77
- @cl.read_retry_timeout = 5
78
- @cl.with_slave(1) do |slave_1|
79
- slave_1.read_retry_timeout.should eql(5)
80
- end
81
-
82
- @cl.with_slave(2) do |slave_2|
83
- slave_2.read_retry_timeout = 15
84
- slave_2.read_retry_timeout.should eql(15)
85
- end
86
- end
87
-
88
- end