+ Update image function goodie_img_tag single image in /img/ dir
+ Remove UK from switch to imperial for non-metric countries check
+ Modify CSS style as per feedback
+ Update tests
master
Chris Wilson 2015-02-06 17:19:32 +08:00
parent 9d832270e3
commit 1af2ce1095
4 changed files with 41 additions and 51 deletions

View File

@ -25,25 +25,13 @@ my @attributesArray = ( 'size', 'radius', 'volume', 'mass', 'surface area', 'are
triggers any => @triggers;
my %objectImages = (
sun => goodie_img_tag({filename => 'images/Sun.svg',height => 48, width => 48,}),
earth => goodie_img_tag({filename => 'images/Earth.svg',height => 48, width => 48,}),
jupiter => goodie_img_tag({filename => 'images/Jupiter.svg',height => 48, width => 48,}),
mars => goodie_img_tag({filename => 'images/Mars.svg',height => 48, width => 48,}),
mercury => goodie_img_tag({filename => 'images/Mercury.svg',height => 48, width => 48,}),
neptune => goodie_img_tag({filename => 'images/Neptune.svg',height => 48, width => 48,}),
saturn => goodie_img_tag({filename => 'images/Saturn.svg',height => 48, width => 58,}),
uranus => goodie_img_tag({filename => 'images/Uranus.svg',height => 48, width => 48,}),
venus => goodie_img_tag({filename => 'images/Venus.svg',height => 48, width => 48,})
);
# Load object data
my $objects = Load(scalar share('objects.yml')->slurp);
# Handle statement
handle query_lc => sub {
# Declare vars
my ($attribute, $attributesString, $result, $objectObj);
my ($attribute, $attributesString, $result, $objectObj, $image, $width);
s/^what is (the)|(of)|(object)//g; # Remove common words, strip question marks
@ -65,7 +53,7 @@ handle query_lc => sub {
# Switch to imperial for non-metric countries
# https://en.wikipedia.org/wiki/Metrication
if ($loc->country_code =~ m/UK|US|MM|LR/i) {
if ($loc->country_code =~ m/US|MM|LR/i) {
$result = $objectObj->{$attribute."_imperial"};
} else {
$result = $objectObj->{$attribute};
@ -75,7 +63,7 @@ handle query_lc => sub {
if($attribute =~ /_/ ) { $attribute = join ' ', map ucfirst lc, split /[_]+/, $attribute; }
# Human friendly object name + attribute
my $operation = ucfirst($_).", ".ucfirst($attribute);
my $operation = ucfirst($_)." - ".ucfirst($attribute);
# Superscript for km3, mi3, km2 or mi2
if($result =~ m/(km|mi)(\d)/) {
@ -84,11 +72,13 @@ handle query_lc => sub {
}
#Ensure we have a vaild image
return unless $objectImages{$_};
# 76
$width = ($_ eq "saturn") ? 76 : 48;
$image = goodie_img_tag({filename=>"/img/".$_.".png", height => 48, width => $width});
return unless $image;
#Return result and html
return $operation." is ".$result, pretty_output($result, $operation, $objectImages{$_});
return $operation." is ".$result, pretty_output($result, $operation, $image);
};
#Build HTML output

View File

@ -1,7 +1,7 @@
---
sun:
radius: 695,508 km
radius_imperial: 432,168.6 miles
radius_imperial: 432,168.6 mi
radius_scientific: 6.9551 x 105 km
surface_area: 6,078,747,774,547 km2
surface_area_imperial: 2,347,017,636,988 mi2
@ -18,7 +18,7 @@ sun:
density: 1.409 g/cm3
mercury:
radius: 2,439.7 km
radius_imperial: 1,516.0 miles
radius_imperial: 1,516.0 mi
radius_scientific: 2.4397 x 103 km
surface_area: 74,797,000 km2
surface_area_imperial: 28,879,000 mi2
@ -35,7 +35,7 @@ mercury:
density: 5.427 g/cm3
venus:
radius: 6,051.8 km
radius_imperial: 3,760.4 miles
radius_imperial: 3,760.4 mi
radius_scientific: 6.0518 x 103 km
surface_area: 460,234,317 km2
surface_area_imperial: 177,697,463 mi2
@ -52,7 +52,7 @@ venus:
density: 5.243 g/cm3
earth:
radius: 6,371.00 km
radius_imperial: 3,958.8 miles
radius_imperial: 3,958.8 mi
radius_scientific: 6.3710 x 103 km
surface_area: 510,064,472 km2
surface_area_imperial: 196,936,994 mi2
@ -69,7 +69,7 @@ earth:
density: 5.513 g/cm3
mars:
radius: 3,389.5 km
radius_imperial: 2,106.1 miles
radius_imperial: 2,106.1 mi
radius_scientific: 3.3895 x 103 km
surface_area: 144,371,391 km2
surface_area_imperial: 55,742,106 mi2
@ -86,7 +86,7 @@ mars:
density: 3.934 g/cm3
jupiter:
radius: 69,911 km
radius_imperial: 43,440.7 miles
radius_imperial: 43,440.7 mi
radius_scientific: 6.9911 x 104 km
surface_area: 61,418,738,571 km2
surface_area_imperial: 23,713,907,537 mi2
@ -103,7 +103,7 @@ jupiter:
density: 1.326 g/cm3
saturn:
radius: 58,232 km
radius_imperial: 36,183.7 miles
radius_imperial: 36,183.7 mi
radius_scientific: 5.8232 x 104 km
surface_area: 42,612,133,285 km2
surface_area_imperial: 16,452,636,641 mi2
@ -120,7 +120,7 @@ saturn:
density: 0.687 g/cm3
uranus:
radius: 25,362 km
radius_imperial: 15,759.2 miles
radius_imperial: 15,759.2 mi
radius_scientific: 2.5362 x 104 km
surface_area: 8,083,079,690 km2
surface_area_imperial: 3,120,894,516 mi2
@ -137,7 +137,7 @@ uranus:
density: 1.270 g/cm3
neptune:
radius: 24,622 km
radius_imperial: 15,299.4 miles
radius_imperial: 15,299.4 mi
radius_scientific: 2.4622 x 104 km
surface_area: 7,618,272,763 km2
surface_area_imperial: 2,941,431,558 mi2

View File

@ -1,12 +1,11 @@
.zci--answer .zci--objects .objects--objectImage {
float:left;
margin-right: 10px;
margin-right: 1.4em;
}
.zci--answer .zci--objects .objects--objectAttribute {
font-size: 1.5em;
font-weight: 400;
font-size: 1.4em;
font-weight: 700;
line-height: 1.2;
display:block;
}
@ -14,6 +13,7 @@
.zci--answer .zci--objects .objects--objectName {
font-size: 15px;
display:inline-block;
font-weight: 500;
}
.zci--answer .zci--objects .objects--info {

View File

@ -15,47 +15,47 @@ ddg_goodie_test(
#Test Imperial
'size earth' => test_zci("Earth, Radius is 3,958.8 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,958.8 miles</span><span class="text--secondary objects--objectName">Earth, Radius</span></span></div>}),
'size earth' => test_zci("Earth - Radius is 3,958.8 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,958.8 mi</span><span class="text--secondary objects--objectName">Earth - Radius</span></span></div>}),
'what is the size of earth' => test_zci("Earth, Radius is 3,958.8 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,958.8 miles</span><span class="text--secondary objects--objectName">Earth, Radius</span></span></div>}),
'what is the size of earth' => test_zci("Earth - Radius is 3,958.8 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,958.8 mi</span><span class="text--secondary objects--objectName">Earth - Radius</span></span></div>}),
'size of jupiter' => test_zci("Jupiter, Radius is 43,440.7 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">43,440.7 miles</span><span class="text--secondary objects--objectName">Jupiter, Radius</span></span></div>}),
'size of jupiter' => test_zci("Jupiter - Radius is 43,440.7 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">43,440.7 mi</span><span class="text--secondary objects--objectName">Jupiter - Radius</span></span></div>}),
'size of object jupiter' => test_zci("Jupiter, Radius is 43,440.7 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">43,440.7 miles</span><span class="text--secondary objects--objectName">Jupiter, Radius</span></span></div>}),
'size of object jupiter' => test_zci("Jupiter - Radius is 43,440.7 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">43,440.7 mi</span><span class="text--secondary objects--objectName">Jupiter - Radius</span></span></div>}),
'volume of mars' => test_zci("Mars, Volume is 39,133,515,914 mi<sup>3</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">39,133,515,914 mi<sup>3</sup></span><span class="text--secondary objects--objectName">Mars, Volume</span></span></div>}),
'volume of mars' => test_zci("Mars - Volume is 39,133,515,914 mi<sup>3</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">39,133,515,914 mi<sup>3</sup></span><span class="text--secondary objects--objectName">Mars - Volume</span></span></div>}),
'surface area of mercury' => test_zci("Mercury, Surface Area is 28,879,000 mi<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">28,879,000 mi<sup>2</sup></span><span class="text--secondary objects--objectName">Mercury, Surface Area</span></span></div>}),
'surface area of mercury' => test_zci("Mercury - Surface Area is 28,879,000 mi<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">28,879,000 mi<sup>2</sup></span><span class="text--secondary objects--objectName">Mercury - Surface Area</span></span></div>}),
'mass of neptune' => test_zci("Neptune, Mass is 225,775,402,703,500,000,000,000,000 lbs", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">225,775,402,703,500,000,000,000,000 lbs</span><span class="text--secondary objects--objectName">Neptune, Mass</span></span></div>}),
'mass of neptune' => test_zci("Neptune - Mass is 225,775,402,703,500,000,000,000,000 lbs", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">225,775,402,703,500,000,000,000,000 lbs</span><span class="text--secondary objects--objectName">Neptune - Mass</span></span></div>}),
'area of saturn' => test_zci("Saturn, Surface Area is 16,452,636,641 mi<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="58"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">16,452,636,641 mi<sup>2</sup></span><span class="text--secondary objects--objectName">Saturn, Surface Area</span></span></div>}),
'area of saturn' => test_zci("Saturn - Surface Area is 16,452,636,641 mi<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="76"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">16,452,636,641 mi<sup>2</sup></span><span class="text--secondary objects--objectName">Saturn - Surface Area</span></span></div>}),
'radius of uranus' => test_zci("Uranus, Radius is 15,759.2 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">15,759.2 miles</span><span class="text--secondary objects--objectName">Uranus, Radius</span></span></div>}),
'radius of uranus' => test_zci("Uranus - Radius is 15,759.2 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">15,759.2 mi</span><span class="text--secondary objects--objectName">Uranus - Radius</span></span></div>}),
'size of venus' => test_zci("Venus, Radius is 3,760.4 miles", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,760.4 miles</span><span class="text--secondary objects--objectName">Venus, Radius</span></span></div>}),
'size of venus' => test_zci("Venus - Radius is 3,760.4 mi", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">3,760.4 mi</span><span class="text--secondary objects--objectName">Venus - Radius</span></span></div>}),
#Test Metric
DDG::Request->new(query_raw => "size earth", location => test_location("au")) => test_zci("Earth, Radius is 6,371.00 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,371.00 km</span><span class="text--secondary objects--objectName">Earth, Radius</span></span></div>}),
DDG::Request->new(query_raw => "size earth", location => test_location("au")) => test_zci("Earth - Radius is 6,371.00 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,371.00 km</span><span class="text--secondary objects--objectName">Earth - Radius</span></span></div>}),
DDG::Request->new(query_raw => "what is the size of earth", location => test_location("au")) => test_zci("Earth, Radius is 6,371.00 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,371.00 km</span><span class="text--secondary objects--objectName">Earth, Radius</span></span></div>}),
DDG::Request->new(query_raw => "what is the size of earth", location => test_location("au")) => test_zci("Earth - Radius is 6,371.00 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,371.00 km</span><span class="text--secondary objects--objectName">Earth - Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of jupiter", location => test_location("au")) => test_zci("Jupiter, Radius is 69,911 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">69,911 km</span><span class="text--secondary objects--objectName">Jupiter, Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of jupiter", location => test_location("au")) => test_zci("Jupiter - Radius is 69,911 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">69,911 km</span><span class="text--secondary objects--objectName">Jupiter - Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of object jupiter", location => test_location("au")) => test_zci("Jupiter, Radius is 69,911 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">69,911 km</span><span class="text--secondary objects--objectName">Jupiter, Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of object jupiter", location => test_location("au")) => test_zci("Jupiter - Radius is 69,911 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">69,911 km</span><span class="text--secondary objects--objectName">Jupiter - Radius</span></span></div>}),
DDG::Request->new(query_raw => "volume of mars", location => test_location("au")) => test_zci("Mars, Volume is 163,115,609,799 km<sup>3</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">163,115,609,799 km<sup>3</sup></span><span class="text--secondary objects--objectName">Mars, Volume</span></span></div>}),
DDG::Request->new(query_raw => "volume of mars", location => test_location("au")) => test_zci("Mars - Volume is 163,115,609,799 km<sup>3</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">163,115,609,799 km<sup>3</sup></span><span class="text--secondary objects--objectName">Mars - Volume</span></span></div>}),
DDG::Request->new(query_raw => "surface area of mercury", location => test_location("au")) => test_zci("Mercury, Surface Area is 74,797,000 km<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">74,797,000 km<sup>2</sup></span><span class="text--secondary objects--objectName">Mercury, Surface Area</span></span></div>}),
DDG::Request->new(query_raw => "surface area of mercury", location => test_location("au")) => test_zci("Mercury - Surface Area is 74,797,000 km<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">74,797,000 km<sup>2</sup></span><span class="text--secondary objects--objectName">Mercury - Surface Area</span></span></div>}),
DDG::Request->new(query_raw => "mass of neptune", location => test_location("au")) => test_zci("Neptune, Mass is 102,410,000,000,000,000,000,000,000 kg", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">102,410,000,000,000,000,000,000,000 kg</span><span class="text--secondary objects--objectName">Neptune, Mass</span></span></div>}),
DDG::Request->new(query_raw => "mass of neptune", location => test_location("au")) => test_zci("Neptune - Mass is 102,410,000,000,000,000,000,000,000 kg", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">102,410,000,000,000,000,000,000,000 kg</span><span class="text--secondary objects--objectName">Neptune - Mass</span></span></div>}),
DDG::Request->new(query_raw => "area of saturn", location => test_location("au")) => test_zci("Saturn, Surface Area is 42,612,133,285 km<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="58"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">42,612,133,285 km<sup>2</sup></span><span class="text--secondary objects--objectName">Saturn, Surface Area</span></span></div>}),
DDG::Request->new(query_raw => "area of saturn", location => test_location("au")) => test_zci("Saturn - Surface Area is 42,612,133,285 km<sup>2</sup>", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="76"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">42,612,133,285 km<sup>2</sup></span><span class="text--secondary objects--objectName">Saturn - Surface Area</span></span></div>}),
DDG::Request->new(query_raw => "radius of uranus", location => test_location("au")) => test_zci("Uranus, Radius is 25,362 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">25,362 km</span><span class="text--secondary objects--objectName">Uranus, Radius</span></span></div>}),
DDG::Request->new(query_raw => "radius of uranus", location => test_location("au")) => test_zci("Uranus - Radius is 25,362 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">25,362 km</span><span class="text--secondary objects--objectName">Uranus - Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of venus", location => test_location("au")) => test_zci("Venus, Radius is 6,051.8 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,051.8 km</span><span class="text--secondary objects--objectName">Venus, Radius</span></span></div>}),
DDG::Request->new(query_raw => "size of venus", location => test_location("au")) => test_zci("Venus - Radius is 6,051.8 km", html => qr{<div class="zci--objects"><span class="objects--objectImage"><img src=".*" height="48" width="48"/></span><span class="objects--info"><span class="text--primary objects--objectAttribute">6,051.8 km</span><span class="text--secondary objects--objectName">Venus - Radius</span></span></div>}),
'size of tomato' => undef,
'volume of water' => undef,