Expanded supported input for Conversion.to_float
This extends XPath::Conversion.to_float so it can also convert NodeSet and Node instances.
This commit is contained in:
parent
8a82cc3593
commit
376d016acd
|
@ -43,8 +43,7 @@ module Oga
|
||||||
end
|
end
|
||||||
|
|
||||||
if value.is_a?(XML::NodeSet)
|
if value.is_a?(XML::NodeSet)
|
||||||
first = value.first
|
value = first_node_text(value)
|
||||||
value = first.respond_to?(:text) ? first.text : ''
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if value.respond_to?(:text)
|
if value.respond_to?(:text)
|
||||||
|
@ -56,7 +55,19 @@ module Oga
|
||||||
|
|
||||||
# @return [Float]
|
# @return [Float]
|
||||||
def self.to_float(value)
|
def self.to_float(value)
|
||||||
Float(value) rescue Float::NAN
|
if value.is_a?(XML::NodeSet)
|
||||||
|
value = first_node_text(value)
|
||||||
|
end
|
||||||
|
|
||||||
|
if value.respond_to?(:text)
|
||||||
|
value = value.text
|
||||||
|
end
|
||||||
|
|
||||||
|
if value.is_a?(String)
|
||||||
|
value = Float(value) rescue Float::NAN
|
||||||
|
end
|
||||||
|
|
||||||
|
value
|
||||||
end
|
end
|
||||||
|
|
||||||
# @return [TrueClass|FalseClass]
|
# @return [TrueClass|FalseClass]
|
||||||
|
@ -78,6 +89,12 @@ module Oga
|
||||||
def self.boolean?(value)
|
def self.boolean?(value)
|
||||||
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @param [Oga::XML::NodeSet] set
|
||||||
|
# @return [String]
|
||||||
|
def self.first_node_text(set)
|
||||||
|
set[0].respond_to?(:text) ? set[0].text : ''
|
||||||
|
end
|
||||||
end # Conversion
|
end # Conversion
|
||||||
end # XPath
|
end # XPath
|
||||||
end # Oga
|
end # Oga
|
||||||
|
|
|
@ -125,6 +125,13 @@ describe Oga::XPath::Conversion do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'to_float' do
|
describe 'to_float' do
|
||||||
|
describe 'using a Float' do
|
||||||
|
it 'returns the input Float' do
|
||||||
|
described_class.to_float(10.5).should == 10.5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'using a String' do
|
||||||
it 'returns a Float for a valid value' do
|
it 'returns a Float for a valid value' do
|
||||||
described_class.to_float('10.5').should == 10.5
|
described_class.to_float('10.5').should == 10.5
|
||||||
end
|
end
|
||||||
|
@ -134,6 +141,23 @@ describe Oga::XPath::Conversion do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'using a NodeSet' do
|
||||||
|
it 'returns a Float using the text of the first node' do
|
||||||
|
set = node_set(Oga::XML::Text.new(:text => '10.5'))
|
||||||
|
|
||||||
|
described_class.to_float(set).should == 10.5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'using an Node' do
|
||||||
|
it 'returns a Float using the text of the node' do
|
||||||
|
node = Oga::XML::Text.new(:text => '10.5')
|
||||||
|
|
||||||
|
described_class.to_float(node).should == 10.5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'to_boolean' do
|
describe 'to_boolean' do
|
||||||
it 'returns true for a non-empty String' do
|
it 'returns true for a non-empty String' do
|
||||||
described_class.to_boolean('foo').should == true
|
described_class.to_boolean('foo').should == true
|
||||||
|
|
Loading…
Reference in New Issue