Skip to content

Commit

Permalink
Merge 1ffca8b into e46a030
Browse files Browse the repository at this point in the history
  • Loading branch information
tlux committed Jun 2, 2020
2 parents e46a030 + 1ffca8b commit 56601d3
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 6 deletions.
10 changes: 8 additions & 2 deletions lib/vnstat/document.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,21 @@ def data=(data)
#
# @return [String]
def version
data.xpath('vnstat').attr('version').text
attr = data.xpath('vnstat').attr('version')
raise 'Unable to determine version' if attr.nil?

attr.text
end

##
# Returns the XML version as specified in the vnstat element.
#
# @return [String]
def xml_version
data.xpath('vnstat').attr('xmlversion').text
attr = data.xpath('vnstat').attr('xmlversion')
raise 'Unable to determine XML version' if attr.nil?

attr.text
end
end
end
3 changes: 2 additions & 1 deletion lib/vnstat/interface_collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,10 @@ def inspect

def interfaces_hash
@interfaces_hash ||= begin
id_attr = xml_version == '2' ? :name : :id
elements = data.xpath('//interface')
elements.each_with_object({}) do |node, hash|
id = node[:id]
id = node[id_attr]
hash[id] = Interface.new(id, data)
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/vnstat/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def extract_date_from_xml_element(element)
# Extracts the date and time from the given XML element.
#
# @param [Nokogiri::XML::Element] element The XML element.
# @return [DateTime]
# @return [Time]
def extract_datetime_from_xml_element(element)
date = extract_date_from_xml_element(element)
hour = element.xpath('time/hour').text.to_i
Expand Down
14 changes: 14 additions & 0 deletions spec/lib/vnstat/document_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,25 @@
it 'returns the version attribute value from the vnstat element' do
expect(subject.version).to eq '1.23'
end

it 'raises when version not set or empty' do
subject.data = '<vnstat />'

expect { subject.version }
.to raise_error(RuntimeError, 'Unable to determine version')
end
end

describe '#xml_version' do
it 'returns the xmlversion attribute value from the vnstat element' do
expect(subject.xml_version).to eq '1'
end

it 'raises when xmlversion not set or empty' do
subject.data = '<vnstat />'

expect { subject.xml_version }
.to raise_error(RuntimeError, 'Unable to determine XML version')
end
end
end
19 changes: 17 additions & 2 deletions spec/lib/vnstat/interface_collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
end

it 'calls .load_data' do
expect(described_class).to receive(:load_data).and_return('<vnstat />')
expect(described_class)
.to receive(:load_data)
.and_return('<vnstat xmlversion="1" />')

described_class.open
end
Expand All @@ -46,9 +48,22 @@
end

describe '#ids' do
it 'returns interface names from the data' do
it 'returns interface names from v1 data' do
expect(subject.ids).to eq %w[eth0 wlan0]
end

it 'returns interface names from v2 data' do
data = <<-XML
<vnstat version="0.00" xmlversion="2">
<interface name="eth0"></interface>
<interface name="wlan0"></interface>
</vnstat>
XML

collection = described_class.new(data)

expect(collection.ids).to eq %w[eth0 wlan0]
end
end

describe '#[]' do
Expand Down

0 comments on commit 56601d3

Please sign in to comment.