vnstat-ruby 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +49 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +7 -5
  6. data/Gemfile +4 -10
  7. data/Gemfile.lock +29 -75
  8. data/LICENSE.txt +18 -17
  9. data/README.md +1 -3
  10. data/Rakefile +4 -25
  11. data/lib/vnstat-ruby.rb +2 -0
  12. data/lib/vnstat.rb +17 -2
  13. data/lib/vnstat/configuration.rb +4 -2
  14. data/lib/vnstat/document.rb +6 -1
  15. data/lib/vnstat/error.rb +2 -0
  16. data/lib/vnstat/errors/executable_not_found.rb +2 -0
  17. data/lib/vnstat/errors/unknown_interface.rb +2 -0
  18. data/lib/vnstat/interface.rb +4 -1
  19. data/lib/vnstat/interface_collection.rb +2 -0
  20. data/lib/vnstat/parser.rb +4 -2
  21. data/lib/vnstat/result.rb +8 -5
  22. data/lib/vnstat/result/date_delegation.rb +2 -0
  23. data/lib/vnstat/result/day.rb +4 -1
  24. data/lib/vnstat/result/hour.rb +6 -2
  25. data/lib/vnstat/result/minute.rb +5 -2
  26. data/lib/vnstat/result/month.rb +6 -2
  27. data/lib/vnstat/result/time_comparable.rb +2 -0
  28. data/lib/vnstat/system_call.rb +10 -7
  29. data/lib/vnstat/traffic.rb +2 -0
  30. data/lib/vnstat/traffic/base.rb +2 -0
  31. data/lib/vnstat/traffic/daily.rb +2 -0
  32. data/lib/vnstat/traffic/hourly.rb +2 -0
  33. data/lib/vnstat/traffic/monthly.rb +2 -0
  34. data/lib/vnstat/traffic/tops.rb +2 -0
  35. data/lib/vnstat/utils.rb +2 -0
  36. data/lib/vnstat/version.rb +5 -0
  37. data/vnstat-ruby.gemspec +36 -109
  38. metadata +27 -65
  39. data/.codeclimate.yml +0 -14
  40. data/spec/lib/vnstat/configuration_spec.rb +0 -72
  41. data/spec/lib/vnstat/document_spec.rb +0 -54
  42. data/spec/lib/vnstat/errors/executable_not_found_spec.rb +0 -5
  43. data/spec/lib/vnstat/errors/unknown_interface_spec.rb +0 -5
  44. data/spec/lib/vnstat/interface_collection_spec.rb +0 -194
  45. data/spec/lib/vnstat/interface_spec.rb +0 -327
  46. data/spec/lib/vnstat/result/day_spec.rb +0 -39
  47. data/spec/lib/vnstat/result/hour_spec.rb +0 -43
  48. data/spec/lib/vnstat/result/minute_spec.rb +0 -54
  49. data/spec/lib/vnstat/result/month_spec.rb +0 -39
  50. data/spec/lib/vnstat/result_spec.rb +0 -86
  51. data/spec/lib/vnstat/system_call_spec.rb +0 -209
  52. data/spec/lib/vnstat/traffic/daily_spec.rb +0 -109
  53. data/spec/lib/vnstat/traffic/hourly_spec.rb +0 -153
  54. data/spec/lib/vnstat/traffic/monthly_spec.rb +0 -46
  55. data/spec/lib/vnstat/traffic/tops_spec.rb +0 -48
  56. data/spec/lib/vnstat/utils_spec.rb +0 -130
  57. data/spec/lib/vnstat_spec.rb +0 -61
  58. data/spec/spec_helper.rb +0 -98
  59. data/spec/support/shared_examples/shared_examples_for_date_delegation.rb +0 -19
  60. data/spec/support/shared_examples/shared_examples_for_traffic_collection.rb +0 -19
@@ -1,39 +0,0 @@
1
- describe Vnstat::Result::Day do
2
- it 'includes Comparable' do
3
- expect(described_class).to include Comparable
4
- end
5
-
6
- describe '.extract_from_xml_element' do
7
- let :element do
8
- data = <<-XML
9
- <day id="0">
10
- <date><year>2015</year><month>7</month><day>14</day></date>
11
- <rx>1000</rx><tx>2000</tx>
12
- </day>
13
- XML
14
- Nokogiri::XML.parse(data).xpath('day')
15
- end
16
-
17
- subject do
18
- described_class.extract_from_xml_element(element)
19
- end
20
-
21
- it { is_expected.to be_a described_class }
22
-
23
- it 'initializes with the correct #date' do
24
- expect(subject.date).to eq Date.new(2015, 7, 14)
25
- end
26
-
27
- it 'initializes with the correct #bytes_received' do
28
- expect(subject.bytes_received).to eq 1000 * 1024
29
- end
30
-
31
- it 'initializes with the correct #bytes_sent' do
32
- expect(subject.bytes_sent).to eq 2000 * 1024
33
- end
34
- end
35
-
36
- include_examples 'date delegation' do
37
- subject { described_class.new(Date.today, 0, 0) }
38
- end
39
- end
@@ -1,43 +0,0 @@
1
- describe Vnstat::Result::Hour do
2
- it 'includes Comparable' do
3
- expect(described_class).to include Comparable
4
- end
5
-
6
- describe '.extract_from_xml_element' do
7
- let :element do
8
- data = <<-XML
9
- <hour id="19">
10
- <date><year>2015</year><month>10</month><day>21</day></date>
11
- <rx>1000</rx><tx>2000</tx>
12
- </hour>
13
- XML
14
- Nokogiri::XML.parse(data).xpath('hour')
15
- end
16
-
17
- subject do
18
- described_class.extract_from_xml_element(element)
19
- end
20
-
21
- it { is_expected.to be_a described_class }
22
-
23
- it 'initializes with the correct #date' do
24
- expect(subject.date).to eq Date.new(2015, 10, 21)
25
- end
26
-
27
- it 'initializes with the correct #hour' do
28
- expect(subject.hour).to eq 19
29
- end
30
-
31
- it 'initializes with the correct #bytes_received' do
32
- expect(subject.bytes_received).to eq 1000 * 1024
33
- end
34
-
35
- it 'initializes with the correct #bytes_sent' do
36
- expect(subject.bytes_sent).to eq 2000 * 1024
37
- end
38
- end
39
-
40
- include_examples 'date delegation' do
41
- subject { described_class.new(Date.today, 12, 0, 0) }
42
- end
43
- end
@@ -1,54 +0,0 @@
1
- describe Vnstat::Result::Minute do
2
- it 'includes Comparable' do
3
- expect(described_class).to include Comparable
4
- end
5
-
6
- describe '.extract_from_xml_element' do
7
- let :element do
8
- data = <<-XML
9
- <top id="0">
10
- <date><year>2015</year><month>2</month><day>3</day></date>
11
- <time><hour>12</hour><minute>34</minute></time>
12
- <rx>1000</rx><tx>2000</tx>
13
- </top>
14
- XML
15
- Nokogiri::XML.parse(data).xpath('top')
16
- end
17
-
18
- subject do
19
- described_class.extract_from_xml_element(element)
20
- end
21
-
22
- it { is_expected.to be_a described_class }
23
-
24
- it 'initializes with the correct #time with the system time zone' do
25
- time = DateTime.new(2015, 2, 3, 12, 34, 0o0, DateTime.now.offset)
26
-
27
- expect(subject.time).to eq time
28
- end
29
-
30
- it 'initializes with the correct #date' do
31
- expect(subject.date).to eq Date.new(2015, 2, 3)
32
- end
33
-
34
- it 'initializes with the correct #hour' do
35
- expect(subject.hour).to eq 12
36
- end
37
-
38
- it 'initialized with the correct #minute' do
39
- expect(subject.minute).to eq 34
40
- end
41
-
42
- it 'initializes with the correct #bytes_received' do
43
- expect(subject.bytes_received).to eq 1000 * 1024
44
- end
45
-
46
- it 'initializes with the correct #bytes_sent' do
47
- expect(subject.bytes_sent).to eq 2000 * 1024
48
- end
49
- end
50
-
51
- include_examples 'date delegation' do
52
- subject { described_class.new(DateTime.now, 0, 0) }
53
- end
54
- end
@@ -1,39 +0,0 @@
1
- describe Vnstat::Result::Month do
2
- it 'includes Comparable' do
3
- expect(described_class).to include Comparable
4
- end
5
-
6
- describe '.extract_from_xml_element' do
7
- let :element do
8
- data = <<-XML
9
- <month id="0">
10
- <date><year>2015</year><month>9</month></date>
11
- <rx>1000</rx><tx>2000</tx>
12
- </month>
13
- XML
14
- Nokogiri::XML.parse(data).xpath('month')
15
- end
16
-
17
- subject do
18
- described_class.extract_from_xml_element(element)
19
- end
20
-
21
- it { is_expected.to be_a described_class }
22
-
23
- it 'initializes with the correct #year' do
24
- expect(subject.year).to eq 2015
25
- end
26
-
27
- it 'initializes with the correct #month' do
28
- expect(subject.month).to eq 9
29
- end
30
-
31
- it 'initializes with the correct #bytes_received' do
32
- expect(subject.bytes_received).to eq 1000 * 1024
33
- end
34
-
35
- it 'initializes with the correct #bytes_sent' do
36
- expect(subject.bytes_sent).to eq 2000 * 1024
37
- end
38
- end
39
- end
@@ -1,86 +0,0 @@
1
- describe Vnstat::Result do
2
- it 'includes Comparable' do
3
- expect(described_class).to include Comparable
4
- end
5
-
6
- describe '.extract_from_xml_element' do
7
- let :element do
8
- data = <<-XML
9
- <total>
10
- <rx>1000</rx><tx>2000</tx>
11
- </total>
12
- XML
13
- Nokogiri::XML.parse(data).xpath('total')
14
- end
15
-
16
- subject { described_class.extract_from_xml_element(element) }
17
-
18
- it { is_expected.to be_a described_class }
19
-
20
- it 'initializes with the correct #bytes_received' do
21
- expect(subject.bytes_received).to eq 1000 * 1024
22
- end
23
-
24
- it 'initializes with the correct #bytes_sent' do
25
- expect(subject.bytes_sent).to eq 2000 * 1024
26
- end
27
- end
28
-
29
- describe '#initialize' do
30
- subject { described_class.new(1000, 2000) }
31
-
32
- it 'stores the first argument in #bytes_received' do
33
- expect(subject.bytes_received).to eq 1000
34
- end
35
-
36
- it 'stores the second argument in #bytes_sent' do
37
- expect(subject.bytes_sent).to eq 2000
38
- end
39
- end
40
-
41
- describe '#bytes_transmitted' do
42
- subject { described_class.new(1000, 2000) }
43
-
44
- it 'returns sum of #bytes_received and #bytes_sent' do
45
- expect(subject.bytes_transmitted).to eq 3000
46
- end
47
- end
48
-
49
- describe '#<=>' do
50
- subject { described_class.new(1000, 2000) }
51
-
52
- context 'when argument does not respond to :bytes_transmitted' do
53
- let(:other) { double }
54
-
55
- it 'returns nil' do
56
- expect(subject <=> other).to be nil
57
- end
58
- end
59
-
60
- context 'when argument responds to :bytes_transmitted' do
61
- context 'with other value being greater' do
62
- let(:other) { double(bytes_transmitted: 4000) }
63
-
64
- it 'returns -1' do
65
- expect(subject <=> other).to eq(-1)
66
- end
67
- end
68
-
69
- context 'with other value being equal' do
70
- let(:other) { double(bytes_transmitted: 3000) }
71
-
72
- it 'returns 0' do
73
- expect(subject <=> other).to eq 0
74
- end
75
- end
76
-
77
- context 'with other value being lower' do
78
- let(:other) { double(bytes_transmitted: 2000) }
79
-
80
- it 'returns 1' do
81
- expect(subject <=> other).to eq 1
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,209 +0,0 @@
1
- describe Vnstat::SystemCall do
2
- let(:args) { %w[test test2 test3] }
3
-
4
- describe '#initialize' do
5
- context 'when arguments are anything' do
6
- subject { described_class.new(*args) }
7
-
8
- it 'stores args in #args' do
9
- expect(subject.args).to eq args
10
- end
11
- end
12
-
13
- context 'when first argument is an Array' do
14
- subject { described_class.new(args) }
15
-
16
- it 'stores args in #args' do
17
- expect(subject.args).to eq args
18
- end
19
- end
20
- end
21
-
22
- describe '.call' do
23
- it 'forwards args to .new' do
24
- expect(described_class).to receive(:new).with('test').and_call_original
25
-
26
- described_class.call('test')
27
- end
28
-
29
- it 'delegates to #call with no args' do
30
- expect_any_instance_of(described_class).to receive(:call).with(no_args)
31
-
32
- described_class.call('test')
33
- end
34
-
35
- it 'returns result of #call' do
36
- allow_any_instance_of(described_class)
37
- .to receive(:call).and_return('test')
38
-
39
- expect(described_class.call).to eq 'test'
40
- end
41
- end
42
-
43
- describe '#call' do
44
- subject { described_class.new(*args) }
45
-
46
- it 'returns self' do
47
- expect(subject.call).to eq subject
48
- end
49
-
50
- it 'calls Open3.popen with #args as arguments' do
51
- expect(Open3).to receive(:popen3).with(*args)
52
-
53
- subject.call
54
- end
55
-
56
- context 'when called' do
57
- let(:success_result) { "success 1\nsuccess 2" }
58
- let(:error_result) { "error 1\nerror 2" }
59
- let(:exit_status) { double(value: 'test') }
60
-
61
- before :each do
62
- success_io = build_mock_io(success_result)
63
- error_io = build_mock_io(error_result)
64
-
65
- allow(Open3).to receive(:popen3)
66
- .and_yield(nil, success_io, error_io, exit_status)
67
-
68
- subject.call
69
- end
70
-
71
- it 'sets #exit_status' do
72
- expect(subject.exit_status).to eq exit_status.value
73
- end
74
-
75
- it 'sets #success_result' do
76
- expect(subject.success_result).to eq success_result
77
- end
78
-
79
- it 'sets #error_result' do
80
- expect(subject.error_result).to eq error_result
81
- end
82
-
83
- def build_mock_io(*lines)
84
- io = StringIO.new
85
- lines.flatten.each { |line| io.puts(line) }
86
- io.tap(&:rewind)
87
- end
88
- end
89
- end
90
-
91
- describe '#called?' do
92
- context 'when #exit_status is nil' do
93
- before :each do
94
- allow(subject).to receive(:exit_status).and_return('something')
95
- end
96
-
97
- it 'returns true' do
98
- expect(subject.called?).to be true
99
- end
100
- end
101
-
102
- context 'when #exit_status is not nil' do
103
- before :each do
104
- allow(subject).to receive(:exit_status).and_return(nil)
105
- end
106
-
107
- it 'returns false' do
108
- expect(subject.called?).to be false
109
- end
110
- end
111
- end
112
-
113
- describe '#success?' do
114
- context 'when #called? is true' do
115
- before :each do
116
- allow(subject).to receive(:called?).and_return(true)
117
- end
118
-
119
- context 'when exited successfully' do
120
- before :each do
121
- allow(subject).to receive(:exit_status) do
122
- double(success?: true)
123
- end
124
- end
125
-
126
- it 'returns true' do
127
- expect(subject.success?).to be true
128
- end
129
- end
130
-
131
- context 'when not exited successfully' do
132
- before :each do
133
- allow(subject).to receive(:exit_status) do
134
- double(success?: false)
135
- end
136
- end
137
-
138
- it 'returns false' do
139
- expect(subject.success?).to be false
140
- end
141
- end
142
- end
143
-
144
- context 'when #called? is false' do
145
- before :each do
146
- allow(subject).to receive(:called?).and_return(false)
147
- end
148
-
149
- it 'raises' do
150
- expect { subject.success? }.to raise_error('Command not invoked')
151
- end
152
- end
153
- end
154
-
155
- describe '#error?' do
156
- it 'calls #success?' do
157
- expect(subject).to receive(:success?)
158
-
159
- subject.error?
160
- end
161
-
162
- context 'when #success? is true' do
163
- before :each do
164
- allow(subject).to receive(:success?).and_return(true)
165
- end
166
-
167
- it 'returns false' do
168
- expect(subject.error?).to be false
169
- end
170
- end
171
-
172
- context 'when #success? is false' do
173
- before :each do
174
- allow(subject).to receive(:success?).and_return(false)
175
- end
176
-
177
- it 'returns true' do
178
- expect(subject.error?).to be true
179
- end
180
- end
181
- end
182
-
183
- describe '#result' do
184
- before :each do
185
- allow(subject).to receive(:success_result).and_return('success')
186
- allow(subject).to receive(:error_result).and_return('error')
187
- end
188
-
189
- context 'when #success? is true' do
190
- before :each do
191
- allow(subject).to receive(:success?).and_return(true)
192
- end
193
-
194
- it 'returns #success_result' do
195
- expect(subject.result).to eq subject.success_result
196
- end
197
- end
198
-
199
- context 'when #success? is false' do
200
- before :each do
201
- allow(subject).to receive(:success?).and_return(false)
202
- end
203
-
204
- it 'returns #error_result' do
205
- expect(subject.result).to eq subject.error_result
206
- end
207
- end
208
- end
209
- end