rmodbus-ccutrer 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '06318cd10a9aca4e65b4c15d4f153ef13d976054429f8343ac3b5cc1304063bc'
4
- data.tar.gz: 16fb3bfccd80ac8dd02b5c5dda1ab0aeafa9d06b59b8cf53e5938de5f07fcf34
3
+ metadata.gz: d3f1eb7faa783c285b4152b693b9f2ea3b9639917e589714b4bea416e483998e
4
+ data.tar.gz: 0e9005770dab3ca0336583e59a9c1c7d098b11267199a83e1d65339b7bd68a6c
5
5
  SHA512:
6
- metadata.gz: af77c4b113a51dc669c6d1127d1613ea3b21ac6b93efee52f02f7cdf4f898e9b7bd5ad0f39a7372f7f4a9a7064de522469ec73f1af94ac27cb7df2d27b6021d6
7
- data.tar.gz: 5586969c9caf0269c8408f4a9c79faa089fe29fbb204523238f2541d36ce84d5606596e6086f4b983d1d8eaaf45d0bbcbce75a95a305039345aff00ae66b89f2
6
+ metadata.gz: 8ee2ba1774e37c5e111fc0242056a5c8fb3cb3cec0b7243782e54f06e7c9d0d4e595bc51b7c1e9dea13f7d93b52ce83a2d23eec252f22c7e24e57df34e166fb7
7
+ data.tar.gz: 5c4732bd7e8edbd18e8cffb942911d5c7cf161beb8c0935fbb2ed521505adfe607fe46dc6f80e8ea74cb6c1a5f36641f52364f43eb51c06cf90a77df50f1683e
data/Rakefile CHANGED
@@ -1,29 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
5
3
  begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
11
7
  end
12
8
 
13
- require 'rake'
14
- require 'rspec/core'
15
- require 'rspec/core/rake_task'
16
- RSpec::Core::RakeTask.new(:spec) do |spec|
17
- spec.pattern = FileList['spec/**/*_spec.rb']
18
- begin
19
- require 'serialport'
20
- rescue LoadError => e
21
- spec.pattern.exclude("spec/rtu_client_spec.rb", "spec/rtu_server_spec.rb")
22
- end
23
- end
24
-
25
- task :default => :spec
26
-
27
- task :pry do
28
- sh "bundle exec pry -r ./lib/rmodbus.rb"
29
- end
9
+ Bundler::GemHelper.install_tasks
@@ -17,7 +17,7 @@ module ModBus
17
17
  # @return [Client] client object
18
18
  def initialize(*args, &block)
19
19
  # Defaults
20
- @debug = false
20
+ @logger = nil
21
21
  @raise_exception_on_mismatch = false
22
22
  @read_retry_timeout = 1
23
23
  @read_retries = 1
@@ -49,7 +49,7 @@ module ModBus
49
49
  # @return [Slave] slave object
50
50
  def with_slave(uid, &block)
51
51
  slave = get_slave(uid, @io)
52
- slave.debug = debug
52
+ slave.logger = logger
53
53
  slave.raise_exception_on_mismatch = raise_exception_on_mismatch
54
54
  slave.read_retries = read_retries
55
55
  slave.read_retry_timeout = read_retry_timeout
data/lib/rmodbus/debug.rb CHANGED
@@ -2,15 +2,16 @@ require 'time'
2
2
 
3
3
  module ModBus
4
4
  module Debug
5
- attr_accessor :debug, :raise_exception_on_mismatch,
6
- :read_retries, :read_retry_timeout
5
+ attr_accessor :raise_exception_on_mismatch,
6
+ :read_retries, :read_retry_timeout,
7
+ :logger
7
8
 
8
9
 
9
10
  private
10
11
  # Put log message on standard output
11
12
  # @param [String] msg message for log
12
13
  def log(msg)
13
- $stdout.puts "#{Time.now.utc.iso8601(2)} #{msg}" if @debug
14
+ logger&.debug(msg)
14
15
  end
15
16
 
16
17
  # Convert string of byte to string for log
data/lib/rmodbus/rtu.rb CHANGED
@@ -8,8 +8,7 @@ module ModBus
8
8
  # We have to read specific amounts of numbers of bytes from the network depending on the function code and content
9
9
  def read_rtu_response(io)
10
10
  # Read the slave_id and function code
11
- msg = read(io, 2)
12
- log logging_bytes(msg)
11
+ msg = read(io, 2)
13
12
 
14
13
  function_code = msg.getbyte(1)
15
14
  case function_code
@@ -7,7 +7,7 @@ module ModBus
7
7
  # slave.discrete_inputs = [1,1,0,0]
8
8
  # slave.holding_registers = [1,2,3,4]
9
9
  # slave.input_registers = [1,2,3,4]
10
- # srv.debug = true
10
+ # srv.logger = Logger.new($stdout)
11
11
  # srv.start
12
12
  class RTUServer
13
13
  include Debug
@@ -13,7 +13,7 @@ module ModBus
13
13
  # slave.discrete_inputs = [1,1,0,0]
14
14
  # slave.holding_registers = [1,2,3,4]
15
15
  # slave.input_registers = [1,2,3,4]
16
- # srv.debug = true
16
+ # srv.logger = Logger.new($stdout)
17
17
  # srv.start
18
18
  class RTUViaTCPServer < GServer
19
19
  include Debug
data/lib/rmodbus/sp.rb CHANGED
@@ -1,36 +1,31 @@
1
1
  begin
2
- require 'serialport'
2
+ require 'ccutrer-serialport'
3
3
  rescue Exception => e
4
- warn "[WARNING] Install `serialport` gem for use RTU protocols"
4
+ warn "[WARNING] Install `ccutrer-serialport` gem for use RTU protocols"
5
5
  end
6
6
 
7
7
  module ModBus
8
8
  module SP
9
9
  attr_reader :port, :baud, :data_bits, :stop_bits, :parity, :read_timeout
10
10
  # Open serial port
11
- # @param [String] port name serial ports ("/dev/ttyS0" POSIX, "com1" - Windows)
11
+ # @param [String] port name serial ports ("/dev/ttyS0")
12
12
  # @param [Integer] baud rate serial port (default 9600)
13
13
  # @param [Hash] opts the options of serial port
14
14
  #
15
15
  # @option opts [Integer] :data_bits from 5 to 8
16
16
  # @option opts [Integer] :stop_bits 1 or 2
17
- # @option opts [Integer] :parity NONE, EVEN or ODD
18
- # @option opts [Integer] :read_timeout default 100 ms
17
+ # @option opts [Integer] :parity :none, :even or :odd
19
18
  # @return [SerialPort] io serial port
20
19
  def open_serial_port(port, baud, opts = {})
21
20
  @port, @baud = port, baud
22
21
 
23
- @data_bits, @stop_bits, @parity, @read_timeout = 8, 1, SerialPort::NONE, 100
22
+ @data_bits, @stop_bits, @parity = 8, 1, :none
24
23
 
25
24
  @data_bits = opts[:data_bits] unless opts[:data_bits].nil?
26
25
  @stop_bits = opts[:stop_bits] unless opts[:stop_bits].nil?
27
26
  @parity = opts[:parity] unless opts[:parity].nil?
28
- @read_timeout = opts[:read_timeout] unless opts[:read_timeout].nil?
29
27
 
30
- io = SerialPort.new(@port, @baud, @data_bits, @stop_bits, @parity)
31
- io.flow_control = SerialPort::NONE
32
- io.read_timeout = @read_timeout
33
- io
28
+ CCutrer::SerialPort.new(@port, baud: @baud, data_bits: @data_bits, stop_bits: @stop_bits, parity: @parity)
34
29
  end
35
30
  end
36
31
  end
@@ -13,7 +13,7 @@ module ModBus
13
13
  # slave.discrete_inputs = [1,1,0,0]
14
14
  # slave.holding_registers = [1,2,3,4]
15
15
  # slave.input_registers = [1,2,3,4]
16
- # srv.debug = true
16
+ # srv.logger = Logger.new($stdout)
17
17
  # srv.start
18
18
  class TCPServer < GServer
19
19
  include Debug
@@ -1,3 +1,3 @@
1
1
  module ModBus
2
- VERSION = '2.0.0'
2
+ VERSION = '2.1.0'
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -39,13 +39,13 @@ describe ModBus::Client do
39
39
  end
40
40
 
41
41
  it 'should common for all slaves :debug flag' do
42
- @cl.debug = true
42
+ @cl.logger = true
43
43
  @cl.with_slave(1) do |slave_1|
44
- slave_1.debug.should be_truthy
44
+ slave_1.logger.should eq true
45
45
  end
46
46
  @cl.with_slave(2) do |slave_2|
47
- slave_2.debug = false
48
- slave_2.debug.should be_falsey
47
+ slave_2.logger = false
48
+ slave_2.logger.should eq false
49
49
  end
50
50
  end
51
51
 
data/spec/logging_spec.rb CHANGED
@@ -11,19 +11,19 @@ describe ModBus::TCPClient do
11
11
  @sock.stub(:read).with(0).and_return('')
12
12
 
13
13
  @slave = ModBus::TCPClient.new('127.0.0.1', 1502).with_slave(@uid)
14
- @slave.debug = true
14
+ @slave.logger = double("logger")
15
15
  end
16
16
 
17
17
  it 'should log rec\send bytes' do
18
18
  request, response = "\x3\x0\x6b\x0\x3", "\x3\x6\x2\x2b\x0\x0\x0\x64"
19
19
  mock_query(request,response)
20
- $stdout.should_receive(:puts).with("Tx (12 bytes): [00][01][00][00][00][06][01][03][00][6b][00][03]")
21
- $stdout.should_receive(:puts).with("Rx (15 bytes): [00][01][00][00][00][09][01][03][06][02][2b][00][00][00][64]")
20
+ @slave.logger.should_receive(:debug).with("Tx (12 bytes): [00][01][00][00][00][06][01][03][00][6b][00][03]")
21
+ @slave.logger.should_receive(:debug).with("Rx (15 bytes): [00][01][00][00][00][09][01][03][06][02][2b][00][00][00][64]")
22
22
  @slave.query(request)
23
23
  end
24
24
 
25
25
  it "should don't logging if debug disable" do
26
- @slave.debug = false
26
+ @slave.logger = nil
27
27
  request, response = "\x3\x0\x6b\x0\x3", "\x3\x6\x2\x2b\x0\x0\x0\x64"
28
28
  mock_query(request,response)
29
29
  @slave.query(request)
@@ -35,10 +35,10 @@ describe ModBus::TCPClient do
35
35
  @sock.should_receive(:read).with(7).and_return("\000\002\000\000\000\001" + @uid.chr)
36
36
  @sock.should_receive(:read).with(7).and_return("\000\001\000\000\000\001" + @uid.chr)
37
37
 
38
- $stdout.should_receive(:puts).with("Tx (7 bytes): [00][01][00][00][00][01][01]")
39
- $stdout.should_receive(:puts).with("Rx (7 bytes): [00][02][00][00][00][01][01]")
40
- $stdout.should_receive(:puts).with("Transaction number mismatch. A packet is ignored.")
41
- $stdout.should_receive(:puts).with("Rx (7 bytes): [00][01][00][00][00][01][01]")
38
+ @slave.logger.should_receive(:debug).with("Tx (7 bytes): [00][01][00][00][00][01][01]")
39
+ @slave.logger.should_receive(:debug).with("Rx (7 bytes): [00][02][00][00][00][01][01]")
40
+ @slave.logger.should_receive(:debug).with("Transaction number mismatch. A packet is ignored.")
41
+ @slave.logger.should_receive(:debug).with("Rx (7 bytes): [00][01][00][00][00][01][01]")
42
42
 
43
43
  @slave.query('')
44
44
  end
@@ -52,35 +52,28 @@ describe ModBus::TCPClient do
52
52
  end
53
53
 
54
54
  begin
55
- require "serialport"
55
+ require "ccutrer-serialport"
56
56
  describe ModBus::RTUClient do
57
57
  before do
58
58
  @sp = double('Serial port')
59
+ allow(@sp).to receive(:flush)
59
60
 
60
- SerialPort.should_receive(:new).with("/dev/port1", 9600, 7, 2, SerialPort::ODD).and_return(@sp)
61
- SerialPort.stub(:public_method_defined?).with(:flush_input).and_return(true)
61
+ CCutrer::SerialPort.should_receive(:new).with("/dev/port1", baud: 9600, data_bits: 7, stop_bits: 2, parity: :odd).and_return(@sp)
62
62
 
63
- @sp.stub(:class).and_return(SerialPort)
64
- @sp.should_receive(:flow_control=).with(SerialPort::NONE)
65
- @sp.stub(:read_timeout=)
66
- @sp.stub(:flush_input)
67
-
68
- @slave = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 7, :stop_bits => 2, :parity => SerialPort::ODD).with_slave(1)
63
+ @slave = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 7, :stop_bits => 2, :parity => :odd).with_slave(1)
69
64
  @slave.read_retries = 0
70
-
71
65
  end
72
66
 
73
67
  it 'should log rec\send bytes' do
74
68
  request = "\x3\x0\x1\x0\x1"
75
69
  @sp.should_receive(:write).with("\1#{request}\xd5\xca")
76
- @sp.should_receive(:flush_input) # Clean a garbage
77
70
  @sp.should_receive(:read).with(2).and_return("\x1\x3")
78
71
  @sp.should_receive(:read).with(1).and_return("\x2")
79
72
  @sp.should_receive(:read).with(4).and_return("\xff\xff\xb9\xf4")
80
73
 
81
- @slave.debug = true
82
- $stdout.should_receive(:puts).with("Tx (8 bytes): [01][03][00][01][00][01][d5][ca]")
83
- $stdout.should_receive(:puts).with("Rx (7 bytes): [01][03][02][ff][ff][b9][f4]")
74
+ @slave.logger = double("logger")
75
+ @slave.logger.should_receive(:debug).with("Tx (8 bytes): [01][03][00][01][00][01][d5][ca]")
76
+ @slave.logger.should_receive(:debug).with("Rx (7 bytes): [01][03][02][ff][ff][b9][f4]")
84
77
 
85
78
  @slave.query(request).should == "\xff\xff"
86
79
  end
data/spec/proxy_spec.rb CHANGED
@@ -12,7 +12,7 @@ describe Array do
12
12
 
13
13
  # Handle all of the coil methods
14
14
  it "should call read_coil" do
15
- @slave.should_receive(:read_coil).with(0, 1)
15
+ @slave.should_receive(:read_coil).with(0)
16
16
  @coil_proxy[0]
17
17
  end
18
18
  it "should call read_coils" do
@@ -31,7 +31,7 @@ describe Array do
31
31
 
32
32
  # Discrete input tests
33
33
  it "should call read_discrete_input" do
34
- @slave.should_receive(:read_discrete_input).with(0, 1)
34
+ @slave.should_receive(:read_discrete_input).with(0)
35
35
  @discrete_input_proxy[0]
36
36
  end
37
37
 
@@ -43,7 +43,7 @@ describe Array do
43
43
 
44
44
  # Holding Register Tess
45
45
  it "should call read_holding_register" do
46
- @slave.should_receive(:read_holding_register).with(0, 1)
46
+ @slave.should_receive(:read_holding_register).with(0)
47
47
  @holding_register_proxy[0]
48
48
  end
49
49
  it "should call read_holding_registers" do
@@ -62,7 +62,7 @@ describe Array do
62
62
 
63
63
  # Input Register Tests
64
64
  it "should call read_discrete_input" do
65
- @slave.should_receive(:read_input_register).with(0, 1)
65
+ @slave.should_receive(:read_input_register).with(0)
66
66
  @input_register_proxy[0]
67
67
  end
68
68
 
@@ -4,16 +4,11 @@ require 'rmodbus'
4
4
  describe ModBus::RTUClient do
5
5
  before do
6
6
  @sp = double('Serial port')
7
+ allow(@sp).to receive(:flush)
7
8
 
8
- SerialPort.should_receive(:new).with("/dev/port1", 9600, 8, 1, 0).and_return(@sp)
9
- SerialPort.stub(:public_method_defined?).with(:flush_input).and_return(true)
9
+ CCutrer::SerialPort.should_receive(:new).with("/dev/port1", baud: 9600, data_bits: 8, stop_bits: 1, parity: :none).and_return(@sp)
10
10
 
11
- @sp.stub(:read_timeout=)
12
- @sp.stub(:class).and_return(SerialPort)
13
- @sp.should_receive(:flow_control=).with(SerialPort::NONE)
14
- @sp.stub(:flush_input)
15
-
16
- @cl = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 8, :stop_bits => 1, :parity => SerialPort::NONE)
11
+ @cl = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 8, :stop_bits => 1, :parity => :none)
17
12
  @slave = @cl.with_slave(1)
18
13
  @slave.read_retries = 1
19
14
  end
@@ -41,16 +36,15 @@ describe ModBus::RTUClient do
41
36
 
42
37
  it 'should sugar connect method' do
43
38
  port, baud = "/dev/port1", 4800
44
- SerialPort.should_receive(:new).with(port, baud, 8, 1, SerialPort::NONE).and_return(@sp)
39
+ CCutrer::SerialPort.should_receive(:new).with(port, baud: baud, data_bits: 8, stop_bits: 1, parity: :none).and_return(@sp)
45
40
  @sp.should_receive(:closed?).and_return(false)
46
41
  @sp.should_receive(:close)
47
- @sp.should_receive(:flow_control=).with(SerialPort::NONE)
48
42
  ModBus::RTUClient.connect(port, baud) do |cl|
49
43
  cl.port.should == port
50
44
  cl.baud.should == baud
51
45
  cl.data_bits.should == 8
52
46
  cl.stop_bits.should == 1
53
- cl.parity.should == SerialPort::NONE
47
+ cl.parity.should == :none
54
48
  end
55
49
  end
56
50
 
@@ -4,9 +4,7 @@ require 'rmodbus'
4
4
  describe ModBus::RTUServer do
5
5
  before do
6
6
  @sp = double('SerialPort')
7
- SerialPort.should_receive(:new).with('/dev/ttyS0', 4800, 7, 2, SerialPort::NONE).and_return(@sp)
8
- @sp.stub(:read_timeout=)
9
- @sp.should_receive(:flow_control=).with(SerialPort::NONE)
7
+ CCutrer::SerialPort.should_receive(:new).with('/dev/ttyS0', baud: 4800, data_bits: 7, stop_bits: 2, parity: :none).and_return(@sp)
10
8
 
11
9
  @server = ModBus::RTUServer.new('/dev/ttyS0', 4800, :data_bits => 7, :stop_bits => 2)
12
10
  @slave = @server.with_slave(1)
@@ -26,6 +24,6 @@ describe ModBus::RTUServer do
26
24
  @server.baud.should == 4800
27
25
  @server.data_bits.should == 7
28
26
  @server.stop_bits.should == 2
29
- @server.parity.should == SerialPort::NONE
27
+ @server.parity.should == :none
30
28
  end
31
29
  end
@@ -24,10 +24,6 @@ describe ModBus::RTUViaTCPServer do
24
24
  @io = @cl.instance_variable_get(:@io)
25
25
  end
26
26
 
27
- before do
28
- @server.debug = false
29
- end
30
-
31
27
  it "should have options :host" do
32
28
  host = '192.168.0.1'
33
29
  srv = ModBus::RTUViaTCPServer.new(1010, :host => '192.168.0.1')
@@ -43,7 +39,6 @@ describe ModBus::RTUViaTCPServer do
43
39
  it "should properly ignore responses from other slaves" do
44
40
  request = "\x10\x03\x0\x1\x0\x1\xd6\x8b"
45
41
  response = "\x10\x83\x1\xd0\xf5"
46
- @server.debug = true
47
42
  @server.should receive(:log).ordered.with("Server RX (8 bytes): [10][03][00][01][00][01][d6][8b]")
48
43
  @server.should receive(:log).ordered.with("Server RX function 3 to 16: {:quant=>1, :addr=>1}")
49
44
  @server.should receive(:log).ordered.with("Server RX (5 bytes): [10][83][01][d0][f5]")
metadata CHANGED
@@ -1,99 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmodbus-ccutrer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
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-23 00:00:00.000000000 Z
11
+ date: 2021-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 12.3.3
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 12.3.3
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
15
  requirement: !ruby/object:Gem::Requirement
44
16
  requirements:
45
17
  - - "~>"
46
18
  - !ruby/object:Gem::Version
47
- version: '2.99'
19
+ version: '13.0'
48
20
  type: :development
49
21
  prerelease: false
50
22
  version_requirements: !ruby/object:Gem::Requirement
51
23
  requirements:
52
24
  - - "~>"
53
25
  - !ruby/object:Gem::Version
54
- version: '2.99'
26
+ version: '13.0'
55
27
  - !ruby/object:Gem::Dependency
56
- name: guard-rspec
28
+ name: bundler
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - "~>"
60
32
  - !ruby/object:Gem::Version
61
- version: '1.2'
33
+ version: '2.2'
62
34
  type: :development
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
38
  - - "~>"
67
39
  - !ruby/object:Gem::Version
68
- version: '1.2'
40
+ version: '2.2'
69
41
  - !ruby/object:Gem::Dependency
70
- name: pry
42
+ name: rspec
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - "~>"
74
46
  - !ruby/object:Gem::Version
75
- version: '0.10'
47
+ version: '2.99'
76
48
  type: :development
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - "~>"
81
53
  - !ruby/object:Gem::Version
82
- version: '0.10'
54
+ version: '2.99'
83
55
  - !ruby/object:Gem::Dependency
84
- name: serialport
56
+ name: ccutrer-serialport
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - "~>"
88
60
  - !ruby/object:Gem::Version
89
- version: '1.3'
61
+ version: 1.0.0
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - "~>"
95
67
  - !ruby/object:Gem::Version
96
- version: '1.3'
68
+ version: 1.0.0
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: gserver
99
71
  requirement: !ruby/object:Gem::Requirement