weneedfeed 0.6.1 → 0.7.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: e666f142f72459d43fd7c6fe071740d1fce11dbac4605bcd1d7fbcc8766187ab
4
+ data.tar.gz: a6fdf6ce28e9c610d9f47fa747eaedc4d0198c59c70fd5b736d99dbeaf90d7df
5
5
  SHA512:
6
- metadata.gz: 3293b7dbba14a24988a77bb2070adfef0a4c4f343197d5633076c497747d6f66d9642b89e37ec11f9d2c51a0f91b18c8dfd614cf053339adfc3c7b4390702774
7
- data.tar.gz: f9549a610dec4b77e9e6f86829890bc31928f086652480cbe2c501b1c9fda479a1a0d549ec6efb3a40d1f8ea4fcdb4cc4ccc198403c57ab0a2dbf3c9010ea27f
6
+ metadata.gz: e07f3fe6d8d712e20384310e1bee1eca48065ccf2c0a400aaccd6e9d0f0d219b011f7944c34d11870bb5e3b83750f17de267d8eff260926916daaff1b9f08f35
7
+ data.tar.gz: 792f22dbcda78c4df3f0d738fe6dee28dae5a64eb075f8a1603da6d0c9d5ca68bba3337374f3f2d6dd93e798a6c1f57c4436a9ff34425ee84366d94b56c89903
@@ -18,5 +18,3 @@ jobs:
18
18
  - uses: r7kamura/rubocop-problem-matchers-action@v1
19
19
  - run: bundle exec rubocop --parallel
20
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,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.7.0 - 2020-11-23
11
+
12
+ ### Added
13
+
14
+ - Convert JSON response into XML.
15
+
16
+ ### Fixed
17
+
18
+ - Fix bug that item_description_selector is not used.
19
+
10
20
  ## 0.6.1 - 2020-11-15
11
21
 
12
22
  ### 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,8 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weneedfeed (0.6.1)
4
+ weneedfeed (0.7.0)
5
+ activesupport
6
+ builder
5
7
  faraday
8
+ faraday_middleware
6
9
  hibana (>= 0.2)
7
10
  nokogiri
8
11
  rack-capture (>= 0.4.0)
@@ -11,14 +14,24 @@ PATH
11
14
  GEM
12
15
  remote: https://rubygems.org/
13
16
  specs:
17
+ activesupport (6.0.3.4)
18
+ concurrent-ruby (~> 1.0, >= 1.0.2)
19
+ i18n (>= 0.7, < 2)
20
+ minitest (~> 5.1)
21
+ tzinfo (~> 1.1)
22
+ zeitwerk (~> 2.2, >= 2.2.2)
14
23
  addressable (2.7.0)
15
24
  public_suffix (>= 2.0.2, < 5.0)
16
25
  ast (2.4.1)
26
+ builder (3.2.4)
27
+ concurrent-ruby (1.1.7)
17
28
  crack (0.4.4)
18
29
  diff-lcs (1.4.4)
19
30
  faraday (1.1.0)
20
31
  multipart-post (>= 1.2, < 3)
21
32
  ruby2_keywords
33
+ faraday_middleware (1.0.0)
34
+ faraday (~> 1.0)
22
35
  hanami-router (2.0.0.alpha3)
23
36
  mustermann (~> 1.0)
24
37
  mustermann-contrib (~> 1.0)
@@ -29,7 +42,10 @@ GEM
29
42
  hanami-router (>= 2.0.0.alpha3)
30
43
  rack
31
44
  tilt
45
+ i18n (1.8.5)
46
+ concurrent-ruby (~> 1.0)
32
47
  mini_portile2 (2.4.0)
48
+ minitest (5.14.2)
33
49
  multipart-post (2.1.1)
34
50
  mustermann (1.1.1)
35
51
  ruby2_keywords (~> 0.0.1)
@@ -38,7 +54,7 @@ GEM
38
54
  mustermann (= 1.1.1)
39
55
  nokogiri (1.10.10)
40
56
  mini_portile2 (~> 2.4.0)
41
- parallel (1.19.2)
57
+ parallel (1.20.1)
42
58
  parser (2.7.2.0)
43
59
  ast (~> 2.4.1)
44
60
  public_suffix (4.0.6)
@@ -64,26 +80,33 @@ GEM
64
80
  diff-lcs (>= 1.2.0, < 2.0)
65
81
  rspec-support (~> 3.9.0)
66
82
  rspec-support (3.9.4)
67
- rubocop (1.0.0)
83
+ rubocop (1.4.0)
68
84
  parallel (~> 1.10)
69
85
  parser (>= 2.7.1.5)
70
86
  rainbow (>= 2.2.2, < 4.0)
71
87
  regexp_parser (>= 1.8)
72
88
  rexml
73
- rubocop-ast (>= 0.6.0)
89
+ rubocop-ast (>= 1.1.1)
74
90
  ruby-progressbar (~> 1.7)
75
91
  unicode-display_width (>= 1.4.0, < 2.0)
76
- rubocop-ast (1.1.0)
92
+ rubocop-ast (1.1.1)
77
93
  parser (>= 2.7.1.5)
94
+ rubocop-rspec (2.0.0)
95
+ rubocop (~> 1.0)
96
+ rubocop-ast (>= 1.1.0)
78
97
  ruby-progressbar (1.10.1)
79
98
  ruby2_keywords (0.0.2)
80
99
  thor (1.0.1)
100
+ thread_safe (0.3.6)
81
101
  tilt (2.0.10)
102
+ tzinfo (1.2.8)
103
+ thread_safe (~> 0.1)
82
104
  unicode-display_width (1.7.0)
83
105
  webmock (3.9.3)
84
106
  addressable (>= 2.3.6)
85
107
  crack (>= 0.3.2)
86
108
  hashdiff (>= 0.4.0, < 2.0.0)
109
+ zeitwerk (2.4.1)
87
110
 
88
111
  PLATFORMS
89
112
  ruby
@@ -93,6 +116,7 @@ DEPENDENCIES
93
116
  rake (~> 12.0)
94
117
  rspec
95
118
  rubocop
119
+ rubocop-rspec
96
120
  webmock
97
121
  weneedfeed!
98
122
 
@@ -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'
@@ -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
@@ -48,10 +48,21 @@ module Weneedfeed
48
48
  def link
49
49
  ::URI.join(
50
50
  @url,
51
- @node.at(@link_selector)['href']
51
+ link_path_or_url
52
52
  ).to_s
53
53
  end
54
54
 
55
+ # @return [Nokogiri::Node, nil]
56
+ def link_node
57
+ @node.at(@link_selector)
58
+ end
59
+
60
+ # @return [String, nil]
61
+ def link_path_or_url
62
+ node = link_node
63
+ node['href'] || node.inner_text
64
+ end
65
+
55
66
  # @return [Time, nil]
56
67
  def time
57
68
  return unless @time_selector
@@ -25,6 +25,7 @@ module Weneedfeed
25
25
  @raw['pages'].map do |hash|
26
26
  ::Weneedfeed::PageSchema.new(
27
27
  id: hash['id'],
28
+ item_description_selector: hash['item_description_selector'],
28
29
  item_link_selector: hash['item_link_selector'],
29
30
  item_time_selector: hash['item_time_selector'],
30
31
  item_title_selector: hash['item_title_selector'],
@@ -5,6 +5,15 @@ 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
+
8
17
  # @param [String, nil] item_description_selector
9
18
  # @param [String] item_link_selector
10
19
  # @param [String, nil] item_time_selector
@@ -48,12 +57,12 @@ module Weneedfeed
48
57
 
49
58
  # @return [Nokogiri::Node]
50
59
  def parsed_body
51
- ::Nokogiri::HTML.parse(response.body)
60
+ ::Nokogiri::XML.parse(response.body)
52
61
  end
53
62
 
54
63
  # @return [Faraday::Response]
55
64
  def response
56
- ::Faraday.get(@url)
65
+ self.class.faraday_connection.get(@url)
57
66
  end
58
67
  end
59
68
  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.7.0'
5
5
  end
@@ -25,7 +25,10 @@ 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'
30
33
  spec.add_runtime_dependency 'nokogiri'
31
34
  spec.add_runtime_dependency 'rack-capture', '>= 0.4.0'
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.7.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-11-23 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
@@ -109,6 +151,7 @@ files:
109
151
  - lib/weneedfeed/controllers/base.rb
110
152
  - lib/weneedfeed/controllers/show_feed.rb
111
153
  - lib/weneedfeed/controllers/show_top_page.rb
154
+ - lib/weneedfeed/faraday_response_middleware.rb
112
155
  - lib/weneedfeed/helpers.rb
113
156
  - lib/weneedfeed/helpers/parameters.rb
114
157
  - lib/weneedfeed/item.rb