codin_rep 0.1.0

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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/lib/codin_rep.rb +86 -0
  3. data/lib/codin_rep/add_employee.rb +47 -0
  4. data/lib/codin_rep/command.rb +113 -0
  5. data/lib/codin_rep/communication.rb +124 -0
  6. data/lib/codin_rep/del_employee.rb +38 -0
  7. data/lib/codin_rep/employee_command.rb +93 -0
  8. data/lib/codin_rep/get_afd_header.rb +53 -0
  9. data/lib/codin_rep/get_records.rb +156 -0
  10. data/lib/codin_rep/get_time.rb +57 -0
  11. data/lib/codin_rep/set_time.rb +61 -0
  12. data/lib/codin_rep/time_util.rb +51 -0
  13. data/lib/codin_rep/version.rb +23 -0
  14. data/test/coverage/assets/0.10.0/application.css +799 -0
  15. data/test/coverage/assets/0.10.0/application.js +1707 -0
  16. data/test/coverage/assets/0.10.0/colorbox/border.png +0 -0
  17. data/test/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  18. data/test/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  19. data/test/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  20. data/test/coverage/assets/0.10.0/favicon_green.png +0 -0
  21. data/test/coverage/assets/0.10.0/favicon_red.png +0 -0
  22. data/test/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  23. data/test/coverage/assets/0.10.0/loading.gif +0 -0
  24. data/test/coverage/assets/0.10.0/magnify.png +0 -0
  25. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  26. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  27. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  28. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  30. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  31. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  32. data/test/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  33. data/test/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  34. data/test/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  35. data/test/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  36. data/test/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  37. data/test/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  38. data/test/coverage/index.html +6162 -0
  39. data/test/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +19 -0
  40. data/test/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +15 -0
  41. data/test/coverage/rcov/assets/0.2.3/print.css +12 -0
  42. data/test/coverage/rcov/assets/0.2.3/rcov.js +42 -0
  43. data/test/coverage/rcov/assets/0.2.3/screen.css +270 -0
  44. data/test/coverage/rcov/index.html +280 -0
  45. data/test/coverage/rcov/lib-codin_rep-add_employee_rb.html +200 -0
  46. data/test/coverage/rcov/lib-codin_rep-command_rb.html +398 -0
  47. data/test/coverage/rcov/lib-codin_rep-communication_rb.html +431 -0
  48. data/test/coverage/rcov/lib-codin_rep-del_employee_rb.html +173 -0
  49. data/test/coverage/rcov/lib-codin_rep-employee_command_rb.html +338 -0
  50. data/test/coverage/rcov/lib-codin_rep-get_afd_header_rb.html +218 -0
  51. data/test/coverage/rcov/lib-codin_rep-get_identification_rb.html +212 -0
  52. data/test/coverage/rcov/lib-codin_rep-get_records_rb.html +527 -0
  53. data/test/coverage/rcov/lib-codin_rep-get_time_rb.html +230 -0
  54. data/test/coverage/rcov/lib-codin_rep-set_employee_rb.html +248 -0
  55. data/test/coverage/rcov/lib-codin_rep-set_time_rb.html +242 -0
  56. data/test/coverage/rcov/lib-codin_rep-time_util_rb.html +212 -0
  57. data/test/coverage/rcov/lib-codin_rep-version_rb.html +128 -0
  58. data/test/coverage/rcov/lib-codin_rep_rb.html +317 -0
  59. data/test/mock_time_clock.rb +184 -0
  60. data/test/reports/TEST-GetTimeTest.xml +5 -0
  61. data/test/test_helper.rb +25 -0
  62. data/test/unit/add_employee_test.rb +43 -0
  63. data/test/unit/del_employee_test.rb +44 -0
  64. data/test/unit/get_employer_test.rb +48 -0
  65. data/test/unit/get_records_test.rb +45 -0
  66. data/test/unit/get_serial_number_test.rb +42 -0
  67. data/test/unit/get_time_test.rb +40 -0
  68. data/test/unit/set_time_test.rb +42 -0
  69. metadata +165 -0
@@ -0,0 +1,128 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>lib/codin_rep/version.rb</title>
5
+ <link href="./assets/0.2.3/screen.css" media="all" rel="stylesheet" type="text/css" />
6
+ <link href="./assets/0.2.3/print.css" media="print" rel="stylesheet" type="text/css" />
7
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
8
+ <script type="text/javascript" src="./assets/0.2.3/rcov.js"></script>
9
+ </head>
10
+ <body>
11
+ <h1>Src C0 Coverage Information - Simploco - RCov</h1>
12
+ <h2>lib/codin_rep/version.rb</h2>
13
+
14
+ <div class="report_table_wrapper">
15
+ <table class='report' id='report_table'>
16
+ <thead>
17
+ <tr>
18
+ <th class="left_align">Name</th>
19
+ <th class="right_align">Total Lines</th>
20
+ <th class="right_align">Lines of Code</th>
21
+ <th class="left_align">Total Coverage</th>
22
+ <th class="left_align">Code Coverage</th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <tr>
27
+ <td class="left_align"><a href="lib-codin_rep-version_rb.html">lib/codin_rep/version.rb</a></td>
28
+ <td class='right_align'><tt>23</tt></td>
29
+ <td class='right_align'><tt>2</tt></td>
30
+ <td class="left_align"><div class="percent_graph_legend"><tt class=''>100.00%</tt></div>
31
+ <div class="percent_graph">
32
+ <div class="covered" style="width:100px"></div>
33
+ <div class="uncovered" style="width:0px"></div>
34
+ </div></td>
35
+ <td class="left_align"><div class="percent_graph_legend"><tt class=''>100.00%</tt></div>
36
+ <div class="percent_graph">
37
+ <div class="covered" style="width:100px"></div>
38
+ <div class="uncovered" style="width:0px"></div>
39
+ </div></td>
40
+ </tr>
41
+ </tbody>
42
+ </table>
43
+ </div>
44
+
45
+ <h3>Key</h3>
46
+
47
+ <div class="key"><pre><span class='marked'>Code reported as executed by Ruby looks like this...</span><span class='marked1'>and this: this line is also marked as covered.</span><span class='inferred'>Lines considered as run by rcov, but not reported by Ruby, look like this,</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).</span><span class='uncovered'>Finally, here's a line marked as not executed.</span></pre></div>
48
+
49
+ <h3>Coverage Details</h3>
50
+
51
+ <table class="details">
52
+ <tbody>
53
+ <tr class="inferred">
54
+ <td><pre><a name="line2">2</a> # -*- coding: utf-8 -*-</pre></td>
55
+ </tr>
56
+ <tr class="inferred">
57
+ <td><pre><a name="line3">3</a> # codin_rep - Gem para acesso de REPs da Telebyte</pre></td>
58
+ </tr>
59
+ <tr class="inferred">
60
+ <td><pre><a name="line4">4</a> # Copyright (C) 2016 O.S. Systems Softwares Ltda.</pre></td>
61
+ </tr>
62
+ <tr class="inferred">
63
+ <td><pre><a name="line5">5</a> </pre></td>
64
+ </tr>
65
+ <tr class="inferred">
66
+ <td><pre><a name="line6">6</a> # This program is free software: you can redistribute it and/or modify</pre></td>
67
+ </tr>
68
+ <tr class="inferred">
69
+ <td><pre><a name="line7">7</a> # it under the terms of the GNU Affero General Public License as</pre></td>
70
+ </tr>
71
+ <tr class="inferred">
72
+ <td><pre><a name="line8">8</a> # published by the Free Software Foundation, either version 3 of the</pre></td>
73
+ </tr>
74
+ <tr class="inferred">
75
+ <td><pre><a name="line9">9</a> # License, or (at your option) any later version.</pre></td>
76
+ </tr>
77
+ <tr class="inferred">
78
+ <td><pre><a name="line10">10</a> </pre></td>
79
+ </tr>
80
+ <tr class="inferred">
81
+ <td><pre><a name="line11">11</a> # This program is distributed in the hope that it will be useful,</pre></td>
82
+ </tr>
83
+ <tr class="inferred">
84
+ <td><pre><a name="line12">12</a> # but WITHOUT ANY WARRANTY; without even the implied warranty of</pre></td>
85
+ </tr>
86
+ <tr class="inferred">
87
+ <td><pre><a name="line13">13</a> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</pre></td>
88
+ </tr>
89
+ <tr class="inferred">
90
+ <td><pre><a name="line14">14</a> # GNU Affero General Public License for more details.</pre></td>
91
+ </tr>
92
+ <tr class="inferred">
93
+ <td><pre><a name="line15">15</a> </pre></td>
94
+ </tr>
95
+ <tr class="inferred">
96
+ <td><pre><a name="line16">16</a> # You should have received a copy of the GNU Affero General Public License</pre></td>
97
+ </tr>
98
+ <tr class="inferred">
99
+ <td><pre><a name="line17">17</a> # along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</pre></td>
100
+ </tr>
101
+ <tr class="inferred">
102
+ <td><pre><a name="line18">18</a> </pre></td>
103
+ </tr>
104
+ <tr class="inferred">
105
+ <td><pre><a name="line19">19</a> # Rua Clóvis Gularte Candiota 132, Pelotas-RS, Brasil.</pre></td>
106
+ </tr>
107
+ <tr class="inferred">
108
+ <td><pre><a name="line20">20</a> # e-mail: contato@ossystems.com.br</pre></td>
109
+ </tr>
110
+ <tr class="inferred">
111
+ <td><pre><a name="line21">21</a> </pre></td>
112
+ </tr>
113
+ <tr class="marked">
114
+ <td><pre><a name="line22">22</a> module CodinRep</pre></td>
115
+ </tr>
116
+ <tr class="marked">
117
+ <td><pre><a name="line23">23</a> VERSION = &quot;0.1.0&quot;.freeze</pre></td>
118
+ </tr>
119
+ <tr class="inferred">
120
+ <td><pre><a name="line24">24</a> end</pre></td>
121
+ </tr>
122
+ </tbody>
123
+ </table>
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>
126
+
127
+ </body>
128
+ </html>
@@ -0,0 +1,317 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title>lib/codin_rep.rb</title>
5
+ <link href="./assets/0.2.3/screen.css" media="all" rel="stylesheet" type="text/css" />
6
+ <link href="./assets/0.2.3/print.css" media="print" rel="stylesheet" type="text/css" />
7
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
8
+ <script type="text/javascript" src="./assets/0.2.3/rcov.js"></script>
9
+ </head>
10
+ <body>
11
+ <h1>Src C0 Coverage Information - Simploco - RCov</h1>
12
+ <h2>lib/codin_rep.rb</h2>
13
+
14
+ <div class="report_table_wrapper">
15
+ <table class='report' id='report_table'>
16
+ <thead>
17
+ <tr>
18
+ <th class="left_align">Name</th>
19
+ <th class="right_align">Total Lines</th>
20
+ <th class="right_align">Lines of Code</th>
21
+ <th class="left_align">Total Coverage</th>
22
+ <th class="left_align">Code Coverage</th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <tr>
27
+ <td class="left_align"><a href="lib-codin_rep_rb.html">lib/codin_rep.rb</a></td>
28
+ <td class='right_align'><tt>86</tt></td>
29
+ <td class='right_align'><tt>86</tt></td>
30
+ <td class="left_align"><div class="percent_graph_legend"><tt class=''>0.00%</tt></div>
31
+ <div class="percent_graph">
32
+ <div class="covered" style="width:0px"></div>
33
+ <div class="uncovered" style="width:100px"></div>
34
+ </div></td>
35
+ <td class="left_align"><div class="percent_graph_legend"><tt class=''>0.00%</tt></div>
36
+ <div class="percent_graph">
37
+ <div class="covered" style="width:0px"></div>
38
+ <div class="uncovered" style="width:100px"></div>
39
+ </div></td>
40
+ </tr>
41
+ </tbody>
42
+ </table>
43
+ </div>
44
+
45
+ <h3>Key</h3>
46
+
47
+ <div class="key"><pre><span class='marked'>Code reported as executed by Ruby looks like this...</span><span class='marked1'>and this: this line is also marked as covered.</span><span class='inferred'>Lines considered as run by rcov, but not reported by Ruby, look like this,</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).</span><span class='uncovered'>Finally, here's a line marked as not executed.</span></pre></div>
48
+
49
+ <h3>Coverage Details</h3>
50
+
51
+ <table class="details">
52
+ <tbody>
53
+ <tr class="uncovered">
54
+ <td><pre><a name="line2">2</a> # -*- coding: utf-8 -*-</pre></td>
55
+ </tr>
56
+ <tr class="uncovered">
57
+ <td><pre><a name="line3">3</a> # codinrep - Gem para acesso de REPs da Telebyte</pre></td>
58
+ </tr>
59
+ <tr class="uncovered">
60
+ <td><pre><a name="line4">4</a> # Copyright (C) 2016 O.S. Systems Softwares Ltda.</pre></td>
61
+ </tr>
62
+ <tr class="uncovered">
63
+ <td><pre><a name="line5">5</a> </pre></td>
64
+ </tr>
65
+ <tr class="uncovered">
66
+ <td><pre><a name="line6">6</a> # This program is free software: you can redistribute it and/or modify</pre></td>
67
+ </tr>
68
+ <tr class="uncovered">
69
+ <td><pre><a name="line7">7</a> # it under the terms of the GNU Affero General Public License as</pre></td>
70
+ </tr>
71
+ <tr class="uncovered">
72
+ <td><pre><a name="line8">8</a> # published by the Free Software Foundation, either version 3 of the</pre></td>
73
+ </tr>
74
+ <tr class="uncovered">
75
+ <td><pre><a name="line9">9</a> # License, or (at your option) any later version.</pre></td>
76
+ </tr>
77
+ <tr class="uncovered">
78
+ <td><pre><a name="line10">10</a> </pre></td>
79
+ </tr>
80
+ <tr class="uncovered">
81
+ <td><pre><a name="line11">11</a> # This program is distributed in the hope that it will be useful,</pre></td>
82
+ </tr>
83
+ <tr class="uncovered">
84
+ <td><pre><a name="line12">12</a> # but WITHOUT ANY WARRANTY; without even the implied warranty of</pre></td>
85
+ </tr>
86
+ <tr class="uncovered">
87
+ <td><pre><a name="line13">13</a> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</pre></td>
88
+ </tr>
89
+ <tr class="uncovered">
90
+ <td><pre><a name="line14">14</a> # GNU Affero General Public License for more details.</pre></td>
91
+ </tr>
92
+ <tr class="uncovered">
93
+ <td><pre><a name="line15">15</a> </pre></td>
94
+ </tr>
95
+ <tr class="uncovered">
96
+ <td><pre><a name="line16">16</a> # You should have received a copy of the GNU Affero General Public License</pre></td>
97
+ </tr>
98
+ <tr class="uncovered">
99
+ <td><pre><a name="line17">17</a> # along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</pre></td>
100
+ </tr>
101
+ <tr class="uncovered">
102
+ <td><pre><a name="line18">18</a> </pre></td>
103
+ </tr>
104
+ <tr class="uncovered">
105
+ <td><pre><a name="line19">19</a> # Rua Clóvis Gularte Candiota 132, Pelotas-RS, Brasil.</pre></td>
106
+ </tr>
107
+ <tr class="uncovered">
108
+ <td><pre><a name="line20">20</a> # e-mail: contato@ossystems.com.br</pre></td>
109
+ </tr>
110
+ <tr class="uncovered">
111
+ <td><pre><a name="line21">21</a> </pre></td>
112
+ </tr>
113
+ <tr class="uncovered">
114
+ <td><pre><a name="line22">22</a> require &quot;codin_rep/add_employee&quot;</pre></td>
115
+ </tr>
116
+ <tr class="uncovered">
117
+ <td><pre><a name="line23">23</a> require &quot;codin_rep/employee_command&quot;</pre></td>
118
+ </tr>
119
+ <tr class="uncovered">
120
+ <td><pre><a name="line24">24</a> require &quot;codin_rep/get_time&quot;</pre></td>
121
+ </tr>
122
+ <tr class="uncovered">
123
+ <td><pre><a name="line25">25</a> require &quot;codin_rep/set_time&quot;</pre></td>
124
+ </tr>
125
+ <tr class="uncovered">
126
+ <td><pre><a name="line26">26</a> require &quot;codin_rep/get_records&quot;</pre></td>
127
+ </tr>
128
+ <tr class="uncovered">
129
+ <td><pre><a name="line27">27</a> require &quot;codin_rep/del_employee&quot;</pre></td>
130
+ </tr>
131
+ <tr class="uncovered">
132
+ <td><pre><a name="line28">28</a> </pre></td>
133
+ </tr>
134
+ <tr class="uncovered">
135
+ <td><pre><a name="line29">29</a> module CodinRep</pre></td>
136
+ </tr>
137
+ <tr class="uncovered">
138
+ <td><pre><a name="line30">30</a> class &lt;&lt; self</pre></td>
139
+ </tr>
140
+ <tr class="uncovered">
141
+ <td><pre><a name="line31">31</a> def included(base)</pre></td>
142
+ </tr>
143
+ <tr class="uncovered">
144
+ <td><pre><a name="line32">32</a> return if base.included_modules.include?(InstanceMethods)</pre></td>
145
+ </tr>
146
+ <tr class="uncovered">
147
+ <td><pre><a name="line33">33</a> base.send(:include, InstanceMethods)</pre></td>
148
+ </tr>
149
+ <tr class="uncovered">
150
+ <td><pre><a name="line34">34</a> end</pre></td>
151
+ </tr>
152
+ <tr class="uncovered">
153
+ <td><pre><a name="line35">35</a> end</pre></td>
154
+ </tr>
155
+ <tr class="uncovered">
156
+ <td><pre><a name="line36">36</a> </pre></td>
157
+ </tr>
158
+ <tr class="uncovered">
159
+ <td><pre><a name="line37">37</a> module InstanceMethods</pre></td>
160
+ </tr>
161
+ <tr class="uncovered">
162
+ <td><pre><a name="line38">38</a> def get_time</pre></td>
163
+ </tr>
164
+ <tr class="uncovered">
165
+ <td><pre><a name="line39">39</a> command = CodinRep::GetTime.new(self.ip, self.tcp_port)</pre></td>
166
+ </tr>
167
+ <tr class="uncovered">
168
+ <td><pre><a name="line40">40</a> response = command.execute</pre></td>
169
+ </tr>
170
+ <tr class="uncovered">
171
+ <td><pre><a name="line41">41</a> return response</pre></td>
172
+ </tr>
173
+ <tr class="uncovered">
174
+ <td><pre><a name="line42">42</a> end</pre></td>
175
+ </tr>
176
+ <tr class="uncovered">
177
+ <td><pre><a name="line43">43</a> </pre></td>
178
+ </tr>
179
+ <tr class="uncovered">
180
+ <td><pre><a name="line44">44</a> def set_time(time)</pre></td>
181
+ </tr>
182
+ <tr class="uncovered">
183
+ <td><pre><a name="line45">45</a> command = CodinRep::SetTime.new(time, self.ip, self.tcp_port)</pre></td>
184
+ </tr>
185
+ <tr class="uncovered">
186
+ <td><pre><a name="line46">46</a> response = command.execute</pre></td>
187
+ </tr>
188
+ <tr class="uncovered">
189
+ <td><pre><a name="line47">47</a> return response</pre></td>
190
+ </tr>
191
+ <tr class="uncovered">
192
+ <td><pre><a name="line48">48</a> end</pre></td>
193
+ </tr>
194
+ <tr class="uncovered">
195
+ <td><pre><a name="line49">49</a> </pre></td>
196
+ </tr>
197
+ <tr class="uncovered">
198
+ <td><pre><a name="line50">50</a> def get_employer</pre></td>
199
+ </tr>
200
+ <tr class="uncovered">
201
+ <td><pre><a name="line51">51</a> command = CodinRep::GetAfdHeader.new(self.ip, self.tcp_port)</pre></td>
202
+ </tr>
203
+ <tr class="uncovered">
204
+ <td><pre><a name="line52">52</a> response = command.execute</pre></td>
205
+ </tr>
206
+ <tr class="uncovered">
207
+ <td><pre><a name="line53">53</a> </pre></td>
208
+ </tr>
209
+ <tr class="uncovered">
210
+ <td><pre><a name="line54">54</a> hash = {}</pre></td>
211
+ </tr>
212
+ <tr class="uncovered">
213
+ <td><pre><a name="line55">55</a> hash[:document_type] = response.employer_type</pre></td>
214
+ </tr>
215
+ <tr class="uncovered">
216
+ <td><pre><a name="line56">56</a> hash[:document_number] = response.employer_document</pre></td>
217
+ </tr>
218
+ <tr class="uncovered">
219
+ <td><pre><a name="line57">57</a> hash[:cei_document] = response.employer_cei</pre></td>
220
+ </tr>
221
+ <tr class="uncovered">
222
+ <td><pre><a name="line58">58</a> hash[:company_name] = response.employer_name</pre></td>
223
+ </tr>
224
+ <tr class="uncovered">
225
+ <td><pre><a name="line59">59</a> </pre></td>
226
+ </tr>
227
+ <tr class="uncovered">
228
+ <td><pre><a name="line60">60</a> return hash</pre></td>
229
+ </tr>
230
+ <tr class="uncovered">
231
+ <td><pre><a name="line61">61</a> end</pre></td>
232
+ </tr>
233
+ <tr class="uncovered">
234
+ <td><pre><a name="line62">62</a> </pre></td>
235
+ </tr>
236
+ <tr class="uncovered">
237
+ <td><pre><a name="line63">63</a> def get_serial_number</pre></td>
238
+ </tr>
239
+ <tr class="uncovered">
240
+ <td><pre><a name="line64">64</a> command = CodinRep::GetAfdHeader.new(self.ip, self.tcp_port)</pre></td>
241
+ </tr>
242
+ <tr class="uncovered">
243
+ <td><pre><a name="line65">65</a> response = command.execute</pre></td>
244
+ </tr>
245
+ <tr class="uncovered">
246
+ <td><pre><a name="line66">66</a> response.rep_serial_number</pre></td>
247
+ </tr>
248
+ <tr class="uncovered">
249
+ <td><pre><a name="line67">67</a> end</pre></td>
250
+ </tr>
251
+ <tr class="uncovered">
252
+ <td><pre><a name="line68">68</a> </pre></td>
253
+ </tr>
254
+ <tr class="uncovered">
255
+ <td><pre><a name="line69">69</a> def get_records(first_id=nil)</pre></td>
256
+ </tr>
257
+ <tr class="uncovered">
258
+ <td><pre><a name="line70">70</a> command = CodinRep::GetRecords.new(first_id, self.ip, self.tcp_port)</pre></td>
259
+ </tr>
260
+ <tr class="uncovered">
261
+ <td><pre><a name="line71">71</a> response = command.execute</pre></td>
262
+ </tr>
263
+ <tr class="uncovered">
264
+ <td><pre><a name="line72">72</a> response</pre></td>
265
+ </tr>
266
+ <tr class="uncovered">
267
+ <td><pre><a name="line73">73</a> end</pre></td>
268
+ </tr>
269
+ <tr class="uncovered">
270
+ <td><pre><a name="line74">74</a> </pre></td>
271
+ </tr>
272
+ <tr class="uncovered">
273
+ <td><pre><a name="line75">75</a> def set_employee(operation_type, registration, pis_number, name)</pre></td>
274
+ </tr>
275
+ <tr class="uncovered">
276
+ <td><pre><a name="line76">76</a> if [:add, :edit].include? operation_type</pre></td>
277
+ </tr>
278
+ <tr class="uncovered">
279
+ <td><pre><a name="line77">77</a> command = CodinRep::AddEmployee.new(registration, pis_number, name, self.ip, self.tcp_port)</pre></td>
280
+ </tr>
281
+ <tr class="uncovered">
282
+ <td><pre><a name="line78">78</a> elsif operation_type == :remove</pre></td>
283
+ </tr>
284
+ <tr class="uncovered">
285
+ <td><pre><a name="line79">79</a> command = CodinRep::DelEmployee.new(registration, self.ip, self.tcp_port)</pre></td>
286
+ </tr>
287
+ <tr class="uncovered">
288
+ <td><pre><a name="line80">80</a> else</pre></td>
289
+ </tr>
290
+ <tr class="uncovered">
291
+ <td><pre><a name="line81">81</a> raise EmployeeCommand::UnknownEmployeeOperation.new(operation_type)</pre></td>
292
+ </tr>
293
+ <tr class="uncovered">
294
+ <td><pre><a name="line82">82</a> end</pre></td>
295
+ </tr>
296
+ <tr class="uncovered">
297
+ <td><pre><a name="line83">83</a> response = command.execute</pre></td>
298
+ </tr>
299
+ <tr class="uncovered">
300
+ <td><pre><a name="line84">84</a> response</pre></td>
301
+ </tr>
302
+ <tr class="uncovered">
303
+ <td><pre><a name="line85">85</a> end</pre></td>
304
+ </tr>
305
+ <tr class="uncovered">
306
+ <td><pre><a name="line86">86</a> end</pre></td>
307
+ </tr>
308
+ <tr class="uncovered">
309
+ <td><pre><a name="line87">87</a> end</pre></td>
310
+ </tr>
311
+ </tbody>
312
+ </table>
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>
315
+
316
+ </body>
317
+ </html>
@@ -0,0 +1,184 @@
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