feedjira 2.0.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +15 -0
  4. data/.travis.yml +31 -12
  5. data/CHANGELOG.md +34 -1
  6. data/Dangerfile +1 -0
  7. data/Gemfile +2 -1
  8. data/LICENSE +1 -1
  9. data/README.md +210 -7
  10. data/Rakefile +11 -1
  11. data/feedjira.gemspec +17 -14
  12. data/fixtures/vcr_cassettes/fetch_failure.yml +62 -0
  13. data/fixtures/vcr_cassettes/parse_error.yml +222 -0
  14. data/fixtures/vcr_cassettes/success.yml +281 -0
  15. data/lib/feedjira/configuration.rb +76 -0
  16. data/lib/feedjira/core_ext/date.rb +3 -1
  17. data/lib/feedjira/core_ext/string.rb +2 -1
  18. data/lib/feedjira/core_ext/time.rb +24 -17
  19. data/lib/feedjira/core_ext.rb +3 -3
  20. data/lib/feedjira/date_time_utilities/date_time_epoch_parser.rb +13 -0
  21. data/lib/feedjira/date_time_utilities/date_time_language_parser.rb +24 -0
  22. data/lib/feedjira/date_time_utilities/date_time_pattern_parser.rb +34 -0
  23. data/lib/feedjira/date_time_utilities.rb +32 -0
  24. data/lib/feedjira/feed.rb +89 -62
  25. data/lib/feedjira/feed_entry_utilities.rb +20 -19
  26. data/lib/feedjira/feed_utilities.rb +37 -22
  27. data/lib/feedjira/parser/atom.rb +10 -8
  28. data/lib/feedjira/parser/atom_entry.rb +11 -13
  29. data/lib/feedjira/parser/atom_feed_burner.rb +27 -10
  30. data/lib/feedjira/parser/atom_feed_burner_entry.rb +12 -14
  31. data/lib/feedjira/parser/atom_youtube.rb +21 -0
  32. data/lib/feedjira/parser/atom_youtube_entry.rb +30 -0
  33. data/lib/feedjira/parser/google_docs_atom.rb +8 -7
  34. data/lib/feedjira/parser/google_docs_atom_entry.rb +13 -11
  35. data/lib/feedjira/parser/itunes_rss.rb +41 -22
  36. data/lib/feedjira/parser/itunes_rss_category.rb +39 -0
  37. data/lib/feedjira/parser/itunes_rss_item.rb +32 -20
  38. data/lib/feedjira/parser/itunes_rss_owner.rb +4 -4
  39. data/lib/feedjira/parser/podlove_chapter.rb +22 -0
  40. data/lib/feedjira/parser/rss.rb +11 -8
  41. data/lib/feedjira/parser/rss_entry.rb +17 -21
  42. data/lib/feedjira/parser/rss_feed_burner.rb +5 -6
  43. data/lib/feedjira/parser/rss_feed_burner_entry.rb +24 -28
  44. data/lib/feedjira/parser/rss_image.rb +15 -0
  45. data/lib/feedjira/parser.rb +1 -1
  46. data/lib/feedjira/preprocessor.rb +4 -2
  47. data/lib/feedjira/version.rb +1 -1
  48. data/lib/feedjira.rb +15 -0
  49. data/spec/feedjira/configuration_spec.rb +25 -0
  50. data/spec/feedjira/date_time_utilities_spec.rb +47 -0
  51. data/spec/feedjira/feed_entry_utilities_spec.rb +23 -19
  52. data/spec/feedjira/feed_spec.rb +140 -75
  53. data/spec/feedjira/feed_utilities_spec.rb +83 -63
  54. data/spec/feedjira/parser/atom_entry_spec.rb +54 -34
  55. data/spec/feedjira/parser/atom_feed_burner_entry_spec.rb +27 -20
  56. data/spec/feedjira/parser/atom_feed_burner_spec.rb +87 -30
  57. data/spec/feedjira/parser/atom_spec.rb +50 -48
  58. data/spec/feedjira/parser/atom_youtube_entry_spec.rb +86 -0
  59. data/spec/feedjira/parser/atom_youtube_spec.rb +43 -0
  60. data/spec/feedjira/parser/google_docs_atom_entry_spec.rb +5 -4
  61. data/spec/feedjira/parser/google_docs_atom_spec.rb +6 -6
  62. data/spec/feedjira/parser/itunes_rss_item_spec.rb +49 -29
  63. data/spec/feedjira/parser/itunes_rss_owner_spec.rb +10 -9
  64. data/spec/feedjira/parser/itunes_rss_spec.rb +87 -30
  65. data/spec/feedjira/parser/podlove_chapter_spec.rb +37 -0
  66. data/spec/feedjira/parser/rss_entry_spec.rb +50 -33
  67. data/spec/feedjira/parser/rss_feed_burner_entry_spec.rb +55 -33
  68. data/spec/feedjira/parser/rss_feed_burner_spec.rb +31 -26
  69. data/spec/feedjira/parser/rss_spec.rb +56 -24
  70. data/spec/feedjira/preprocessor_spec.rb +11 -3
  71. data/spec/sample_feeds/AmazonWebServicesBlog.xml +797 -797
  72. data/spec/sample_feeds/AtomEscapedHTMLInPreTag.xml +13 -0
  73. data/spec/sample_feeds/CRE.xml +5849 -0
  74. data/spec/sample_feeds/FeedBurnerXHTML.xml +400 -400
  75. data/spec/sample_feeds/GiantRobotsSmashingIntoOtherGiantRobots.xml +682 -0
  76. data/spec/sample_feeds/ITunesWithSingleQuotedAttributes.xml +67 -0
  77. data/spec/sample_feeds/InvalidDateFormat.xml +20 -0
  78. data/spec/sample_feeds/PaulDixExplainsNothing.xml +175 -175
  79. data/spec/sample_feeds/PaulDixExplainsNothingAlternate.xml +175 -175
  80. data/spec/sample_feeds/PaulDixExplainsNothingFirstEntryContent.xml +16 -16
  81. data/spec/sample_feeds/PaulDixExplainsNothingWFW.xml +174 -174
  82. data/spec/sample_feeds/TenderLovemaking.xml +12 -2
  83. data/spec/sample_feeds/TrotterCashionHome.xml +611 -611
  84. data/spec/sample_feeds/TypePadNews.xml +368 -368
  85. data/spec/sample_feeds/itunes.xml +31 -2
  86. data/spec/sample_feeds/pet_atom.xml +229 -229
  87. data/spec/sample_feeds/youtube_atom.xml +395 -0
  88. data/spec/sample_feeds.rb +31 -21
  89. data/spec/spec_helper.rb +6 -0
  90. metadata +132 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a75fe90b3327d3110c7ba5e5ebe8acdbfc9e4c10
4
- data.tar.gz: d4313aca74f021751d583f61c140a18aea2381b7
2
+ SHA256:
3
+ metadata.gz: 3b8cec1f08ed12a497f98c7e4b622f8ab06b688a75e968175dd985ad93cfd4bd
4
+ data.tar.gz: 1015179ce20e86b0a02253411e02e9b78bf0294c8f18a8e2fba3fc92c5c04b01
5
5
  SHA512:
6
- metadata.gz: 4004f548a5b6a3215294d5b8ebd81496c4603eaab3ba3c2f1b269815010fcbdc12cef8660a10ddd398159a09cb30443131e9c83b6973bf9cad9a746d78728c29
7
- data.tar.gz: f426881efa2533cdef5bb34eb0ff57bc86259abfd26eb916fadc79dea1b30f4b95262ffc53d1539494fc306a845b4b68cd35377d79d41bcfd73976a8387fa12d
6
+ metadata.gz: ba84e098bed14b11cf07a816500ff853e3337039bce117abf1bedc17d28d5bc3072d39bb43f747580f8c48de57417df23284fb0d71eb1d79d9f35896ae5c2f5c
7
+ data.tar.gz: 8ab31a4eb8427f70d5f26f817c3296a5ab5ea650b1885d4ac5f9518cb7c85fc852ccd29923b29c2f3300f67c6efa558de44a2f4290314ba9b206fe428b6ca13e
data/.gitignore CHANGED
@@ -1,7 +1,9 @@
1
1
  .bundle
2
+ .projections.json
2
3
  .ruby-gemset
3
4
  .ruby-version
4
5
  Gemfile.lock
5
6
  doc/
7
+ .yardoc/
6
8
  pkg/
7
9
  rdoc/
data/.rubocop.yml ADDED
@@ -0,0 +1,15 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.1
3
+
4
+ Style/Documentation:
5
+ Enabled: true
6
+ Exclude:
7
+ - 'spec/**/*'
8
+
9
+ Style/DocumentationMethod:
10
+ Enabled: true
11
+ Exclude:
12
+ - 'spec/**/*'
13
+
14
+ Style/ClassAndModuleChildren:
15
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,18 +1,37 @@
1
1
  language: ruby
2
2
 
3
- bundler_args: --without tools
4
-
5
- branches:
6
- only:
7
- - master
3
+ cache: bundler
8
4
 
9
5
  rvm:
10
- - 1.9.3
11
- - 2.0.0
12
- - 2.1.0
13
- - rbx-2
6
+ - 2.1
7
+ - 2.2
8
+ - 2.3
9
+ - jruby-9
10
+ - ruby-head
14
11
 
15
12
  env:
16
- matrix:
17
- - HANDLER="nokogiri"
18
- - HANDLER="ox"
13
+ - HANDLER=nokogiri
14
+ - HANDLER=ox
15
+ - HANDLER=oga
16
+
17
+ matrix:
18
+ fast_finish: true
19
+ allow_failures:
20
+ - rvm: jruby-9
21
+ - rvm: ruby-head
22
+ exclude:
23
+ - rvm: jruby-9
24
+ env: HANDLER=ox
25
+
26
+ before_install:
27
+ - gem update bundler
28
+
29
+ script:
30
+ - bundle exec rake
31
+ - bundle exec danger
32
+
33
+ notifications:
34
+ email: false
35
+ webhooks:
36
+ urls:
37
+ secure: XjoUz2rPXFHnitw//jN4qA92jq7bH19iOI/5KnuptLzz5HrWq1VAXxAr/Fh0KxYZT29G/9i5szaHX1QacfO7he4xa2tZKudRL70Dw3KRLgqLi70G6kFuZYlh+MgMHZy6KwZ/4/250wO31fpv24PCb2M56iTsev2g2uporeobO0Q=
data/CHANGELOG.md CHANGED
@@ -1,10 +1,43 @@
1
1
  # Feedjira Changelog
2
2
 
3
+ ## 2.2.0
4
+
5
+ * General
6
+ * Backport support for parsing new iTunes podcasting tags
7
+
8
+ ## 2.1.4
9
+
10
+ * Bug fixes
11
+ * Prevent errors when a feed has multiple dates and some are unparseable
12
+
13
+ ## 2.1.3
14
+
15
+ * Enhancements
16
+ * No longer log date parsing errors as warnings, they are now debug messages
17
+
18
+ ## 2.1.1
19
+
20
+ configurable logging and parsing
21
+
22
+ ## 2.1.0
23
+
24
+ * Enhancements
25
+ * AtomYoutube is now a supported parser [#337][] (@jfiorato)
26
+ * Oga parsing is now supported [#331][] (@krasnoukhov)
27
+ * DateTime Handler now supports localized dates [#313][] (@PascalTurbo)
28
+ * RSS now supports language attribute [#344][] (@PascalTurbo)
29
+ * ITunesRSS added support for:
30
+ * `ttl` and `last_built` [#343][] (@sferik)
31
+ * `itunes_category` and `itunes_category_paths` [#329][] (@knu)
32
+ * `itunes_complete` [#328][] (@knu)
33
+ * single quoted attributes [#326][] (@sferik)
34
+ * Add image attribute [#349][] (@sferik)
35
+
3
36
  ## 2.0.0
4
37
 
5
38
  * General
6
39
  * Replaced curb with faraday
7
- * Removed update funcionality
40
+ * Removed update functionality
8
41
 
9
42
  ## 1.6.0
10
43
 
data/Dangerfile ADDED
@@ -0,0 +1 @@
1
+ commit_lint.check(warn: :all)
data/Gemfile CHANGED
@@ -5,6 +5,7 @@ gemspec
5
5
  gem 'pry'
6
6
 
7
7
  group :test do
8
+ gem 'oga'
9
+ gem 'ox', platforms: [:mri, :rbx]
8
10
  gem 'rake'
9
- gem 'ox'
10
11
  end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2009-2014:
3
+ Copyright (c) 2009-2016:
4
4
 
5
5
  - Paul Dix
6
6
  - Julien Kirch
data/README.md CHANGED
@@ -1,14 +1,217 @@
1
- # Feedjira [![Build Status][travis-badge]][travis] [![Code Climate][code-climate-badge]][code-climate]
1
+ # Feedjira
2
2
 
3
- [travis-badge]: https://travis-ci.org/feedjira/feedjira.png
3
+ [![Build Status][travis-badge]][travis] [![Code Climate][code-climate-badge]][code-climate] [![Gitter][gitter-badge]][gitter]
4
+
5
+ [travis-badge]: https://travis-ci.org/feedjira/feedjira.svg?branch=master
4
6
  [travis]: http://travis-ci.org/feedjira/feedjira
5
- [code-climate-badge]: https://codeclimate.com/github/feedjira/feedjira.png
7
+ [code-climate-badge]: https://codeclimate.com/github/feedjira/feedjira/badges/gpa.svg
6
8
  [code-climate]: https://codeclimate.com/github/feedjira/feedjira
9
+ [gitter-badge]: https://badges.gitter.im/feedjira/feedjira.svg
10
+ [gitter]: https://gitter.im/feedjira/feedjira?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge
7
11
 
8
12
  Feedjira (formerly Feedzirra) 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].
13
+ feeds as quickly as possible.
14
+
15
+ ## Getting Started
16
+
17
+ Feedjira is tested with Ruby version 1.9.3 and 2.x so like any Ruby gem, the
18
+ first step is to install the gem:
19
+
20
+ ```
21
+ $ gem install feedjira
22
+ ```
23
+
24
+ Or add it to your Gemfile:
25
+
26
+ ```ruby
27
+ gem "feedjira"
28
+ ```
29
+
30
+ ## Fetching and Parsing
31
+
32
+ For many users, the `fetch_and_parse` method is what they use Feedjira for. This
33
+ method takes a url and returns a Parser object:
34
+
35
+ ```ruby
36
+ url = "http://feedjira.com/blog/feed.xml"
37
+ feed = Feedjira::Feed.fetch_and_parse(url)
38
+ # => #<Feedjira::Parser::Atom...>
39
+ ```
40
+
41
+ These feed objects have both the meta data for a feed and an `entries`
42
+ collection that contains all the entries that were found:
43
+
44
+ ```ruby
45
+ feed.title
46
+ # => "Feedjira Blog"
47
+ feed.url
48
+ # => "http://feedjira.com/blog"
49
+ feed.entries # returns an array of Entry objects
50
+ # => [<Feedjira::Feed::Entry ...>, <Feedjira::Feed::Entry ...>, ...]
51
+ ```
52
+
53
+ These entry objects contain the data parsed from the feed XML:
54
+
55
+ ```ruby
56
+ entry = feed.entries.first
57
+ entry.title
58
+ # => "Announcing verison 1.0"
59
+ entry.url
60
+ # => "http://feedjira.com/blog/2014-02-12-announcing-version-10.html"
61
+ ```
62
+
63
+ ## Just Parsing
64
+
65
+ The parsing functionality of Feedjira has been exposed so that it can be used in
66
+ isolation:
67
+
68
+ ```ruby
69
+ xml = Faraday.get(url).body
70
+ feed = Feedjira::Feed.parse xml
71
+ feed.entries.first.title
72
+ # => "Announcing verison 1.0"
73
+ ```
74
+
75
+ ## Adding a feed parsing class
76
+
77
+ When determining which parser to use for a given XML document, the following
78
+ list of parser classes is used:
79
+
80
+ * `Feedjira::Parser::RSSFeedBurner`
81
+ * `Feedjira::Parser::GoogleDocsAtom`
82
+ * `Feedjira::Parser::AtomFeedBurner`
83
+ * `Feedjira::Parser::Atom`
84
+ * `Feedjira::Parser::ITunesRSS`
85
+ * `Feedjira::Parser::RSS`
86
+
87
+ You can insert your own parser at the front of this stack by calling
88
+ `add_feed_class`, like this:
89
+
90
+ ```ruby
91
+ Feedjira::Feed.add_feed_class(MyAwesomeParser)
92
+ ```
93
+
94
+ Now when you `fetch_and_parse`, `MyAwesomeParser` will be the first one to get a
95
+ chance to parse the feed.
96
+
97
+ If you have the XML and just want to provide a parser class for one parse, you
98
+ can specify that using `parse_with`:
99
+
100
+ ```ruby
101
+ Feedjira::Feed.parse_with(MyAwesomeParser, xml)
102
+ ```
103
+
104
+ ## Adding attributes to all feeds types / all entries types
105
+
106
+ ```ruby
107
+ # Add the generator attribute to all feed types
108
+ Feedjira::Feed.add_common_feed_element("generator")
109
+ Feedjira::Feed.fetch_and_parse("http://www.pauldix.net/atom.xml").generator
110
+ # => "TypePad"
111
+ ```
112
+
113
+ ## Adding attributes to only one class
114
+
115
+ If you want to add attributes for only one class you simply have to declare them
116
+ in the class
117
+
118
+ ```ruby
119
+ # Add some GeoRss information
120
+ class Feedjira::Parser::RSSEntry
121
+ element "georss:elevation", as: :elevation
122
+ end
123
+
124
+ # Fetch a feed containing GeoRss info and print them
125
+ url = "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.atom"
126
+ Feedjira::Feed.fetch_and_parse(url).entries.each do |entry|
127
+ puts "Elevation: #{entry.elevation}"
128
+ end
129
+ ```
130
+
131
+ ## Configuration
132
+
133
+ #### Stripping whitespace from XML
134
+
135
+ Feedjira can be configured to strip all whitespace but defaults to lstrip only:
136
+
137
+ ```ruby
138
+ Feedjira.configure do |config|
139
+ config.strip_whitespace = true
140
+ end
141
+ ```
142
+
143
+ #### Follow redirect limit
144
+
145
+ For fetching feeds, the follow redirect limit defaults to 3 but can be set:
146
+
147
+ ```ruby
148
+ Feedjira.configure do |config|
149
+ config.follow_redirect_limit = 5
150
+ end
151
+ ```
152
+
153
+ #### Request timeout
154
+
155
+ The request timeout defaults to 30 but can be set:
156
+
157
+ ```ruby
158
+ Feedjira.configure do |config|
159
+ config.request_timeout = 45
160
+ end
161
+ ```
162
+
163
+ #### User agent
164
+
165
+ The default user agent is "Feedjira #{Version}" but can be set:
166
+
167
+ ```ruby
168
+ Feedjira.configure do |config|
169
+ config.user_agent = "Awesome Feed Reader"
170
+ end
171
+ ```
172
+
173
+ ## Testing
174
+
175
+ Feedjira uses [faraday][] to perform requests, so testing Feedjira is really
176
+ about [stubbing out faraday requests][stub].
177
+
178
+ [faraday]: https://github.com/lostisland/faraday
179
+ [stub]: https://github.com/lostisland/faraday#using-faraday-for-testing
180
+
181
+ ## Projects that use Feedjira
182
+
183
+ Feedjira is used in some awesome projects around the web - from RSS readers to
184
+ add-ons and everything in between. Here are some of them:
185
+
186
+ * [Feedbin][]: Feedbin bills itself as a fast, simple RSS reader that delivers a
187
+ great reading experience. It's a paid RSS reader that integrates with mobile
188
+ apps and it even has a fully featured API!
189
+
190
+ * [Stringer][]: Stringer is a self-hosted, anti-social RSS reader. It's an
191
+ open-source project that's easy to deploy to any host, there's even a
192
+ one-click button to deploy on Heroku.
193
+
194
+ * [BlogFeeder][]: BlogFeeder is a paid Shopify App that makes it easy for you to
195
+ import any external blog into your Shopify store. It helps improve your
196
+ store's SEO and keeps your blogs in sync, plus a lot more.
197
+
198
+ * [Feedbunch][]: Feedbunch is an open source feed reader built to fill the hole
199
+ left by Google Reader. It aims to support all features of Google Reader and
200
+ actually improve on others.
201
+
202
+ * [The Old Reader][old]: The Old Reader advertises as the ultimate social RSS
203
+ reader. It's free to start and also has a paid premium version. There's an API
204
+ and it integrates with many different mobile apps.
205
+
206
+ * [Solve for All][solve]: Solve for All combines search engine and feed parsing
207
+ while protecting your privacy. It's even extendable by the community!
11
208
 
12
- [f]: http://feedjira.com
209
+ [Feedbin]: https://feedbin.com/
210
+ [Stringer]: https://github.com/swanson/stringer
211
+ [BlogFeeder]: https://apps.shopify.com/blogfeeder
212
+ [Feedbunch]: https://github.com/amatriain/feedbunch
213
+ [old]: http://theoldreader.com/
214
+ [solve]: https://solveforall.com/
13
215
 
14
- There you'll find documentation, examples, announcements and more.
216
+ Note: to get your project on this list, simply [send an email](mailto:feedjira@gmail.com)
217
+ with your project's details.
data/Rakefile CHANGED
@@ -1,7 +1,17 @@
1
1
  require 'rspec/core/rake_task'
2
+ require 'rubocop/rake_task'
3
+ require 'yard'
2
4
 
3
5
  RSpec::Core::RakeTask.new(:spec) do |t|
4
6
  t.verbose = false
5
7
  end
6
8
 
7
- task default: :spec
9
+ RuboCop::RakeTask.new(:rubocop) do |t|
10
+ t.options = ['--display-cop-names']
11
+ end
12
+
13
+ YARD::Rake::YardocTask.new do |t|
14
+ t.files = ['lib/**/*.rb', '-', 'LICENSE']
15
+ end
16
+
17
+ task default: [:spec, :rubocop]
data/feedjira.gemspec CHANGED
@@ -2,27 +2,30 @@
2
2
  require File.expand_path('../lib/feedjira/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = 'feedjira'
6
- s.version = Feedjira::VERSION
7
- s.license = 'MIT'
8
-
9
5
  s.authors = ['Paul Dix', 'Julien Kirch', 'Ezekiel Templin', 'Jon Allured']
10
6
  s.email = 'feedjira@gmail.com'
11
7
  s.homepage = 'http://feedjira.com'
12
-
13
- s.summary = 'A feed fetching and parsing library'
14
- s.description = 'A library designed to retrieve and parse feeds as quickly as possible'
8
+ s.license = 'MIT'
9
+ s.name = 'feedjira'
10
+ s.platform = Gem::Platform::RUBY
11
+ s.summary = 'A feed fetching and parsing library'
12
+ s.version = Feedjira::VERSION
15
13
 
16
14
  s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
15
  s.require_paths = ['lib']
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
17
 
20
- s.platform = Gem::Platform::RUBY
18
+ s.required_ruby_version = '>=1.9.3'
21
19
 
22
- s.add_dependency 'sax-machine', '~> 1.0'
23
- s.add_dependency 'faraday', '~> 0.9'
24
- s.add_dependency 'faraday_middleware', '~> 0.9'
25
- s.add_dependency 'loofah', '~> 2.0'
20
+ s.add_dependency 'faraday', '>= 0.9'
21
+ s.add_dependency 'faraday_middleware', '>= 0.9'
22
+ s.add_dependency 'loofah', '>= 2.0'
23
+ s.add_dependency 'sax-machine', '>= 1.0'
26
24
 
27
- s.add_development_dependency 'rspec', '~> 3.0'
25
+ s.add_development_dependency 'danger'
26
+ s.add_development_dependency 'danger-commit_lint'
27
+ s.add_development_dependency 'rspec'
28
+ s.add_development_dependency 'rubocop', '0.46'
29
+ s.add_development_dependency 'vcr'
30
+ s.add_development_dependency 'yard', '~> 0.9'
28
31
  end
@@ -0,0 +1,62 @@
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