weneedfeed 0.16.0 → 0.18.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: baf60aaaa90d968a375a3bff27c32700721d6fc0376854d7dfc20e8892dc59e3
4
- data.tar.gz: 7fc14522a11c58837223ebf2be78b7aca9caa2dd1f2d707b3e8f63a5b25e5d46
3
+ metadata.gz: 15fe792e19590e141278496015fefd5f9b7b10c2fa467b2bb2d8f7b6b9206350
4
+ data.tar.gz: c0957471a1a209b3727a04eecec561aae7144c225b9ae469f7dfd66c9e698aa2
5
5
  SHA512:
6
- metadata.gz: b21d52a7ceb2dd9370e356981e294031ce1eee8a28c08aa0941ef59de9f2551948f4d5b95bd929fb6bbf7aca38fb32b6e65ce6c2c2fbad9b734ddae1374da143
7
- data.tar.gz: 361b1a2e06859701dc962898fe1ef93fd246298f1d320b1d597caa89186bd3ed1144b74e6b1c28e380e3cb0a7036767b1e8e6c3bc343c9656a2e9bf6b4cbf66a
6
+ metadata.gz: 3a52e5daab18cd4f8d5f303e6a065d0018efd23babe7b364c112bb08c488eab67e179efc5fb2037563e5d9706ec71e4992433f83cd70c0b1245ce7b54f50f145
7
+ data.tar.gz: a01540c21b8ddb8737b862530089df9216e6814a084a8e3c132e4b4d30c41dcd571c835c42a1d1a00c41cf39372a093f41449d028ea13282e29a0d084f2eb1ae
data/CHANGELOG.md CHANGED
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.18.0 - 2022-04-17
11
+
12
+ ### Added
13
+
14
+ - Support configurable feeds title.
15
+ - Add --port= option to server command.
16
+
17
+ ## 0.17.0 - 2022-04-15
18
+
19
+ ### Changed
20
+
21
+ - Change outline title on OPML.
22
+
23
+ ## 0.16.1 - 2022-04-15
24
+
25
+ ### Fixed
26
+
27
+ - Fix bug that opml.xml is not built.
28
+
10
29
  ## 0.16.0 - 2022-04-15
11
30
 
12
31
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weneedfeed (0.16.0)
4
+ weneedfeed (0.18.0)
5
5
  activesupport
6
6
  addressable
7
7
  builder
data/README.md CHANGED
@@ -32,6 +32,8 @@ Weneedfeed requires `weneedfeed.yml` that describes URLs and selectors.
32
32
  ### Example
33
33
 
34
34
  ```yaml
35
+ title: Example RSS feeds
36
+
35
37
  pages:
36
38
  - id: example1
37
39
  title: Example 1
@@ -55,70 +57,75 @@ pages:
55
57
  item_title_selector: .//p[2]
56
58
  ```
57
59
 
58
- ### `id`
60
+ ### `title`
61
+
62
+ - optional (default: `"Weneedfeed"`)
63
+ - Used for feeds title on top page and OPML outline.
64
+
65
+ ### `pages.id`
59
66
 
60
67
  Feed ID.
61
68
 
62
69
  - required
63
70
  - Used for feed URL and `<link>` element in `<channel>` element.
64
71
 
65
- ### `title`
72
+ ### `pages.title`
66
73
 
67
74
  Feed title.
68
75
 
69
76
  - required
70
77
  - Used for RSS `<title>` element in `<channel>` element.
71
78
 
72
- ### `description`
79
+ ### `pages.description`
73
80
 
74
81
  Feed description.
75
82
 
76
83
  - optional
77
84
  - Used for RSS `<description>` element in `<channel>` element.
78
85
 
79
- ### `url`
86
+ ### `pages.url`
80
87
 
81
88
  HTML source URL.
82
89
 
83
90
  - required
84
91
  - Used to fetch HTML page for building feed.
85
92
 
86
- ### `item_selector`
93
+ ### `pages.item_selector`
87
94
 
88
95
  CSS or XPath selector to search each item.
89
96
 
90
97
  - required
91
98
  - Equivalent unit to RSS `<item>` element.
92
99
 
93
- ### `item_link_selector`
100
+ ### `pages.item_link_selector`
94
101
 
95
102
  CSS or XPath selector to find `<a>` element in each item.
96
103
 
97
104
  - required
98
105
  - Used for `<link>` in `<item>`.
99
106
 
100
- ### `item_title_selector`
107
+ ### `pages.item_title_selector`
101
108
 
102
109
  CSS or XPath selector to find element with title information in each item.
103
110
 
104
111
  - required
105
112
  - Used for `<title>` in `<item>`.
106
113
 
107
- ### `item_description_selector`
114
+ ### `pages.item_description_selector`
108
115
 
109
116
  CSS or XPath selector to find element with description information in each item.
110
117
 
111
118
  - optional
112
119
  - Used for `<description>` in `<item>`.
113
120
 
114
- ### `item_image_selector`
121
+ ### `pages.item_image_selector`
115
122
 
116
123
  CSS or XPath selector to find `<img>`element in each item.
117
124
 
118
125
  - optional
119
126
  - Used for `<enclosure>` in `<item>`.
120
127
 
121
- ### `item_time_selector`
128
+ ### `pages.item_time_selector`
122
129
 
123
130
  CSS or XPath selector to find element with datetime information in each item.
124
131
 
@@ -26,7 +26,7 @@ module Weneedfeed
26
26
  def paths
27
27
  %w[
28
28
  /
29
- /opml
29
+ /opml.xml
30
30
  ] + @schema.page_ids.map do |page_id|
31
31
  "/feeds/#{page_id}.xml"
32
32
  end
@@ -53,9 +53,16 @@ module Weneedfeed
53
53
  type: :string
54
54
  )
55
55
 
56
+ method_option(
57
+ :port,
58
+ default: '8080',
59
+ desc: 'TCP port to bind to.',
60
+ type: :string
61
+ )
62
+
56
63
  def server
57
64
  application = Weneedfeed::Application.new(schema_path: options[:schema_path])
58
- ::Rack::Handler.default.run(application)
65
+ ::Rack::Handler.default.run(application, Port: options[:port])
59
66
  end
60
67
  end
61
68
  end
@@ -7,12 +7,12 @@ module Weneedfeed
7
7
  response.content_type = 'application/xml; charset=utf-8'
8
8
  response.write(
9
9
  ::Weneedfeed::Views::ShowOpml.new(
10
- page_schemata: schema.page_schemata.sort_by(&:title),
11
10
  partial_template_path: ::File.expand_path(
12
11
  'templates/show_opml.xml.erb',
13
12
  "#{__dir__}/../../.."
14
13
  ),
15
- request: request
14
+ request: request,
15
+ schema: schema
16
16
  ).to_s
17
17
  )
18
18
  end
@@ -4,16 +4,15 @@ module Weneedfeed
4
4
  module Controllers
5
5
  class ShowTopPage < ::Weneedfeed::Controllers::Base
6
6
  def call
7
- page_schemata = schema.page_schemata.sort_by(&:title)
8
7
  response.content_type = 'text/html'
9
8
  response.write(
10
9
  ::Weneedfeed::Views::ShowTopPage.new(
11
- page_schemata: page_schemata,
12
10
  partial_template_path: ::File.expand_path(
13
11
  'templates/show_top_page.html.erb',
14
12
  "#{__dir__}/../../.."
15
13
  ),
16
- request: request
14
+ request: request,
15
+ schema: schema
17
16
  ).to_s
18
17
  )
19
18
  end
@@ -4,6 +4,8 @@ require 'yaml'
4
4
 
5
5
  module Weneedfeed
6
6
  class Schema
7
+ DEFAULT_TITLE = 'Weneedfeed'
8
+
7
9
  class << self
8
10
  # @param [String] schema_path
9
11
  # @return [Weneedfeed::Schema]
@@ -48,5 +50,10 @@ module Weneedfeed
48
50
  )
49
51
  end
50
52
  end
53
+
54
+ # @return [String]
55
+ def title
56
+ @raw['title'] || DEFAULT_TITLE
57
+ end
51
58
  end
52
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Weneedfeed
4
- VERSION = '0.16.0'
4
+ VERSION = '0.18.0'
5
5
  end
@@ -3,10 +3,10 @@
3
3
  module Weneedfeed
4
4
  module Views
5
5
  class ShowOpml < Base
6
- # @param [Array<Hash>] page_schemata
7
- def initialize(page_schemata:, **argv)
6
+ # @param [Weneedfeed::Schema] schema
7
+ def initialize(schema:, **argv)
8
8
  super(**argv)
9
- @page_schemata = page_schemata
9
+ @schema = schema
10
10
  end
11
11
 
12
12
  private
@@ -21,6 +21,11 @@ module Weneedfeed
21
21
  def feed_path(page_id:)
22
22
  "#{base_path}#{router.path(:feed, page_id: page_id)}"
23
23
  end
24
+
25
+ # @return [Array<String>]
26
+ def page_schemata
27
+ @schema.page_schemata.sort_by(&:title)
28
+ end
24
29
  end
25
30
  end
26
31
  end
@@ -3,10 +3,10 @@
3
3
  module Weneedfeed
4
4
  module Views
5
5
  class ShowTopPage < Base
6
- # @param [Array<Hash>] page_schemata
7
- def initialize(page_schemata:, **argv)
6
+ # @param [Weneedfeed::Schema] schema
7
+ def initialize(schema:, **argv)
8
8
  super(**argv)
9
- @page_schemata = page_schemata
9
+ @schema = schema
10
10
  end
11
11
 
12
12
  private
@@ -27,6 +27,11 @@ module Weneedfeed
27
27
  "#{base_path}#{router.path(:opml)}"
28
28
  end
29
29
 
30
+ # @return [Array<String>]
31
+ def page_schemata
32
+ @schema.page_schemata.sort_by(&:title)
33
+ end
34
+
30
35
  # @return [Hanami::Router]
31
36
  def router
32
37
  ::Weneedfeed::Application.router
@@ -1,11 +1,11 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <opml version="1.0">
3
3
  <head>
4
- <title>Feeds from Weneedfeed</title>
4
+ <title><%= @schema.title %></title>
5
5
  </head>
6
6
  <body>
7
- <outline text="Feeds" title="Feeds">
8
- <% @page_schemata.each do |page_schema| %>
7
+ <outline text="<%= @schema.title %>" title="<%= @schema.title %>">
8
+ <% page_schemata.each do |page_schema| %>
9
9
  <outline type="rss" text="<%= page_schema.title %>" title="<%= page_schema.title %>" xmlUrl="<%= "#{request.base_url}#{feed_path(page_id: page_schema.id)}" %>" htmlUrl="<%= page_schema.url %>"/>
10
10
  <% end %>
11
11
  </outline>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width">
6
- <title>Weneedfeed</title>
6
+ <title><%= @schema.title %></title>
7
7
  </head>
8
8
  <body>
9
9
  <section>
@@ -11,7 +11,7 @@
11
11
  <h1>Feeds</h1>
12
12
  </header>
13
13
  <ul>
14
- <% @page_schemata.each do |page_schema| %>
14
+ <% page_schemata.each do |page_schema| %>
15
15
  <li>
16
16
  <a href="<%= feed_path(page_id: page_schema.id) %>"><%= page_schema.title %></a>
17
17
  </li>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weneedfeed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.18.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: 2022-04-15 00:00:00.000000000 Z
11
+ date: 2022-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport