podrick 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/test/helper.rb ADDED
@@ -0,0 +1,12 @@
1
+ begin
2
+ require 'pry'
3
+ rescue LoadError
4
+ end
5
+
6
+ require 'minitest/unit'
7
+ require 'minitest/pride'
8
+ require 'minitest/autorun'
9
+
10
+ require 'webmock/minitest'
11
+
12
+ require 'podrick'
@@ -0,0 +1,72 @@
1
+ require 'helper'
2
+
3
+ module Podrick
4
+ class TestEpisode < MiniTest::Unit::TestCase
5
+ describe "episode loading" do
6
+ it "loads the metadata from a nokogiri xml doc" do
7
+ item_xml = Nokogiri::XML(File.read('test/assets/back_to_work.xml')).at_xpath("//item")
8
+ episode = Episode.new(item_xml)
9
+
10
+ assert_equal "Back to Work 105: Fissures of Men", episode.title
11
+ assert_equal "http://5by5.tv/b2w/105", episode.link
12
+ assert_equal "http://5by5.tv/b2w/105", episode.guid
13
+ assert_equal Time.parse("2013-02-05 20:30:00 GMT"), episode.published_date
14
+ assert episode.description.include?("he and Dan talk about a bunch of cool apps")
15
+ assert_equal "http://d.ahoy.co/redirect.mp3/fly.5by5.tv/audio/broadcasts/b2w/2013/b2w-105.mp3", episode.enclosure.url
16
+ assert_equal "40815332", episode.enclosure.length
17
+ assert_equal "audio/mpeg", episode.enclosure.type
18
+ assert episode.content.include?("<p>This week, Merlin is delirious and may be in a fugue state, so he and Dan talk about a bunch of cool apps and gadgets--stuff that Merlin likes and really recommends.</p>")
19
+ assert_equal "Merlin Mann & Dan Benjamin", episode.itunes.author
20
+ assert_equal "1:24:27", episode.itunes.duration
21
+ assert_equal "TOPIC: Cool stuff Merlin loves.", episode.itunes.subtitle
22
+ assert episode.itunes.summary.include?("This week, Merlin is delirious and may be in a fugue state, so he and Dan talk about a bunch of cool apps")
23
+ assert_equal "productivity, communication, work, barriers, constraints, tools, gadgets", episode.itunes.keywords
24
+ assert_equal "http://icebox.5by5.tv/images/broadcasts/19/cover.jpg", episode.itunes.image.href
25
+ end
26
+
27
+ it "loads the metadata from another format" do
28
+ item_xml = Nokogiri::XML(File.read('test/assets/radio_lab.xml')).at_xpath("//item")
29
+ episode = Episode.new(item_xml)
30
+
31
+ assert_equal "Speed\n", episode.title
32
+ assert_equal "http://feeds.wnyc.org/~r/radiolab/~3/aD0MohGPUvo/", episode.link
33
+ assert_equal "http://www.radiolab.org/2013/feb/05/", episode.guid
34
+ assert_equal Time.parse("2013-02-05 17:35:00 -0500"), episode.published_date
35
+ assert episode.description.include?("We live our lives at human speed, we experience and interact with the world")
36
+ assert_equal "http://feeds.wnyc.org/~r/radiolab/~5/HrqM1JwInZE/radiolab020513.mp3", episode.enclosure.url
37
+ assert_equal "0", episode.enclosure.length
38
+ assert_equal "audio/mpeg", episode.enclosure.type
39
+ assert_equal nil, episode.content
40
+ assert_equal "Jad Abumrad & Robert Krulwich", episode.itunes.author
41
+ assert_equal nil, episode.itunes.duration
42
+ assert_equal " We live our lives at human speed, we experience and interact with the world on a human time scale. But this hour, we put ourselves through the paces, peek inside a microsecond, and master the fastest thing in the universe. ", episode.itunes.subtitle
43
+ assert episode.itunes.summary.include?("We live our lives at human speed, we experience and interact with the world on a human time scale.")
44
+ assert_equal "Science,Technology,Philosophy,Education,radiolab,jad,abumrad,krulwich,Radio,Lab", episode.itunes.keywords
45
+ assert_equal nil, episode.itunes.image.href
46
+ end
47
+
48
+ it "loads the metadata removing images in description" do
49
+ item_xml = Nokogiri::XML(File.read('test/assets/you_look_nice_today.xml')).at_xpath("//item")
50
+ episode = Episode.new(item_xml)
51
+
52
+ assert episode.description.include?("As part of a pilot program")
53
+
54
+ assert !episode.description.include?("<img src"), "Description still contains img tag"
55
+ assert !episode.description.include?("https://dl.dropbox.com/u/3423/i/ylnt/ylnt_s02e11_wish/ylnt_s02e11.jpg"), "Description still contains image url"
56
+ assert !episode.description.include?("http://feeds.feedburner.com/~r/YouLookNiceToday/~4/CLx_UnRTK2U"), "Description still contains tracking image url"
57
+ assert episode.itunes.summary.include?("You win awards by confusing people.")
58
+
59
+ assert_equal 2, episode.images.count
60
+ end
61
+
62
+ it "loads another failing format" do
63
+ item_xml = Nokogiri::XML(File.read('test/assets/roderick_on_the_line.xml')).at_xpath("//item")
64
+ episode = Episode.new(item_xml)
65
+
66
+ assert_equal nil, episode.content, "Episode description should be nil"
67
+ assert episode.description.include?("<strong>The Problem</strong>"), "Episode description does not contain first given string"
68
+ assert episode.description.include?("in a mine shaft"), "Episode description does not contain second given string"
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,91 @@
1
+ require 'helper'
2
+
3
+ module Podrick
4
+ class TestPodcast < MiniTest::Unit::TestCase
5
+ describe "podcast metadata loading" do
6
+ it "loads the metadata from xml" do
7
+ podcast = Podcast.from_xml(File.read('test/assets/back_to_work.xml'))
8
+ assert_equal "Back to Work", podcast.title
9
+ assert_equal "http://5by5.tv/b2w", podcast.link
10
+
11
+ description = "Back to Work is an award winning talk show with Merlin Mann and Dan Benjamin discussing productivity, communication, work, barriers, constraints, tools, and more. Hosted by Merlin Mann & Dan Benjamin."
12
+ assert_equal description, podcast.description
13
+
14
+ assert_equal "en-us", podcast.language
15
+
16
+ assert_equal "Back to Work", podcast.itunes.subtitle
17
+ assert_equal "5by5", podcast.itunes.author
18
+ assert_equal description, podcast.itunes.summary
19
+ assert_equal "http://icebox.5by5.tv/images/broadcasts/19/cover.jpg", podcast.itunes.image.href
20
+ assert_equal "productivity, communication, work, barriers, constraints, tools", podcast.itunes.keywords
21
+ assert_equal "no", podcast.itunes.explicit
22
+ assert_equal "5by5 Broadcasting", podcast.itunes.owner.name
23
+ assert_equal "itunes@5by5.tv", podcast.itunes.owner.email
24
+ assert_equal "Technology", podcast.itunes.category
25
+ assert_equal "Software How-To", podcast.itunes.subcategories[0]
26
+ assert_equal "Tech News", podcast.itunes.subcategories[1]
27
+ end
28
+
29
+ it "loads the metadata from feed url" do
30
+ stub_request(:get, "http://feeds.feedburner.com/unprofessional-podcast")
31
+ .to_return(:body => File.read('test/assets/unprofessional.xml'))
32
+
33
+ podcast = Podcast.from_url("http://feeds.feedburner.com/unprofessional-podcast")
34
+ assert_equal "Unprofessional", podcast.title
35
+ assert_equal "http://muleradio.net/unprofessional", podcast.link
36
+
37
+ description = "Lex and Dave have unprofessional conversations with interesting people."
38
+
39
+ assert_equal description, podcast.description
40
+ assert_equal "en", podcast.language
41
+
42
+ # itunes info
43
+ assert_equal description, podcast.itunes.subtitle
44
+ assert_equal "Mule Radio Syndicate", podcast.itunes.author
45
+ assert_equal description, podcast.itunes.summary
46
+ assert_equal "http://media.muleradio.net/images/shows/unprofessional/itunes.jpg", podcast.itunes.image.href
47
+ assert_equal "lex friedman, dave wiskus, unprofessional, origin stories", podcast.itunes.keywords
48
+ assert_equal "no", podcast.itunes.explicit
49
+ assert_equal " Dave Wiskus and Lex Friedman ", podcast.itunes.owner.name
50
+ assert_equal "unprofessional@muleradio.net", podcast.itunes.owner.email
51
+ assert_equal "Society & Culture", podcast.itunes.category
52
+ assert_equal " Personal Journals", podcast.itunes.subcategories[0]
53
+ end
54
+
55
+ it "loads the metadata from another format" do
56
+ stub_request(:get, "http://rss.earwolf.com/by-the-way-in-conversation-with-jeff-garlin")
57
+ .to_return(:body => File.read('test/assets/by_the_way.xml'))
58
+
59
+ podcast = Podcast.from_url("http://rss.earwolf.com/by-the-way-in-conversation-with-jeff-garlin")
60
+ assert_equal "By The Way, In Conversation with Jeff Garlin", podcast.title
61
+ assert_equal "http://www.earwolf.com/show/by-the-way-in-conversation-with-jeff-garlin/", podcast.link
62
+
63
+ description = "By The Way, In Conversation with Jeff Garlin is an eavesdroppers paradise. Recorded live at Largo in LA, its a series of casual talks between the host and his most interesting show business friends. Agendas are out the window and no topics are off limits in these revealing chats."
64
+
65
+ assert_equal description, podcast.description
66
+ assert_equal "en-us", podcast.language
67
+
68
+ # itunes info
69
+ assert_equal "", podcast.itunes.subtitle
70
+ assert_equal "Earwolf", podcast.itunes.author
71
+ assert_equal "", podcast.itunes.summary
72
+ assert_equal "http://cdn.earwolf.com/wp-content/uploads/2013/01/BTW-Logo.jpg", podcast.itunes.image.href
73
+ assert_equal nil, podcast.itunes.keywords
74
+ assert_equal "Yes", podcast.itunes.explicit
75
+ assert_equal "Earwolf", podcast.itunes.owner.name
76
+ assert_equal "jeff@earwolf.com", podcast.itunes.owner.email
77
+ assert_equal "Comedy", podcast.itunes.category
78
+ assert_equal nil, podcast.itunes.subcategories[0]
79
+ end
80
+ end
81
+
82
+ describe "podcast episode loading" do
83
+ it "loads each episode from xml" do
84
+ podcast = Podcast.from_xml(File.read('test/assets/back_to_work.xml'))
85
+ assert_equal 105, podcast.episodes.length
86
+ assert_kind_of Episode, podcast.episodes.first
87
+ end
88
+ end
89
+ end
90
+ end
91
+
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: podrick
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Scott Bader
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.5.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ description: Podrick is a library that allows you to quickly, and easily work with
70
+ a podcast feed. You can parse a feed, see the newest episodes, and download files
71
+ email: sbader2@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .bundle/config
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - README.md
80
+ - Rakefile
81
+ - bin/coderay
82
+ - bin/nokogiri
83
+ - bin/pry
84
+ - test/assets/back_to_work.xml
85
+ - test/assets/by_the_way.xml
86
+ - test/assets/radio_lab.xml
87
+ - test/assets/roderick_on_the_line.xml
88
+ - test/assets/unprofessional.xml
89
+ - test/assets/you_look_nice_today.xml
90
+ - test/helper.rb
91
+ - test/podrick/test_episode.rb
92
+ - test/podrick/test_podcast.rb
93
+ homepage: http://sbader.github.com/castpod
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.0.3
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: A simple library to work with podcasts
117
+ test_files:
118
+ - test/assets/back_to_work.xml
119
+ - test/assets/by_the_way.xml
120
+ - test/assets/radio_lab.xml
121
+ - test/assets/roderick_on_the_line.xml
122
+ - test/assets/unprofessional.xml
123
+ - test/assets/you_look_nice_today.xml
124
+ - test/helper.rb
125
+ - test/podrick/test_episode.rb
126
+ - test/podrick/test_podcast.rb