codin_rep 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -236,7 +236,7 @@
236
236
  </tbody>
237
237
  </table>
238
238
 
239
- <p>Generated on 2017-01-19 17:18:28 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
239
+ <p>Generated on 2017-01-25 17:10:31 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
240
240
 
241
241
  </body>
242
242
  </html>
@@ -206,7 +206,7 @@
206
206
  </tbody>
207
207
  </table>
208
208
 
209
- <p>Generated on 2017-01-19 17:18:28 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
209
+ <p>Generated on 2017-01-25 17:10:31 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
210
210
 
211
211
  </body>
212
212
  </html>
@@ -114,7 +114,7 @@
114
114
  <td><pre><a name="line22">22</a> module CodinRep</pre></td>
115
115
  </tr>
116
116
  <tr class="marked">
117
- <td><pre><a name="line23">23</a> VERSION = &quot;0.1.0&quot;.freeze</pre></td>
117
+ <td><pre><a name="line23">23</a> VERSION = &quot;0.2.0&quot;.freeze</pre></td>
118
118
  </tr>
119
119
  <tr class="inferred">
120
120
  <td><pre><a name="line24">24</a> end</pre></td>
@@ -122,7 +122,7 @@
122
122
  </tbody>
123
123
  </table>
124
124
 
125
- <p>Generated on 2017-01-19 17:18:28 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
125
+ <p>Generated on 2017-01-25 17:10:31 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
126
126
 
127
127
  </body>
128
128
  </html>
@@ -311,7 +311,7 @@
311
311
  </tbody>
312
312
  </table>
313
313
 
314
- <p>Generated on 2017-01-19 17:18:28 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
314
+ <p>Generated on 2017-01-25 17:10:31 -0200 with <a href="https://github.com/fguillen/simplecov-rcov">SimpleCov-RCov 0.2.3</a></p>
315
315
 
316
316
  </body>
317
317
  </html>
data/test/test_helper.rb CHANGED
@@ -22,4 +22,4 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
22
22
 
23
23
  require 'rubygems'
24
24
  require "minitest/autorun"
25
- require 'mock_time_clock'
25
+ require 'codin_rep/mock_time_clock'
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class AddEmployeeTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class DelEmployeeTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class GetEmployerTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class GetRecordsTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class GetSerialNumberTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class GetTimeTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
@@ -22,7 +22,7 @@ require File.dirname(__FILE__) + '/../test_helper'
22
22
 
23
23
  class SetTimeTest < Minitest::Test
24
24
  def setup
25
- @mock_time_clock = MockTimeClock.new
25
+ @mock_time_clock = CodinRep::MockTimeClock.new
26
26
  @mock_time_clock.start
27
27
  end
28
28
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codin_rep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - O.S. Systems Softwares Ltda.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-19 00:00:00.000000000 Z
11
+ date: 2017-01-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Use this gem to manage several features of the Telebyte eletronic timeclocks,
14
14
  like report creation, user management, configuration etc.
@@ -26,6 +26,7 @@ files:
26
26
  - lib/codin_rep/get_afd_header.rb
27
27
  - lib/codin_rep/get_records.rb
28
28
  - lib/codin_rep/get_time.rb
29
+ - lib/codin_rep/mock_time_clock.rb
29
30
  - lib/codin_rep/set_time.rb
30
31
  - lib/codin_rep/time_util.rb
31
32
  - lib/codin_rep/version.rb
@@ -69,12 +70,12 @@ files:
69
70
  - test/coverage/rcov/lib-codin_rep-get_identification_rb.html
70
71
  - test/coverage/rcov/lib-codin_rep-get_records_rb.html
71
72
  - test/coverage/rcov/lib-codin_rep-get_time_rb.html
73
+ - test/coverage/rcov/lib-codin_rep-mock_time_clock_rb.html
72
74
  - test/coverage/rcov/lib-codin_rep-set_employee_rb.html
73
75
  - test/coverage/rcov/lib-codin_rep-set_time_rb.html
74
76
  - test/coverage/rcov/lib-codin_rep-time_util_rb.html
75
77
  - test/coverage/rcov/lib-codin_rep-version_rb.html
76
78
  - test/coverage/rcov/lib-codin_rep_rb.html
77
- - test/mock_time_clock.rb
78
79
  - test/reports/TEST-GetTimeTest.xml
79
80
  - test/test_helper.rb
80
81
  - test/unit/add_employee_test.rb
@@ -134,6 +135,7 @@ test_files:
134
135
  - test/coverage/assets/0.10.0/colorbox/loading.gif
135
136
  - test/coverage/assets/0.10.0/loading.gif
136
137
  - test/coverage/assets/0.10.0/favicon_red.png
138
+ - test/coverage/rcov/lib-codin_rep-mock_time_clock_rb.html
137
139
  - test/coverage/rcov/lib-codin_rep-communication_rb.html
138
140
  - test/coverage/rcov/index.html
139
141
  - test/coverage/rcov/lib-codin_rep_rb.html
@@ -155,7 +157,6 @@ test_files:
155
157
  - test/coverage/rcov/lib-codin_rep-get_identification_rb.html
156
158
  - test/coverage/rcov/lib-codin_rep-del_employee_rb.html
157
159
  - test/test_helper.rb
158
- - test/mock_time_clock.rb
159
160
  - test/unit/add_employee_test.rb
160
161
  - test/unit/get_employer_test.rb
161
162
  - test/unit/set_time_test.rb
@@ -1,184 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # codin_rep - Gem para acesso de REPs da Telebyte
3
- # Copyright (C) 2016 O.S. Systems Softwares Ltda.
4
-
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU Affero General Public License as
7
- # published by the Free Software Foundation, either version 3 of the
8
- # License, or (at your option) any later version.
9
-
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU Affero General Public License for more details.
14
-
15
- # You should have received a copy of the GNU Affero General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
-
18
- # Rua Clóvis Gularte Candiota 132, Pelotas-RS, Brasil.
19
- # e-mail: contato@ossystems.com.br
20
-
21
- require 'codin_rep'
22
- require 'codin_rep/time_util'
23
- require 'socket'
24
-
25
- class MockTimeClock
26
- include CodinRep
27
-
28
- attr_reader :data, :ip
29
-
30
- def initialize
31
- @data = OpenStruct.new
32
- @ip = '127.0.0.1'
33
- @server = TCPServer.new(@ip, 0)
34
- @running = false
35
- @served_connections = 0
36
- @threads = []
37
- @threadsMutex = Mutex.new
38
- @served_connections = 0
39
- @time = true
40
- @is_sending_records = false
41
- end
42
-
43
- def tcp_port
44
- @server.addr[1]
45
- end
46
-
47
- def serve(socket)
48
- Thread.new do
49
- Thread.current.abort_on_exception = true
50
- @threadsMutex.synchronize {
51
- @threads << Thread.current
52
- @served_connections += 1
53
- }
54
- begin
55
- raw_command = []
56
- @keep_connected = true
57
- @first_connection = true
58
- # Read command type
59
- while @keep_connected && raw_command = read_from_socket_with_timeout(socket, 9)
60
- response = process_command(raw_command, socket)
61
- socket.write response
62
- @first_connection = false
63
- end
64
- ensure
65
- socket.close unless socket.closed?
66
- @threadsMutex.synchronize {
67
- @threads.delete(Thread.current)
68
- }
69
- end
70
- end
71
- end
72
-
73
- def start
74
- @server_thread = Thread.new do
75
- Thread.current.abort_on_exception = true
76
- @running = true
77
- while @running
78
- break if @server.closed?
79
- socket = @server.accept
80
- serve(socket)
81
- end
82
- end
83
- self
84
- end
85
-
86
- def stop
87
- @threadsMutex.synchronize {
88
- @threads.each{|thread| thread.kill}
89
- @threads = []
90
- }
91
- @server_thread.kill if @server_thread
92
- @server.close unless @server.closed?
93
- @server_thread.join
94
- @running = false
95
- true
96
- end
97
-
98
- def running?
99
- @running
100
- end
101
-
102
- private
103
- def process_command(raw_command, socket)
104
- case raw_command
105
- when "PGREP009b" # Get time
106
- response = 'REP008b' + get_timeclock_time
107
- when "PGREP016A" # Set time
108
- payload = read_from_socket_with_timeout(socket, 7)
109
- response = 'REP008A' + payload
110
- set_timeclock_time(payload)
111
- when "PGREP009Z"
112
- response = 'REP2359' + @data.afd.header.export + "\r\n"
113
- @keep_connected = false
114
- when "PGREP0289"
115
- @afd_read_start_id = read_from_socket_with_timeout(socket, 9).to_i
116
- @afd_read_end_id = read_from_socket_with_timeout(socket, 9).to_i
117
- @afd_read_current_id = nil
118
- @afd_read_finished = false
119
- response = "REP0029["
120
- when "PGREP009,"
121
- if @afd_read_finished
122
- response = "REP0029]"
123
- @keep_connected = false
124
- else
125
- if @afd_read_current_id.nil?
126
- @afd_read_current_id = @afd_read_start_id
127
- response = 'REP3029'
128
- elsif @afd_read_current_id == @afd_read_end_id or @afd_read_current_id >= @data.afd.records.size
129
- response = 'REP0909'
130
- @afd_read_finished = true
131
- else
132
- response = 'REP0379'
133
- end
134
- afd_records = ([@data.afd.header] + @data.afd.records)
135
- response += afd_records[@afd_read_current_id].export + "\r\n"
136
- end
137
- @afd_read_current_id += 1
138
- when "PGREP075h"
139
- payload = read_from_socket_with_timeout(socket, 66)
140
- raw_registration, raw_pis, raw_name = payload.scan(/.(.{6})(.{6})(.+)/).flatten
141
- registration = convert_bytes_to_string(raw_registration)
142
- pis = convert_bytes_to_string(raw_pis)
143
- name = raw_name.strip
144
- @data.employees << {name: name, pis: pis, registration: registration}
145
- response = "REP003h1\0"
146
- when "PGREP016j"
147
- payload = read_from_socket_with_timeout(socket, 7)
148
- raw_registration = payload.scan(/.(.{6})/).flatten[0]
149
- registration = convert_bytes_to_string(raw_registration)
150
- @data.employees.delete_if{|employee| employee[:registration] == registration}
151
- response = "REP003j1\0"
152
- when 'PGREP010h', 'PGREP010j'
153
- # Don't care for the result of these comands, just disconnect when
154
- # possible.
155
- @keep_connected = false
156
- response = ""
157
- else
158
- raise StandardError.new("Unknown command \"#{raw_command}\"!")
159
- end
160
- response
161
- end
162
-
163
- def read_from_socket_with_timeout(socket, bytes_to_be_read, timeout_value=5)
164
- data_to_receive = nil
165
- timeout_value = 600 if @first_connection # use a large timeout on first connection
166
- timeout(timeout_value) { data_to_receive = socket.readpartial( bytes_to_be_read ) }
167
- return data_to_receive
168
- end
169
-
170
- def get_timeclock_time(current_time=nil)
171
- current_time ||= @data.time
172
- CodinRep::TimeUtil.pack current_time
173
- end
174
-
175
- def set_timeclock_time(payload)
176
- time = CodinRep::TimeUtil.unpack payload
177
- @data.time = time
178
- return time
179
- end
180
-
181
- def convert_bytes_to_string(bytes)
182
- bytes.unpack('H*')[0]
183
- end
184
- end