feed-abstract 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/feed-abstract.gemspec +3 -2
- data/lib/feed-abstract/channel/atom.rb +4 -0
- data/lib/feed-abstract/channel/rss.rb +1 -1
- data/lib/feed-abstract/item/atom.rb +3 -0
- data/lib/feed-abstract/mixins.rb +6 -0
- data/lib/feed-abstract/version.rb +1 -1
- data/spec/feed_abstract_channel_spec.rb +18 -0
- data/spec/feed_abstract_item_spec.rb +14 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/test_data/twitter_hashtag.atom +2 -0
- metadata +13 -12
data/.gitignore
CHANGED
data/feed-abstract.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "feed-abstract"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Daniel Collis-Puro"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-03-20"
|
13
13
|
s.description = "This library creates a common object graph for the RSS/Atom/RDF parsing classes in the ruby standard library. This allows you parse different feed formats and get back the same (or at least a very similar) set of results - item authors are accessible under an \"author(s)\" attribute, categories/tags/subjects are accessible under \"category(ies)\" attributes, etc. We do our best to make sure the data makes sense, too - RSS items lack an \"updated\" attribute, so we use \"pubDate\" to populate it. "
|
14
14
|
s.email = ["djcp@cyber.law.harvard.edu"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,6 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
"spec/test_data/katanapg.atom",
|
50
50
|
"spec/test_data/oa.africa.rss",
|
51
51
|
"spec/test_data/pyblosxom.atom",
|
52
|
+
"spec/test_data/twitter_hashtag.atom",
|
52
53
|
"spec/test_data/zotero.rss"
|
53
54
|
]
|
54
55
|
s.homepage = "https://github.com/berkmancenter/feed-abstract"
|
@@ -30,6 +30,10 @@ module FeedAbstract
|
|
30
30
|
def generator
|
31
31
|
if self.link.match(/zotero\.org/)
|
32
32
|
return 'Zotero'
|
33
|
+
elsif self.link.match(/wordpress\.com/)
|
34
|
+
return 'WordPress'
|
35
|
+
elsif self.link.match(/https?:\/\/.*\.?twitter\.com/i)
|
36
|
+
return 'Twitter'
|
33
37
|
end
|
34
38
|
return '' if @feed.generator.nil?
|
35
39
|
@feed.generator.content
|
@@ -30,7 +30,7 @@ module FeedAbstract
|
|
30
30
|
return 'WordPress'
|
31
31
|
elsif @feed.channel.link.match(/www\.delicious\.com/i)
|
32
32
|
return 'Delicious'
|
33
|
-
elsif @feed.channel.link.match(/https
|
33
|
+
elsif @feed.channel.link.match(/https?:\/\/.*\.?twitter\.com/i)
|
34
34
|
return 'Twitter'
|
35
35
|
end
|
36
36
|
return '' if @feed.channel.generator.nil?
|
data/lib/feed-abstract/mixins.rb
CHANGED
@@ -37,6 +37,9 @@ module FeedAbstractMixins
|
|
37
37
|
|
38
38
|
# An array of author names
|
39
39
|
def authors
|
40
|
+
if self.respond_to?(:channel) && self.channel.generator == 'Twitter'
|
41
|
+
return [@source.author.name.content.split(' ')[0]]
|
42
|
+
end
|
40
43
|
return [] if @source.authors.empty?
|
41
44
|
@source.authors.collect{|au| au.name.content}.reject{|au| au == '' || au.match(/^\s+$/)}
|
42
45
|
end
|
@@ -49,6 +52,9 @@ module FeedAbstractMixins
|
|
49
52
|
|
50
53
|
# The categories list as an array.
|
51
54
|
def categories
|
55
|
+
if self.respond_to?(:channel) && self.channel.generator == 'Twitter'
|
56
|
+
return @source.title.content.scan(/#([^#\s]+)/).flatten
|
57
|
+
end
|
52
58
|
return [] if @source.categories.empty?
|
53
59
|
@source.categories.collect{|c| c.term}.reject{|c| c == '' || c.match(/^\s+$/)}
|
54
60
|
end
|
@@ -20,6 +20,7 @@ module FeedAbstract
|
|
20
20
|
it { @pyblosxom.channel.should respond_to att}
|
21
21
|
it { @chill.channel.should respond_to att}
|
22
22
|
it { @twitter.channel.should respond_to att}
|
23
|
+
it { @twitter_atom.channel.should respond_to att}
|
23
24
|
|
24
25
|
it { @docatom.channel.send(att).should_not == false}
|
25
26
|
it { @kpgatom.channel.send(att).should_not == false}
|
@@ -32,6 +33,7 @@ module FeedAbstract
|
|
32
33
|
it { @pyblosxom.channel.send(att).should_not == false}
|
33
34
|
it { @chill.channel.send(att).should_not == false}
|
34
35
|
it { @twitter.channel.send(att).should_not == false}
|
36
|
+
it { @twitter_atom.channel.send(att).should_not == false}
|
35
37
|
end
|
36
38
|
|
37
39
|
it "should have the correct title" do
|
@@ -46,6 +48,7 @@ module FeedAbstract
|
|
46
48
|
@pyblosxom.channel.title.should == 'Copyrighteous'
|
47
49
|
@chill.channel.title.should == 'Chilling Effects Clearinghouse Weather Reports'
|
48
50
|
@twitter.channel.title.should == 'Twitter / djcp'
|
51
|
+
@twitter_atom.channel.title.should == '#rails - Twitter Search'
|
49
52
|
end
|
50
53
|
|
51
54
|
it "should have the correct subtitle and description" do
|
@@ -81,6 +84,9 @@ module FeedAbstract
|
|
81
84
|
|
82
85
|
@twitter.channel.description.should == 'Twitter updates from Daniel Collis Puro / djcp.'
|
83
86
|
@twitter.channel.subtitle.should == 'Twitter updates from Daniel Collis Puro / djcp.'
|
87
|
+
|
88
|
+
@twitter_atom.channel.description.should == ''
|
89
|
+
@twitter_atom.channel.subtitle.should == ''
|
84
90
|
end
|
85
91
|
|
86
92
|
it "should have the correct link" do
|
@@ -95,6 +101,7 @@ module FeedAbstract
|
|
95
101
|
@pyblosxom.channel.link.should == 'http://mako.cc/copyrighteous'
|
96
102
|
@chill.channel.link.should == 'http://www.chillingeffects.org'
|
97
103
|
@twitter.channel.link.should == 'http://twitter.com/djcp'
|
104
|
+
@twitter_atom.channel.link.should == 'http://search.twitter.com/search?q=%23rails'
|
98
105
|
end
|
99
106
|
|
100
107
|
it "should have the correct generator" do
|
@@ -109,6 +116,7 @@ module FeedAbstract
|
|
109
116
|
@pyblosxom.channel.generator.should == "\nPyBlosxom http://pyblosxom.sourceforge.net/ 1.5rc2 20100803\n"
|
110
117
|
@chill.channel.generator.should == ''
|
111
118
|
@twitter.channel.generator.should == 'Twitter'
|
119
|
+
@twitter_atom.channel.generator.should == 'Twitter'
|
112
120
|
end
|
113
121
|
|
114
122
|
it "should have the correct language" do
|
@@ -123,6 +131,7 @@ module FeedAbstract
|
|
123
131
|
@pyblosxom.channel.language.should == 'en'
|
124
132
|
@chill.channel.language.should == 'en-us'
|
125
133
|
@twitter.channel.language.should == 'en-us'
|
134
|
+
@twitter_atom.channel.language.should == 'en-US'
|
126
135
|
end
|
127
136
|
|
128
137
|
it "should have the correct authors" do
|
@@ -137,6 +146,7 @@ module FeedAbstract
|
|
137
146
|
@pyblosxom.channel.authors.should == ['Benjamin Mako Hill']
|
138
147
|
@chill.channel.authors.should == ['Wendy Seltzer, wseltzer@chillingeffects.org']
|
139
148
|
@twitter.channel.authors.should == []
|
149
|
+
@twitter_atom.channel.authors.should == []
|
140
150
|
|
141
151
|
@docatom.channel.author.should == 'Doc Searls'
|
142
152
|
@kpgatom.channel.author.should == 'Nick Pappas'
|
@@ -149,6 +159,7 @@ module FeedAbstract
|
|
149
159
|
@pyblosxom.channel.author.should == 'Benjamin Mako Hill'
|
150
160
|
@chill.channel.author.should == 'Wendy Seltzer, wseltzer@chillingeffects.org'
|
151
161
|
@twitter.channel.author.should == ''
|
162
|
+
@twitter_atom.channel.author.should == ''
|
152
163
|
|
153
164
|
end
|
154
165
|
|
@@ -164,6 +175,7 @@ module FeedAbstract
|
|
164
175
|
@pyblosxom.channel.categories.should == []
|
165
176
|
@chill.channel.categories.should == ['Your rights online']
|
166
177
|
@twitter.channel.categories.should == []
|
178
|
+
@twitter_atom.channel.categories.should == []
|
167
179
|
|
168
180
|
@docatom.channel.category.should == ''
|
169
181
|
@kpgatom.channel.category.should == 'photos'
|
@@ -176,6 +188,7 @@ module FeedAbstract
|
|
176
188
|
@pyblosxom.channel.category.should == ''
|
177
189
|
@chill.channel.category.should == 'Your rights online'
|
178
190
|
@twitter.channel.category.should == ''
|
191
|
+
@twitter_atom.channel.category.should == ''
|
179
192
|
end
|
180
193
|
|
181
194
|
it "should have the correct icon" do
|
@@ -190,6 +203,7 @@ module FeedAbstract
|
|
190
203
|
@pyblosxom.channel.icon.should == ''
|
191
204
|
@chill.channel.icon.should == 'http://images.chillingeffects.org/chilling_effects.gif'
|
192
205
|
@twitter.channel.icon.should == ''
|
206
|
+
@twitter_atom.channel.icon.should == ''
|
193
207
|
end
|
194
208
|
|
195
209
|
it "should have the correct logo" do
|
@@ -204,6 +218,7 @@ module FeedAbstract
|
|
204
218
|
@pyblosxom.channel.logo.should == ''
|
205
219
|
@chill.channel.logo.should == 'http://images.chillingeffects.org/chilling_effects.gif'
|
206
220
|
@twitter.channel.logo.should == ''
|
221
|
+
@twitter_atom.channel.logo.should == ''
|
207
222
|
end
|
208
223
|
|
209
224
|
it "should have the correct rights" do
|
@@ -218,6 +233,7 @@ module FeedAbstract
|
|
218
233
|
@pyblosxom.channel.rights.should == 'Creative Commons Attribution-ShareAlike'
|
219
234
|
@chill.channel.rights.should == ''
|
220
235
|
@twitter.channel.rights.should == ''
|
236
|
+
@twitter_atom.channel.rights.should == ''
|
221
237
|
end
|
222
238
|
|
223
239
|
it "should have the correct updated value" do
|
@@ -232,6 +248,7 @@ module FeedAbstract
|
|
232
248
|
@pyblosxom.channel.updated.should == Time.parse('2011-09-15T05:21:00Z')
|
233
249
|
@chill.channel.updated.should == Time.parse('2002-02-25T12:00+00:00')
|
234
250
|
@twitter.channel.updated.should == ''
|
251
|
+
@twitter_atom.channel.updated.should == Time.parse('2012-03-19 21:56:03 UTC')
|
235
252
|
end
|
236
253
|
|
237
254
|
it "should have the correct guid" do
|
@@ -246,6 +263,7 @@ module FeedAbstract
|
|
246
263
|
@pyblosxom.channel.guid.should == 'http://mako.cc/copyrighteous/'
|
247
264
|
@chill.channel.guid.should == 'http://www.chillingeffects.org'
|
248
265
|
@twitter.channel.guid.should == 'http://twitter.com/djcp'
|
266
|
+
@twitter_atom.channel.guid.should == 'tag:search.twitter.com,2005:search/#rails'
|
249
267
|
end
|
250
268
|
end
|
251
269
|
end
|
@@ -33,6 +33,7 @@ module FeedAbstract
|
|
33
33
|
@pyblosxomitem.title.should == "Anxiety\n"
|
34
34
|
@chillitem.title.should == "Takedown Complaints in the Android Marketplace"
|
35
35
|
@twitteritem.title.should == "djcp: @csoghoian @BrookingsInst and the clipboard as well, presumably. #security #keylogging"
|
36
|
+
@twitteratomitem.title.should == "Senior #Ruby on #Rails developer(s) http://t.co/rvqsIK0h #jobs"
|
36
37
|
|
37
38
|
end
|
38
39
|
|
@@ -53,6 +54,7 @@ module FeedAbstract
|
|
53
54
|
@chillitem.summary.should == %Q$<br>\n<img src=\"//images.chillingeffects.org/thermometer.gif\" alt=\"thermometer\" width=\"35\" height=\"120\"align=left> <h2>Takedown Complaints in the Android Marketplace</h2><p>Wendy Seltzer, <i>Chilling Effects Clearinghouse</i>, March 3, 2011\n<p><i>Abstract:</i> Earlier this year, Google began sending to Chilling Effects the requests it received for takedown from the Android Marketplace. Since this represents a new source of data, we take a look at the first month's input, February 2011.<hr size=1>\n<p><hr size=1 width=\"75%\"><p>Since Apple launched its iPhone App Store, applications marketplaces have popped up with increasing prominence. Google, unlike Apple<a href=\"#note1\" name=\"back\">*</a>, does not lock Android users into purchasing from its <a href=\"https://market.android.com/\">Android Market</a>, but it does make that marketplace a convenient place to find Android applications (<a href=\"http://mashable.com/2010/10/25/android-100000-apps/\">passing 100,000 apps</a> late last year). <br><p><br>In February, Chilling Effects <a href=\"https://www.chillingeffects.org/search.cgi?search=Android\">saw</a> 206 complaints to Google regarding Android Market apps, almost evenly split between trademark and copyright.<a href=\"#note2\" name=\"back2\">*</a> Because the Android Market offers commercial transactions, its context differs somewhat from the search and blog hosting in which DMCA -- copyright -- complaints predominate. At the same time, many apps are offered free of charge.<p><br><img src=\"https://chart.googleapis.com/chart?cht=pc&chtt=Complaint+Subjects+to+Android+Market+(Feb+2011)&chs=750x400&chd=t:111,97,3|0.59,0.31,0.05,0.03,0.02,0.02,0.02,0.38,0.11,0.1,0.07,0.03,0.03,0.02,0.02,0.02,0.01,0.01,0.22&chl=[TM]|[C]||Trademark%20%20(59)|Facebook%20Trademark%20%20(31)|Bank%20Trademark%20%20(5)|SXSW%20Trademark%20%20(3)|Trademarks%20and%20Videos%20Copyright%20%20(2)|Game%20Trademark%20%20(2)|Disney%20Trademark%20and%20Copyright%20%20(2)|Game%20Copyright%20%20(38)|Software%20Copyright%20%20(11)|Logo%20Copyright%20%20(10)|Copyright%20%20(7)|Books%20Copyright%20%20(3)|Images%20Copyright%20%20(3)|Articles%20Copyright%20%20(2)|Television%20Copyright%20%20(2)|UFC%20Copyright%20%20(2)|Photo%20Copyright%20%20(1)|Website%20Copyright%20%20(1)|Other/Unidentified%20(22)&chco=0000FF,003333&chp=3.14\" title=\"Complaint Subjects to Google's Android Market, Feb. 2011\"><p>Slightly more than half of the complaints here claim trademark infringement: misleading use of a mark (word or logo) to cause consumer confusion about the application's source or sponsorship. Facebook led the way, challenging 30+ apps that borrowed its name or \"f\" logo (e.g. <a href=\"/trademark/notice.cgi?NoticeID=56735\">Facebook Trademark Complaint to Google: Android Market</a>). Banks and financial institutions challenged applications that used their logos, even to offer a mobile version of the bank's own site. Here is trademark as the law of consumer protection: you want to be sure an unauthorized Wells Fargo application won't channel your deposit into its coffers rather than your savings account. Google even filed several complaints against apps in its marketplace that were a bit too free with the Google name. Starbucks used copyright in its logo to similar end, requesting takedown or alteration of apps that used the coffee company's logo as their icon (e.g. <a href=\"/dmca512c/notice.cgi?NoticeID=60149\">Logo DMCA (Copyright) Complaint to Google: Android Market</a>). Some, including <a href=\"https://market.android.com/details?id=com.birbeck.starbuckscard\">My Coffee Card</a> (formerly Starbucks Card Widget) changed their name and icon in response.<p>Sometimes, these complaints didn't do much to allege \"likelihood of consumer confusion,\" the traditional hallmark of trademark infringement. South By SouthWest's complaint against the \"Unauthorized SXSW\" party scheduler app -- <a href=\"/trademark/notice.cgi?NoticeID=60951\">SXSW Trademark Complaint to Google: Android Market</a> -- sounds like an overstep, into nominative fair use. There's no good alternative way to refer to the big conference/music festival in Austin later in March, and \"unauthorized\" plainly indicates it's not an officially endorsed product. (Neither Unofficial SXSW nor the official \"SXSW® GO\" gets particularly high marks from reviewers yet, but that may be because the event hasn't yet kicked off to fill them with data.)<p>Another 82 complaints (less 11 \"logo\" complaints) alleged copyright infringement -- copying of code, of graphical elements or \"look and feel\" (Nintendo complained about many \"Super Mario\" derivatives), of characters (Columbia's \"Qbert\"), or of audiovisual elements including video clips, wallpapers, and eBooks. Most of these were phrased in DMCA terms, since like a blog platform, the marketplace hosts \"information residing on systems or networks at direction of users\" <a href=\"http://static.chillingeffects.org/512.html#c\">512(c)</a>. <p>Unique among the copyright complaints in its indirection, the RIAA filed three complaints naming dozens of apps that allegedly \"facilitate the unauthorized streaming and downloading of popular sound recordings, the vast majority of which are owned or controlled by RIAA members.\" Its <a href=\"/dmca512c/notice.cgi?NoticeID=61677\">complaints</a>, complete with screenshots, asked for the removal of apps for ringtone creation and MP3 listening. This is an attenuated claim. RIAA isn't alleging that Google, or even the apps, are direct infringers of member copyrights. Rather, it claims that because Google hosts apps (or in some cases, serves ads inside them) that enable end-users to make infringing copies of music, Google should be held responsible for the users' infringing conduct -- a sort of once-removed contributory or vicarious liability claim. Is there a law of contributory inducement, after <a href=\"http://w2.eff.org/IP/P2P/MGM_v_Grokster/\">Grokster</a>? <p><br>I haven't followed all of the URLs to see how Google has responded to each of these complaints, but to its credit, it does not appear to have pulled the \"Unauthorized SXSW,\" for example. Others accused of trademark infringement appear to have changed their names or logos. Because the <a href=\"https://www.chillingeffects.org/dmca512/faq\">DMCA</a> applies only to copyright, not trademark, there is less settled procedure around the trademark claims. There's no safe-harbor, but neither is there an assumption that the service provider will be liable for its users' activity (see <a href=\"http://www.eff.org/deeplinks/2010/04/tiffany-v-ebay-what-about-put-back\">Tiffany v. eBay</a>, where the Second Circuit Court of Appeals held that \"for contributory trademark infringement liability to lie, a service provider must have more than a general knowledge or reason to know that its service is being used to sell counterfeit goods.\"). <p><br><img src=\"https://chart.googleapis.com/chart?cht=p&chtt=Complaint+Senders+to+Android+Market+(Feb+2011)&chs=750x400&chd=t:0.3,0.2,0.08,0.06,0.04,0.03,0.03,0.03,0.03,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,0.02,1.09&chl=Facebook,%20Inc.%20(30)|Nintendo%20of%20America%20Inc.%20(20)|Google%20Inc.%20(8)|Starbucks%20Corporation%20(6)|Hatched%20Games%20(4)|RIAA%20(3)|Photo%20Hunt%20(3)|Atari,%20Inc.%20(3)|ESPN%20Inc.%20(3)|Playboy%20Enterprises%20International,%20Inc.%20(2)|Electronic%20Arts%20Inc.%20(2)|The%20Walt%20Disney%20Company%20(2)|Monotype%20Imaging%20Inc.%20(2)|Kodansha%20Ltd.%20(2)|Metro,%20a%20division%20of%20Associated%20Newspapers%20Limited%20(2)|Dorna%20Sports%20(2)|Justin.tv,%20Inc.%20(2)|Rocket%20Radar%20(2)|eBay%20Inc.%20(2)|Promevo,%20LLC%20(2)|Other/Unidentified%20(109)&chco=0000FF&chp=3.14\" title=\"Takedown Senders\"><p><a name=\"note1\" href=\"#back\">*</a> Copyright geeks will recall that the last <a href=\"http://www.loc.gov/today/pr/2010/10-169.html\">anticircumvention rulemaking</a> exempted phone jailbreaking from the circumvention rule, so iPhone owners can confidently unlock their phones to use the <a href=\"http://cydia.saurik.com/\">cydia</a> marketplace or others.<br><a name=\"note2\" href=\"#back2\">*</a> Note that this is a simple count of distinct complaint submissions, each of which may target one or multiple allegedly infringing applications. $
|
54
55
|
|
55
56
|
@twitteritem.summary.should == "djcp: @csoghoian @BrookingsInst and the clipboard as well, presumably. #security #keylogging"
|
57
|
+
@twitteratomitem.summary.should == 'Senior #Ruby on #Rails developer(s) http://t.co/rvqsIK0h #jobs'
|
56
58
|
end
|
57
59
|
|
58
60
|
it "should have the correct content" do
|
@@ -105,6 +107,7 @@ module FeedAbstract
|
|
105
107
|
@pyblosxomitem.content.should == %Q|<div><a href='http://www.flickr.com/photos/nffcnnr/401047557/' target='_blank'><img src='http://farm1.static.flickr.com/137/401047557_1dda26e16f.jpg' width=350 alt='MailBoxes by nffcnnr, on Flickr' title='MailBoxes by nffcnnr, on Flickr' border='0'/></a><br/><a href='http://creativecommons.org/licenses/by/2.0/' target='_blank'><img src='http://i.creativecommons.org/l/by/2.0/80x15.png' alt='Creative Commons Attribution 2.0 Generic License' title='Creative Commons Attribution 2.0 Generic License' border='0' align='left'></a> by <a href='http://www.flickr.com/people/nffcnnr/' target='_blank'> nffcnnr</a><a href='http://www.imagecodr.org/' target='_blank'> </a></div><p>I am haunted by the nagging fear that I have mailboxes, tucked into a\ndark corner of an office somewhere, and perhaps even full of checks\nand important documents, that I don't know exist.</p>\n|
|
106
108
|
@chillitem.content.should == ''
|
107
109
|
@twitteritem.content.should == ""
|
110
|
+
@twitteratomitem.content.should == %Q|Senior <a href="http://search.twitter.com/search?q=%23Ruby" title="#Ruby" class=" ">#Ruby</a> on <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> developer(s) <a href="http://t.co/rvqsIK0h">http://t.co/rvqsIK0h</a> <a href="http://search.twitter.com/search?q=%23jobs" title="#jobs" class=" ">#jobs</a>|
|
108
111
|
end
|
109
112
|
|
110
113
|
it "should have the correct link" do
|
@@ -118,6 +121,7 @@ module FeedAbstract
|
|
118
121
|
@pyblosxomitem.link.should == 'http://mako.cc/copyrighteous/20110913-00'
|
119
122
|
@chillitem.link.should == 'https://www.chillingeffects.org/weather.cgi?WeatherID=648'
|
120
123
|
@twitteritem.link.should == 'http://twitter.com/djcp/statuses/168381896559046656'
|
124
|
+
@twitteratomitem.link.should == 'http://twitter.com/pelaphptutor/statuses/181861618911690752'
|
121
125
|
end
|
122
126
|
|
123
127
|
it "should have the correct author" do
|
@@ -131,6 +135,7 @@ module FeedAbstract
|
|
131
135
|
@pyblosxomitem.author.should == ''
|
132
136
|
@chillitem.author.should == ''
|
133
137
|
@twitteritem.author.should == 'djcp'
|
138
|
+
@twitteratomitem.author.should == 'pelaphptutor'
|
134
139
|
end
|
135
140
|
|
136
141
|
it "should have the correct authors" do
|
@@ -144,6 +149,7 @@ module FeedAbstract
|
|
144
149
|
@pyblosxomitem.authors.should == []
|
145
150
|
@chillitem.authors.should == []
|
146
151
|
@twitteritem.authors.should == ['djcp']
|
152
|
+
@twitteratomitem.authors.should == ['pelaphptutor']
|
147
153
|
end
|
148
154
|
|
149
155
|
it "should have the correct contributor" do
|
@@ -157,6 +163,7 @@ module FeedAbstract
|
|
157
163
|
@pyblosxomitem.contributor.should == ''
|
158
164
|
@chillitem.contributor.should == ''
|
159
165
|
@twitteritem.contributor.should == ''
|
166
|
+
@twitteratomitem.contributor.should == ''
|
160
167
|
end
|
161
168
|
|
162
169
|
it "should have the correct contributors" do
|
@@ -170,6 +177,7 @@ module FeedAbstract
|
|
170
177
|
@pyblosxomitem.contributors.should == []
|
171
178
|
@chillitem.contributors.should == []
|
172
179
|
@twitteritem.contributors.should == []
|
180
|
+
@twitteratomitem.contributors.should == []
|
173
181
|
end
|
174
182
|
|
175
183
|
it "should have the correct category" do
|
@@ -183,6 +191,7 @@ module FeedAbstract
|
|
183
191
|
@pyblosxomitem.category.should == ''
|
184
192
|
@chillitem.category.should == ''
|
185
193
|
@twitteritem.category.should == 'security, keylogging'
|
194
|
+
@twitteratomitem.category.should == 'Ruby, Rails, jobs'
|
186
195
|
end
|
187
196
|
|
188
197
|
it "should have the correct categories" do
|
@@ -196,6 +205,7 @@ module FeedAbstract
|
|
196
205
|
@pyblosxomitem.categories.should == []
|
197
206
|
@chillitem.categories.should == []
|
198
207
|
@twitteritem.categories.should == ['security', 'keylogging']
|
208
|
+
@twitteratomitem.categories.should == ['Ruby', 'Rails', 'jobs']
|
199
209
|
end
|
200
210
|
|
201
211
|
it "should have the correct rights" do
|
@@ -209,6 +219,7 @@ module FeedAbstract
|
|
209
219
|
@pyblosxomitem.rights.should == ''
|
210
220
|
@chillitem.rights.should == ''
|
211
221
|
@twitteritem.rights.should == ''
|
222
|
+
@twitteratomitem.rights.should == ''
|
212
223
|
end
|
213
224
|
|
214
225
|
it "should have been updated at the correct time" do
|
@@ -222,6 +233,7 @@ module FeedAbstract
|
|
222
233
|
@pyblosxomitem.updated.should == Time.parse('2011-09-15T05:21:00Z')
|
223
234
|
@chillitem.updated.should == ""
|
224
235
|
@twitteritem.updated.should == Time.parse('2012-02-11 12:12:27 -0500')
|
236
|
+
@twitteratomitem.updated.should == Time.parse('2012-03-19 21:56:03 UTC')
|
225
237
|
end
|
226
238
|
|
227
239
|
it "should have been published at the proper time" do
|
@@ -235,6 +247,7 @@ module FeedAbstract
|
|
235
247
|
@pyblosxomitem.published.should == Time.parse('2011-09-15T05:21:00Z')
|
236
248
|
@chillitem.published.should == ''
|
237
249
|
@twitteritem.published.should == Time.parse('2012-02-11 12:12:27 -0500')
|
250
|
+
@twitteratomitem.published.should == Time.parse('2012-03-19 21:56:03 UTC')
|
238
251
|
end
|
239
252
|
|
240
253
|
it "should have the proper guid" do
|
@@ -248,6 +261,7 @@ module FeedAbstract
|
|
248
261
|
@pyblosxomitem.guid.should == 'http://mako.cc/copyrighteous/2011/09/15/20110913-00'
|
249
262
|
@chillitem.guid.should == 'https://www.chillingeffects.org/weather.cgi?WeatherID=648'
|
250
263
|
@twitteritem.guid.should == 'http://twitter.com/djcp/statuses/168381896559046656'
|
264
|
+
@twitteratomitem.guid.should == 'tag:search.twitter.com,2005:181861618911690752'
|
251
265
|
end
|
252
266
|
|
253
267
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -17,8 +17,9 @@ def instantiate_feeds
|
|
17
17
|
@pyblosxom = FeedAbstract::Feed.new(File.open('spec/test_data/pyblosxom.atom'))
|
18
18
|
@chill = FeedAbstract::Feed.new(File.open('spec/test_data/chillingeffects.xml'))
|
19
19
|
@twitter = FeedAbstract::Feed.new(File.open('spec/test_data/djcp_twitter.rss'))
|
20
|
+
@twitter_atom = FeedAbstract::Feed.new(File.open('spec/test_data/twitter_hashtag.atom'))
|
20
21
|
|
21
|
-
@all_feeds = [@docatom, @kpgatom, @djcprss2, @djcprss92, @oa, @delicious, @zotero, @feedburner, @pyblosxom, @chill, @twitter]
|
22
|
+
@all_feeds = [@docatom, @kpgatom, @djcprss2, @djcprss92, @oa, @delicious, @zotero, @feedburner, @pyblosxom, @chill, @twitter, @twitter_atom]
|
22
23
|
end
|
23
24
|
|
24
25
|
def instantiate_example_items
|
@@ -32,4 +33,5 @@ def instantiate_example_items
|
|
32
33
|
@pyblosxomitem = @pyblosxom.items.first
|
33
34
|
@chillitem = @chill.items.first
|
34
35
|
@twitteritem = @twitter.items.first
|
36
|
+
@twitteratomitem = @twitter_atom.items.first
|
35
37
|
end
|
@@ -0,0 +1,2 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/" xmlns:georss="http://www.georss.org/georss"><id>tag:search.twitter.com,2005:search/#rails</id><link type="text/html" href="http://search.twitter.com/search?q=%23rails" rel="alternate"/><link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%23rails" rel="self"/><title>#rails - Twitter Search</title><link type="application/opensearchdescription+xml" href="http://twitter.com/opensearch.xml" rel="search"/><link type="application/atom+xml" href="http://search.twitter.com/search.atom?since_id=181861618911690752&q=%23rails" rel="refresh"/><updated>2012-03-19T21:56:03Z</updated><openSearch:itemsPerPage>15</openSearch:itemsPerPage><link type="application/atom+xml" href="http://search.twitter.com/search.atom?page=2&max_id=181861618911690752&q=%23rails" rel="next"/><entry><id>tag:search.twitter.com,2005:181861618911690752</id><published>2012-03-19T21:56:03Z</published><link type="text/html" href="http://twitter.com/pelaphptutor/statuses/181861618911690752" rel="alternate"/><title>Senior #Ruby on #Rails developer(s) http://t.co/rvqsIK0h #jobs</title><content type="html">Senior <a href="http://search.twitter.com/search?q=%23Ruby" title="#Ruby" class=" ">#Ruby</a> on <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> developer(s) <a href="http://t.co/rvqsIK0h">http://t.co/rvqsIK0h</a> <a href="http://search.twitter.com/search?q=%23jobs" title="#jobs" class=" ">#jobs</a></content><updated>2012-03-19T21:56:03Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/292484362/n100131847672_3877_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://www.pelaphptutorials.com/" rel="nofollow">PelaPHPTutorials</a></twitter:source><twitter:lang>en</twitter:lang><author><name>pelaphptutor (pelaphptutorials.com)</name><uri>http://twitter.com/pelaphptutor</uri></author></entry><entry><id>tag:search.twitter.com,2005:181860990592368640</id><published>2012-03-19T21:53:33Z</published><link type="text/html" href="http://twitter.com/newsxbrain/statuses/181860990592368640" rel="alternate"/><title>[2tweet] friendly_idを使ってFriendlyでRESTfulなURI設計 #Ruby #Rails - Qiita→http://t.co/UBac1Zcn</title><content type="html">[2tweet] friendly_idを使ってFriendlyでRESTfulなURI設計 <a href="http://search.twitter.com/search?q=%23Ruby" title="#Ruby" class=" ">#Ruby</a> <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> - Qiita→<a href="http://t.co/UBac1Zcn">http://t.co/UBac1Zcn</a></content><updated>2012-03-19T21:53:33Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1704033209/_____-1_normal.gif" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://newsxbrain.com/" rel="nofollow">newsxbrain</a></twitter:source><twitter:lang>ja</twitter:lang><author><name>newsxbrain (NEWS×BRAIN[ニュースブレイン])</name><uri>http://twitter.com/newsxbrain</uri></author></entry><entry><id>tag:search.twitter.com,2005:181860163660169217</id><published>2012-03-19T21:50:16Z</published><link type="text/html" href="http://twitter.com/pietereer/statuses/181860163660169217" rel="alternate"/><title>Blown away with how good this Rails CMS is for integration in existing Rails apps: https://t.co/Klfr217I #rails #ruby #cms #in</title><content type="html">Blown away with how good this Rails CMS is for integration in existing Rails apps: <a href="https://t.co/Klfr217I">https://t.co/Klfr217I</a> <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> <a href="http://search.twitter.com/search?q=%23ruby" title="#ruby" class=" ">#ruby</a> <a href="http://search.twitter.com/search?q=%23cms" title="#cms" class=" ">#cms</a> <a href="http://search.twitter.com/search?q=%23in" title="#in" class=" ">#in</a></content><updated>2012-03-19T21:50:16Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1730280321/pieter_reasonably_small_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>en</twitter:lang><author><name>pietereer (Pieter Eerlings)</name><uri>http://twitter.com/pietereer</uri></author></entry><entry><id>tag:search.twitter.com,2005:181852384232873984</id><published>2012-03-19T21:19:21Z</published><link type="text/html" href="http://twitter.com/twotoneatl/statuses/181852384232873984" rel="alternate"/><title>RT @highgroove #hacknight begins now! What @alindeman is hacking: http://t.co/s0LeWtFw // http://t.co/GCIRnxNL #rails #ruby #wolfbrain</title><content type="html">RT @<a class=" " href="http://twitter.com/highgroove">highgroove</a> <a href="http://search.twitter.com/search?q=%23hacknight" title="#hacknight" class=" ">#hacknight</a> begins now! What @alindeman is hacking: <a href="http://t.co/s0LeWtFw">http://t.co/s0LeWtFw</a> // <a href="http://t.co/GCIRnxNL">http://t.co/GCIRnxNL</a> <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> <a href="http://search.twitter.com/search?q=%23ruby" title="#ruby" class=" ">#ruby</a> <a href="http://search.twitter.com/search?q=%23wolfbrain" title="#wolfbrain" class=" ">#wolfbrain</a></content><updated>2012-03-19T21:19:21Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1839933674/logo_normal.png" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/devices" rel="nofollow">txt</a></twitter:source><twitter:lang>en</twitter:lang><author><name>twotoneatl (Jon Woodroof)</name><uri>http://twitter.com/twotoneatl</uri></author></entry><entry><id>tag:search.twitter.com,2005:181849434706022400</id><published>2012-03-19T21:07:38Z</published><link type="text/html" href="http://twitter.com/mattmacnaughton/statuses/181849434706022400" rel="alternate"/><title>Code by the beach! We're hiring #Rails developers at PromoJam in Venice, CA. Check out our open position on GitHub https://t.co/QwBIzwuG</title><content type="html">Code by the beach! We're hiring <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> developers at PromoJam in Venice, CA. Check out our open position on GitHub <a href="https://t.co/QwBIzwuG">https://t.co/QwBIzwuG</a></content><updated>2012-03-19T21:07:38Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/951402566/profileb_W_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>en</twitter:lang><author><name>mattmacnaughton (Matt MacNaughton)</name><uri>http://twitter.com/mattmacnaughton</uri></author></entry><entry><id>tag:search.twitter.com,2005:181847777968525314</id><published>2012-03-19T21:01:03Z</published><link type="text/html" href="http://twitter.com/x_rubydevs/statuses/181847777968525314" rel="alternate"/><title>Relevance Makes the B Corp "Best for the World" List! #ruby #rails http://t.co/AtPe73gM</title><content type="html">Relevance Makes the B Corp "Best for the World" List! <a href="http://search.twitter.com/search?q=%23ruby" title="#ruby" class=" ">#ruby</a> <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> <a href="http://t.co/AtPe73gM">http://t.co/AtPe73gM</a></content><updated>2012-03-19T21:01:03Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1242574217/XYDO_normal.jpeg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://www.xydo.com" rel="nofollow">XYDOhandles</a></twitter:source><twitter:lang>en</twitter:lang><author><name>x_rubydevs (XYDO Ruby Dev)</name><uri>http://twitter.com/x_rubydevs</uri></author></entry><entry><id>tag:search.twitter.com,2005:181847089439973376</id><published>2012-03-19T20:58:19Z</published><link type="text/html" href="http://twitter.com/philipzaengle/statuses/181847089439973376" rel="alternate"/><title>Note to self: you can't run git commands within the rails console. #rails</title><content type="html">Note to self: you can't run git commands within the rails console. <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em></content><updated>2012-03-19T20:58:19Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/935161088/500x500_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a></twitter:source><twitter:lang>en</twitter:lang><author><name>philipzaengle (Philip Zaengle)</name><uri>http://twitter.com/philipzaengle</uri></author></entry><entry><id>tag:search.twitter.com,2005:181838570946969600</id><published>2012-03-19T20:24:28Z</published><link type="text/html" href="http://twitter.com/aereal/statuses/181838570946969600" rel="alternate"/><title>friendly_idを使ってFriendlyでRESTfulなURI設計 #Ruby #Rails http://t.co/WM5zwSBY</title><content type="html">friendly_idを使ってFriendlyでRESTfulなURI設計 <a href="http://search.twitter.com/search?q=%23Ruby" title="#Ruby" class=" ">#Ruby</a> <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> <a href="http://t.co/WM5zwSBY">http://t.co/WM5zwSBY</a></content><updated>2012-03-19T20:24:28Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1796360201/a8b842d3448ded45259dd74d452c5972_normal.png" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://qiita.com" rel="nofollow">Qiita</a></twitter:source><twitter:lang>ja</twitter:lang><author><name>aereal (日常ツイート
|
2
|
+
)</name><uri>http://twitter.com/aereal</uri></author></entry><entry><id>tag:search.twitter.com,2005:181835236961824769</id><published>2012-03-19T20:11:13Z</published><link type="text/html" href="http://twitter.com/honeyshock/statuses/181835236961824769" rel="alternate"/><title>#people are being #trained so far off #track seems that more of us are going straight off the #rails...Tammy Wells</title><content type="html"><a href="http://search.twitter.com/search?q=%23people" title="#people" class=" ">#people</a> are being <a href="http://search.twitter.com/search?q=%23trained" title="#trained" class=" ">#trained</a> so far off <a href="http://search.twitter.com/search?q=%23track" title="#track" class=" ">#track</a> seems that more of us are going straight off the <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em>...Tammy Wells</content><updated>2012-03-19T20:11:13Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1905722719/IMG03331-20120318-1011_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://blackberry.com/twitter" rel="nofollow">Twitter for BlackBerry®</a></twitter:source><twitter:lang>en</twitter:lang><author><name>honeyshock (Tammy Wells)</name><uri>http://twitter.com/honeyshock</uri></author></entry><entry><id>tag:search.twitter.com,2005:181834055552212992</id><published>2012-03-19T20:06:31Z</published><link type="text/html" href="http://twitter.com/rubyve/statuses/181834055552212992" rel="alternate"/><title>“@coders_vzla: Personaliza el código creado por generadores de #rails - Gema Roja http://t.co/5MPRZbSp @rubyve”</title><content type="html">“@<a class=" " href="http://twitter.com/coders_vzla">coders_vzla</a>: Personaliza el código creado por generadores de <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> - Gema Roja <a href="http://t.co/5MPRZbSp">http://t.co/5MPRZbSp</a> @<a class=" " href="http://twitter.com/rubyve">rubyve</a>”</content><updated>2012-03-19T20:06:31Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1153697142/ruby-pintado_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a></twitter:source><twitter:lang>es</twitter:lang><author><name>rubyve (RubyVE)</name><uri>http://twitter.com/rubyve</uri></author></entry><entry><id>tag:search.twitter.com,2005:181833803856228352</id><published>2012-03-19T20:05:31Z</published><link type="text/html" href="http://twitter.com/scicasoft/statuses/181833803856228352" rel="alternate"/><title>enfiiiiinnnnnnn #ruby marche installing #rails :-) @hassanemoustaph</title><content type="html">enfiiiiinnnnnnn <a href="http://search.twitter.com/search?q=%23ruby" title="#ruby" class=" ">#ruby</a> marche installing <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> :-) @<a class=" " href="http://twitter.com/hassanemoustaph">hassanemoustaph</a></content><updated>2012-03-19T20:05:31Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/634703361/Code-Lyoko-11_389x506_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>de</twitter:lang><author><name>scicasoft (Cheikh Sidya Camara)</name><uri>http://twitter.com/scicasoft</uri></author></entry><entry><id>tag:search.twitter.com,2005:181832307542466560</id><published>2012-03-19T19:59:35Z</published><link type="text/html" href="http://twitter.com/dexterous/statuses/181832307542466560" rel="alternate"/><title>@srshti @pathsny @tdinkar @markhneedham how does a vanilla #rails app substitute an in-memory instance of a #mysql db for tests?</title><content type="html">@<a class=" " href="http://twitter.com/srshti">srshti</a> @<a class=" " href="http://twitter.com/pathsny">pathsny</a> @<a class=" " href="http://twitter.com/tdinkar">tdinkar</a> @<a class=" " href="http://twitter.com/markhneedham">markhneedham</a> how does a vanilla <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em> app substitute an in-memory instance of a <a href="http://search.twitter.com/search?q=%23mysql" title="#mysql" class=" ">#mysql</a> db for tests?</content><updated>2012-03-19T19:59:35Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1367401855/IMG_3076_normal.JPG" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>en</twitter:lang><author><name>dexterous (Saager Mhatre)</name><uri>http://twitter.com/dexterous</uri></author></entry><entry><id>tag:search.twitter.com,2005:181832161400324097</id><published>2012-03-19T19:59:00Z</published><link type="text/html" href="http://twitter.com/ohmyshirt/statuses/181832161400324097" rel="alternate"/><title>RT @KCITP: Rails’ new seamless integration with Amazon’s DynamoDB and S3 http://t.co/f6hXVK5n // #Rails</title><content type="html">RT @<a class=" " href="http://twitter.com/KCITP">KCITP</a>: Rails’ new seamless integration with Amazon’s DynamoDB and S3 <a href="http://t.co/f6hXVK5n">http://t.co/f6hXVK5n</a> // <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em></content><updated>2012-03-19T19:59:00Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1881675087/423482_10100161366557141_22007281_41947547_1603094433_n_normal.jpeg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a></twitter:source><twitter:lang>en</twitter:lang><author><name>ohmyshirt (Mikey)</name><uri>http://twitter.com/ohmyshirt</uri></author></entry><entry><id>tag:search.twitter.com,2005:181831123637248000</id><published>2012-03-19T19:54:52Z</published><link type="text/html" href="http://twitter.com/Veraticus/statuses/181831123637248000" rel="alternate"/><title>Added association names... Next Dynamoid feature is going to be indexes through associations! https://t.co/1j5FONY5 #dynamodb #ruby #rails</title><content type="html">Added association names... Next Dynamoid feature is going to be indexes through associations! <a href="https://t.co/1j5FONY5">https://t.co/1j5FONY5</a> <a href="http://search.twitter.com/search?q=%23dynamodb" title="#dynamodb" class=" ">#dynamodb</a> <a href="http://search.twitter.com/search?q=%23ruby" title="#ruby" class=" ">#ruby</a> <em><a href="http://search.twitter.com/search?q=%23rails" title="#rails" class=" ">#rails</a></em></content><updated>2012-03-19T19:54:52Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1844017969/My_HipstaPrint_0-1_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>en</twitter:lang><author><name>Veraticus (Josh Symonds)</name><uri>http://twitter.com/Veraticus</uri></author></entry><entry><id>tag:search.twitter.com,2005:181830550754045952</id><published>2012-03-19T19:52:36Z</published><link type="text/html" href="http://twitter.com/ticean/statuses/181830550754045952" rel="alternate"/><title>Code by the beach! I'm hiring #Rails developers for a fun project in LA. https://t.co/4I5pOO5p</title><content type="html">Code by the beach! I'm hiring <em><a href="http://search.twitter.com/search?q=%23Rails" title="#Rails" class=" ">#Rails</a></em> developers for a fun project in LA. <a href="https://t.co/4I5pOO5p">https://t.co/4I5pOO5p</a></content><updated>2012-03-19T19:52:36Z</updated><link type="image/png" href="http://a0.twimg.com/profile_images/1227437269/2007-07-24-235346_normal.jpg" rel="image"/><twitter:geo></twitter:geo><twitter:metadata><twitter:result_type>recent</twitter:result_type></twitter:metadata><twitter:source><a href="http://twitter.com/">web</a></twitter:source><twitter:lang>en</twitter:lang><author><name>ticean (Ticean Bennett)</name><uri>http://twitter.com/ticean</uri></author></entry></feed>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feed-abstract
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &18101880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *18101880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rdoc
|
27
|
-
requirement: &
|
27
|
+
requirement: &18967240 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *18967240
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &18965100 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *18965100
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &18962900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *18962900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
requirement: &
|
60
|
+
requirement: &18960860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *18960860
|
69
69
|
description: ! 'This library creates a common object graph for the RSS/Atom/RDF parsing
|
70
70
|
classes in the ruby standard library. This allows you parse different feed formats
|
71
71
|
and get back the same (or at least a very similar) set of results - item authors
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- spec/test_data/katanapg.atom
|
114
114
|
- spec/test_data/oa.africa.rss
|
115
115
|
- spec/test_data/pyblosxom.atom
|
116
|
+
- spec/test_data/twitter_hashtag.atom
|
116
117
|
- spec/test_data/zotero.rss
|
117
118
|
homepage: https://github.com/berkmancenter/feed-abstract
|
118
119
|
licenses: []
|