feedjira 2.2.0 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/feed-parsing.md +15 -0
  3. data/.rubocop.yml +32 -8
  4. data/.rubocop_todo.yml +11 -0
  5. data/.travis.yml +3 -7
  6. data/CHANGELOG.md +18 -9
  7. data/CODE_OF_CONDUCT.md +74 -0
  8. data/Gemfile +8 -5
  9. data/README.md +46 -99
  10. data/Rakefile +8 -6
  11. data/feedjira.gemspec +31 -20
  12. data/lib/feedjira.rb +75 -41
  13. data/lib/feedjira/atom_entry_utilities.rb +51 -0
  14. data/lib/feedjira/configuration.rb +8 -10
  15. data/lib/feedjira/core_ext.rb +5 -3
  16. data/lib/feedjira/core_ext/date.rb +2 -1
  17. data/lib/feedjira/core_ext/string.rb +2 -1
  18. data/lib/feedjira/core_ext/time.rb +12 -12
  19. data/lib/feedjira/date_time_utilities.rb +8 -10
  20. data/lib/feedjira/date_time_utilities/date_time_epoch_parser.rb +3 -2
  21. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +4 -4
  22. data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +11 -15
  23. data/lib/feedjira/feed.rb +12 -82
  24. data/lib/feedjira/feed_entry_utilities.rb +14 -7
  25. data/lib/feedjira/feed_utilities.rb +5 -4
  26. data/lib/feedjira/parser.rb +6 -1
  27. data/lib/feedjira/parser/atom.rb +6 -5
  28. data/lib/feedjira/parser/atom_entry.rb +4 -21
  29. data/lib/feedjira/parser/atom_feed_burner.rb +7 -6
  30. data/lib/feedjira/parser/atom_feed_burner_entry.rb +7 -18
  31. data/lib/feedjira/parser/atom_google_alerts.rb +26 -0
  32. data/lib/feedjira/parser/atom_google_alerts_entry.rb +21 -0
  33. data/lib/feedjira/parser/atom_youtube.rb +4 -3
  34. data/lib/feedjira/parser/atom_youtube_entry.rb +9 -8
  35. data/lib/feedjira/parser/globally_unique_identifier.rb +21 -0
  36. data/lib/feedjira/parser/google_docs_atom.rb +6 -6
  37. data/lib/feedjira/parser/google_docs_atom_entry.rb +3 -19
  38. data/lib/feedjira/parser/itunes_rss.rb +4 -3
  39. data/lib/feedjira/parser/itunes_rss_category.rb +6 -5
  40. data/lib/feedjira/parser/itunes_rss_item.rb +5 -8
  41. data/lib/feedjira/parser/itunes_rss_owner.rb +2 -1
  42. data/lib/feedjira/parser/json_feed.rb +41 -0
  43. data/lib/feedjira/parser/json_feed_item.rb +57 -0
  44. data/lib/feedjira/parser/podlove_chapter.rb +4 -3
  45. data/lib/feedjira/parser/rss.rb +5 -3
  46. data/lib/feedjira/parser/rss_entry.rb +3 -24
  47. data/lib/feedjira/parser/rss_feed_burner.rb +4 -3
  48. data/lib/feedjira/parser/rss_feed_burner_entry.rb +6 -26
  49. data/lib/feedjira/parser/rss_image.rb +2 -0
  50. data/lib/feedjira/preprocessor.rb +4 -4
  51. data/lib/feedjira/rss_entry_utilities.rb +53 -0
  52. data/lib/feedjira/version.rb +3 -1
  53. data/spec/feedjira/configuration_spec.rb +11 -16
  54. data/spec/feedjira/date_time_utilities_spec.rb +22 -20
  55. data/spec/feedjira/feed_entry_utilities_spec.rb +20 -18
  56. data/spec/feedjira/feed_spec.rb +17 -229
  57. data/spec/feedjira/feed_utilities_spec.rb +75 -73
  58. data/spec/feedjira/parser/atom_entry_spec.rb +41 -38
  59. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +22 -20
  60. data/spec/feedjira/parser/atom_feed_burner_spec.rb +122 -118
  61. data/spec/feedjira/parser/atom_google_alerts_entry_spec.rb +34 -0
  62. data/spec/feedjira/parser/atom_google_alerts_spec.rb +62 -0
  63. data/spec/feedjira/parser/atom_spec.rb +83 -77
  64. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +41 -39
  65. data/spec/feedjira/parser/atom_youtube_spec.rb +21 -19
  66. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +10 -8
  67. data/spec/feedjira/parser/google_docs_atom_spec.rb +25 -21
  68. data/spec/feedjira/parser/itunes_rss_item_spec.rb +39 -37
  69. data/spec/feedjira/parser/itunes_rss_owner_spec.rb +7 -5
  70. data/spec/feedjira/parser/itunes_rss_spec.rb +120 -116
  71. data/spec/feedjira/parser/json_feed_item_spec.rb +81 -0
  72. data/spec/feedjira/parser/json_feed_spec.rb +55 -0
  73. data/spec/feedjira/parser/podlove_chapter_spec.rb +14 -12
  74. data/spec/feedjira/parser/rss_entry_spec.rb +56 -34
  75. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +36 -34
  76. data/spec/feedjira/parser/rss_feed_burner_spec.rb +49 -45
  77. data/spec/feedjira/parser/rss_spec.rb +38 -36
  78. data/spec/feedjira/preprocessor_spec.rb +9 -7
  79. data/spec/feedjira_spec.rb +166 -0
  80. data/spec/sample_feeds.rb +32 -29
  81. data/spec/sample_feeds/HuffPostCanada.xml +279 -0
  82. data/spec/sample_feeds/Permalinks.xml +22 -0
  83. data/spec/sample_feeds/a10.xml +72 -0
  84. data/spec/sample_feeds/google_alerts_atom.xml +1 -0
  85. data/spec/sample_feeds/json_feed.json +156 -0
  86. data/spec/spec_helper.rb +7 -5
  87. metadata +59 -70
  88. data/Dangerfile +0 -1
  89. data/fixtures/vcr_cassettes/fetch_failure.yml +0 -62
  90. data/fixtures/vcr_cassettes/parse_error.yml +0 -222
  91. data/fixtures/vcr_cassettes/success.yml +0 -281
@@ -1,11 +1,13 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../lib/feedjira')
2
- require 'sample_feeds'
3
- require 'vcr'
1
+ # frozen_string_literal: true
4
2
 
5
- SAXMachine.handler = ENV['HANDLER'].to_sym if ENV['HANDLER']
3
+ require File.expand_path("#{File.dirname(__FILE__)}/../lib/feedjira")
4
+ require "sample_feeds"
5
+ require "vcr"
6
+
7
+ SAXMachine.handler = ENV["HANDLER"].to_sym if ENV["HANDLER"]
6
8
 
7
9
  VCR.configure do |config|
8
- config.cassette_library_dir = 'fixtures/vcr_cassettes'
10
+ config.cassette_library_dir = "fixtures/vcr_cassettes"
9
11
  config.hook_into :faraday
10
12
  end
11
13
 
metadata CHANGED
@@ -1,60 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedjira
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
- - Paul Dix
8
- - Julien Kirch
7
+ - Adam Hess
8
+ - Akinori Musha
9
9
  - Ezekiel Templin
10
10
  - Jon Allured
11
- autorequire:
11
+ - Julien Kirch
12
+ - Michael Stock
13
+ - Paul Dix
14
+ autorequire:
12
15
  bindir: bin
13
16
  cert_chain: []
14
- date: 2018-09-01 00:00:00.000000000 Z
17
+ date: 2020-11-22 00:00:00.000000000 Z
15
18
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: faraday
18
- requirement: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: '0.9'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '0.9'
30
- - !ruby/object:Gem::Dependency
31
- name: faraday_middleware
32
- requirement: !ruby/object:Gem::Requirement
33
- requirements:
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: '0.9'
37
- type: :runtime
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: '0.9'
44
19
  - !ruby/object:Gem::Dependency
45
20
  name: loofah
46
21
  requirement: !ruby/object:Gem::Requirement
47
22
  requirements:
48
23
  - - ">="
49
24
  - !ruby/object:Gem::Version
50
- version: '2.0'
25
+ version: 2.3.1
51
26
  type: :runtime
52
27
  prerelease: false
53
28
  version_requirements: !ruby/object:Gem::Requirement
54
29
  requirements:
55
30
  - - ">="
56
31
  - !ruby/object:Gem::Version
57
- version: '2.0'
32
+ version: 2.3.1
58
33
  - !ruby/object:Gem::Dependency
59
34
  name: sax-machine
60
35
  requirement: !ruby/object:Gem::Requirement
@@ -70,7 +45,7 @@ dependencies:
70
45
  - !ruby/object:Gem::Version
71
46
  version: '1.0'
72
47
  - !ruby/object:Gem::Dependency
73
- name: danger
48
+ name: faraday
74
49
  requirement: !ruby/object:Gem::Requirement
75
50
  requirements:
76
51
  - - ">="
@@ -84,7 +59,7 @@ dependencies:
84
59
  - !ruby/object:Gem::Version
85
60
  version: '0'
86
61
  - !ruby/object:Gem::Dependency
87
- name: danger-commit_lint
62
+ name: rspec
88
63
  requirement: !ruby/object:Gem::Requirement
89
64
  requirements:
90
65
  - - ">="
@@ -98,7 +73,7 @@ dependencies:
98
73
  - !ruby/object:Gem::Version
99
74
  version: '0'
100
75
  - !ruby/object:Gem::Dependency
101
- name: rspec
76
+ name: rubocop
102
77
  requirement: !ruby/object:Gem::Requirement
103
78
  requirements:
104
79
  - - ">="
@@ -111,20 +86,6 @@ dependencies:
111
86
  - - ">="
112
87
  - !ruby/object:Gem::Version
113
88
  version: '0'
114
- - !ruby/object:Gem::Dependency
115
- name: rubocop
116
- requirement: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - '='
119
- - !ruby/object:Gem::Version
120
- version: '0.46'
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- requirements:
125
- - - '='
126
- - !ruby/object:Gem::Version
127
- version: '0.46'
128
89
  - !ruby/object:Gem::Dependency
129
90
  name: vcr
130
91
  requirement: !ruby/object:Gem::Requirement
@@ -143,37 +104,37 @@ dependencies:
143
104
  name: yard
144
105
  requirement: !ruby/object:Gem::Requirement
145
106
  requirements:
146
- - - "~>"
107
+ - - ">="
147
108
  - !ruby/object:Gem::Version
148
- version: '0.9'
109
+ version: '0'
149
110
  type: :development
150
111
  prerelease: false
151
112
  version_requirements: !ruby/object:Gem::Requirement
152
113
  requirements:
153
- - - "~>"
114
+ - - ">="
154
115
  - !ruby/object:Gem::Version
155
- version: '0.9'
156
- description:
157
- email: feedjira@gmail.com
116
+ version: '0'
117
+ description:
118
+ email:
158
119
  executables: []
159
120
  extensions: []
160
121
  extra_rdoc_files: []
161
122
  files:
123
+ - ".github/ISSUE_TEMPLATE/feed-parsing.md"
162
124
  - ".gitignore"
163
125
  - ".rspec"
164
126
  - ".rubocop.yml"
127
+ - ".rubocop_todo.yml"
165
128
  - ".travis.yml"
166
129
  - CHANGELOG.md
167
- - Dangerfile
130
+ - CODE_OF_CONDUCT.md
168
131
  - Gemfile
169
132
  - LICENSE
170
133
  - README.md
171
134
  - Rakefile
172
135
  - feedjira.gemspec
173
- - fixtures/vcr_cassettes/fetch_failure.yml
174
- - fixtures/vcr_cassettes/parse_error.yml
175
- - fixtures/vcr_cassettes/success.yml
176
136
  - lib/feedjira.rb
137
+ - lib/feedjira/atom_entry_utilities.rb
177
138
  - lib/feedjira/configuration.rb
178
139
  - lib/feedjira/core_ext.rb
179
140
  - lib/feedjira/core_ext/date.rb
@@ -191,14 +152,19 @@ files:
191
152
  - lib/feedjira/parser/atom_entry.rb
192
153
  - lib/feedjira/parser/atom_feed_burner.rb
193
154
  - lib/feedjira/parser/atom_feed_burner_entry.rb
155
+ - lib/feedjira/parser/atom_google_alerts.rb
156
+ - lib/feedjira/parser/atom_google_alerts_entry.rb
194
157
  - lib/feedjira/parser/atom_youtube.rb
195
158
  - lib/feedjira/parser/atom_youtube_entry.rb
159
+ - lib/feedjira/parser/globally_unique_identifier.rb
196
160
  - lib/feedjira/parser/google_docs_atom.rb
197
161
  - lib/feedjira/parser/google_docs_atom_entry.rb
198
162
  - lib/feedjira/parser/itunes_rss.rb
199
163
  - lib/feedjira/parser/itunes_rss_category.rb
200
164
  - lib/feedjira/parser/itunes_rss_item.rb
201
165
  - lib/feedjira/parser/itunes_rss_owner.rb
166
+ - lib/feedjira/parser/json_feed.rb
167
+ - lib/feedjira/parser/json_feed_item.rb
202
168
  - lib/feedjira/parser/podlove_chapter.rb
203
169
  - lib/feedjira/parser/rss.rb
204
170
  - lib/feedjira/parser/rss_entry.rb
@@ -206,6 +172,7 @@ files:
206
172
  - lib/feedjira/parser/rss_feed_burner_entry.rb
207
173
  - lib/feedjira/parser/rss_image.rb
208
174
  - lib/feedjira/preprocessor.rb
175
+ - lib/feedjira/rss_entry_utilities.rb
209
176
  - lib/feedjira/version.rb
210
177
  - spec/feedjira/configuration_spec.rb
211
178
  - spec/feedjira/date_time_utilities_spec.rb
@@ -215,6 +182,8 @@ files:
215
182
  - spec/feedjira/parser/atom_entry_spec.rb
216
183
  - spec/feedjira/parser/atom_feed_burner_entry_spec.rb
217
184
  - spec/feedjira/parser/atom_feed_burner_spec.rb
185
+ - spec/feedjira/parser/atom_google_alerts_entry_spec.rb
186
+ - spec/feedjira/parser/atom_google_alerts_spec.rb
218
187
  - spec/feedjira/parser/atom_spec.rb
219
188
  - spec/feedjira/parser/atom_youtube_entry_spec.rb
220
189
  - spec/feedjira/parser/atom_youtube_spec.rb
@@ -223,12 +192,15 @@ files:
223
192
  - spec/feedjira/parser/itunes_rss_item_spec.rb
224
193
  - spec/feedjira/parser/itunes_rss_owner_spec.rb
225
194
  - spec/feedjira/parser/itunes_rss_spec.rb
195
+ - spec/feedjira/parser/json_feed_item_spec.rb
196
+ - spec/feedjira/parser/json_feed_spec.rb
226
197
  - spec/feedjira/parser/podlove_chapter_spec.rb
227
198
  - spec/feedjira/parser/rss_entry_spec.rb
228
199
  - spec/feedjira/parser/rss_feed_burner_entry_spec.rb
229
200
  - spec/feedjira/parser/rss_feed_burner_spec.rb
230
201
  - spec/feedjira/parser/rss_spec.rb
231
202
  - spec/feedjira/preprocessor_spec.rb
203
+ - spec/feedjira_spec.rb
232
204
  - spec/sample_feeds.rb
233
205
  - spec/sample_feeds/AmazonWebServicesBlog.xml
234
206
  - spec/sample_feeds/AmazonWebServicesBlogFirstEntryContent.xml
@@ -243,6 +215,7 @@ files:
243
215
  - spec/sample_feeds/GoogleDocsList.xml
244
216
  - spec/sample_feeds/HREFConsideredHarmful.xml
245
217
  - spec/sample_feeds/HREFConsideredHarmfulFirstEntry.xml
218
+ - spec/sample_feeds/HuffPostCanada.xml
246
219
  - spec/sample_feeds/ITunesWithSingleQuotedAttributes.xml
247
220
  - spec/sample_feeds/ITunesWithSpacesInAttributes.xml
248
221
  - spec/sample_feeds/InvalidDateFormat.xml
@@ -250,6 +223,7 @@ files:
250
223
  - spec/sample_feeds/PaulDixExplainsNothingAlternate.xml
251
224
  - spec/sample_feeds/PaulDixExplainsNothingFirstEntryContent.xml
252
225
  - spec/sample_feeds/PaulDixExplainsNothingWFW.xml
226
+ - spec/sample_feeds/Permalinks.xml
253
227
  - spec/sample_feeds/SamRuby.xml
254
228
  - spec/sample_feeds/TechCrunch.xml
255
229
  - spec/sample_feeds/TechCrunchFirstEntry.xml
@@ -258,16 +232,22 @@ files:
258
232
  - spec/sample_feeds/TenderLovemakingFirstEntry.xml
259
233
  - spec/sample_feeds/TrotterCashionHome.xml
260
234
  - spec/sample_feeds/TypePadNews.xml
235
+ - spec/sample_feeds/a10.xml
261
236
  - spec/sample_feeds/atom_with_link_tag_for_url_unmarked.xml
237
+ - spec/sample_feeds/google_alerts_atom.xml
262
238
  - spec/sample_feeds/itunes.xml
239
+ - spec/sample_feeds/json_feed.json
263
240
  - spec/sample_feeds/pet_atom.xml
264
241
  - spec/sample_feeds/youtube_atom.xml
265
242
  - spec/spec_helper.rb
266
- homepage: http://feedjira.com
243
+ homepage: https://github.com/feedjira/feedjira
267
244
  licenses:
268
245
  - MIT
269
- metadata: {}
270
- post_install_message:
246
+ metadata:
247
+ homepage_uri: http://feedjira.com
248
+ source_code_uri: https://github.com/feedjira/feedjira
249
+ changelog_uri: https://github.com/feedjira/feedjira/blob/master/CHANGELOG.md
250
+ post_install_message:
271
251
  rdoc_options: []
272
252
  require_paths:
273
253
  - lib
@@ -275,18 +255,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
275
255
  requirements:
276
256
  - - ">="
277
257
  - !ruby/object:Gem::Version
278
- version: 1.9.3
258
+ version: '2.2'
279
259
  required_rubygems_version: !ruby/object:Gem::Requirement
280
260
  requirements:
281
261
  - - ">="
282
262
  - !ruby/object:Gem::Version
283
263
  version: '0'
284
264
  requirements: []
285
- rubyforge_project:
286
- rubygems_version: 2.7.6
287
- signing_key:
265
+ rubygems_version: 3.2.0.rc.1
266
+ signing_key:
288
267
  specification_version: 4
289
- summary: A feed fetching and parsing library
268
+ summary: A feed parsing library
290
269
  test_files:
291
270
  - spec/feedjira/configuration_spec.rb
292
271
  - spec/feedjira/date_time_utilities_spec.rb
@@ -296,6 +275,8 @@ test_files:
296
275
  - spec/feedjira/parser/atom_entry_spec.rb
297
276
  - spec/feedjira/parser/atom_feed_burner_entry_spec.rb
298
277
  - spec/feedjira/parser/atom_feed_burner_spec.rb
278
+ - spec/feedjira/parser/atom_google_alerts_entry_spec.rb
279
+ - spec/feedjira/parser/atom_google_alerts_spec.rb
299
280
  - spec/feedjira/parser/atom_spec.rb
300
281
  - spec/feedjira/parser/atom_youtube_entry_spec.rb
301
282
  - spec/feedjira/parser/atom_youtube_spec.rb
@@ -304,12 +285,15 @@ test_files:
304
285
  - spec/feedjira/parser/itunes_rss_item_spec.rb
305
286
  - spec/feedjira/parser/itunes_rss_owner_spec.rb
306
287
  - spec/feedjira/parser/itunes_rss_spec.rb
288
+ - spec/feedjira/parser/json_feed_item_spec.rb
289
+ - spec/feedjira/parser/json_feed_spec.rb
307
290
  - spec/feedjira/parser/podlove_chapter_spec.rb
308
291
  - spec/feedjira/parser/rss_entry_spec.rb
309
292
  - spec/feedjira/parser/rss_feed_burner_entry_spec.rb
310
293
  - spec/feedjira/parser/rss_feed_burner_spec.rb
311
294
  - spec/feedjira/parser/rss_spec.rb
312
295
  - spec/feedjira/preprocessor_spec.rb
296
+ - spec/feedjira_spec.rb
313
297
  - spec/sample_feeds.rb
314
298
  - spec/sample_feeds/AmazonWebServicesBlog.xml
315
299
  - spec/sample_feeds/AmazonWebServicesBlogFirstEntryContent.xml
@@ -324,6 +308,7 @@ test_files:
324
308
  - spec/sample_feeds/GoogleDocsList.xml
325
309
  - spec/sample_feeds/HREFConsideredHarmful.xml
326
310
  - spec/sample_feeds/HREFConsideredHarmfulFirstEntry.xml
311
+ - spec/sample_feeds/HuffPostCanada.xml
327
312
  - spec/sample_feeds/ITunesWithSingleQuotedAttributes.xml
328
313
  - spec/sample_feeds/ITunesWithSpacesInAttributes.xml
329
314
  - spec/sample_feeds/InvalidDateFormat.xml
@@ -331,6 +316,7 @@ test_files:
331
316
  - spec/sample_feeds/PaulDixExplainsNothingAlternate.xml
332
317
  - spec/sample_feeds/PaulDixExplainsNothingFirstEntryContent.xml
333
318
  - spec/sample_feeds/PaulDixExplainsNothingWFW.xml
319
+ - spec/sample_feeds/Permalinks.xml
334
320
  - spec/sample_feeds/SamRuby.xml
335
321
  - spec/sample_feeds/TechCrunch.xml
336
322
  - spec/sample_feeds/TechCrunchFirstEntry.xml
@@ -339,8 +325,11 @@ test_files:
339
325
  - spec/sample_feeds/TenderLovemakingFirstEntry.xml
340
326
  - spec/sample_feeds/TrotterCashionHome.xml
341
327
  - spec/sample_feeds/TypePadNews.xml
328
+ - spec/sample_feeds/a10.xml
342
329
  - spec/sample_feeds/atom_with_link_tag_for_url_unmarked.xml
330
+ - spec/sample_feeds/google_alerts_atom.xml
343
331
  - spec/sample_feeds/itunes.xml
332
+ - spec/sample_feeds/json_feed.json
344
333
  - spec/sample_feeds/pet_atom.xml
345
334
  - spec/sample_feeds/youtube_atom.xml
346
335
  - spec/spec_helper.rb
data/Dangerfile DELETED
@@ -1 +0,0 @@
1
- commit_lint.check(warn: :all)
@@ -1,62 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: http://www.example.com/feed.xml
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - Faraday v0.9.2
12
- response:
13
- status:
14
- code: 404
15
- message:
16
- headers:
17
- cache-control:
18
- - max-age=604800
19
- content-type:
20
- - text/html
21
- date:
22
- - Mon, 31 Oct 2016 02:29:13 GMT
23
- etag:
24
- - '"359670651+gzip"'
25
- expires:
26
- - Mon, 07 Nov 2016 02:29:13 GMT
27
- last-modified:
28
- - Fri, 09 Aug 2013 23:54:35 GMT
29
- server:
30
- - ECS (oxr/83C7)
31
- vary:
32
- - Accept-Encoding
33
- x-cache:
34
- - HIT
35
- x-ec-custom-error:
36
- - '1'
37
- content-length:
38
- - '606'
39
- connection:
40
- - close
41
- body:
42
- encoding: ASCII-8BIT
43
- string: "<!doctype html>\n<html>\n<head>\n <title>Example Domain</title>\n\n
44
- \ <meta charset=\"utf-8\" />\n <meta http-equiv=\"Content-type\" content=\"text/html;
45
- charset=utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width,
46
- initial-scale=1\" />\n <style type=\"text/css\">\n body {\n background-color:
47
- #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: \"Open
48
- Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n
49
- \ div {\n width: 600px;\n margin: 5em auto;\n padding:
50
- 50px;\n background-color: #fff;\n border-radius: 1em;\n }\n
51
- \ a:link, a:visited {\n color: #38488f;\n text-decoration:
52
- none;\n }\n @media (max-width: 700px) {\n body {\n background-color:
53
- #fff;\n }\n div {\n width: auto;\n margin:
54
- 0 auto;\n border-radius: 0;\n padding: 1em;\n }\n
55
- \ }\n </style> \n</head>\n\n<body>\n<div>\n <h1>Example Domain</h1>\n
56
- \ <p>This domain is established to be used for illustrative examples in
57
- documents. You may use this\n domain in examples without prior coordination
58
- or asking for permission.</p>\n <p><a href=\"http://www.iana.org/domains/example\">More
59
- information...</a></p>\n</div>\n</body>\n</html>\n"
60
- http_version:
61
- recorded_at: Mon, 31 Oct 2016 02:29:13 GMT
62
- recorded_with: VCR 3.0.3
@@ -1,222 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: http://feedjira.com/
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- User-Agent:
11
- - Faraday v0.9.2
12
- response:
13
- status:
14
- code: 200
15
- message:
16
- headers:
17
- date:
18
- - Mon, 31 Oct 2016 02:29:13 GMT
19
- server:
20
- - Apache/2.4.18 (Ubuntu)
21
- last-modified:
22
- - Fri, 07 Oct 2016 14:50:31 GMT
23
- etag:
24
- - '"3678-53e47882c0305-gzip"'
25
- accept-ranges:
26
- - bytes
27
- vary:
28
- - Accept-Encoding
29
- content-length:
30
- - '3519'
31
- connection:
32
- - close
33
- content-type:
34
- - text/html
35
- body:
36
- encoding: ASCII-8BIT
37
- string: |
38
- <!DOCTYPE html>
39
- <html>
40
- <head>
41
- <meta charset='utf-8'>
42
- <meta content='IE=edge;chrome=1' http-equiv='X-UA-Compatible'>
43
- <meta content='width=device-width, initial-scale=.7, maximum-scale=1' name='viewport'>
44
- <title>Feedjira</title>
45
- <link href="http://fonts.googleapis.com/css?family=Merriweather+Sans:400,300,400italic,700,700italic,300italic" rel="stylesheet" type="text/css" media="screen" />
46
- <link href="/css/syntax.css" media="screen" rel="stylesheet" type="text/css" />
47
- <link href="/css/style.css" media="screen" rel="stylesheet" type="text/css" />
48
- <link rel="alternate" type="application/atom+xml" title="Atom Feed" href="/blog/feed.xml" />
49
- </head>
50
- <body>
51
- <div id='content'>
52
- <header>
53
- <h1><a href="/">Feedjira</a></h1>
54
- </header>
55
- <nav>
56
- <ul>
57
- <li><a href="/">Home</a></li>
58
- <li><a href="/blog/">Blog</a></li>
59
- <li><a target="_blank" href="https://github.com/feedjira/feedjira">Source</a></li>
60
- </ul>
61
- </nav>
62
- <section><h1>The Feedjira Ruby Gem</h1>
63
-
64
- <p><a href="https://github.com/feedjira/feedjira">Feedjira</a> (formerly Feedzirra) is a Ruby gem for fetching and parsing
65
- RSS feeds. Version 2.0 <a href="/blog/2015/06/05/feedjira-two-point-oh.html">was recently released</a>.</p>
66
-
67
- <h2>Getting Started</h2>
68
-
69
- <p>Feedjira is tested with Ruby version 1.9.3 and 2.x so like any Ruby gem, the
70
- first step is to install the gem:</p>
71
- <pre class="highlight text"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div></td><td class="code">$ gem install feedjira
72
- </td></tr></tbody></table></pre>
73
- <p>Or add it to your Gemfile:</p>
74
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div></td><td class="code"><span class="n">gem</span> <span class="s1">&#39;feedjira&#39;</span>
75
- </td></tr></tbody></table></pre>
76
- <h2>Fetching and Parsing</h2>
77
-
78
- <p>For many users, the <code>fetch_and_parse</code> method is what they use Feedjira for. This
79
- method takes a url and returns a Parser object:</p>
80
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div></td><td class="code"><span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;http://feedjira.com/blog/feed.xml&quot;</span>
81
- <span class="n">feed</span> <span class="o">=</span> <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.fetch_and_parse</span> <span class="n">url</span>
82
- <span class="c1"># =&gt; #&lt;Feedjira::Parser::Atom...&gt;</span>
83
- </td></tr></tbody></table></pre>
84
- <p>These feed objects have both the meta data for a feed and an <code>entries</code>
85
- collection that contains all the entries that were found:</p>
86
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div><div class="lineno">4</div><div class="lineno">5</div><div class="lineno">6</div></td><td class="code"><span class="n">feed</span><span class="nf">.title</span>
87
- <span class="c1"># =&gt; &quot;Feedjira Blog&quot;</span>
88
- <span class="n">feed</span><span class="nf">.url</span>
89
- <span class="c1"># =&gt; &quot;http://feedjira.com/blog&quot;</span>
90
- <span class="n">feed</span><span class="nf">.entries</span> <span class="c1"># returns an array of Entry objects</span>
91
- <span class="c1"># =&gt; [&lt;Feedjira::Feed::Entry ...&gt;, &lt;Feedjira::Feed::Entry ...&gt;, ...]</span>
92
- </td></tr></tbody></table></pre>
93
- <p>These entry objects contain the data parsed from the feed XML:</p>
94
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div><div class="lineno">4</div><div class="lineno">5</div></td><td class="code"><span class="n">entry</span> <span class="o">=</span> <span class="n">feed</span><span class="nf">.entries.first</span>
95
- <span class="n">entry</span><span class="nf">.title</span>
96
- <span class="c1"># =&gt; &quot;Announcing verison 1.0&quot;</span>
97
- <span class="n">entry</span><span class="nf">.url</span>
98
- <span class="c1"># =&gt; &quot;http://feedjira.com/blog/2014-02-12-announcing-version-10.html&quot;</span>
99
- </td></tr></tbody></table></pre>
100
- <h2>Just Parsing</h2>
101
-
102
- <p>The parsing functionality of Feedjira has been exposed so that it can be used in
103
- isolation:</p>
104
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div><div class="lineno">4</div></td><td class="code"><span class="n">xml</span> <span class="o">=</span> <span class="no">Faraday</span><span class="nf">.get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span><span class="nf">.body</span>
105
- <span class="n">feed</span> <span class="o">=</span> <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.parse</span> <span class="n">xml</span>
106
- <span class="n">feed</span><span class="nf">.entries.first.title</span>
107
- <span class="c1"># =&gt; &quot;Announcing verison 1.0&quot;</span>
108
- </td></tr></tbody></table></pre>
109
- <h2>Adding a feed parsing class</h2>
110
-
111
- <p>When determining which parser to use for a given XML document, the following
112
- list of parser classes is used:</p>
113
-
114
- <ul>
115
- <li><code>Feedjira::Parser::RSSFeedBurner</code></li>
116
- <li><code>Feedjira::Parser::GoogleDocsAtom</code></li>
117
- <li><code>Feedjira::Parser::AtomFeedBurner</code></li>
118
- <li><code>Feedjira::Parser::Atom</code></li>
119
- <li><code>Feedjira::Parser::ITunesRSS</code></li>
120
- <li><code>Feedjira::Parser::RSS</code></li>
121
- </ul>
122
-
123
- <p>You can insert your own parser at the front of this stack by calling
124
- <code>add_feed_class</code>, like this:</p>
125
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div></td><td class="code"><span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.add_feed_class</span> <span class="no">MyAwesomeParser</span>
126
- </td></tr></tbody></table></pre>
127
- <p>Now when you <code>fetch_and_parse</code>, <code>MyAwesomeParser</code> will be the first one to get a
128
- chance to parse the feed.</p>
129
-
130
- <p>If you have the XML and just want to provide a parser class for one parse, you
131
- can specify that using <code>parse_with</code>:</p>
132
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div></td><td class="code"><span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.parse_with</span> <span class="no">MyAwesomeParser</span><span class="p">,</span> <span class="n">xml</span>
133
- </td></tr></tbody></table></pre>
134
- <h2>Adding attributes to all feeds types / all entries types</h2>
135
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div><div class="lineno">4</div><div class="lineno">5</div><div class="lineno">6</div><div class="lineno">7</div><div class="lineno">8</div><div class="lineno">9</div><div class="lineno">10</div></td><td class="code"><span class="c1"># Add the generator attribute to all feed types</span>
136
- <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.add_common_feed_element</span><span class="p">(</span><span class="s1">&#39;generator&#39;</span><span class="p">)</span>
137
- <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.fetch_and_parse</span><span class="p">(</span><span class="s2">&quot;http://www.pauldix.net/atom.xml&quot;</span><span class="p">)</span><span class="nf">.generator</span> <span class="c1"># =&gt; &#39;TypePad&#39;</span>
138
-
139
- <span class="c1"># Add some GeoRss information</span>
140
- <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.add_common_feed_entry_element</span><span class="p">(</span><span class="s1">&#39;geo:lat&#39;</span><span class="p">,</span> <span class="ss">:as</span> <span class="o">=&gt;</span> <span class="ss">:lat</span><span class="p">)</span>
141
- <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.fetch_and_parse</span><span class="p">(</span><span class="s2">&quot;http://www.earthpublisher.com/georss.php&quot;</span><span class="p">)</span><span class="nf">.entries.each</span> <span class="k">do</span> <span class="o">|</span><span class="n">e</span><span class="o">|</span>
142
- <span class="nb">p</span> <span class="s2">&quot;lat: #[e.lat}, long: </span><span class="si">#{</span><span class="n">e</span><span class="nf">.long</span><span class="o">]</span><span class="s2">&quot;
143
- end
144
- </span></td></tr></tbody></table></pre>
145
- <h2>Adding attributes to only one class</h2>
146
-
147
- <p>If you want to add attributes for only one class you simply have to declare them
148
- in the class</p>
149
- <pre class="highlight ruby"><table><tbody><tr><td class="gutter gl"><div class="lineno">1</div><div class="lineno">2</div><div class="lineno">3</div><div class="lineno">4</div><div class="lineno">5</div><div class="lineno">6</div><div class="lineno">7</div><div class="lineno">8</div><div class="lineno">9</div><div class="lineno">10</div><div class="lineno">11</div><div class="lineno">12</div></td><td class="code"><span class="c1"># Add some GeoRss information</span>
150
- <span class="nb">require</span> <span class="s1">&#39;lib/feedzirra/parser/rss_entry&#39;</span>
151
-
152
- <span class="k">class </span><span class="nc">Feedjira</span><span class="o">::</span><span class="no">Parser</span><span class="o">::</span><span class="no">RSSEntry</span>
153
- <span class="n">element</span> <span class="s1">&#39;geo:lat&#39;</span><span class="p">,</span> <span class="ss">:as</span> <span class="o">=&gt;</span> <span class="ss">:lat</span>
154
- <span class="n">element</span> <span class="s1">&#39;geo:long&#39;</span><span class="p">,</span> <span class="ss">:as</span> <span class="o">=&gt;</span> <span class="ss">:long</span>
155
- <span class="k">end</span>
156
-
157
- <span class="c1"># Fetch a feed containing GeoRss info and print them</span>
158
- <span class="no">Feedjira</span><span class="o">::</span><span class="no">Feed</span><span class="nf">.fetch_and_parse</span><span class="p">(</span><span class="s2">&quot;http://www.earthpublisher.com/georss.php&quot;</span><span class="p">)</span><span class="nf">.entries.each</span> <span class="k">do</span> <span class="o">|</span><span class="n">e</span><span class="o">|</span>
159
- <span class="nb">p</span> <span class="s2">&quot;lat: </span><span class="si">#{</span><span class="n">e</span><span class="nf">.lat</span><span class="si">}</span><span class="s2">, long: </span><span class="si">#{</span><span class="n">e</span><span class="nf">.long</span><span class="si">}</span><span class="s2">&quot;</span>
160
- <span class="k">end</span>
161
- </td></tr></tbody></table></pre>
162
- <h2>Testing</h2>
163
-
164
- <p>Feedjira uses <a href="https://github.com/lostisland/faraday">faraday</a> to perform requests, so testing Feedjira is really
165
- about <a href="https://github.com/lostisland/faraday#using-faraday-for-testing">stubbing out faraday requests</a>.</p>
166
-
167
- <h2>Projects that use Feedjira</h2>
168
-
169
- <p>Feedjira is used in some awesome projects around the web - from RSS readers to
170
- add-ons and everything in between. Here are some of them:</p>
171
-
172
- <ul>
173
- <li><p><a href="https://feedbin.com/">Feedbin</a>: Feedbin bills itself as a fast, simple RSS reader that delivers a
174
- great reading experience. It&rsquo;s a paid RSS reader that integrates with mobile
175
- apps and it even has a fully featured API!</p></li>
176
- <li><p><a href="https://github.com/swanson/stringer">Stringer</a>: Stringer is a self-hosted, anti-social RSS reader. It&rsquo;s an
177
- open-source project that&rsquo;s easy to deploy to any host, there&rsquo;s even a
178
- one-click button to deploy on Heroku.</p></li>
179
- <li><p><a href="https://apps.shopify.com/blogfeeder">BlogFeeder</a>: BlogFeeder is a paid Shopify App that makes it easy for you to
180
- import any external blog into your Shopify store. It helps improve your
181
- store&rsquo;s SEO and keeps your blogs in sync, plus a lot more.</p></li>
182
- <li><p><a href="https://github.com/amatriain/feedbunch">Feedbunch</a>: Feedbunch is an open source feed reader built to fill the hole
183
- left by Google Reader. It aims to support all features of Google Reader and
184
- actually improve on others.</p></li>
185
- <li><p><a href="http://theoldreader.com/">The Old Reader</a>: The Old Reader advertises as the ultimate social RSS
186
- reader. It&rsquo;s free to start and also has a paid premium version. There&rsquo;s an API
187
- and it integrates with many different mobile apps.</p></li>
188
- <li><p><a href="https://solveforall.com/">Solve for All</a>: Solve for All combines search engine and feed parsing
189
- while protecting your privacy. It&rsquo;s even extendable by the community!</p></li>
190
- </ul>
191
-
192
- <p>Note: to get your project on this list, simply <a href="mailto:feedjira@gmail.com">send an email</a>
193
- with your project&rsquo;s details.</p>
194
- </section>
195
- </div>
196
- <footer>
197
- <div class='column'>
198
- <ul>
199
- <li><a href="/">Home</a></li>
200
- <li><a href="/blog/">Blog</a></li>
201
- <li><a href="/blog/feed.xml">Feed</a></li>
202
- <li><a target="_blank" href="https://github.com/feedjira/feedjira">Source</a></li>
203
- <li><a target="_blank" href="https://twitter.com/feedjira">@feedjira</a></li>
204
- </ul>
205
- <p>Maintained by <a href="http://jonallured.com">Jon Allured</a>, Created by <a href="http://www.pauldix.net">Paul Dix</a>, Site design by <a href="http://danielariza.com">Daniel Ariza</a></p>
206
- </div>
207
- </footer>
208
- <script type="text/javascript">
209
- var _gaq = _gaq || [];
210
- _gaq.push(["_setAccount", "UA-3137727-7"]);
211
- _gaq.push(["_trackPageview"]);
212
- (function() {
213
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
214
- ga.src = ('https:' == document.location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js';
215
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
216
- })();
217
- </script>
218
- </body>
219
- </html>
220
- http_version:
221
- recorded_at: Mon, 31 Oct 2016 02:29:13 GMT
222
- recorded_with: VCR 3.0.3