rubynpr 0.0.1
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.
- data/History.txt +4 -0
- data/Manifest.txt +58 -0
- data/README.txt +53 -0
- data/Rakefile +16 -0
- data/bin/rubynpr +0 -0
- data/lib/rubynpr/audio.rb +43 -0
- data/lib/rubynpr/byline.rb +20 -0
- data/lib/rubynpr/client.rb +192 -0
- data/lib/rubynpr/content.rb +17 -0
- data/lib/rubynpr/exception.rb +34 -0
- data/lib/rubynpr/image.rb +34 -0
- data/lib/rubynpr/item.rb +25 -0
- data/lib/rubynpr/list.rb +47 -0
- data/lib/rubynpr/message.rb +15 -0
- data/lib/rubynpr/organization.rb +22 -0
- data/lib/rubynpr/parent.rb +24 -0
- data/lib/rubynpr/product.rb +32 -0
- data/lib/rubynpr/pull_quote.rb +12 -0
- data/lib/rubynpr/related_link.rb +26 -0
- data/lib/rubynpr/result_parser.rb +18 -0
- data/lib/rubynpr/show.rb +32 -0
- data/lib/rubynpr/story.rb +91 -0
- data/lib/rubynpr/subcategory.rb +17 -0
- data/lib/rubynpr.rb +28 -0
- data/test/audio_test.rb +24 -0
- data/test/byline_test.rb +10 -0
- data/test/client_test.rb +44 -0
- data/test/fixtures/audio.yml +32 -0
- data/test/fixtures/byline.yml +6 -0
- data/test/fixtures/client.yml +190 -0
- data/test/fixtures/image.yml +10 -0
- data/test/fixtures/item.yml +15 -0
- data/test/fixtures/list.yml +78 -0
- data/test/fixtures/list_text.xml +3 -0
- data/test/fixtures/organization.yml +11 -0
- data/test/fixtures/parent.yml +6 -0
- data/test/fixtures/product.yml +9 -0
- data/test/fixtures/pullquote.yml +6 -0
- data/test/fixtures/relatedlink.yml +6 -0
- data/test/fixtures/show.yml +6 -0
- data/test/fixtures/stories.yml +522 -0
- data/test/fixtures/story.yml +124 -0
- data/test/fixtures/subcategory.yml +59 -0
- data/test/fixtures.rb +86 -0
- data/test/image_test.rb +16 -0
- data/test/item_test.rb +18 -0
- data/test/list_test.rb +17 -0
- data/test/organization_test.rb +16 -0
- data/test/parent_test.rb +13 -0
- data/test/product_test.rb +16 -0
- data/test/pullquote_test.rb +11 -0
- data/test/related_link_test.rb +9 -0
- data/test/show_test.rb +12 -0
- data/test/story_list_test.rb +21 -0
- data/test/story_test.rb +50 -0
- data/test/subcategory_test.rb +15 -0
- data/test/test_helper.rb +12 -0
- data/test/test_rubynpr.rb +1 -0
- metadata +150 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
typical_story: >
|
2
|
+
<nprml version="0.9">
|
3
|
+
<list>
|
4
|
+
<title>Health & Science</title>
|
5
|
+
<teaser><![CDATA[The latest health and science news. Updates on medicine, healthy living, nutrition, drugs, diet, and advances in technology...]]></teaser>
|
6
|
+
<miniTeaser/>
|
7
|
+
<story id="95604667">
|
8
|
+
<link type="html">http://www.npr.org/templates/story/story.php?storyId=95604667&ft=3&f=1007</link>
|
9
|
+
<link type="api">http://api.npr.org/query?id=95604667&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001</link>
|
10
|
+
<title>Bridging Gap Between Mental, Physical Health Care</title>
|
11
|
+
<subtitle/>
|
12
|
+
<shortTitle/>
|
13
|
+
<teaser><![CDATA[Provisions slipped into the economic bail out bill mandate that employers and insurance companies give mental health issues parity with physical health issues...]]></teaser>
|
14
|
+
<miniTeaser><![CDATA[A new law says that insurance companies must give parity to mental and physical health issues.]]></miniTeaser>
|
15
|
+
<slug>Health Care</slug>
|
16
|
+
<thumbnail/>
|
17
|
+
<storyDate>Fri, 10 Oct 2008 10:00:00 -0400</storyDate>
|
18
|
+
<pubDate>Fri, 10 Oct 2008 13:20:00 -0400</pubDate>
|
19
|
+
<lastModifiedDate>Fri, 10 Oct 2008 15:39:19 -0400</lastModifiedDate>
|
20
|
+
<show>
|
21
|
+
<program id="5" code="TOTN">Talk of the Nation</program>
|
22
|
+
<showDate>Fri, 10 Oct 2008 15:39:19 -0400</showDate>
|
23
|
+
<segNum>5</segNum>
|
24
|
+
</show>
|
25
|
+
<keywords/>
|
26
|
+
<priorityKeywords/>
|
27
|
+
<organization orgId="1">
|
28
|
+
<name>National Public Radio</name>
|
29
|
+
<website type="Home Page">http://www.npr.org/</website>
|
30
|
+
</organization>
|
31
|
+
<audio id="95608227" type="primary">
|
32
|
+
<title/>
|
33
|
+
<duration>748</duration>
|
34
|
+
<format>
|
35
|
+
<mp3>http://api.npr.org/m3u/195608227-30ec0e.m3u&ft=3&f=1007</mp3>
|
36
|
+
<wm>http://www.npr.org/templates/dmg/dmg_wmref_em.php?id=95608227&type=1&mtype=WM&ft=3&f=1007</wm>
|
37
|
+
<rm>http://www.npr.org/templates/dmg/dmg_rpm.rpm?id=95608227&type=1&mtype=RM&ft=3&f=1007</rm>
|
38
|
+
</format>
|
39
|
+
<rightsHolder/>
|
40
|
+
</audio>
|
41
|
+
<image id="90300103" type="standard" width="200" src="http://media.npr.org/politics/election2008/dems/obama/obama_promo.jpg" hasBorder="true">
|
42
|
+
<title>Photo gallery of Illinois Sen. Barack Obama</title>
|
43
|
+
<caption/>
|
44
|
+
<link url="http://www.npr.org/news/images/2008/may/08/obama_slideshow/index.html"/>
|
45
|
+
<producer/>
|
46
|
+
<provider url=""/>
|
47
|
+
<copyright/>
|
48
|
+
</image>
|
49
|
+
<image id="11830103" type="standard" width="200" src="http://media.npr.org/politics/election2008/dems/obama_bio.gif" hasBorder="true">
|
50
|
+
<title>At a Glance: Barack Obama</title>
|
51
|
+
<caption/>
|
52
|
+
<link url=""/>
|
53
|
+
<producer/>
|
54
|
+
<provider url=""/>
|
55
|
+
<copyright/>
|
56
|
+
</image>
|
57
|
+
<image id="90333838" type="standard" width="200" src="http://media.npr.org/news/graphics/2008/may/funding_spending200.jpg" hasBorder="true">
|
58
|
+
<title>The Pace of the Money Race chart</title>
|
59
|
+
<caption>Chart the pace of the presidential race.</caption>
|
60
|
+
<link url="http://www.npr.org/buckets/politics/election2008/money_race.html"/>
|
61
|
+
<producer>Lindsay Mangum, NPR</producer>
|
62
|
+
<provider url=""/>
|
63
|
+
<copyright/>
|
64
|
+
</image>
|
65
|
+
<relatedLink id="96072990" type="internal">
|
66
|
+
<caption><![CDATA[Why Can't The Presidential Polls Just Get Along?]]></caption>
|
67
|
+
<link type="html">http://www.npr.org/watchingwashington/2008/10/why_cant_the_presidential_poll.html&ft=3&f=96048563</link>
|
68
|
+
</relatedLink>
|
69
|
+
<parent id="1066" type="topic">
|
70
|
+
<title>Your Health</title>
|
71
|
+
<link type="html">http://www.npr.org/templates/topics/topic.php?topicId=1066&ft=3&f=1007</link>
|
72
|
+
<link type="api">http://api.npr.org/query?id=1066&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001</link>
|
73
|
+
</parent>
|
74
|
+
<parent id="1027" type="primaryTopic">
|
75
|
+
<title>Health Care</title>
|
76
|
+
<link type="html">http://www.npr.org/templates/topics/topic.php?topicId=1027&ft=3&f=1007</link>
|
77
|
+
<link type="api">http://api.npr.org/query?id=1027&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001</link>
|
78
|
+
</parent>
|
79
|
+
<parent id="1007" type="topic">
|
80
|
+
<title>Health & Science</title>
|
81
|
+
<link type="html">http://www.npr.org/templates/topics/topic.php?topicId=1007&ft=3&f=1007</link>
|
82
|
+
<link type="api">http://api.npr.org/query?id=1007&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001</link>
|
83
|
+
</parent>
|
84
|
+
<parent id="1006" type="topic">
|
85
|
+
<title>Business</title>
|
86
|
+
<link type="html">http://www.npr.org/templates/topics/topic.php?topicId=1006&ft=3&f=1007</link>
|
87
|
+
<link type="api">http://api.npr.org/query?id=1006&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001</link>
|
88
|
+
</parent>
|
89
|
+
<container id="95605164">
|
90
|
+
<title>Related NPR Stories</title><introText/><link refId="95605169" num="1"/><link refId="95605171" num="2"/>
|
91
|
+
<link refId="95605173" num="3"/><link refId="95605173" num="4"/>
|
92
|
+
</container>
|
93
|
+
<text>
|
94
|
+
<paragraph num="1"><![CDATA[Provisions slipped into the economic bailout bill mandate that employers and insurance companies...]]></paragraph>
|
95
|
+
<paragraph num="2"><![CDATA[William C. Moyers is the vice president of external affairs at the Hazelden Foundation...]]></paragraph>
|
96
|
+
</text>
|
97
|
+
<textWithHtml>
|
98
|
+
<paragraph num="1"><![CDATA[Provisions slipped into the economic bailout bill mandate that employers and insurance companies...]]></paragraph>
|
99
|
+
<paragraph num="2"><![CDATA[William C. Moyers is the vice president of external affairs at the Hazelden Foundation...]]></paragraph>
|
100
|
+
</textWithHtml>
|
101
|
+
<product id="95605177" type="Book">
|
102
|
+
<title>Broken</title>
|
103
|
+
<author>William C. Moyers</author>
|
104
|
+
<upc>0670037893</upc>
|
105
|
+
<publisher/>
|
106
|
+
<publishYear>0</publishYear>
|
107
|
+
<purchaseLink vendor="Amazon">http://www.amazon.com/exec/obidos/ASIN/1592855512/npr-5-20</purchaseLink>
|
108
|
+
</product>
|
109
|
+
</story>
|
110
|
+
</list>
|
111
|
+
</nprml>
|
112
|
+
|
113
|
+
with_no_fields: >
|
114
|
+
<nprml version="0.9">
|
115
|
+
<list>
|
116
|
+
<title>Stories from NPR</title>
|
117
|
+
<teaser><![CDATA[Assorted stories from NPR]]></teaser>
|
118
|
+
<miniTeaser><![CDATA[Custom NPR News Feed API. Visit http://www.npr.org/templates/apidoc/index.php for more information.]]></miniTeaser>
|
119
|
+
<story id="96105723">
|
120
|
+
<link type="html">http://www.npr.org/templates/story/story.php?storyId=96105723&ft=3&f=96105723</link>
|
121
|
+
<link type="api">http://api.npr.org/query?id=96105723&apiKey=MDAyMDAzMjg3MDEyMjQ1Mjg4OTkxZjcyOQ001</link>
|
122
|
+
</story>
|
123
|
+
</list>
|
124
|
+
</nprml>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
with_one_item: >
|
2
|
+
<subcategory name="Politics & Society">
|
3
|
+
<item id="1930201" num="25" type="column">
|
4
|
+
<slug/>
|
5
|
+
<title>Political Junkie</title>
|
6
|
+
<additionalInfo>
|
7
|
+
Ken Rudin's Political Junkie column appears every Wednesday. It includes readers' questions about politics past and present.
|
8
|
+
</additionalInfo>
|
9
|
+
</item>
|
10
|
+
</subcategory>
|
11
|
+
|
12
|
+
with_multiple_items: >
|
13
|
+
<subcategory name="Books">
|
14
|
+
<item id="4467346" num="2" type="column">
|
15
|
+
<slug/>
|
16
|
+
<title>Book Reviews</title>
|
17
|
+
<additionalInfo>
|
18
|
+
Book reviews of the best new fiction and nonfiction books by NPR's Alan Cheuse, Maureen Corrigan, and Karen Grigsby Bates.
|
19
|
+
</additionalInfo>
|
20
|
+
</item>
|
21
|
+
<item id="10448909" num="3" type="column">
|
22
|
+
<slug>Summer Books 2008</slug>
|
23
|
+
<title>Book Tour</title>
|
24
|
+
<additionalInfo>
|
25
|
+
Book Tour is a Web feature and podcast. Each week, we present leading contemporary authors of both fiction and nonfiction as they read from and discuss their current work.
|
26
|
+
</additionalInfo>
|
27
|
+
</item>
|
28
|
+
<item id="91752774" num="4" type="column">
|
29
|
+
<slug>Summer Books 2008</slug>
|
30
|
+
<title>Books We Like</title>
|
31
|
+
<additionalInfo>
|
32
|
+
There are books, and then there are "Books We Like." Each week in Books We Like, our critics review their top picks for new fiction and nonfiction.
|
33
|
+
</additionalInfo>
|
34
|
+
</item>
|
35
|
+
<item id="4464351" num="5" type="column">
|
36
|
+
<slug/>
|
37
|
+
<title>Poet on Call</title>
|
38
|
+
<additionalInfo>
|
39
|
+
Poet and novelist Andrei Codrescu offers a wry twist on news culture in his commentaries for NPR.
|
40
|
+
</additionalInfo>
|
41
|
+
</item>
|
42
|
+
<item id="90796087" num="6" type="column">
|
43
|
+
<slug>Summer Books 2008</slug>
|
44
|
+
<title>Three Books...</title>
|
45
|
+
<additionalInfo>
|
46
|
+
Why three? We live in a three-dimensional world, colored with hues that break down into a trio of primary colors. Our souls (according to Plato) and our psyches (according to Freud) are trilithic. Three is a number that allows for conversation, completion, understanding. And so "Three Books..." invites writers to recommend three great reads on a single theme.
|
47
|
+
</additionalInfo>
|
48
|
+
</item>
|
49
|
+
<item id="5432412" num="7" type="column">
|
50
|
+
<slug>Summer Books 2008</slug>
|
51
|
+
<title>You Must Read This</title>
|
52
|
+
<additionalInfo>
|
53
|
+
Each week "You Must Read This" presents conversations with writers about the books they love to read and recommend.
|
54
|
+
</additionalInfo>
|
55
|
+
</item>
|
56
|
+
</subcategory>
|
57
|
+
|
58
|
+
subcategory_with_no_items: >
|
59
|
+
<subcategory name="Food"/>
|
data/test/fixtures.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# (Borrowed from Marcel Molina's aws-s3 gem.)
|
2
|
+
# When this file is loaded, for each fixture file, a module is created within the Fixtures module
|
3
|
+
# with the same name as the fixture file. For each fixture in that fixture file, a singleton method is
|
4
|
+
# added to the module with the name of the given fixture, returning the value of the fixture.
|
5
|
+
#
|
6
|
+
# For example:
|
7
|
+
#
|
8
|
+
# A fixture in <tt>story.yml</tt> named <tt>story_with_byline</tt> with value <tt><foo>hi!</foo></tt>
|
9
|
+
# would be made available like so:
|
10
|
+
#
|
11
|
+
# Fixtures::Client.bad_api_key_response
|
12
|
+
# => "<foo>bad!</foo>"
|
13
|
+
#
|
14
|
+
# Alternatively you can treat the fixture module like a hash
|
15
|
+
#
|
16
|
+
# Fixtures::Client[:bad_api_key_response]
|
17
|
+
# => "<foo>bad!</foo>"
|
18
|
+
#
|
19
|
+
# You can find out all available fixtures by calling
|
20
|
+
#
|
21
|
+
# Fixtures.fixtures
|
22
|
+
# => ["Client", "Story"]
|
23
|
+
#
|
24
|
+
# And all the fixtures contained in a given fixture by calling
|
25
|
+
#
|
26
|
+
# Fixtures::Client.fixtures
|
27
|
+
# => ["bad_api_key_response", "npr_system_error", "deactivated_api_key_res"]
|
28
|
+
#
|
29
|
+
require 'yaml'
|
30
|
+
|
31
|
+
module Fixtures
|
32
|
+
class << self
|
33
|
+
def create_fixtures
|
34
|
+
files.each do |file|
|
35
|
+
create_fixture_for(file)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_fixture_for(file)
|
40
|
+
fixtures = YAML.load_file(path(file))
|
41
|
+
fixture_module = Module.new
|
42
|
+
|
43
|
+
fixtures.each do |name, value|
|
44
|
+
fixture_module.module_eval(<<-EVAL, __FILE__, __LINE__)
|
45
|
+
def #{name}
|
46
|
+
#{value.inspect}
|
47
|
+
end
|
48
|
+
module_function :#{name}
|
49
|
+
EVAL
|
50
|
+
end
|
51
|
+
|
52
|
+
fixture_module.module_eval(<<-EVAL, __FILE__, __LINE__)
|
53
|
+
module_function
|
54
|
+
|
55
|
+
def fixtures
|
56
|
+
#{fixtures.keys.sort.inspect}
|
57
|
+
end
|
58
|
+
|
59
|
+
def [](name)
|
60
|
+
send(name) if fixtures.include?(name.to_s)
|
61
|
+
end
|
62
|
+
EVAL
|
63
|
+
|
64
|
+
const_set(module_name(file), fixture_module)
|
65
|
+
end
|
66
|
+
|
67
|
+
def fixtures
|
68
|
+
constants.sort
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def files
|
73
|
+
Dir.glob(File.dirname(__FILE__) + '/fixtures/*.yml').map {|fixture| File.basename(fixture)}
|
74
|
+
end
|
75
|
+
|
76
|
+
def module_name(file_name)
|
77
|
+
File.basename(file_name, '.*').capitalize
|
78
|
+
end
|
79
|
+
|
80
|
+
def path(file_name)
|
81
|
+
File.join(File.dirname(__FILE__), 'fixtures', file_name)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
create_fixtures
|
86
|
+
end
|
data/test/image_test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ImageFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_image
|
5
|
+
image = Image.new(Hpricot.XML(Fixtures::Image.typical_image).at('image'))
|
6
|
+
assert_equal '92343313', image.id
|
7
|
+
assert_equal 'standard', image.type
|
8
|
+
assert_equal 'Summer Books Main Page', image.title
|
9
|
+
assert_equal 'http://media.npr.org/books/summer/2008/promo_165X40.jpg', image.source
|
10
|
+
assert_equal '', image.caption
|
11
|
+
assert_equal '', image.producer
|
12
|
+
assert_equal '', image.copyright
|
13
|
+
assert_equal 'false', image.border
|
14
|
+
assert_equal 'http://www.npr.org/templates/story/story.php?storyId=90589316', image.link
|
15
|
+
end
|
16
|
+
end
|
data/test/item_test.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ItemFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_item_without_slug
|
5
|
+
item = Item.new(Hpricot.XML(Fixtures::Item.item_without_slug).at('item'))
|
6
|
+
assert_equal '4499275', item.id
|
7
|
+
assert_equal '10', item.number
|
8
|
+
assert_equal 'column', item.type
|
9
|
+
assert_equal '', item.slug
|
10
|
+
assert_equal 'Sweetness And Light', item.title
|
11
|
+
assert_equal "Frank Deford's weekly commentary on sports appears Wednesdays on NPR.org.", item.additional_info
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_create_item_with_slug
|
15
|
+
item = Item.new(Hpricot.XML(Fixtures::Item.item_with_slug).at('item'))
|
16
|
+
assert_equal 'NPR People', item.slug
|
17
|
+
end
|
18
|
+
end
|
data/test/list_test.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ListFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_list_without_subcategories
|
5
|
+
list = TopicList.new(Hpricot.XML(Fixtures::List.without_subcategories).at('list'))
|
6
|
+
assert_equal 'All Topics', list.title
|
7
|
+
assert_equal '3002', list.type_id
|
8
|
+
assert_equal '3002', list.id
|
9
|
+
assert_equal false, list.has_subcategories
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_create_list_with_subcategories
|
13
|
+
list = TopicList.new(Hpricot.XML(Fixtures::List.with_subcategories).at('list'))
|
14
|
+
assert_equal true, list.has_subcategories
|
15
|
+
assert_equal 2, list.subcategories.size
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class OrganizationFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_organization_with_abbreviation
|
5
|
+
org = Organization.new(Hpricot.XML(Fixtures::Organization.org_with_abbreviation).at('organization'))
|
6
|
+
assert_equal 'National Public Radio', org.name
|
7
|
+
assert_equal '1', org.id
|
8
|
+
assert_equal 'NPR', org.abbr
|
9
|
+
assert_equal 'http://www.npr.org', org.website
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_create_organization_without_abbreviation
|
13
|
+
org = Organization.new(Hpricot.XML(Fixtures::Organization.org_without_abbreviation).at('organization'))
|
14
|
+
assert_nil org.abbr
|
15
|
+
end
|
16
|
+
end
|
data/test/parent_test.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ParentFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_parent
|
5
|
+
parent = Parent.new(Hpricot.XML(Fixtures::Parent.typical_parent).at('parent'))
|
6
|
+
assert_equal '1027', parent.id
|
7
|
+
assert_equal 'primaryTopic', parent.type
|
8
|
+
assert_equal 'Health Care', parent.title
|
9
|
+
assert_kind_of Hash, parent.link
|
10
|
+
assert_equal 'http://api.npr.org/query?id=1027&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001', parent.link[:api]
|
11
|
+
assert_equal 'http://www.npr.org/templates/topics/topic.php?topicId=1027&ft=3&f=1007', parent.link[:html]
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ProductFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_product_as_book
|
5
|
+
product = Product.new(Hpricot.XML(Fixtures::Product.book).at('product'))
|
6
|
+
assert_equal '94639520', product.id
|
7
|
+
assert_equal 'Book', product.type
|
8
|
+
assert_equal 'Ordinary People', product.title
|
9
|
+
assert_equal 'Judith Guest', product.author
|
10
|
+
assert_equal '', product.publisher
|
11
|
+
assert_equal '0', product.year
|
12
|
+
assert_equal '0140065172', product.upc
|
13
|
+
assert_equal 'Amazon', product.link[:vendor]
|
14
|
+
assert_equal 'http://www.amazon.com/exec/obidos/ASIN/0140065172/npr-5-20', product.link[:uri]
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class PullQuoteFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_pullquote
|
5
|
+
pullquote = PullQuote.new(Hpricot.XML(Fixtures::Pullquote.typical_pullquote).at('pullQuote'))
|
6
|
+
assert_equal '95611389', pullquote.id
|
7
|
+
assert_equal 'Robert Stone', pullquote.person
|
8
|
+
assert_equal 'Both [McCain and Obama] in their way are tough guys, and their code is inherent in Robert Jordan. ... Hemingway kind of created the idea of the anti-fascist hero.',
|
9
|
+
pullquote.text
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class RelatedLinksFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_related_link
|
5
|
+
rel_link = RelatedLink.new(Hpricot.XML(Fixtures::Relatedlink.typical_link).at('relatedLink'))
|
6
|
+
assert_equal 'Bernanke Hints At Rate Cuts', rel_link.caption
|
7
|
+
assert_equal 'http://www.npr.org/templates/story/story.php?storyId=95484248&ft=3&f=1006', rel_link.uri[:html]
|
8
|
+
end
|
9
|
+
end
|
data/test/show_test.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class ShowTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_typical_show
|
5
|
+
show = Show.new(Hpricot.XML(Fixtures::Show.typical_show))
|
6
|
+
assert_equal '5', show.segment
|
7
|
+
assert_equal 'Talk of the Nation', show.program[:name]
|
8
|
+
assert_equal '5', show.program[:id]
|
9
|
+
assert_equal 'TOTN', show.program[:code]
|
10
|
+
assert_equal DateTime.new(2008, 10, 10, 15, 39, 19, DateTime.now.offset), show.date
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class StoryListFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_story_list_with_three_stories
|
5
|
+
stories = StoryList.new(Hpricot.XML(Fixtures::Stories.story_result_listing))
|
6
|
+
assert_equal 5, stories.list.length
|
7
|
+
assert_equal 'Business', stories.title
|
8
|
+
assert_equal '', stories.mini_teaser
|
9
|
+
assert_equal 'Find the latest business news with reports on Wall Street, interest rates, banking, companies, and U.S. and world financial markets. Subscribe to the Business Story of the Day podcast.',
|
10
|
+
stories.teaser
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_create_story_list_with_one_story
|
14
|
+
stories = StoryList.new(Hpricot.XML(Fixtures::Story.typical_story))
|
15
|
+
assert_equal 1, stories.list.length
|
16
|
+
assert_equal 'Health & Science', stories.title
|
17
|
+
assert_equal 'The latest health and science news. Updates on medicine, healthy living, nutrition, drugs, diet, and advances in technology...',
|
18
|
+
stories.teaser
|
19
|
+
assert_equal '', stories.mini_teaser
|
20
|
+
end
|
21
|
+
end
|
data/test/story_test.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class StoryFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_story_with_all_fields
|
5
|
+
story = Story.new(Hpricot.XML(Fixtures::Story.typical_story).at('story'))
|
6
|
+
assert_equal '95604667', story.id
|
7
|
+
assert_equal 'Bridging Gap Between Mental, Physical Health Care', story.title
|
8
|
+
assert_equal '', story.subtitle
|
9
|
+
assert_equal 'Health Care', story.slug
|
10
|
+
assert_equal 'Provisions slipped into the economic bail out bill mandate that employers and insurance companies give mental health issues parity with physical health issues...', \
|
11
|
+
story.teaser
|
12
|
+
assert_equal 'A new law says that insurance companies must give parity to mental and physical health issues.', story.mini_teaser
|
13
|
+
assert_equal 'http://api.npr.org/query?id=95604667&apiKey=MDAyMDAzMjg3MDEyMjMwMTgyODA0NWNlMg001', story.link[:api]
|
14
|
+
assert_equal 'http://www.npr.org/templates/story/story.php?storyId=95604667&ft=3&f=1007', story.link[:html]
|
15
|
+
assert_equal DateTime.new(2008, 10, 10, 13, 20, 0, DateTime.now.offset), story.publication_date
|
16
|
+
assert_equal DateTime.new(2008, 10, 10, 10, 0, 0, DateTime.now.offset), story.story_date
|
17
|
+
assert_equal DateTime.new(2008, 10, 10, 15, 39, 19, DateTime.now.offset), story.last_modified
|
18
|
+
assert_kind_of Organization, story.organization
|
19
|
+
assert_kind_of Show, story.show
|
20
|
+
assert_kind_of Audio, story.audio
|
21
|
+
assert_kind_of Array, story.parents
|
22
|
+
assert_kind_of Array, story.products
|
23
|
+
assert_kind_of Array, story.related_links
|
24
|
+
assert_equal 2, story.plain_text.length
|
25
|
+
assert_equal 2, story.html_text.length
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_create_story_with_no_fields
|
29
|
+
story = Story.new(Hpricot.XML(Fixtures::Story.with_no_fields).at('story'))
|
30
|
+
assert_equal('96105723', story.id)
|
31
|
+
assert_equal 'http://www.npr.org/templates/story/story.php?storyId=96105723&ft=3&f=96105723', story.link[:html]
|
32
|
+
assert_equal 'http://api.npr.org/query?id=96105723&apiKey=MDAyMDAzMjg3MDEyMjQ1Mjg4OTkxZjcyOQ001', story.link[:api]
|
33
|
+
assert_nil story.title
|
34
|
+
assert_nil story.slug
|
35
|
+
assert_nil story.subtitle
|
36
|
+
assert_nil story.teaser
|
37
|
+
assert_nil story.mini_teaser
|
38
|
+
assert_nil story.publication_date
|
39
|
+
assert_nil story.story_date
|
40
|
+
assert_nil story.last_modified
|
41
|
+
assert_nil story.organization
|
42
|
+
assert_nil story.show
|
43
|
+
assert_nil story.audio
|
44
|
+
assert_nil story.parents
|
45
|
+
assert_nil story.products
|
46
|
+
assert_nil story.related_links
|
47
|
+
assert_nil story.plain_text
|
48
|
+
assert_nil story.html_text
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_rubynpr.rb'
|
2
|
+
|
3
|
+
class SubcategoryFromNPRMLTest < Test::Unit::TestCase
|
4
|
+
def test_should_create_subcategory_with_one_item
|
5
|
+
subcategory = Subcategory.new(Hpricot.XML(Fixtures::Subcategory.with_one_item).at('subcategory'))
|
6
|
+
assert_equal 1, subcategory.items.length
|
7
|
+
assert_equal 'Politics & Society', subcategory.name
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_should_create_subcategory_with_multiple_items
|
11
|
+
subcategory = Subcategory.new(Hpricot.XML(Fixtures::Subcategory.with_multiple_items).at('subcategory'))
|
12
|
+
assert_equal 6, subcategory.items.length
|
13
|
+
assert_equal 'Books', subcategory.name
|
14
|
+
end
|
15
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|