daily_notices 0.6.5 → 0.7.2

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
- SHA1:
3
- metadata.gz: 46e909b29d46548bfdeee5338251b1b734766524
4
- data.tar.gz: a57771153a3660a20b6074cdfb82652fda35d06a
2
+ SHA256:
3
+ metadata.gz: 1400c073a869a84b88e4010d56897d7f9ffdc9ed1a0eab4df780d62a32576818
4
+ data.tar.gz: dca472da26bafb356cfe6219924238874d99371aef62936e88e67989a22c414b
5
5
  SHA512:
6
- metadata.gz: 3d134470e32fd8a6ff959053750cb219323459de83da9124cf9d7f0ae277797d231d001276efc87a14bf7d9eb68ec558c95a2ba6020a1f725aa082d6a01665bf
7
- data.tar.gz: 5c488614ec57298e21314aee120418bf707b9a7c6c2efe5520fcad354d07395e85574083d53443253f23cb7bd6c1b478d575efd9d89478153d3ad623f1676c61
6
+ metadata.gz: 4a1f148b6047942cc48d9852727a82c5fa115d5f7fa5cf3b899ae32374022f5c305942a32fa704c8cb04f0480f90dcb45a7f9b535c224250f844c2295a212482
7
+ data.tar.gz: 79edc93dca8fc50d85c8455186f1bc777ac42dd791f73bda1a162fd369abb44a679cfaada36e8e562f12bfeb2d21be1494c75da238943777e62d0f200ee6664e
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/daily_notices.rb CHANGED
@@ -10,34 +10,39 @@ require 'rss_creator'
10
10
 
11
11
 
12
12
  class DailyNotices
13
-
13
+ include RXFHelperModule
14
+
14
15
  attr_accessor :title, :description, :link, :dx_xslt, :rss_xslt
15
16
 
16
- def initialize(filepath='', url_base: 'http:/127.0.0.1/', identifier: '',
17
- dx_xslt: '', rss_xslt: '', target_page: :recordset,
18
- target_xslt: '', title: 'daily notices', log: nil)
19
-
17
+ def initialize(filepath='', url_base: 'http:/127.0.0.1/', identifier: '',
18
+ dx_xslt: '', rss_xslt: '', target_page: :recordset,
19
+ target_xslt: '', title: 'daily notices', log: nil,
20
+ debug: false)
21
+
20
22
  @filepath, @url_base, @dx_xslt, @rss_xslt, @target_page, @target_xslt, \
21
- @identifier, @log = filepath, url_base, dx_xslt, rss_xslt, \
22
- target_page, target_xslt, identifier, log
23
+ @identifier, @log, @debug = filepath, url_base, dx_xslt, rss_xslt, \
24
+ target_page, target_xslt, identifier, log, debug
25
+
26
+
27
+ # note: card is intended for storing meta data in JSON format
28
+
29
+ @schema = 'items[title, identifier, image, bio, location, website,' +
30
+ ' banner_image]/item(title, description, card, time, link)'
31
+ @default_key = 'uid'
23
32
 
24
-
25
- @schema ||= 'items[title, identifier]/item(title, description, time, link)'
26
- @default_key ||= 'uid'
27
-
28
33
  if dx_xslt.nil? then
29
34
 
30
35
  subdir = File.basename filepath
31
36
  dir = url_base[/http:\/\/[^\/]+\/(.*)/,1]
32
37
 
33
38
  dxxsltfilename = "dx#{Time.now.to_i.to_s}.xsl"
34
- dxxsltfilepath = '/' + [dir, subdir, dxxsltfilename].join('/')
35
- File.write File.join(filepath, dxxsltfilename), \
39
+ dxxsltfilepath = '/' + [dir, subdir, dxxsltfilename].join('/')
40
+ FileX.write File.join(filepath, dxxsltfilename), \
36
41
  DxSliml.new(dx: @schema).to_xslt
37
-
42
+
38
43
  @dx_xslt = dxxsltfilepath
39
44
  end
40
-
45
+
41
46
  if rss_xslt.nil? then
42
47
 
43
48
  subdir = File.basename filepath
@@ -45,192 +50,235 @@ class DailyNotices
45
50
 
46
51
  rssxsltfilename = "rssx#{Time.now.to_i.to_s}.xsl"
47
52
  rssxsltfilepath = '/' + [dir, subdir, rssxsltfilename].join('/')
48
- File.write File.join(filepath, rssxsltfilename), \
53
+ FileX.write File.join(filepath, rssxsltfilename), \
49
54
  RssSliml.new().to_xslt
50
-
55
+
51
56
  @rss_xslt = rssxsltfilepath
52
- end
53
-
57
+ end
58
+
54
59
  @day = Time.now.day
55
60
  @title = title
56
61
  new_day()
57
-
62
+
58
63
  # open the Dynarex file or create a new Dynarex file
59
64
 
60
65
  @rssfile = File.join(@filepath, 'rss.xml')
61
66
 
62
- if File.exists? @rssfile then
63
- @rss = RSScreator.new @rssfile, dx_xslt: @rss_xslt,
67
+ if FileX.exists? @rssfile then
68
+ @rss = RSScreator.new @rssfile, dx_xslt: @rss_xslt,
64
69
  custom_fields: ['topic']
65
70
  else
66
71
 
67
- @rss = RSScreator.new @rssfile, dx_xslt: @rss_xslt,
72
+ @rss = RSScreator.new @rssfile, dx_xslt: @rss_xslt,
68
73
  custom_fields: ['topic']
69
74
  @rss.xslt = @rss_xslt
70
75
  @rss.title = @title || identifier.capitalize + ' daily notices'
71
76
  @rss.description = 'Generated using the daily_notices gem'
72
77
  @rss.link = @url_base
73
- end
74
-
78
+ end
79
+
75
80
  # :recordset or : record
76
81
  @target_page = target_page
77
82
  end
78
-
79
- def create(id: Time.now.to_i.to_s,
80
- item: {time: Time.now.strftime('%H:%M %p - %d %b %Y'), title: nil})
83
+
84
+ def create(id: Time.now.to_i.to_s,
85
+ item: {time: Time.now.strftime('%H:%M %p - %d %b %Y'),
86
+ title: nil})
81
87
 
82
88
  @log.info 'daily_notices/create: item: ' + item.inspect if @log
83
89
  h = item
84
90
 
85
91
  new_day() if @day != Time.now.day
86
92
 
87
- if @dx.all.any? and
93
+ if @dx.all.any? and
88
94
  @dx.all.first.description == CGI.unescape(h[:description].to_s) then
89
95
 
90
96
  return :duplicate
91
97
 
92
98
  end
93
99
 
94
- h[:link] ||= create_link(id)
100
+ h[:link] ||= create_link(id)
95
101
  h[:title] ||= h[:description]
96
102
  .split(/\n/,2).first.gsub(/\<\/?\w+[^>]*>/,'')[0..140]
97
- h[:time] ||= Time.now.strftime('%H:%M %p - %d %b %Y')
103
+ h[:time] ||= Time.now.strftime('%H:%M %p · %b %d %Y')
104
+
98
105
 
99
106
  #@dx.create({description: description, time: time}, id: id)
100
- @dx.create(h, id: id)
107
+ puts 'before @dx.create' if @debug
108
+
109
+ # deep clone the Hash object
110
+ h3 = Marshal.load( Marshal.dump(h) )
111
+ h[:card] = h[:card].to_json if h[:card] and h[:card].is_a? Hash
112
+
113
+ @dx.create(h, id: id)
114
+ puts 'after @dx.create' if @debug
115
+
101
116
  @dx.save @indexpath
102
-
117
+
103
118
  render_html_files(id)
104
119
 
105
120
  # Add it to the RSS document
106
121
 
107
-
108
- @rss.add(item: h, id: id)
122
+ if h3[:card] and h3[:card].is_a? Hash then
123
+
124
+ card = h3[:card]
125
+ h2 = card[card.keys.first]
126
+
127
+ content = case card.keys.first
128
+ when :summary_large_image
129
+ "\n<h1>%s</h1><p>%s</p>" % [h2[:title], h2[:desc]]
130
+ end
131
+
132
+ h3[:title] += h2[:title] if h3[:title].empty?
133
+ h3[:description] += content
134
+
135
+ end
136
+
137
+ @rss.add(item: h3, id: id)
109
138
  @rss.save @rssfile
110
-
139
+ # open up the RSS file and fill in the title and description fields
140
+
111
141
  on_add(@indexpath, id)
112
-
142
+
113
143
  return true
114
144
 
115
145
  end
116
-
146
+
117
147
  alias add create
118
-
119
-
148
+
149
+
120
150
  def delete(id)
121
-
151
+
122
152
  [@dx, @rss].each {|x| x.delete(id.to_s); x.save}
123
153
 
124
154
  archive_path = Time.at(id.to_i).strftime("%Y/%b/%-d").downcase
125
- indexpath = File.join(@filepath, archive_path, id.to_s)
155
+ indexpath = File.join(@filepath, archive_path, id.to_s)
156
+
157
+ FileUtils.rm_rf indexpath
126
158
 
127
- FileUtils.rm_rf indexpath
128
-
129
159
  id.to_s + ' deleted'
130
-
160
+
131
161
  end
132
-
162
+
133
163
  def description()
134
164
  @rss.description
135
165
  end
136
-
166
+
137
167
  def description=(val)
138
168
  @rss.description = val
139
- end
140
-
169
+ end
170
+
171
+ def image=(val)
172
+ image_url, target_url = val.split
173
+ @rss.image_url = image_url
174
+ @rss.image_target_url = target_url
175
+ end
176
+
141
177
  def title()
142
178
  @rss.title
143
179
  end
144
-
180
+
145
181
  def title=(val)
146
182
  @rss.title = val
147
183
  end
148
-
184
+
149
185
  def link()
150
186
  @rss.link
151
187
  end
152
-
188
+
153
189
  def link=(val)
154
190
  @rss.link = val
155
191
  end
156
192
 
157
-
158
- # If you wish override this method or use it in block form to add a
193
+
194
+ # If you wish override this method or use it in block form to add a
159
195
  # notifier, callback routine or webhook, whenever a new record is added.
160
196
  #
161
197
  def on_add(xmlpath, id)
162
-
198
+
163
199
  yield(xmlpath, id) if block_given?
164
-
165
- end
166
-
200
+
201
+ end
202
+
167
203
  def save()
168
- @rss.save @rssfile
204
+ @rss.save @rssfile
169
205
  end
170
-
206
+
171
207
  def to_dx()
172
208
  Dynarex.new @dx.to_xml
173
209
  end
174
-
175
- private
176
-
210
+
211
+ private
212
+
177
213
  def create_link(id)
178
214
  [File.join(@url_base, File.basename(@filepath), 'status', id)].join('/')
179
215
  end
180
-
216
+
181
217
  # configures the target page (using a Dynarex document) for a new day
182
218
  #
183
219
  def new_day()
184
-
220
+
221
+ puts 'inside new_day' if @debug
222
+
185
223
  @archive_path = Time.now.strftime("%Y/%b/%-d").downcase
186
-
224
+
187
225
  @indexpath = File.join(@filepath, @archive_path, 'index.xml')
188
- FileUtils.mkdir_p File.dirname(@indexpath)
189
-
190
-
191
- if File.exists? @indexpath then
226
+ FileX.mkdir_p File.dirname(@indexpath)
227
+
228
+
229
+ if FileX.exists? @indexpath then
192
230
  @dx = Dynarex.new @indexpath
193
231
  else
194
- @dx = Dynarex.new @schema
232
+
233
+ puts 'creating a new dx file' if @debug
234
+ @dx = Dynarex.new @schema, debug: @debug
195
235
  @dx.order = 'descending'
196
236
  @dx.default_key = @default_key
197
237
  @dx.xslt = @dx_xslt
198
238
  @dx.title = @title
199
239
  @dx.identifier = @identifier
200
- end
201
-
202
- end
203
-
240
+ end
241
+
242
+ end
243
+
204
244
  def render_html_files(id)
205
-
245
+
246
+ puts 'inside render_html_files' if @debug
247
+
206
248
  if @target_page == :recordset then
207
- File.write File.join(@filepath, @archive_path, 'index.html'), \
249
+ FileX.write File.join(@filepath, @archive_path, 'index.html'), \
208
250
  @dx.to_html(domain: @url_base)
209
251
  else
210
252
 
211
253
  target_path = File.join(@filepath, @archive_path, id, 'index.html')
212
- FileUtils.mkdir_p File.dirname(target_path)
254
+ FileX.mkdir_p File.dirname(target_path)
213
255
 
214
256
  rx = @dx.find(id)
215
257
 
258
+ puts 'rx: ' + rx.inspect if @debug
216
259
  kvx = rx.to_kvx
217
- yield kvx if block_given?
218
260
 
261
+ yield kvx if block_given?
262
+ puts 'before kvx.to_xml' if @debug
263
+ puts 'kvx.to_xml : ' + kvx.to_xml.inspect
264
+ puts 'before 2 kvx.to_xml' if @debug
219
265
  rxdoc = Rexle.new(kvx.to_xml)
266
+ puts 'after kvx.to_xml' if @debug
267
+
220
268
  rxdoc.instructions << ['xml-styelsheet',\
221
269
  "title='XSL_formatting' type='text/xsl' href='#{@target_xslt}'"]
222
- File.write target_path.sub(/\.html$/,'.xml', ), rxdoc.xml(pretty: true)
223
-
224
- unless File.exists? @target_xslt then
270
+ FileX.write target_path.sub(/\.html$/,'.xml', ), rxdoc.xml(pretty: true)
225
271
 
226
- File.write @target_xslt,
272
+ unless FileX.exists? @target_xslt then
273
+
274
+ FileX.write @target_xslt,
227
275
  RxSliml.new(fields: %i(description time)).to_xslt
228
276
  end
229
-
230
- File.write target_path, rx.to_html(xslt: @target_xslt)
231
277
 
232
- end
278
+ FileX.write target_path, rx.to_html(xslt: @target_xslt)
279
+
280
+ end
233
281
 
234
282
  end
235
-
283
+
236
284
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_notices
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,48 +10,53 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwMjIyMTYwODE4WhcN
15
- MTkwMjIyMTYwODE4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuRlpq
17
- ZrkUp/VYCQ7NlOwL1tZB2syojWefG9xFjEcJpZbzR3UQ5a5lh80GTWlSCZmN1J7j
18
- ONa7U//jJ4Z8qUflIffrASHccXzBGfSHXBKjleCjfrqxBnBgv/OWN77wX4jgZ4mP
19
- ypa5YoN0SXfKJxED410rLlAYzLKw8Z7oyCVviKOPbAOTg06agom3q1CO0xH/TQU7
20
- DCinIjLrZiUTwx21ceF5zA3RPS1PmpbhKevUBJZJZ3XuhVcJ0zTHEuN6UK8chcPb
21
- ozSP40cswhfLk+CKx542rg4L8pu2X2B8bkWzv92NxPPmHbogna1sJry7a9P4j8Dz
22
- ISYgKqChVsoHPbJFAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFEq/hqkUhx5Rn5Ue7iJ45UFA5hpsMCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBAFLD7+YfG7ir5sp5wdwg
26
- ZpEC5007bvqNV3gWZFAGhVZe1MU8iOtt8e4l5dLwL6mXyy8cWDRe/uxjuBdLfd8f
27
- f3vY8DgXuDpEjLqI3W5/CcebbhwzggA3jmMC2AwOsqa9mmqasRJOuE1cS99LFsyW
28
- odLGGXcBQifoXrFVfmv/RWw/U4Xaerz3djYOTTeVZunc5S13pmdJmZr2sQ1I7+n2
29
- nshwH3gLUVCrnX4aM0/LjP9OeDu1Z3C8WR2hdLHaCgsWMD4OOva1M/n8y2YWt9xU
30
- kevhQAOzRKqVpqtA1jTyKzuey4YXCNgnQSGNztySvUk2QlUdEStZNMkTM7uqL9Ob
31
- jzM=
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMjI0MTMyOTM2WhcN
15
+ MjIwMjI0MTMyOTM2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDJvsa6
17
+ TnHpX2TYC4DnR82ZR2GNtpA1dNtRlwr/Z21VmkZxSq0YgpbNvGNLZHQFm03egVwR
18
+ KHj7RifsC3RBlzLNZTBvUkmQSJiOZvXB7tWWT3kA5HCwjyMkGuLPxOVDY7HyvEVF
19
+ kxFZgylN+66aJWV6gPSQ347jihF6WXIBfUYlDg8s4Bkl9KI8huzPTrP2UTXjK6Tz
20
+ mXBvLf5nv9FvL+TwQBOXwxreGW9zUJWRrtIpvqu+QFPVBSu4Ov4XDdik9jH2e5RZ
21
+ s1z1lSmsYiP10o3KbOaVZ4wjEDu626a+N1sjS4YU18CvHOwgESOaFqEpWjOsWKep
22
+ +6tjWbYVKSi2vfU+a/jNPEA0ssvqFieFIO00Jv1LyZFD/U3q8ZTDkMHucz4E8f80
23
+ mUJacvaFG3DTYiMDkIU9BuNy4vvIf+AoeTR5AhsoZBMSTU1A0EnH5mh790wkJab8
24
+ uY1GBwbmxeWl4OGD675ygAJSL2tQJAQBDMNKi+fB73/GWBsQAXBBR3LN5z0CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUjkgH/7j1
26
+ kSzWPoe0UDHGVZGJPbEwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAi0SDZ62eIMvbMY5FSXEY30wSVmiq+JhcIBjfHGXL
29
+ hQkhYqAnpzXD7oq0c3USmZtTGn4N8Cy1Sm0WR3RUvbYF6Dta2o1UKQ0vIko/i0kj
30
+ cNcvG6LcQkUt1mPhEMWAVoWvBL7xySN6yU9Ls7YmpW9Y+62v74NwGqx8c6N2VZKL
31
+ Vw24Rh4OC9e5cIjO+SR0KRI4+YFm86SnPsVXycqaHvMO8rNBgxGqR1FfFYrNUn0I
32
+ jafFtIcshyvSFoAaYK5GbPD8Xw/vZ/Red1SXdjmC4+j5ZtAx2c+vgK1lErjGqsYp
33
+ /XJl7PJxLwoAHYtYjensYXkRw8RZ7Re+HsW4IAmq1IQtBEYjjgWUwEhry56jQ/1A
34
+ ovxhAIUn9BlZdnsefgTYj2Cy+7z0VyGgWOwrxb1WmGNqjIvZtlFEQzm2yGelNIB2
35
+ mq989lGt58a/Y5CLIB7CrHXwKhKPrMrl9wrNJQaGhmKCpC48MvGPzmGUKYO3OTRK
36
+ QCT4F3Esm7/YTYtL3CQJWI1T
32
37
  -----END CERTIFICATE-----
33
- date: 2018-02-22 00:00:00.000000000 Z
38
+ date: 2022-01-17 00:00:00.000000000 Z
34
39
  dependencies:
35
40
  - !ruby/object:Gem::Dependency
36
41
  name: rss_creator
37
42
  requirement: !ruby/object:Gem::Requirement
38
43
  requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '0.3'
42
44
  - - ">="
43
45
  - !ruby/object:Gem::Version
44
- version: 0.3.11
46
+ version: 0.5.0
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.5'
45
50
  type: :runtime
46
51
  prerelease: false
47
52
  version_requirements: !ruby/object:Gem::Requirement
48
53
  requirements:
49
- - - "~>"
50
- - !ruby/object:Gem::Version
51
- version: '0.3'
52
54
  - - ">="
53
55
  - !ruby/object:Gem::Version
54
- version: 0.3.11
56
+ version: 0.5.0
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.5'
55
60
  - !ruby/object:Gem::Dependency
56
61
  name: dx_sliml
57
62
  requirement: !ruby/object:Gem::Requirement
@@ -78,42 +83,42 @@ dependencies:
78
83
  requirements:
79
84
  - - "~>"
80
85
  - !ruby/object:Gem::Version
81
- version: '0.1'
86
+ version: '0.2'
82
87
  - - ">="
83
88
  - !ruby/object:Gem::Version
84
- version: 0.1.2
89
+ version: 0.2.1
85
90
  type: :runtime
86
91
  prerelease: false
87
92
  version_requirements: !ruby/object:Gem::Requirement
88
93
  requirements:
89
94
  - - "~>"
90
95
  - !ruby/object:Gem::Version
91
- version: '0.1'
96
+ version: '0.2'
92
97
  - - ">="
93
98
  - !ruby/object:Gem::Version
94
- version: 0.1.2
99
+ version: 0.2.1
95
100
  - !ruby/object:Gem::Dependency
96
101
  name: rss_sliml
97
102
  requirement: !ruby/object:Gem::Requirement
98
103
  requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '0.1'
102
104
  - - ">="
103
105
  - !ruby/object:Gem::Version
104
- version: 0.1.0
106
+ version: 0.2.0
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.2'
105
110
  type: :runtime
106
111
  prerelease: false
107
112
  version_requirements: !ruby/object:Gem::Requirement
108
113
  requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: '0.1'
112
114
  - - ">="
113
115
  - !ruby/object:Gem::Version
114
- version: 0.1.0
116
+ version: 0.2.0
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.2'
115
120
  description:
116
- email: james@jamesrobertson.eu
121
+ email: digital.robertson@gmail.com
117
122
  executables: []
118
123
  extensions: []
119
124
  extra_rdoc_files: []
@@ -139,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
144
  version: '0'
140
145
  requirements: []
141
146
  rubyforge_project:
142
- rubygems_version: 2.6.13
147
+ rubygems_version: 2.7.10
143
148
  signing_key:
144
149
  specification_version: 4
145
150
  summary: A public facing noticeboard which is centered around an RSS feed.
metadata.gz.sig CHANGED
Binary file