feedjira 1.0.0 → 1.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8f1b7fbf212aa429ee26e857cc641194c22584e
4
- data.tar.gz: 78b69c9bf960dc288d750f339d0a36d009ec139e
3
+ metadata.gz: 6a95a55c16d70ffd628b86e4063a4a6bd5507451
4
+ data.tar.gz: e8b27d65d8e3734db3de73d85d0793f9c4aaba84
5
5
  SHA512:
6
- metadata.gz: f7e75a6f8f4d421254fcf232168a6cb83da5fce3d06c61a3beccb3c0cb8747dbd37621762cf3185b8d06ac4e80f694586ef88e75f8e41138d4e5756dc53abc77
7
- data.tar.gz: ed92126d6de4bacd62b6d179b90f2bd6df912838b6656f4f59ed7306d18fc2c2bbe2cade112b50439a621812d54bb04117a30f2c5c18dde9b26b49c06a2a5c21
6
+ metadata.gz: 30e378d04980d3d60e21fbb2dddeb64c5db9dac7c83e0927fb7c6220201f86873432c738b7936c9dff5b00e1e19f782a8844a11225411891a3527b9ecc2494f6
7
+ data.tar.gz: 59f3590bea5343fa5e619d711e67e34ba8b33490b7d12a96bf456bcbe506e087ddac1662ced445e4ce8b779cb011496e22086fd951874c8b0468290a5ae17906
data/.gitignore CHANGED
@@ -1,14 +1,7 @@
1
- .DS_Store
2
- .rvmrc
3
- .ruby-version
1
+ .bundle
4
2
  .ruby-gemset
5
- TODO
3
+ .ruby-version
6
4
  Gemfile.lock
7
- rdoc/
8
5
  doc/
9
6
  pkg/
10
- coverage/
11
- .rbx
12
- .bundle
13
- *.swp
14
- *.swo
7
+ rdoc/
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ language: ruby
2
2
  bundler_args: --without tools
3
3
 
4
4
  rvm:
5
- - 1.9.2
6
5
  - 1.9.3
7
6
  - 2.0.0
7
+ - 2.1.0
8
8
  - rbx
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Feedjira Changelog
2
2
 
3
+ ## 1.1.0
4
+
5
+ * General
6
+ * Add 2.1 to list of supported Rubies, drop 1.9.2
7
+ * Remove Guard and Simplecov
8
+ * Extract sample feeds into RSpec helper module
9
+ * Random cleanup
10
+ * Quiet down default rake task
11
+ * Fix CHANGELOG links
12
+ * Point README at new site
13
+
14
+ * Enhancements
15
+ * Add language setting to curl options [#206][]
16
+
17
+ [#206]: https://github.com/feedjira/feedjira/pull/206
18
+
3
19
  ## 1.0.0
4
20
 
5
21
  * Removed deprecated features
@@ -11,44 +27,44 @@
11
27
  ## 0.7.1
12
28
 
13
29
  * Bugfix
14
- * Don't use entry id for updating when feed doesn't provide it [[#205][]]
30
+ * Don't use entry id for updating when feed doesn't provide it [#205][]
15
31
 
16
- [#205]: https://github.com/pauldix/feedzirra/pull/205
32
+ [#205]: https://github.com/feedjira/feedjira/pull/205
17
33
 
18
34
  ## 0.7.0
19
35
 
20
36
  * General
21
- * README update for callback arity [[#202][]]
37
+ * README update for callback arity [#202][]
22
38
 
23
39
  * Enhancements
24
- * Add error info to `on_failure` callback [[#194][]]
40
+ * Add error info to `on_failure` callback [#194][]
25
41
  * On failure callbacks get curl and error as args
26
- * Bugfix for parsing dates that are ISO 8601 with milliseconds [[#203][]]
42
+ * Bugfix for parsing dates that are ISO 8601 with milliseconds [#203][]
27
43
 
28
- [#194]: https://github.com/pauldix/feedzirra/pull/194
29
- [#202]: https://github.com/pauldix/feedzirra/pull/202
30
- [#203]: https://github.com/pauldix/feedzirra/pull/203
44
+ [#194]: https://github.com/feedjira/feedjira/pull/194
45
+ [#202]: https://github.com/feedjira/feedjira/pull/202
46
+ [#203]: https://github.com/feedjira/feedjira/pull/203
31
47
 
32
48
  ## 0.6.0
33
49
 
34
50
  * General
35
- * Update expected parser classes in docs [[#200][]]
51
+ * Update expected parser classes in docs [#200][]
36
52
  * Fix Rubinius issue with Travis
37
53
 
38
54
  * Enhancements
39
- * Added content to `itunes_rss_item` [[#198][]]
55
+ * Added content to `itunes_rss_item` [#198][]
40
56
  * Allow user to pass a particular parser using `parse_with`
41
- * Strip leading whitespace from XML [[#196][]]
42
- * Parse out RSS version [[#172][]]
57
+ * Strip leading whitespace from XML [#196][]
58
+ * Parse out RSS version [#172][]
43
59
  * Add generic preprocessing hook for Parsers
44
- * Add preprocessing hook for Atom XHTML content [[#58][]] [[#130][]]
60
+ * Add preprocessing hook for Atom XHTML content [#58][] [#130][]
45
61
 
46
- [#58]: https://github.com/pauldix/feedzirra/pull/58
47
- [#130]: https://github.com/pauldix/feedzirra/issues/130
48
- [#172]: https://github.com/pauldix/feedzirra/issues/172
49
- [#196]: https://github.com/pauldix/feedzirra/pull/196
50
- [#198]: https://github.com/pauldix/feedzirra/pull/198
51
- [#200]: https://github.com/pauldix/feedzirra/pull/200
62
+ [#58]: https://github.com/feedjira/feedjira/pull/58
63
+ [#130]: https://github.com/feedjira/feedjira/issues/130
64
+ [#172]: https://github.com/feedjira/feedjira/issues/172
65
+ [#196]: https://github.com/feedjira/feedjira/pull/196
66
+ [#198]: https://github.com/feedjira/feedjira/pull/198
67
+ [#200]: https://github.com/feedjira/feedjira/pull/200
52
68
 
53
69
  ## 0.5.0
54
70
 
@@ -59,45 +75,45 @@
59
75
  * Upgrade to latest Rspec
60
76
 
61
77
  * Enhancements
62
- * Allow spaces in rss tag when checking parse-ability [[#127][]]
63
- * Compare `entry_id` and `url` for finding new entries [[#195][]]
64
- * Add closed captioned and order tags for iTunesRSSItem [[#160][]]
78
+ * Allow spaces in rss tag when checking parse-ability [#127][]
79
+ * Compare `entry_id` and `url` for finding new entries [#195][]
80
+ * Add closed captioned and order tags for iTunesRSSItem [#160][]
65
81
 
66
- [#127]: https://github.com/pauldix/feedzirra/pull/127
67
- [#160]: https://github.com/pauldix/feedzirra/pull/160
68
- [#195]: https://github.com/pauldix/feedzirra/pull/195
82
+ [#127]: https://github.com/feedjira/feedjira/pull/127
83
+ [#160]: https://github.com/feedjira/feedjira/pull/160
84
+ [#195]: https://github.com/feedjira/feedjira/pull/195
69
85
 
70
86
  ## 0.4.0
71
87
 
72
88
  * Enhancements
73
- * Raise when parser invokes its failure callback [[#159][]]
74
- * Add PubSubHubbub hub urls as feed element [[#138][]]
75
- * Add support for iTunes image in iTunes RSS item [[#164][]]
89
+ * Raise when parser invokes its failure callback [#159][]
90
+ * Add PubSubHubbub hub urls as feed element [#138][]
91
+ * Add support for iTunes image in iTunes RSS item [#164][]
76
92
 
77
93
  * Bug fixes
78
- * Use curb callbacks rather than response codes [[#161][]]
94
+ * Use curb callbacks rather than response codes [#161][]
79
95
 
80
- [#138]: https://github.com/pauldix/feedzirra/pull/138
81
- [#159]: https://github.com/pauldix/feedzirra/issues/159
82
- [#161]: https://github.com/pauldix/feedzirra/pull/161
83
- [#164]: https://github.com/pauldix/feedzirra/pull/164
96
+ [#138]: https://github.com/feedjira/feedjira/pull/138
97
+ [#159]: https://github.com/feedjira/feedjira/issues/159
98
+ [#161]: https://github.com/feedjira/feedjira/pull/161
99
+ [#164]: https://github.com/feedjira/feedjira/pull/164
84
100
 
85
101
  ## 0.3.0
86
102
 
87
103
  * General
88
- * Add CodeClimate badge [[#192][]]
104
+ * Add CodeClimate badge [#192][]
89
105
 
90
106
  * Enhancements
91
- * CURL SSL Version option [[#156][]]
92
- * Cookie support for Curb [[#98][]]
107
+ * CURL SSL Version option [#156][]
108
+ * Cookie support for Curb [#98][]
93
109
 
94
110
  * Deprecations
95
- * For `ITunesRSSItem`, use `id` instead of `guid` [[#169][]]
111
+ * For `ITunesRSSItem`, use `id` instead of `guid` [#169][]
96
112
 
97
- [#98]: https://github.com/pauldix/feedzirra/pull/98
98
- [#156]: https://github.com/pauldix/feedzirra/pull/156
99
- [#169]: https://github.com/pauldix/feedzirra/pull/169
100
- [#192]: https://github.com/pauldix/feedzirra/pull/192
113
+ [#98]: https://github.com/feedjira/feedjira/pull/98
114
+ [#156]: https://github.com/feedjira/feedjira/pull/156
115
+ [#169]: https://github.com/feedjira/feedjira/pull/169
116
+ [#192]: https://github.com/feedjira/feedjira/pull/192
101
117
 
102
118
  ## 0.2.2
103
119
 
@@ -108,35 +124,35 @@
108
124
  * README updates
109
125
 
110
126
  * Enhancements
111
- * Also use dc:identifier for `entry_id` [[#182][]]
127
+ * Also use dc:identifier for `entry_id` [#182][]
112
128
 
113
129
  * Bug fixes
114
- * Don't try to sanitize non-existent elements [[#174][]]
115
- * Fix Rspec deprecations [[#188][]]
116
- * Fix Travis [[#191][]]
130
+ * Don't try to sanitize non-existent elements [#174][]
131
+ * Fix Rspec deprecations [#188][]
132
+ * Fix Travis [#191][]
117
133
 
118
- [#174]: https://github.com/pauldix/feedzirra/pull/174
119
- [#182]: https://github.com/pauldix/feedzirra/pull/182
120
- [#188]: https://github.com/pauldix/feedzirra/pull/188
121
- [#191]: https://github.com/pauldix/feedzirra/pull/191
134
+ [#174]: https://github.com/feedjira/feedjira/pull/174
135
+ [#182]: https://github.com/feedjira/feedjira/pull/182
136
+ [#188]: https://github.com/feedjira/feedjira/pull/188
137
+ [#191]: https://github.com/feedjira/feedjira/pull/191
122
138
 
123
139
  ## 0.2.1
124
140
 
125
- * Use `Time.parse_safely` in `Feed.last_modified_from_header` [[#129][]].
126
- * Added image to the RSS Entry Parser [[#103][]].
127
- * Compatibility fixes for Ruby 2.0 [[#136][]].
128
- * Remove gorillib dependency [[#113][]].
141
+ * Use `Time.parse_safely` in `Feed.last_modified_from_header` [#129][]
142
+ * Added image to the RSS Entry Parser [#103][]
143
+ * Compatibility fixes for Ruby 2.0 [#136][]
144
+ * Remove gorillib dependency [#113][]
129
145
 
130
- [#103]: https://github.com/pauldix/feedzirra/pull/103
131
- [#113]: https://github.com/pauldix/feedzirra/pull/113
132
- [#129]: https://github.com/pauldix/feedzirra/pull/129
133
- [#136]: https://github.com/pauldix/feedzirra/pull/136
146
+ [#103]: https://github.com/feedjira/feedjira/pull/103
147
+ [#113]: https://github.com/feedjira/feedjira/pull/113
148
+ [#129]: https://github.com/feedjira/feedjira/pull/129
149
+ [#136]: https://github.com/feedjira/feedjira/pull/136
134
150
 
135
151
  ## 0.2.0.rc2
136
152
 
137
- * Bump sax-machine to `v0.2.0.rc1`, fixes encoding issues [[#76][]].
153
+ * Bump sax-machine to `v0.2.0.rc1`, fixes encoding issues [#76][]
138
154
 
139
- [#76]: https://github.com/pauldix/feedzirra/issues/76
155
+ [#76]: https://github.com/feedjira/feedjira/issues/76
140
156
 
141
157
  ## 0.2.0.rc1
142
158
 
@@ -147,7 +163,7 @@
147
163
  * Add Travis-CI integration
148
164
  * General repository and gem maintenance
149
165
 
150
- [3008ceb]: https://github.com/pauldix/feedzirra/commit/3008ceb338df1f4c37a211d0aab8a6ad4f584dbc
166
+ [3008ceb]: https://github.com/feedjira/feedjira/commit/3008ceb338df1f4c37a211d0aab8a6ad4f584dbc
151
167
 
152
168
  ## 0.1.3
153
169
 
data/Gemfile CHANGED
@@ -2,13 +2,10 @@ source 'https://rubygems.org/'
2
2
 
3
3
  gemspec
4
4
 
5
- group :development, :test do
6
- gem 'rake'
7
- end
5
+ gem 'pry'
8
6
 
9
- group :tools do
10
- gem 'guard-rspec'
11
- gem 'simplecov', :require => false, :platforms => :mri_19
7
+ group :test do
8
+ gem 'rake'
12
9
  end
13
10
 
14
11
  platforms :rbx do
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2009-2014:
4
+
5
+ - Paul Dix
6
+ - Julien Kirch
7
+ - Ezekiel Templin
8
+ - Jon Allured
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
data/README.md CHANGED
@@ -1,242 +1,14 @@
1
1
  # Feedjira [![Build Status][travis-badge]][travis] [![Code Climate][code-climate-badge]][code-climate]
2
2
 
3
- [travis-badge]: https://secure.travis-ci.org/feedjira/feedjira.png
3
+ [travis-badge]: https://travis-ci.org/feedjira/feedjira.png
4
4
  [travis]: http://travis-ci.org/feedjira/feedjira
5
5
  [code-climate-badge]: https://codeclimate.com/github/feedjira/feedjira.png
6
6
  [code-climate]: https://codeclimate.com/github/feedjira/feedjira
7
7
 
8
- I'd like feedback on the api and any bugs encountered on feeds in the wild. I've
9
- set up a [google group][].
8
+ Feedjira (formerly Feedzilla) is a Ruby library designed to fetch and parse
9
+ feeds as quickly as possible. Version 1.0 was recently released and with it an
10
+ [awesome new website][f].
10
11
 
11
- [google group]: http://groups.google.com/group/feedjira
12
+ [f]: http://feedjira.com
12
13
 
13
- ## Description
14
-
15
- Feedjira is a feed library that is designed to get and update many feeds as
16
- quickly as possible. This includes using libcurl-multi through the [curb][] gem
17
- for faster http gets, and libxml through [nokogiri][] and [sax-machine][] for
18
- faster parsing. Feedjira requires at least Ruby 1.9.2.
19
-
20
- [curb]: https://github.com/taf2/curb
21
- [nokogiri]: https://github.com/sparklemotion/nokogiri
22
- [sax-machine]: https://github.com/pauldix/sax-machine
23
-
24
- Once you have fetched feeds using Feedjira, they can be updated using the feed
25
- objects. Feedjira automatically inserts etag and last-modified information from
26
- the http response headers to lower bandwidth usage, eliminate unnecessary
27
- parsing, and make things speedier in general.
28
-
29
- Another feature present in Feedjira is the ability to create callback functions
30
- that get called "on success" and "on failure" when getting a feed. This makes it
31
- easy to do things like log errors or update data stores.
32
-
33
- The fetching and parsing logic have been decoupled so that either of them can be
34
- used in isolation if you'd prefer not to use everything that Feedjira offers.
35
- However, the code examples below use helper methods in the Feed class that put
36
- everything together to make things as simple as possible.
37
-
38
- The final feature of Feedjira is the ability to define custom parsing classes.
39
- In truth, Feedjira could be used to parse much more than feeds. Microformats,
40
- page scraping, and almost anything else are fair game.
41
-
42
- ## Speedup date parsing
43
-
44
- In MRI before 1.9.3 the date parsing code was written in Ruby and was optimized
45
- for readability over speed, to speed up this part you can install the
46
- [home_run][] gem to replace it with an optimized C version. In most cases, if
47
- you are using Ruby 1.9.3+, you will not need to use home\_run.
48
-
49
- [home_run]: https://github.com/jeremyevans/home_run
50
-
51
- ## Usage
52
-
53
- [A gist of the following code](http://gist.github.com/57285)
54
-
55
- ```ruby
56
- require 'feedjira'
57
-
58
- # fetching a single feed
59
- feed = Feedjira::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing")
60
-
61
- # feed and entries accessors
62
- feed.title # => "Paul Dix Explains Nothing"
63
- feed.url # => "http://www.pauldix.net"
64
- feed.feed_url # => "http://feeds.feedburner.com/PaulDixExplainsNothing"
65
- feed.etag # => "GunxqnEP4NeYhrqq9TyVKTuDnh0"
66
- feed.last_modified # => Sat Jan 31 17:58:16 -0500 2009 # it's a Time object
67
-
68
- entry = feed.entries.first
69
- entry.title # => "Ruby Http Client Library Performance"
70
- entry.url # => "http://www.pauldix.net/2009/01/ruby-http-client-library-performance.html"
71
- entry.author # => "Paul Dix"
72
- entry.summary # => "..."
73
- entry.content # => "..."
74
- entry.published # => Thu Jan 29 17:00:19 UTC 2009 # it's a Time object
75
- entry.categories # => ["...", "..."]
76
-
77
- # sanitizing an entry's content
78
- entry.title.sanitize # => returns the title with harmful stuff escaped
79
- entry.author.sanitize # => returns the author with harmful stuff escaped
80
- entry.content.sanitize # => returns the content with harmful stuff escaped
81
- entry.content.sanitize! # => returns content with harmful stuff escaped and replaces original (also exists for author and title)
82
- entry.sanitize! # => sanitizes the entry's title, author, and content in place (as in, it changes the value to clean versions)
83
- feed.sanitize_entries! # => sanitizes all entries in place
84
-
85
- # updating a single feed
86
- updated_feed = Feedjira::Feed.update(feed)
87
-
88
- # an updated feed has the following extra accessors
89
- updated_feed.updated? # returns true if any of the feed attributes have been modified. will return false if no new entries
90
- updated_feed.new_entries # a collection of the entry objects that are newer than the latest in the feed before update
91
-
92
- # fetching multiple feeds
93
- feed_urls = ["http://feeds.feedburner.com/PaulDixExplainsNothing", "http://feeds.feedburner.com/trottercashion"]
94
- feeds = Feedjira::Feed.fetch_and_parse(feed_urls)
95
-
96
- # feeds is now a hash with the feed_urls as keys and the parsed feed objects as values. If an error was thrown
97
- # there will be a Fixnum of the http response code instead of a feed object
98
-
99
- # updating multiple feeds. it expects a collection of feed objects
100
- updated_feeds = Feedjira::Feed.update(feeds.values)
101
-
102
- # defining custom behavior on failure or success. note that a return status of 304 (not updated) will call the on_success handler
103
- feed = Feedjira::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing",
104
- :on_success => lambda {|url, feed| puts feed.title },
105
- :on_failure => lambda {|curl, error| puts error })
106
-
107
- # if a collection was passed into fetch_and_parse, the handlers will be called for each one
108
-
109
- # the behavior for the handlers when using Feedjira::Feed.update is slightly different. The feed passed into on_success will be
110
- # the updated feed with the standard updated accessors. on failure it will be the original feed object passed into update
111
-
112
- # fetching a feed via a proxy (optional)
113
- feed = Feedjira::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing", {:proxy_url => '10.0.0.1', :proxy_port => 3084})
114
- ```
115
-
116
- ## Extending
117
-
118
- ### Adding a feed parsing class
119
-
120
- When determining which parser to use for a given XML document, the following
121
- list of parser classes is used:
122
-
123
- * `Feedjira::Parser::RSSFeedBurner`
124
- * `Feedjira::Parser::GoogleDocsAtom`
125
- * `Feedjira::Parser::AtomFeedBurner`
126
- * `Feedjira::Parser::Atom`
127
- * `Feedjira::Parser::ITunesRSS`
128
- * `Feedjira::Parser::RSS`
129
-
130
- You can insert your own parser at the front of this stack by calling
131
- `add_feed_class`, like this:
132
-
133
- ```ruby
134
- Feedjira::Feed.add_feed_class MyAwesomeParser
135
- ```
136
-
137
- Now when you `fetch_and_parse`, `MyAwesomeParser` will be the first one to get a
138
- chance to parse the feed.
139
-
140
- If you have the XML and just want to provide a parser class for one parse, you
141
- can specify that using `parse_with`:
142
-
143
- ```ruby
144
- Feedjira::Feed.parse_with MyAwesomeParser, xml
145
- ```
146
-
147
- ### Adding attributes to all feeds types / all entries types
148
-
149
- ```ruby
150
- # Add the generator attribute to all feed types
151
- Feedjira::Feed.add_common_feed_element('generator')
152
- Feedjira::Feed.fetch_and_parse("href="http://www.pauldix.net/atom.xml").generator # => 'TypePad'
153
-
154
- # Add some GeoRss information
155
- Feedjira::Feed.add_common_feed_entry_element('geo:lat', :as => :lat)
156
- Feedjira::Feed.fetch_and_parse("http://www.earthpublisher.com/georss.php").entries.each do |e|
157
- p "lat: #[e.lat}, long: #{e.long]"
158
- end
159
- ```
160
-
161
- ### Adding attributes to only one class
162
-
163
- If you want to add attributes for only one class you simply have to declare them
164
- in the class
165
-
166
- ```ruby
167
- # Add some GeoRss information
168
- require 'lib/feedjira/parser/rss_entry'
169
-
170
- class Feedjira::Parser::RSSEntry
171
- element 'geo:lat', :as => :lat
172
- element 'geo:long', :as => :long
173
- end
174
-
175
- # Fetch a feed containing GeoRss info and print them
176
- Feedjira::Feed.fetch_and_parse("http://www.earthpublisher.com/georss.php").entries.each do |e|
177
- p "lat: #{e.lat}, long: #{e.long}"
178
- end
179
- ```
180
-
181
- ## Testing
182
-
183
- Feedjira uses [curb][] to perform requests. `curb` provides bindings for
184
- [libcurl][] and supports numerous protocols, including FILE. To test Feedjira
185
- with local file use `file://` protocol:
186
-
187
- [libcurl]: http://curl.haxx.se/libcurl/
188
-
189
- ```ruby
190
- feed = Feedjira::Feed.fetch_and_parse('file:///home/feedjira/examples/feed.rss')
191
- ```
192
-
193
- ## Benchmarks
194
-
195
- Since a major goal of Feedjira is speed, benchmarks are provided--see the
196
- [Benchmark README][benchmark_readme] for more details.
197
-
198
- [benchmark_readme]: https://github.com/feedjira/feedjira/blob/master/benchmarks/README.md
199
-
200
- ## TODO
201
-
202
- This thing needs to hammer on many different feeds in the wild. I'm sure there
203
- will be bugs. I want to find them and crush them. I didn't bother using the test
204
- suite for feedparser. i wanted to start fresh.
205
-
206
- Here are some more specific TODOs.
207
-
208
- * Make a feedjira-rails gem to integrate feedjira seamlessly with Rails and ActiveRecord.
209
- * Add support for authenticated feeds.
210
- * Create a super sweet DSL for defining new parsers.
211
- * I'm not keeping track of modified on entries. Should I add this?
212
- * Clean up the fetching code inside feed.rb so it doesn't suck so hard.
213
- * Make the feed_spec actually mock stuff out so it doesn't hit the net.
214
- * Readdress how feeds determine if they can parse a document. Maybe I should use namespaces instead?
215
-
216
- ## LICENSE
217
-
218
- (The MIT License)
219
-
220
- Copyright (c) 2009-2013:
221
-
222
- - [Paul Dix](http://pauldix.net)
223
- - [Julien Kirch](http://archiloque.net/)
224
- - [Ezekiel Templin](http://zeke.templ.in/)
225
- - [Jon Allured](http://jonallured.com/)
226
-
227
- Permission is hereby granted, free of charge, to any person obtaining a copy of
228
- this software and associated documentation files (the 'Software'), to deal in
229
- the Software without restriction, including without limitation the rights to
230
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
231
- the Software, and to permit persons to whom the Software is furnished to do so,
232
- subject to the following conditions:
233
-
234
- The above copyright notice and this permission notice shall be included in all
235
- copies or substantial portions of the Software.
236
-
237
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
238
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
239
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
240
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
241
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
242
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14
+ There you'll find documentation, examples, announcements and more.
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
3
1
  require 'rspec/core/rake_task'
4
- RSpec::Core::RakeTask.new(:spec)
5
- task :test => :spec
6
- task :default => :test
2
+
3
+ RSpec::Core::RakeTask.new(:spec) do |t|
4
+ t.verbose = false
5
+ end
6
+
7
+ task default: :spec
data/lib/feedjira/feed.rb CHANGED
@@ -136,6 +136,7 @@ module Feedjira
136
136
  # Setup curl from options.
137
137
  # Possible parameters:
138
138
  # * :user_agent - overrides the default user agent.
139
+ # * :language - accept language value.
139
140
  # * :compress - any value to enable compression
140
141
  # * :enable_cookies - boolean
141
142
  # * :cookiefile - file to read cookies
@@ -151,6 +152,7 @@ module Feedjira
151
152
  def self.setup_easy(curl, options={})
152
153
  curl.headers["Accept-encoding"] = 'gzip, deflate' if options.has_key?(:compress)
153
154
  curl.headers["User-Agent"] = (options[:user_agent] || USER_AGENT)
155
+ curl.headers["Accept-Language"] = options[:language] if options.has_key?(:language)
154
156
  curl.enable_cookies = options[:enable_cookies] if options.has_key?(:enable_cookies)
155
157
  curl.cookiefile = options[:cookiefile] if options.has_key?(:cookiefile)
156
158
  curl.cookies = options[:cookies] if options.has_key?(:cookies)
@@ -1,20 +1 @@
1
- module Feedjira
2
- module Parser
3
- autoload :RSS, 'feedjira/parser/rss'
4
- autoload :RSSEntry, 'feedjira/parser/rss_entry'
5
- autoload :RSSFeedBurner, 'feedjira/parser/rss_feed_burner'
6
- autoload :RSSFeedBurnerEntry, 'feedjira/parser/rss_feed_burner_entry'
7
-
8
- autoload :ITunesRSS, 'feedjira/parser/itunes_rss'
9
- autoload :ITunesRSSItem, 'feedjira/parser/itunes_rss_item'
10
- autoload :ITunesRSSOwner, 'feedjira/parser/itunes_rss_owner'
11
-
12
- autoload :GoogleDocsAtom, 'feedjira/parser/google_docs_atom'
13
- autoload :GoogleDocsAtomEntry, 'feedjira/parser/google_docs_atom_entry'
14
-
15
- autoload :Atom, 'feedjira/parser/atom'
16
- autoload :AtomEntry, 'feedjira/parser/atom_entry'
17
- autoload :AtomFeedBurner, 'feedjira/parser/atom_feed_burner'
18
- autoload :AtomFeedBurnerEntry, 'feedjira/parser/atom_feed_burner_entry'
19
- end
20
- end
1
+ module Feedjira::Parser; end
@@ -1,3 +1,3 @@
1
1
  module Feedjira
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
data/lib/feedjira.rb CHANGED
@@ -4,13 +4,26 @@ require 'sax-machine'
4
4
  require 'loofah'
5
5
 
6
6
  require 'feedjira/core_ext'
7
+ require 'feedjira/feed_entry_utilities'
8
+ require 'feedjira/feed_utilities'
9
+ require 'feedjira/feed'
10
+ require 'feedjira/parser'
11
+ require 'feedjira/parser/rss_entry'
12
+ require 'feedjira/parser/rss'
13
+ require 'feedjira/parser/atom_entry'
14
+ require 'feedjira/parser/atom'
7
15
  require 'feedjira/version'
8
16
 
9
- module Feedjira
10
- autoload :FeedEntryUtilities, 'feedjira/feed_entry_utilities'
11
- autoload :FeedUtilities, 'feedjira/feed_utilities'
12
- autoload :Feed, 'feedjira/feed'
13
- autoload :Parser, 'feedjira/parser'
17
+ require 'feedjira/parser/rss_feed_burner_entry'
18
+ require 'feedjira/parser/rss_feed_burner'
19
+ require 'feedjira/parser/itunes_rss_owner'
20
+ require 'feedjira/parser/itunes_rss_item'
21
+ require 'feedjira/parser/itunes_rss'
22
+ require 'feedjira/parser/atom_feed_burner_entry'
23
+ require 'feedjira/parser/atom_feed_burner'
24
+ require 'feedjira/parser/google_docs_atom_entry'
25
+ require 'feedjira/parser/google_docs_atom'
14
26
 
27
+ module Feedjira
15
28
  class NoParserAvailable < StandardError; end
16
29
  end
@@ -174,6 +174,11 @@ describe Feedjira::Feed do
174
174
  curl.headers["User-Agent"].should eq '007'
175
175
  end
176
176
 
177
+ it "allows to set language" do
178
+ Feedjira::Feed.setup_easy(curl, language: 'en-US')
179
+ curl.headers["Accept-Language"].should eq 'en-US'
180
+ end
181
+
177
182
  it "enables compression" do
178
183
  Feedjira::Feed.setup_easy(curl, compress: true)
179
184
  curl.headers["Accept-encoding"].should eq 'gzip, deflate'
@@ -755,7 +760,7 @@ describe Feedjira::Feed do
755
760
  Feedjira::Feed.should_receive(:add_feed_to_multi).
756
761
  with(anything, anything, anything, anything, options)
757
762
 
758
- Feedjira::Feed.update(sample_rss_feed, options)
763
+ Feedjira::Feed.update([nil], options)
759
764
  end
760
765
  end
761
766
  end
@@ -0,0 +1,29 @@
1
+ module SampleFeeds
2
+ FEEDS = {
3
+ sample_atom_feed: "AmazonWebServicesBlog.xml",
4
+ sample_atom_xhtml_feed: "pet_atom.xml",
5
+ sample_atom_feed_line_breaks: "AtomFeedWithSpacesAroundEquals.xml",
6
+ sample_atom_entry_content: "AmazonWebServicesBlogFirstEntryContent.xml",
7
+ sample_itunes_feed: "itunes.xml",
8
+ sample_itunes_feed_with_spaces: "ITunesWithSpacesInAttributes.xml",
9
+ sample_rdf_feed: "HREFConsideredHarmful.xml",
10
+ sample_rdf_entry_content: "HREFConsideredHarmfulFirstEntry.xml",
11
+ sample_rss_feed_burner_feed: "TechCrunch.xml",
12
+ sample_rss_feed_burner_entry_content: "TechCrunchFirstEntry.xml",
13
+ sample_rss_feed_burner_entry_description: "TechCrunchFirstEntryDescription.xml",
14
+ sample_rss_feed: "TenderLovemaking.xml",
15
+ sample_rss_entry_content: "TenderLovemakingFirstEntry.xml",
16
+ sample_feedburner_atom_feed: "PaulDixExplainsNothing.xml",
17
+ sample_feedburner_atom_entry_content: "PaulDixExplainsNothingFirstEntryContent.xml",
18
+ sample_wfw_feed: "PaulDixExplainsNothingWFW.xml",
19
+ sample_google_docs_list_feed: "GoogleDocsList.xml"
20
+ }
21
+
22
+ FEEDS.each do |method, filename|
23
+ define_method(method) { load_sample filename }
24
+ end
25
+
26
+ def load_sample(filename)
27
+ File.read("#{File.dirname(__FILE__)}/sample_feeds/#{filename}")
28
+ end
29
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,88 +1,6 @@
1
- begin
2
- require 'simplecov'
3
- require 'json'
4
- SimpleCov.start do
5
- add_filter "/spec/"
6
- end
7
- rescue LoadError
8
- end
9
-
10
1
  require File.expand_path(File.dirname(__FILE__) + '/../lib/feedjira')
2
+ require 'sample_feeds'
11
3
 
12
- def load_sample(filename)
13
- File.read("#{File.dirname(__FILE__)}/sample_feeds/#{filename}")
14
- end
15
-
16
- def sample_atom_feed
17
- load_sample("AmazonWebServicesBlog.xml")
18
- end
19
-
20
- def sample_atom_xhtml_feed
21
- load_sample("pet_atom.xml")
22
- end
23
-
24
- def sample_atom_feed_line_breaks
25
- load_sample("AtomFeedWithSpacesAroundEquals.xml")
26
- end
27
-
28
- def sample_atom_entry_content
29
- load_sample("AmazonWebServicesBlogFirstEntryContent.xml")
30
- end
31
-
32
- def sample_itunes_feed
33
- load_sample("itunes.xml")
34
- end
35
-
36
- def sample_itunes_feed_with_spaces
37
- load_sample("ITunesWithSpacesInAttributes.xml")
38
- end
39
-
40
- def sample_rdf_feed
41
- load_sample("HREFConsideredHarmful.xml")
42
- end
43
-
44
- def sample_rdf_entry_content
45
- load_sample("HREFConsideredHarmfulFirstEntry.xml")
46
- end
47
-
48
- def sample_rss_feed_burner_feed
49
- load_sample("TechCrunch.xml")
50
- end
51
-
52
- def sample_rss_feed_burner_entry_content
53
- load_sample("TechCrunchFirstEntry.xml")
54
- end
55
-
56
- def sample_rss_feed_burner_entry_description
57
- load_sample("TechCrunchFirstEntryDescription.xml")
58
- end
59
-
60
- def sample_rss_feed
61
- load_sample("TenderLovemaking.xml")
62
- end
63
-
64
- def sample_rss_entry_content
65
- load_sample("TenderLovemakingFirstEntry.xml")
66
- end
67
-
68
- def sample_feedburner_atom_feed
69
- load_sample("PaulDixExplainsNothing.xml")
70
- end
71
-
72
- def sample_feedburner_atom_entry_content
73
- load_sample("PaulDixExplainsNothingFirstEntryContent.xml")
74
- end
75
-
76
- def sample_wfw_feed
77
- load_sample("PaulDixExplainsNothingWFW.xml")
78
- end
79
-
80
- def sample_google_docs_list_feed
81
- load_sample("GoogleDocsList.xml")
82
- end
83
-
84
- RSpec.configure do |config|
85
- config.treat_symbols_as_metadata_keys_with_true_values = true
86
- config.run_all_when_everything_filtered = true
87
- config.filter_run :focus
4
+ RSpec.configure do |c|
5
+ c.include SampleFeeds
88
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedjira
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dix
@@ -11,62 +11,62 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-03-17 00:00:00.000000000 Z
14
+ date: 2014-03-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: sax-machine
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.2.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.2.1
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: curb
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ~>
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
36
  version: 0.8.1
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: 0.8.1
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: loofah
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - ~>
48
+ - - "~>"
49
49
  - !ruby/object:Gem::Version
50
50
  version: 1.2.1
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - ~>
55
+ - - "~>"
56
56
  - !ruby/object:Gem::Version
57
57
  version: 1.2.1
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - ~>
62
+ - - "~>"
63
63
  - !ruby/object:Gem::Version
64
64
  version: 2.14.0
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - ~>
69
+ - - "~>"
70
70
  - !ruby/object:Gem::Version
71
71
  version: 2.14.0
72
72
  description: A library designed to retrieve and parse feeds as quickly as possible
@@ -75,12 +75,12 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - .gitignore
79
- - .rspec
80
- - .travis.yml
78
+ - ".gitignore"
79
+ - ".rspec"
80
+ - ".travis.yml"
81
81
  - CHANGELOG.md
82
82
  - Gemfile
83
- - Guardfile
83
+ - LICENSE
84
84
  - README.md
85
85
  - Rakefile
86
86
  - benchmarks/README.md
@@ -138,6 +138,7 @@ files:
138
138
  - spec/feedjira/parser/rss_feed_burner_entry_spec.rb
139
139
  - spec/feedjira/parser/rss_feed_burner_spec.rb
140
140
  - spec/feedjira/parser/rss_spec.rb
141
+ - spec/sample_feeds.rb
141
142
  - spec/sample_feeds/AmazonWebServicesBlog.xml
142
143
  - spec/sample_feeds/AmazonWebServicesBlogFirstEntryContent.xml
143
144
  - spec/sample_feeds/AtomFeedWithSpacesAroundEquals.xml
@@ -172,17 +173,17 @@ require_paths:
172
173
  - lib
173
174
  required_ruby_version: !ruby/object:Gem::Requirement
174
175
  requirements:
175
- - - '>='
176
+ - - ">="
176
177
  - !ruby/object:Gem::Version
177
178
  version: '0'
178
179
  required_rubygems_version: !ruby/object:Gem::Requirement
179
180
  requirements:
180
- - - '>='
181
+ - - ">="
181
182
  - !ruby/object:Gem::Version
182
183
  version: '0'
183
184
  requirements: []
184
185
  rubyforge_project:
185
- rubygems_version: 2.1.11
186
+ rubygems_version: 2.2.1
186
187
  signing_key:
187
188
  specification_version: 4
188
189
  summary: A feed fetching and parsing library
@@ -203,6 +204,7 @@ test_files:
203
204
  - spec/feedjira/parser/rss_feed_burner_entry_spec.rb
204
205
  - spec/feedjira/parser/rss_feed_burner_spec.rb
205
206
  - spec/feedjira/parser/rss_spec.rb
207
+ - spec/sample_feeds.rb
206
208
  - spec/sample_feeds/AmazonWebServicesBlog.xml
207
209
  - spec/sample_feeds/AmazonWebServicesBlogFirstEntryContent.xml
208
210
  - spec/sample_feeds/AtomFeedWithSpacesAroundEquals.xml
data/Guardfile DELETED
@@ -1,5 +0,0 @@
1
- guard 'rspec' do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
- watch('spec/spec_helper.rb') { "spec" }
5
- end