weneedfeed 0.12.0 → 0.15.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: 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: []