weneedfeed 0.6.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c580b642b78a2c26bf06d840fad6a745d498630779c670784deba389d9b28f1a
4
- data.tar.gz: e29a86399e141b1c650a064cf6c45066149d93dee722b70fa657366519015f7b
3
+ metadata.gz: 3b2041bae9e09565e1b72a4799f8a57034ad73c139de460dc0d187a5b94dbbe2
4
+ data.tar.gz: 292b45f698fb86f8cd5632687210ab6c09cd74a6d6ad340bb6eb7b989ffc4e3a
5
5
  SHA512:
6
- metadata.gz: 3293b7dbba14a24988a77bb2070adfef0a4c4f343197d5633076c497747d6f66d9642b89e37ec11f9d2c51a0f91b18c8dfd614cf053339adfc3c7b4390702774
7
- data.tar.gz: f9549a610dec4b77e9e6f86829890bc31928f086652480cbe2c501b1c9fda479a1a0d549ec6efb3a40d1f8ea4fcdb4cc4ccc198403c57ab0a2dbf3c9010ea27f
6
+ metadata.gz: 8dc45d743eb961d6a18983b8c20340b1e4c2085c7ed1c348332bddb51c211aa2c5067211e789f9cdd192eb3b161602d63f304adc8421ade49210ce11396a0031
7
+ data.tar.gz: 60f284ba462f92130a3de4702e33ae3d73418a3057459b40656e75f0a27e8ad9bc8b67946b1137b590f38250d5dec695cdfe41cad58f96947cf0dc0885c2839b
@@ -7,16 +7,24 @@ on:
7
7
  - master
8
8
 
9
9
  jobs:
10
- build:
11
- runs-on: ubuntu-18.04
10
+ rspec:
11
+ runs-on: ubuntu-20.04
12
12
  steps:
13
13
  - uses: actions/checkout@v2
14
+ - uses: ruby/setup-ruby@v1
15
+ with:
16
+ bundler-cache: true
17
+ ruby-version: 2.7.2
18
+ - run: bundle exec rspec --force-color
19
+ rubocop:
20
+ runs-on: ubuntu-20.04
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ with:
24
+ ref: ${{ github.event.pull_request.head.sha }}
14
25
  - uses: ruby/setup-ruby@v1
15
26
  with:
16
27
  bundler-cache: true
17
28
  ruby-version: 2.7.2
18
29
  - uses: r7kamura/rubocop-problem-matchers-action@v1
19
30
  - run: bundle exec rubocop --parallel
20
- - run: bundle exec rspec --force-color
21
-
22
-
@@ -1,4 +1,8 @@
1
+ require:
2
+ - rubocop-rspec
3
+
1
4
  AllCops:
5
+ NewCops: enable
2
6
  TargetRubyVersion: 2.5
3
7
 
4
8
  Lint/SuppressedException:
@@ -7,8 +11,20 @@ Lint/SuppressedException:
7
11
  Metrics:
8
12
  Enabled: false
9
13
 
14
+ RSpec/ImplicitSubject:
15
+ Enabled: false
16
+
17
+ RSpec/MultipleExpectations:
18
+ Enabled: false
19
+
20
+ RSpec/NamedSubject:
21
+ Enabled: false
22
+
10
23
  Style/Documentation:
11
24
  Enabled: false
12
25
 
13
26
  Style/TrailingCommaInArguments:
14
27
  Enabled: false
28
+
29
+ Style/TrailingCommaInHashLiteral:
30
+ Enabled: false
@@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.9.0 - 2020-12-03
11
+
12
+ ### Added
13
+
14
+ - Add item_image_selector.
15
+
16
+ ## 0.8.0 - 2020-11-25
17
+
18
+ ### Added
19
+
20
+ - Add page description for writing channel description.
21
+
22
+ ### Changed
23
+
24
+ - Change channel link content from feeds index URL to page URL.
25
+
26
+ ## 0.7.2 - 2020-11-25
27
+
28
+ ### Fixed
29
+
30
+ - Fix time parse error by HTML entities handling.
31
+
32
+ ## 0.7.1 - 2020-11-25
33
+
34
+ ### Fixed
35
+
36
+ - Fix error when no title element found.
37
+
38
+ ## 0.7.0 - 2020-11-23
39
+
40
+ ### Added
41
+
42
+ - Convert JSON response into XML.
43
+
44
+ ### Fixed
45
+
46
+ - Fix bug that item_description_selector is not used.
47
+
10
48
  ## 0.6.1 - 2020-11-15
11
49
 
12
50
  ### Changed
data/Gemfile CHANGED
@@ -9,4 +9,5 @@ gem 'rack-test'
9
9
  gem 'rake', '~> 12.0'
10
10
  gem 'rspec'
11
11
  gem 'rubocop'
12
+ gem 'rubocop-rspec'
12
13
  gem 'webmock'
@@ -1,9 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weneedfeed (0.6.1)
4
+ weneedfeed (0.9.0)
5
+ activesupport
6
+ builder
5
7
  faraday
8
+ faraday_middleware
6
9
  hibana (>= 0.2)
10
+ mimemagic
7
11
  nokogiri
8
12
  rack-capture (>= 0.4.0)
9
13
  thor
@@ -11,14 +15,24 @@ PATH
11
15
  GEM
12
16
  remote: https://rubygems.org/
13
17
  specs:
18
+ activesupport (6.0.3.4)
19
+ concurrent-ruby (~> 1.0, >= 1.0.2)
20
+ i18n (>= 0.7, < 2)
21
+ minitest (~> 5.1)
22
+ tzinfo (~> 1.1)
23
+ zeitwerk (~> 2.2, >= 2.2.2)
14
24
  addressable (2.7.0)
15
25
  public_suffix (>= 2.0.2, < 5.0)
16
26
  ast (2.4.1)
27
+ builder (3.2.4)
28
+ concurrent-ruby (1.1.7)
17
29
  crack (0.4.4)
18
30
  diff-lcs (1.4.4)
19
31
  faraday (1.1.0)
20
32
  multipart-post (>= 1.2, < 3)
21
33
  ruby2_keywords
34
+ faraday_middleware (1.0.0)
35
+ faraday (~> 1.0)
22
36
  hanami-router (2.0.0.alpha3)
23
37
  mustermann (~> 1.0)
24
38
  mustermann-contrib (~> 1.0)
@@ -29,7 +43,11 @@ GEM
29
43
  hanami-router (>= 2.0.0.alpha3)
30
44
  rack
31
45
  tilt
46
+ i18n (1.8.5)
47
+ concurrent-ruby (~> 1.0)
48
+ mimemagic (0.3.5)
32
49
  mini_portile2 (2.4.0)
50
+ minitest (5.14.2)
33
51
  multipart-post (2.1.1)
34
52
  mustermann (1.1.1)
35
53
  ruby2_keywords (~> 0.0.1)
@@ -38,7 +56,7 @@ GEM
38
56
  mustermann (= 1.1.1)
39
57
  nokogiri (1.10.10)
40
58
  mini_portile2 (~> 2.4.0)
41
- parallel (1.19.2)
59
+ parallel (1.20.1)
42
60
  parser (2.7.2.0)
43
61
  ast (~> 2.4.1)
44
62
  public_suffix (4.0.6)
@@ -64,26 +82,33 @@ GEM
64
82
  diff-lcs (>= 1.2.0, < 2.0)
65
83
  rspec-support (~> 3.9.0)
66
84
  rspec-support (3.9.4)
67
- rubocop (1.0.0)
85
+ rubocop (1.4.0)
68
86
  parallel (~> 1.10)
69
87
  parser (>= 2.7.1.5)
70
88
  rainbow (>= 2.2.2, < 4.0)
71
89
  regexp_parser (>= 1.8)
72
90
  rexml
73
- rubocop-ast (>= 0.6.0)
91
+ rubocop-ast (>= 1.1.1)
74
92
  ruby-progressbar (~> 1.7)
75
93
  unicode-display_width (>= 1.4.0, < 2.0)
76
- rubocop-ast (1.1.0)
94
+ rubocop-ast (1.1.1)
77
95
  parser (>= 2.7.1.5)
96
+ rubocop-rspec (2.0.0)
97
+ rubocop (~> 1.0)
98
+ rubocop-ast (>= 1.1.0)
78
99
  ruby-progressbar (1.10.1)
79
100
  ruby2_keywords (0.0.2)
80
101
  thor (1.0.1)
102
+ thread_safe (0.3.6)
81
103
  tilt (2.0.10)
104
+ tzinfo (1.2.8)
105
+ thread_safe (~> 0.1)
82
106
  unicode-display_width (1.7.0)
83
107
  webmock (3.9.3)
84
108
  addressable (>= 2.3.6)
85
109
  crack (>= 0.3.2)
86
110
  hashdiff (>= 0.4.0, < 2.0.0)
111
+ zeitwerk (2.4.2)
87
112
 
88
113
  PLATFORMS
89
114
  ruby
@@ -93,6 +118,7 @@ DEPENDENCIES
93
118
  rake (~> 12.0)
94
119
  rspec
95
120
  rubocop
121
+ rubocop-rspec
96
122
  webmock
97
123
  weneedfeed!
98
124
 
data/README.md CHANGED
@@ -27,24 +27,28 @@ gem install weneedfeed
27
27
 
28
28
  ## Schema
29
29
 
30
- You need to write a schema file named with `weneedfeed.yml` to use this gem.
30
+ Weneedfeed requires `weneedfeed.yml` that describes URLs and selectors.
31
31
 
32
32
  ### Example
33
33
 
34
34
  ```yaml
35
35
  pages:
36
36
  - id: example1
37
- title: Example feed with CSS Selector
37
+ title: Example 1
38
+ description: Example feed with CSS Selector
38
39
  url: http://example.com/1
39
40
  item_selector: li
40
41
  item_description_selector: p:nth-child(3)
42
+ item_image_selector: img
41
43
  item_link_selector: a
42
44
  item_time_selector: time
43
45
  item_title_selector: p:nth-child(2)
44
46
  - id: example2
45
- title: Example feed with XPath
47
+ title: Example 2
48
+ description: Example feed with XPath
46
49
  url: http://example.com/2
47
50
  item_selector: //li
51
+ item_image_selector: .//img
48
52
  item_description_selector: .//p[3]
49
53
  item_link_selector: .//a
50
54
  item_time_selector: .//time
@@ -56,7 +60,7 @@ pages:
56
60
  Feed ID.
57
61
 
58
62
  - required
59
- - Used for feed URL.
63
+ - Used for feed URL and `<link>` element in `<channel>` element.
60
64
 
61
65
  ### `title`
62
66
 
@@ -65,6 +69,13 @@ Feed title.
65
69
  - required
66
70
  - Used for RSS `<title>` element in `<channel>` element.
67
71
 
72
+ ### `description`
73
+
74
+ Feed description.
75
+
76
+ - optional
77
+ - Used for RSS `<description>` element in `<channel>` element.
78
+
68
79
  ### `url`
69
80
 
70
81
  HTML source URL.
@@ -100,6 +111,13 @@ CSS or XPath selector to find element with description information in each item.
100
111
  - optional
101
112
  - Used for `<description>` in `<item>`.
102
113
 
114
+ ### `item_image_selector`
115
+
116
+ CSS or XPath selector to find `<img>`element in each item.
117
+
118
+ - optional
119
+ - Used for `<enclosure>` in `<item>`.
120
+
103
121
  ### `item_time_selector`
104
122
 
105
123
  CSS or XPath selector to find element with datetime information in each item.
@@ -7,6 +7,7 @@ module Weneedfeed
7
7
  autoload :Capture, 'weneedfeed/capture'
8
8
  autoload :Command, 'weneedfeed/command'
9
9
  autoload :Controllers, 'weneedfeed/controllers'
10
+ autoload :FaradayResponseMiddleware, 'weneedfeed/faraday_response_middleware'
10
11
  autoload :Helpers, 'weneedfeed/helpers'
11
12
  autoload :Item, 'weneedfeed/item'
12
13
  autoload :Page, 'weneedfeed/page'
@@ -11,7 +11,9 @@ module Weneedfeed
11
11
  end
12
12
 
13
13
  scraping = ::Weneedfeed::Scraping.new(
14
+ description: page_schema.description,
14
15
  item_description_selector: page_schema.item_description_selector,
16
+ item_image_selector: page_schema.item_image_selector,
15
17
  item_link_selector: page_schema.item_link_selector,
16
18
  item_time_selector: page_schema.item_time_selector,
17
19
  item_title_selector: page_schema.item_title_selector,
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/array/conversions'
4
+ require 'active_support/core_ext/hash/conversions'
5
+ require 'faraday'
6
+ require 'faraday_middleware/response_middleware'
7
+ require 'json'
8
+
9
+ module Weneedfeed
10
+ class FaradayResponseMiddleware < ::FaradayMiddleware::ResponseMiddleware
11
+ define_parser do |body, options|
12
+ options ||= {}
13
+ options = { dasherize: false }.merge(options)
14
+ object = ::JSON.parse(body)
15
+ object.to_xml(options)
16
+ end
17
+
18
+ # @note Overriding.
19
+ def parse_response?(env)
20
+ env.response.headers['Content-Type'].to_s.include?('application/json')
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'mimemagic'
4
+
3
5
  module Weneedfeed
4
6
  class Item
5
7
  class << self
@@ -16,6 +18,7 @@ module Weneedfeed
16
18
  end
17
19
 
18
20
  # @param [String, nil] description_selector
21
+ # @param [String, nil] image_selector
19
22
  # @param [String, nil] link_selector
20
23
  # @param [Nokogiri::Node] node
21
24
  # @param [String] time_selector
@@ -23,6 +26,7 @@ module Weneedfeed
23
26
  # @param [String] url
24
27
  def initialize(
25
28
  description_selector:,
29
+ image_selector:,
26
30
  link_selector:,
27
31
  node:,
28
32
  time_selector:,
@@ -30,6 +34,7 @@ module Weneedfeed
30
34
  url:
31
35
  )
32
36
  @description_selector = description_selector
37
+ @image_selector = image_selector
33
38
  @link_selector = link_selector
34
39
  @node = node
35
40
  @time_selector = time_selector
@@ -44,14 +49,48 @@ module Weneedfeed
44
49
  @node.at(@description_selector)&.inner_html
45
50
  end
46
51
 
52
+ # @return [String, nil]
53
+ def image_mime_type
54
+ return unless image_url
55
+
56
+ ::MimeMagic.by_path(image_url)&.type
57
+ end
58
+
59
+ # @return [String, nil]
60
+ def image_path_or_url
61
+ return unless @image_selector
62
+
63
+ @node.at(@image_selector)&.[]('src')
64
+ end
65
+
66
+ def image_url
67
+ return unless image_path_or_url
68
+
69
+ ::URI.join(
70
+ @url,
71
+ image_path_or_url
72
+ ).to_s
73
+ end
74
+
47
75
  # @return [String]
48
76
  def link
49
77
  ::URI.join(
50
78
  @url,
51
- @node.at(@link_selector)['href']
79
+ link_path_or_url
52
80
  ).to_s
53
81
  end
54
82
 
83
+ # @return [Nokogiri::Node, nil]
84
+ def link_node
85
+ @node.at(@link_selector)
86
+ end
87
+
88
+ # @return [String, nil]
89
+ def link_path_or_url
90
+ node = link_node
91
+ node['href'] || node.inner_text
92
+ end
93
+
55
94
  # @return [Time, nil]
56
95
  def time
57
96
  return unless @time_selector
@@ -62,9 +101,9 @@ module Weneedfeed
62
101
  self.class.parse_time(string)
63
102
  end
64
103
 
65
- # @return [String]
104
+ # @return [String, nil]
66
105
  def title
67
- @node.at(@title_selector).inner_text
106
+ @node.at(@title_selector)&.inner_text
68
107
  end
69
108
 
70
109
  private
@@ -79,7 +118,7 @@ module Weneedfeed
79
118
  node = time_node
80
119
  return unless node
81
120
 
82
- node['datetime'] || node.inner_html
121
+ node['datetime'] || node.inner_text
83
122
  end
84
123
  end
85
124
  end
@@ -2,13 +2,18 @@
2
2
 
3
3
  module Weneedfeed
4
4
  class Page
5
+ # @return [String, nil]
6
+ attr_reader :description
7
+
5
8
  # @return [String]
6
9
  attr_reader :title
7
10
 
8
11
  # @return [String]
9
12
  attr_reader :url
10
13
 
14
+ # @param [String, nil] description
11
15
  # @param [String, nil] item_description_selector
16
+ # @param [String, nil] item_image_selector
12
17
  # @param [String] item_link_selector
13
18
  # @param [String, nil] item_time_selector
14
19
  # @param [String] item_title_selector
@@ -17,7 +22,9 @@ module Weneedfeed
17
22
  # @param [String] title
18
23
  # @param [String] url
19
24
  def initialize(
25
+ description:,
20
26
  item_description_selector:,
27
+ item_image_selector:,
21
28
  item_link_selector:,
22
29
  item_time_selector:,
23
30
  item_title_selector:,
@@ -26,7 +33,9 @@ module Weneedfeed
26
33
  title:,
27
34
  url:
28
35
  )
36
+ @description = description
29
37
  @item_description_selector = item_description_selector
38
+ @item_image_selector = item_image_selector
30
39
  @item_link_selector = item_link_selector
31
40
  @item_time_selector = item_time_selector
32
41
  @item_title_selector = item_title_selector
@@ -41,6 +50,7 @@ module Weneedfeed
41
50
  @node.search(@item_selector).map do |node|
42
51
  ::Weneedfeed::Item.new(
43
52
  description_selector: @item_description_selector,
53
+ image_selector: @item_image_selector,
44
54
  link_selector: @item_link_selector,
45
55
  node: node,
46
56
  time_selector: @item_time_selector,
@@ -2,8 +2,10 @@
2
2
 
3
3
  module Weneedfeed
4
4
  PageSchema = Struct.new(
5
+ :description,
5
6
  :id,
6
7
  :item_description_selector,
8
+ :item_image_selector,
7
9
  :item_link_selector,
8
10
  :item_time_selector,
9
11
  :item_title_selector,
@@ -24,7 +24,10 @@ module Weneedfeed
24
24
  def page_schemata
25
25
  @raw['pages'].map do |hash|
26
26
  ::Weneedfeed::PageSchema.new(
27
+ description: hash['description'],
27
28
  id: hash['id'],
29
+ item_description_selector: hash['item_description_selector'],
30
+ item_image_selector: hash['item_image_selector'],
28
31
  item_link_selector: hash['item_link_selector'],
29
32
  item_time_selector: hash['item_time_selector'],
30
33
  item_title_selector: hash['item_title_selector'],
@@ -5,7 +5,18 @@ require 'nokogiri'
5
5
 
6
6
  module Weneedfeed
7
7
  class Scraping
8
+ class << self
9
+ # @return [Faraday::Connection]
10
+ def faraday_connection
11
+ @faraday_connection ||= ::Faraday.new do |connection|
12
+ connection.use ::Weneedfeed::FaradayResponseMiddleware
13
+ end
14
+ end
15
+ end
16
+
17
+ # @param [String, nil] description
8
18
  # @param [String, nil] item_description_selector
19
+ # @param [String, nil] item_image_selector
9
20
  # @param [String] item_link_selector
10
21
  # @param [String, nil] item_time_selector
11
22
  # @param [String] item_title_selector
@@ -13,7 +24,9 @@ module Weneedfeed
13
24
  # @param [String] title
14
25
  # @param [String] url
15
26
  def initialize(
27
+ description:,
16
28
  item_description_selector:,
29
+ item_image_selector:,
17
30
  item_link_selector:,
18
31
  item_time_selector:,
19
32
  item_title_selector:,
@@ -21,7 +34,9 @@ module Weneedfeed
21
34
  title:,
22
35
  url:
23
36
  )
37
+ @description = description
24
38
  @item_description_selector = item_description_selector
39
+ @item_image_selector = item_image_selector
25
40
  @item_link_selector = item_link_selector
26
41
  @item_time_selector = item_time_selector
27
42
  @item_title_selector = item_title_selector
@@ -33,8 +48,10 @@ module Weneedfeed
33
48
  # @return [Weneedfeed::Page]
34
49
  def call
35
50
  ::Weneedfeed::Page.new(
51
+ description: @description,
36
52
  node: parsed_body,
37
53
  item_description_selector: @item_description_selector,
54
+ item_image_selector: @item_image_selector,
38
55
  item_selector: @item_selector,
39
56
  item_link_selector: @item_link_selector,
40
57
  item_time_selector: @item_time_selector,
@@ -48,12 +65,12 @@ module Weneedfeed
48
65
 
49
66
  # @return [Nokogiri::Node]
50
67
  def parsed_body
51
- ::Nokogiri::HTML.parse(response.body)
68
+ ::Nokogiri::XML.parse(response.body)
52
69
  end
53
70
 
54
71
  # @return [Faraday::Response]
55
72
  def response
56
- ::Faraday.get(@url)
73
+ self.class.faraday_connection.get(@url)
57
74
  end
58
75
  end
59
76
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Weneedfeed
4
- VERSION = '0.6.1'
4
+ VERSION = '0.9.0'
5
5
  end
@@ -4,9 +4,9 @@
4
4
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
5
5
  <channel>
6
6
  <title><![CDATA[<%= @page.title %>]]></title>
7
- <link><%= "#{request.base_url}#{top_page_path}" %></link>
7
+ <link><%= "#{@page.url}" %></link>
8
8
  <atom:link href="<%= "#{request.base_url}#{request.path}" %>" rel="self"/>
9
- <description><![CDATA[Recent content on <%= @page.title %>]]></description>
9
+ <description><![CDATA[<%= @page.description %>]]></description>
10
10
  <lastBuildDate><%= Time.now.rfc822 %></lastBuildDate>
11
11
  <% items.each do |item| %>
12
12
  <item>
@@ -18,6 +18,9 @@
18
18
  <description><![CDATA[<%= item.description %>]]></description>
19
19
  <content:encoded><![CDATA[<%= item.description %>]]></content:encoded>
20
20
  <guid isPermaLink="true"><%= item.link %></guid>
21
+ <% if item.image_url %>
22
+ <enclosure url="<%= item.image_url %>" length="0" type="<%= item.image_mime_type %>"/>
23
+ <% end %>
21
24
  </item>
22
25
  <% end %>
23
26
  </channel>
@@ -25,8 +25,12 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ['lib']
27
27
 
28
+ spec.add_runtime_dependency 'activesupport'
29
+ spec.add_runtime_dependency 'builder'
28
30
  spec.add_runtime_dependency 'faraday'
31
+ spec.add_runtime_dependency 'faraday_middleware'
29
32
  spec.add_runtime_dependency 'hibana', '>= 0.2'
33
+ spec.add_runtime_dependency 'mimemagic'
30
34
  spec.add_runtime_dependency 'nokogiri'
31
35
  spec.add_runtime_dependency 'rack-capture', '>= 0.4.0'
32
36
  spec.add_runtime_dependency 'thor'
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weneedfeed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-15 00:00:00.000000000 Z
11
+ date: 2020-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: faraday
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,20 @@ dependencies:
24
52
  - - ">="
25
53
  - !ruby/object:Gem::Version
26
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday_middleware
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: hibana
29
71
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +80,20 @@ dependencies:
38
80
  - - ">="
39
81
  - !ruby/object:Gem::Version
40
82
  version: '0.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mimemagic
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: nokogiri
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +165,7 @@ files:
109
165
  - lib/weneedfeed/controllers/base.rb
110
166
  - lib/weneedfeed/controllers/show_feed.rb
111
167
  - lib/weneedfeed/controllers/show_top_page.rb
168
+ - lib/weneedfeed/faraday_response_middleware.rb
112
169
  - lib/weneedfeed/helpers.rb
113
170
  - lib/weneedfeed/helpers/parameters.rb
114
171
  - lib/weneedfeed/item.rb