weneedfeed 0.6.1 → 0.9.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
  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