weneedfeed 0.12.0 → 0.15.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: 8df6dfcc585251215fe01c5a985fc9e83c7bf6e706578751e4b5f4e4a38ebc8f
4
- data.tar.gz: 7287d78034b62dafabedfbfa011c0af18d2c7cf23d605d3c0b0c6dce795062eb
3
+ metadata.gz: 819bba3695f6ec96a66d4a2eca1521ffd70362061267ae43278bc9e2a50263f7
4
+ data.tar.gz: bfe94358ddedce6a9d2fc029c1cef72b7672e6dd29c1a0de7c7ad9535f9b4d74
5
5
  SHA512:
6
- metadata.gz: 6baa16dd012ccdcccc2bf9173e2884295514e70eded457138d1a55f06a951572a6404bc4650268524d3ba1a1191fec00b7a1575d4b77d652753e714f2af61167
7
- data.tar.gz: 10336f0bb0bbcfe115805b834be4a976ad9256a6e6a4efa54aa0a247092ec3da3ff2b3cb1e72bf260b057ea6a9d82382db508e0a420441fbb09ea32615547727
6
+ metadata.gz: f6cf9a9347388458458b433b0397f942b1a1db30712d5cc35155b90ef5ccda42e23eb2dcf5e264b8440fb2cec1b74ba14886718da840824da012f043a5f899fe
7
+ data.tar.gz: 978321586272751213ac40ad55fb4907c868e9e893985b3464be7d8d6e0f8af28242d341f35af9b4bba50708208a0fdc20904c4e00821ab10ad045b8735525f9
data/CHANGELOG.md CHANGED
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.15.0 - 2022-04-14
11
+
12
+ ### Changed
13
+
14
+ - Use hashed title and content as guid fallback.
15
+
16
+ ## 0.14.0 - 2022-04-14
17
+
18
+ ### Added
19
+
20
+ - Support YAML aliases (on psych 4.x).
21
+
22
+ ## 0.13.0 - 2022-04-14
23
+
24
+ ### Changed
25
+
26
+ - Normalize item URLs.
27
+
10
28
  ## 0.12.0 - 2022-04-14
11
29
 
12
30
  ### Fixed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weneedfeed (0.12.0)
4
+ weneedfeed (0.15.0)
5
5
  activesupport
6
6
  addressable
7
7
  builder
@@ -10,6 +10,7 @@ PATH
10
10
  hibana (>= 0.2)
11
11
  marcel
12
12
  nokogiri
13
+ psych (>= 4)
13
14
  rack-capture (>= 0.4.0)
14
15
  thor
15
16
 
@@ -81,6 +82,8 @@ GEM
81
82
  parallel (1.22.1)
82
83
  parser (3.1.2.0)
83
84
  ast (~> 2.4.1)
85
+ psych (4.0.3)
86
+ stringio
84
87
  public_suffix (4.0.7)
85
88
  racc (1.6.0)
86
89
  rack (2.2.3)
@@ -122,6 +125,7 @@ GEM
122
125
  rubocop (~> 1.19)
123
126
  ruby-progressbar (1.11.0)
124
127
  ruby2_keywords (0.0.5)
128
+ stringio (3.0.1)
125
129
  thor (1.2.1)
126
130
  tilt (2.0.10)
127
131
  tzinfo (2.0.4)
@@ -9,9 +9,9 @@ module Weneedfeed
9
9
  get '/feeds/:page_id.xml', to: ::Weneedfeed::Controllers::ShowFeed, as: :feed
10
10
  end
11
11
 
12
- # @param [Hash] schema
13
- def initialize(schema:)
14
- @schema = ::Weneedfeed::Schema.new(schema)
12
+ # @param [String] schema_path
13
+ def initialize(schema_path:)
14
+ @schema = ::Weneedfeed::Schema.load_file(schema_path)
15
15
  super()
16
16
  end
17
17
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rack/capture'
4
- require 'yaml'
5
4
 
6
5
  module Weneedfeed
7
6
  class Capture
@@ -44,7 +43,7 @@ module Weneedfeed
44
43
  # @return [Weneedfeed::Application]
45
44
  def app
46
45
  @app ||= ::Weneedfeed::Application.new(
47
- schema: ::YAML.load_file(@schema_path)
46
+ schema_path: @schema_path
48
47
  )
49
48
  end
50
49
 
@@ -53,11 +52,6 @@ module Weneedfeed
53
52
  @base_uri ||= ::URI.parse(@base_url)
54
53
  end
55
54
 
56
- # @return [Hash]
57
- def schema
58
- ::YAML.load_file(@schema_path)
59
- end
60
-
61
55
  # @return [String]
62
56
  def script_name
63
57
  case base_uri.path
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'rack'
4
4
  require 'thor'
5
- require 'yaml'
6
5
 
7
6
  module Weneedfeed
8
7
  class Command < ::Thor
@@ -55,8 +54,7 @@ module Weneedfeed
55
54
  )
56
55
 
57
56
  def server
58
- schema = ::YAML.load_file(options[:schema_path])
59
- application = Weneedfeed::Application.new(schema: schema)
57
+ application = Weneedfeed::Application.new(schema_path: options[:schema_path])
60
58
  ::Rack::Handler.default.run(application)
61
59
  end
62
60
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'addressable'
4
+ require 'digest/sha1'
4
5
  require 'marcel'
5
6
 
6
7
  module Weneedfeed
@@ -50,6 +51,11 @@ module Weneedfeed
50
51
  @node.at(@description_selector)&.inner_html
51
52
  end
52
53
 
54
+ # @return [String]
55
+ def guid
56
+ link || hashed_title_and_description
57
+ end
58
+
53
59
  # @return [String, nil]
54
60
  def image_mime_type
55
61
  return unless image_url
@@ -77,17 +83,17 @@ module Weneedfeed
77
83
  ::Addressable::URI.join(
78
84
  @url,
79
85
  image_path_or_url
80
- ).to_s
86
+ ).normalize.to_s
81
87
  end
82
88
 
83
- # @return [String]
89
+ # @return [String, nil]
84
90
  def link
85
91
  return unless link_path_or_url
86
92
 
87
93
  ::Addressable::URI.join(
88
94
  @url,
89
95
  link_path_or_url
90
- ).to_s
96
+ ).normalize.to_s
91
97
  end
92
98
 
93
99
  # @return [Nokogiri::Node, nil]
@@ -120,6 +126,13 @@ module Weneedfeed
120
126
 
121
127
  private
122
128
 
129
+ # @return [String]
130
+ def hashed_title_and_description
131
+ source = [title, description].join(':')
132
+ sha1 = ::Digest::SHA1.hexdigest(source)
133
+ "urn:sha1:#{sha1}"
134
+ end
135
+
123
136
  # @return [Nokogiri::Node, nil]
124
137
  def time_node
125
138
  @node.at(@time_selector)
@@ -1,7 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'yaml'
4
+
3
5
  module Weneedfeed
4
6
  class Schema
7
+ class << self
8
+ # @param [String] schema_path
9
+ # @return [Weneedfeed::Schema]
10
+ def load_file(schema_path)
11
+ raw = ::YAML.load_file(schema_path, aliases: true)
12
+ new(raw)
13
+ end
14
+ end
15
+
5
16
  # @param [Hash] raw
6
17
  def initialize(raw)
7
18
  @raw = raw
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Weneedfeed
4
- VERSION = '0.12.0'
4
+ VERSION = '0.15.0'
5
5
  end
@@ -17,7 +17,7 @@
17
17
  <% end %>
18
18
  <description><![CDATA[<%= item.description %>]]></description>
19
19
  <content:encoded><![CDATA[<%= item.description %>]]></content:encoded>
20
- <guid isPermaLink="true"><%= item.link %></guid>
20
+ <guid isPermaLink="true"><%= item.guid %></guid>
21
21
  <% if item.image_url %>
22
22
  <enclosure url=<%= item.image_url.encode(xml: :attr) %> length="0" type="<%= item.image_mime_type %>"/>
23
23
  <% end %>
data/weneedfeed.gemspec CHANGED
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_runtime_dependency 'hibana', '>= 0.2'
36
36
  spec.add_runtime_dependency 'marcel'
37
37
  spec.add_runtime_dependency 'nokogiri'
38
+ spec.add_runtime_dependency 'psych', '>= 4'
38
39
  spec.add_runtime_dependency 'rack-capture', '>= 0.4.0'
39
40
  spec.add_runtime_dependency 'thor'
40
41
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weneedfeed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
11
  date: 2022-04-14 00:00:00.000000000 Z
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: psych
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '4'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '4'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rack-capture
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -150,7 +164,7 @@ dependencies:
150
164
  - - ">="
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
- description:
167
+ description:
154
168
  email:
155
169
  - r7kamura@gmail.com
156
170
  executables:
@@ -201,7 +215,7 @@ metadata:
201
215
  homepage_uri: https://github.com/r7kamura/weneedfeed
202
216
  source_code_uri: https://github.com/r7kamura/weneedfeed
203
217
  rubygems_mfa_required: 'true'
204
- post_install_message:
218
+ post_install_message:
205
219
  rdoc_options: []
206
220
  require_paths:
207
221
  - lib
@@ -217,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
231
  version: '0'
218
232
  requirements: []
219
233
  rubygems_version: 3.1.4
220
- signing_key:
234
+ signing_key:
221
235
  specification_version: 4
222
236
  summary: Generate feeds from URL and selectors.
223
237
  test_files: []