mns_subscriber 0.6.2 → 0.7.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mns_subscriber.rb +321 -203
- metadata +34 -14
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9a3f061eca9581f000c9fd37c9341da37e29e723a883627b220045bc15daa68
|
4
|
+
data.tar.gz: 2c7ac5bb79b3b0bbc7edaf86c512aa06fd63d258ed2429788ee6d2f18644f26d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ec27ad80dd5ccf4d69e9156a98ee5fc64870be0789f3d0eeaed9a449d52f1abec50eea61821d3e7ef97184c35882d0f1000a071507c7dd99ab45bba88141d44
|
7
|
+
data.tar.gz: 2adfaff285eb6677b02a0d4b501cf0f60400e91f0a6abe1dcc11a47602f8ae245b35ffbe66884fce01dc769742ce0201b7fe059e1a58ceb233307ce1f0534d2d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/mns_subscriber.rb
CHANGED
@@ -7,262 +7,380 @@ require 'mtlite'
|
|
7
7
|
require 'sps-sub'
|
8
8
|
require 'daily_notices'
|
9
9
|
require 'recordx_sqlite'
|
10
|
+
require 'easyimg_utils'
|
10
11
|
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
@log = log
|
18
|
-
log.info 'mns_subscriber/initialize: active' if log
|
19
|
-
|
20
|
-
# note: a valid url_base must be provided
|
21
|
-
|
22
|
-
@options = {
|
23
|
-
url_base: 'http://yourwebsitehere.co.uk/',
|
24
|
-
dx_xslt: '/xsl/dynarex.xsl',
|
25
|
-
rss_xslt: '/xsl/feed.xsl',
|
26
|
-
target_page: :page,
|
27
|
-
target_xslt: '/xsl/page.xsl',
|
28
|
-
local_media_path: '/home/user/media',
|
29
|
-
url_media_path: 'http://media.yourwebsitehere.co.uk/'
|
30
|
-
}.merge(options)
|
31
|
-
|
32
|
-
super(host: host, port: port, log: log)
|
33
|
-
@filepath, @timeline = dir, timeline
|
34
|
-
|
35
|
-
@index = nil
|
36
|
-
@hashtags = nil
|
37
|
-
|
13
|
+
module MNSSubscriber
|
14
|
+
|
15
|
+
class NoticeMgr
|
16
|
+
using ColouredText
|
38
17
|
|
39
|
-
|
40
|
-
|
41
|
-
@hashtag_url = @options[:url_base] + hashtag_url.sub(/^\//,'')
|
18
|
+
def initialize(sps=nil, dir: '.', options: {}, timeline: nil,
|
19
|
+
hashtag_url: nil, log: nil, debug: false)
|
42
20
|
|
43
|
-
|
44
|
-
tagdb = File.join(hashtag_path, 'index.db')
|
45
|
-
FileUtils.mkdir_p File.dirname(tagdb)
|
21
|
+
@sps, @log, @debug = sps, log, debug
|
46
22
|
|
47
|
-
|
48
|
-
@
|
23
|
+
# note: a valid url_base must be provided
|
24
|
+
@options = {
|
25
|
+
url_base: 'http://yourwebsitehere.co.uk/',
|
26
|
+
dx_xslt: '/xsl/dynarex.xsl',
|
27
|
+
rss_xslt: '/xsl/feed.xsl',
|
28
|
+
target_page: :page,
|
29
|
+
target_xslt: '/xsl/page.xsl',
|
30
|
+
local_media_path: '/home/user/media',
|
31
|
+
url_media_path: 'http://media.yourwebsitehere.co.uk/'
|
32
|
+
}.merge(options)
|
49
33
|
|
50
|
-
end
|
51
34
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
35
|
+
@filepath, @timeline = dir, timeline
|
36
|
+
|
37
|
+
@index = nil
|
38
|
+
@hashtags = nil
|
39
|
+
|
40
|
+
|
41
|
+
if hashtag_url then
|
42
|
+
|
43
|
+
@hashtag_url = @options[:url_base] + hashtag_url.sub(/^\//,'')
|
44
|
+
|
45
|
+
hashtag_path = File.join(dir, 'hashtag')
|
46
|
+
tagdb = File.join(hashtag_path, 'index.db')
|
47
|
+
FileUtils.mkdir_p File.dirname(tagdb)
|
48
|
+
|
49
|
+
h = {hashtags: {id: '', tag: '', topic: '', noticeid: ''}}
|
50
|
+
@hashtags = RecordxSqlite.new(tagdb, table: h )
|
59
51
|
|
60
|
-
|
52
|
+
end
|
53
|
+
end
|
61
54
|
|
62
|
-
|
55
|
+
def incoming(topic, msg)
|
56
|
+
|
57
|
+
a = topic.split('/')
|
58
|
+
context = a.last.to_sym
|
59
|
+
|
60
|
+
case context
|
61
|
+
when :profile
|
62
|
+
|
63
|
+
update_attributes(:description, subtopic=a[-2], profile=msg)
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
when :link
|
66
|
+
puts 'we have a link' if @debug
|
67
|
+
update_attributes(:link, subtopic=a[-2], link=msg)
|
68
|
+
|
69
|
+
when :title
|
70
|
+
|
71
|
+
update_attributes(:title, subtopic=a[-2], title=msg)
|
72
|
+
|
73
|
+
when :image
|
74
|
+
#puts 'we have an image'
|
75
|
+
update_attributes(:image, subtopic=a[-2], title=msg)
|
76
|
+
|
77
|
+
when :delete
|
78
|
+
|
79
|
+
delete_notice(subtopic=a[-2], msg)
|
80
|
+
|
81
|
+
when :json
|
82
|
+
|
83
|
+
# JSON contains a message and 1 or more media files
|
84
|
+
h = JSON.parse msg, symbolize_names: true
|
85
|
+
puts 'h: ' + h.inspect if @debug
|
86
|
+
|
87
|
+
subtopic = a[-2]
|
88
|
+
|
89
|
+
t = Time.now
|
90
|
+
id = t.to_i.to_s + t.strftime("%2N")
|
91
|
+
|
92
|
+
filepath = File.join(@options[:local_media_path], 'images')
|
93
|
+
|
94
|
+
a = h[:files].map.with_index do |f,i|
|
95
|
+
|
96
|
+
# is f an Array object containing various sized images of the 1 file?
|
97
|
+
a2 = f.is_a?(Array) ? f : [f]
|
98
|
+
|
99
|
+
scale = a2.map do |imgfile|
|
100
|
+
|
101
|
+
scale = imgfile[/(_\w+)\.\w+$/,1].to_s
|
102
|
+
file = "%s%s%s" % [(id.to_i + i+1).to_s(36).reverse, scale, File.extname(imgfile)]
|
103
|
+
dest = File.join(filepath, file)
|
104
|
+
|
105
|
+
FileUtils.cp imgfile, dest
|
106
|
+
FileUtils.chmod 0755, dest
|
107
|
+
|
108
|
+
file
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
index = scale[1] ? 1 : 0
|
113
|
+
file1 = scale[index]
|
114
|
+
|
115
|
+
dir = File.extname(file1) =~ /\.(?:jpg|png)/ ? 'images' : ''
|
116
|
+
url = [@options[:url_media_path], dir, file1].join('/')
|
117
|
+
|
118
|
+
href = [@options[:url_base].sub(/\/$/,''), subtopic, 'status', id,
|
119
|
+
'photo', (i+1).to_s ].join('/')
|
120
|
+
# find the best y position for the image letterbox view
|
121
|
+
pct = EasyImgUtils.new(a2[index]).best_viewport
|
122
|
+
pct2 = (pct / 10.0).to_i * 10
|
123
|
+
|
124
|
+
align = if pct < 35 then
|
125
|
+
|
126
|
+
if pct < 10 then
|
127
|
+
:top
|
128
|
+
else
|
129
|
+
'y' + pct2.to_s
|
130
|
+
end
|
131
|
+
|
132
|
+
elsif pct >= 70
|
133
|
+
:bottom
|
134
|
+
else
|
135
|
+
#'y' + pct.to_s
|
136
|
+
:center
|
137
|
+
end
|
138
|
+
|
139
|
+
{url: url, align: align}
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
card = if h[:card] and h[:card][:summary_large_image] then
|
145
|
+
|
146
|
+
h[:card][:summary_large_image][:img] = a[1][:url] if a.any?
|
147
|
+
h[:card]
|
148
|
+
|
149
|
+
elsif a.any?
|
150
|
+
{images: a}
|
151
|
+
end
|
152
|
+
#puts ('card: ' + card.inspect).debug
|
153
|
+
|
154
|
+
h[:msg] += build(card) if card
|
155
|
+
add_notice(subtopic, h[:msg].gsub('<','<')\
|
156
|
+
.gsub('>','>').gsub("\r",''), id,
|
157
|
+
(card ? card.to_json : nil))
|
158
|
+
|
159
|
+
else
|
160
|
+
|
161
|
+
subtopic, id = a[1..-1]
|
162
|
+
add_notice(subtopic, msg, id)
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
66
166
|
|
167
|
+
private
|
67
168
|
|
68
|
-
|
169
|
+
def add_notice(topic, raw_msg, raw_id=nil, card=nil)
|
170
|
+
|
171
|
+
@log.info 'mns_subscriber/add_notice: active' if @log
|
172
|
+
topic_dir = File.join(@filepath, 'u', topic)
|
69
173
|
|
70
|
-
|
71
|
-
|
72
|
-
|
174
|
+
options = @options.clone
|
175
|
+
options.delete :local_media_path
|
176
|
+
options.delete :url_media_path
|
177
|
+
|
178
|
+
notices = DailyNotices.new topic_dir, options.merge(identifier: topic,
|
179
|
+
title: topic.capitalize + ' daily notices', log: @log)
|
73
180
|
|
74
|
-
|
75
|
-
|
76
|
-
update_attributes(:link, subtopic=a[-2], link=msg)
|
181
|
+
t = Time.now
|
182
|
+
id = (raw_id || t.to_i.to_s + t.strftime("%2N")).to_i
|
77
183
|
|
78
|
-
|
79
|
-
|
80
|
-
update_attributes(:title, subtopic=a[-2], title=msg)
|
184
|
+
# strip out any JSON from the end of the message
|
185
|
+
msg, raw_json = raw_msg.split(/(?=\{.*)/)
|
81
186
|
|
82
|
-
|
83
|
-
|
84
|
-
update_attributes(:image, subtopic=a[-2], title=msg)
|
187
|
+
msg = ' ' if msg.nil?
|
188
|
+
mtlite = MTLite.new(msg)
|
85
189
|
|
86
|
-
|
190
|
+
desc = if mtlite.to_html(para: false) =~ /<\w+/ then
|
191
|
+
mtlite.to_html(para: true, ignore_domainlabel:true)
|
192
|
+
else
|
193
|
+
mtlite.to_s
|
194
|
+
end
|
87
195
|
|
88
|
-
|
196
|
+
if @hashtag_url then
|
197
|
+
|
198
|
+
tags = desc.scan(/(?<= #)\w+/)
|
199
|
+
|
200
|
+
desc.gsub!(/ #\w+/) do |x|
|
201
|
+
"<a href='%s%s'>%s</a>" % [@hashtag_url, x[2..-1], x]
|
202
|
+
end
|
203
|
+
|
204
|
+
# add the record to the database
|
205
|
+
tags.each do |tag|
|
206
|
+
|
207
|
+
t = Time.now
|
208
|
+
id2 = (t.to_i.to_s + t.strftime("%2N")).to_i
|
209
|
+
h = {id: id2, tag: tag, topic: topic, noticeid: id}
|
210
|
+
|
211
|
+
@hashtags.create h if @hashtags
|
212
|
+
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
89
216
|
|
90
|
-
|
217
|
+
title = mtlite.to_s.lines.first.chomp
|
218
|
+
title = title[0..136] + ' ...' if title.length > 140
|
91
219
|
|
92
|
-
|
93
|
-
|
220
|
+
h = {
|
221
|
+
title: title,
|
222
|
+
description: desc,
|
223
|
+
topic: topic,
|
224
|
+
card: card
|
225
|
+
}
|
226
|
+
#puts 'inside add_notice h: ' + h.inspect
|
227
|
+
return_status = notices.add(item: h, id: id.to_s)
|
228
|
+
#puts 'return_status: ' + return_status.inspect
|
94
229
|
|
95
|
-
|
230
|
+
return if return_status == :duplicate
|
96
231
|
|
97
|
-
|
98
|
-
|
232
|
+
rxnotices = RecordxSqlite.new(File.join(topic_dir, 'notices.db'),
|
233
|
+
table: {notices: {id: 0, description: '', message: ''}})
|
99
234
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
235
|
+
begin
|
236
|
+
rxnotices.create id: id.to_s, description: desc, message: msg
|
237
|
+
rescue
|
238
|
+
puts 'warning: rxnotices.create -> ' + ($!).inspect
|
239
|
+
end
|
240
|
+
|
241
|
+
if raw_json then
|
106
242
|
|
107
|
-
|
108
|
-
|
243
|
+
record = JSON.parse(raw_json)
|
244
|
+
index = RecordxSqlite.new(File.join(topic_dir, 'index.db'),
|
245
|
+
table: {items: record})
|
246
|
+
index.create record
|
247
|
+
|
248
|
+
update_index_xml(index, topic_dir)
|
109
249
|
|
110
|
-
dir = File.extname(file) =~ /\.(?:jpg|png)/ ? 'images' : ''
|
111
|
-
url = [@options[:url_media_path], dir, file].join('/')
|
112
|
-
|
113
|
-
href = [@options[:url_base].sub(/\/$/,''), subtopic, 'status', id,
|
114
|
-
'photo', (i+1).to_s ].join('/')
|
115
|
-
"<a href='%s'><img class='img1' src='%s'/></a>" % [href, url]
|
116
|
-
|
117
250
|
end
|
118
251
|
|
119
|
-
|
252
|
+
@sps.notice "%s/add: %s/status/%s" % [@timeline, topic, id] if @timeline
|
253
|
+
|
254
|
+
sleep 0.3
|
120
255
|
|
121
|
-
|
256
|
+
end
|
257
|
+
|
258
|
+
def delete_notice(topic, msg)
|
259
|
+
|
260
|
+
topic_dir = File.join(@filepath, topic)
|
122
261
|
|
262
|
+
id = msg.to_i
|
123
263
|
|
124
|
-
|
264
|
+
feed = DailyNotices.new topic_dir, log: @log
|
265
|
+
feed.delete id
|
125
266
|
|
126
|
-
|
127
|
-
|
267
|
+
notices = RecordxSqlite.new(File.join(topic_dir, 'notices.db'),
|
268
|
+
table: 'notices')
|
269
|
+
notices.delete id
|
128
270
|
|
129
|
-
|
271
|
+
indexdb = File.join(topic_dir, 'index.db')
|
272
|
+
|
273
|
+
if File.exists? indexdb then
|
274
|
+
|
275
|
+
index = RecordxSqlite.new(indexdb, table: 'items')
|
276
|
+
index.delete id
|
277
|
+
update_index_xml(index, topic_dir)
|
278
|
+
end
|
279
|
+
|
280
|
+
end
|
281
|
+
|
282
|
+
# builds the HTML for a given card
|
283
|
+
#
|
284
|
+
def build(card)
|
130
285
|
|
131
|
-
|
286
|
+
#return card.inspect
|
287
|
+
#next unless card.is_a? Hash
|
288
|
+
|
289
|
+
if card.is_a? Hash then
|
290
|
+
|
291
|
+
card2 = case card.keys.first
|
292
|
+
when :images
|
293
|
+
|
294
|
+
card[:images].map.with_index do |img, i|
|
295
|
+
|
296
|
+
"<img class='img1' src='%s'/>" % img[:url]
|
297
|
+
|
298
|
+
end.join
|
299
|
+
|
300
|
+
when :summary_large_image
|
132
301
|
|
133
|
-
|
302
|
+
h2 = card[:summary_large_image]
|
134
303
|
|
135
|
-
|
136
|
-
topic_dir = File.join(@filepath, topic)
|
137
|
-
|
138
|
-
options = @options.clone
|
139
|
-
options.delete :local_media_path
|
140
|
-
options.delete :url_media_path
|
141
|
-
|
142
|
-
notices = DailyNotices.new topic_dir, options.merge(identifier: topic,
|
143
|
-
title: topic.capitalize + ' daily notices', log: @log)
|
304
|
+
rawdesc = h2[:desc]
|
144
305
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
mtlite = MTLite.new(msg)
|
152
|
-
|
153
|
-
desc = if mtlite.to_html(para: false) =~ /<\w+/ then
|
154
|
-
mtlite.to_html(para: true, ignore_domainlabel:true)
|
155
|
-
else
|
156
|
-
mtlite.to_s
|
157
|
-
end
|
158
|
-
|
159
|
-
if @hashtag_url then
|
306
|
+
desc = rawdesc.length > 147 ? rawdesc[0..147] + '...' : rawdesc
|
307
|
+
site = h2[:url][/https?:\/\/([^\/]+)(?=\/)/,1].sub(/^www\./,'')
|
308
|
+
title = h2[:title]
|
309
|
+
img = h2[:img]
|
310
|
+
url = h2[:url]
|
160
311
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
312
|
+
# The following Card HTML template is for use with the RSS feed.
|
313
|
+
# The actual HTML template for the card is rendered dynamically
|
314
|
+
# from the web server.
|
315
|
+
"
|
316
|
+
<div class='card'><a href='#{url}' target='_blank'>" +
|
317
|
+
"<div class='top-crop center'><img src='#{img}'/></div>" +
|
318
|
+
"<span class='title'>#{title}</span></a><p>#{desc}</p>" +
|
319
|
+
"<span class='link'><span class='linkurl'>#{site}</span></span></div>"
|
320
|
+
|
321
|
+
end
|
165
322
|
end
|
323
|
+
|
324
|
+
end
|
325
|
+
|
326
|
+
def update_index_xml(index, topic_dir)
|
327
|
+
|
328
|
+
# create the index.xml file
|
166
329
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
t = Time.now
|
171
|
-
id2 = (t.to_i.to_s + t.strftime("%2N")).to_i
|
172
|
-
h = {id: id2, tag: tag, topic: topic, noticeid: id}
|
330
|
+
a = index.order(:desc).first(15)
|
331
|
+
a2 = a.map {|x| h = x.to_h; id = h.delete(:id); {item_id: id}.merge(h)}
|
173
332
|
|
174
|
-
|
175
|
-
|
176
|
-
|
333
|
+
dx = Dynarex.new
|
334
|
+
dx.import a2
|
335
|
+
dx.order ='descending'
|
336
|
+
|
337
|
+
dx.save File.join(topic_dir, 'index.xml')
|
177
338
|
|
178
339
|
end
|
179
|
-
|
180
|
-
title = mtlite.to_s.lines.first.chomp
|
181
|
-
title = title[0..136] + ' ...' if title.length > 140
|
182
|
-
|
183
|
-
h = {
|
184
|
-
title: title,
|
185
|
-
description: desc,
|
186
|
-
topic: topic
|
187
|
-
}
|
188
340
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
341
|
+
def update_attributes(attribute, topic, value)
|
342
|
+
|
343
|
+
topic_dir = File.join(@filepath, topic)
|
344
|
+
notices = DailyNotices.new topic_dir, @options.merge(identifier: topic)
|
345
|
+
notices.method((attribute.to_s + '=').to_sym).call(value)
|
346
|
+
notices.save
|
195
347
|
|
196
|
-
begin
|
197
|
-
rxnotices.create id: id.to_s, description: desc, message: msg
|
198
|
-
rescue
|
199
|
-
puts 'warning: rxnotices.create -> ' + ($!).inspect
|
200
348
|
end
|
349
|
+
|
201
350
|
|
202
|
-
|
351
|
+
end
|
352
|
+
|
353
|
+
class Client < SPSSub
|
354
|
+
|
355
|
+
def initialize(host: 'sps', port: 59000, dir: '.', options: {},
|
356
|
+
timeline: nil, log: nil, hashtag_url: nil)
|
203
357
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
358
|
+
@log = log
|
359
|
+
log.info 'mns_subscriber/initialize: active' if log
|
360
|
+
@nm = NoticeMgr.new(self, dir: dir, options: options, timeline: timeline,
|
361
|
+
hashtag_url: hashtag_url, debug: true)
|
208
362
|
|
209
|
-
|
363
|
+
super(host: host, port: port, log: log)
|
210
364
|
|
211
365
|
end
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
sleep 0.3
|
216
|
-
|
217
|
-
end
|
218
|
-
|
219
|
-
def delete_notice(topic, msg)
|
220
|
-
|
221
|
-
|
222
|
-
topic_dir = File.join(@filepath, topic)
|
223
|
-
|
224
|
-
id = msg.to_i
|
225
|
-
|
226
|
-
feed = DailyNotices.new topic_dir, log: @log
|
227
|
-
feed.delete id
|
228
|
-
|
229
|
-
notices = RecordxSqlite.new(File.join(topic_dir, 'notices.db'),
|
230
|
-
table: 'notices')
|
231
|
-
notices.delete id
|
232
|
-
|
233
|
-
indexdb = File.join(topic_dir, 'index.db')
|
234
|
-
|
235
|
-
if File.exists? indexdb then
|
236
|
-
|
237
|
-
index = RecordxSqlite.new(indexdb, table: 'items')
|
238
|
-
index.delete id
|
239
|
-
update_index_xml(index, topic_dir)
|
366
|
+
|
367
|
+
def subscribe(topic='notice/*')
|
368
|
+
super(topic)
|
240
369
|
end
|
241
|
-
|
242
|
-
end
|
243
|
-
|
244
|
-
def update_index_xml(index, topic_dir)
|
245
|
-
|
246
|
-
# create the index.xml file
|
247
|
-
|
248
|
-
a = index.order(:desc).first(15)
|
249
|
-
a2 = a.map {|x| h = x.to_h; id = h.delete(:id); {item_id: id}.merge(h)}
|
250
370
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
371
|
+
private
|
372
|
+
|
373
|
+
def ontopic(topic, msg)
|
374
|
+
|
375
|
+
@log.info 'mns_subscriber/ontopic: topic: ' + topic.inspect if @topic
|
376
|
+
|
377
|
+
a = topic.split('/')
|
378
|
+
#puts "%s: %s %s" % [topic, Time.now.to_s, msg.inspect]
|
379
|
+
|
380
|
+
@nm.incoming topic, msg
|
381
|
+
|
382
|
+
end
|
258
383
|
|
259
|
-
def update_attributes(attribute, topic, value)
|
260
|
-
|
261
|
-
topic_dir = File.join(@filepath, topic)
|
262
|
-
notices = DailyNotices.new topic_dir, @options.merge(identifier: topic)
|
263
|
-
notices.method((attribute.to_s + '=').to_sym).call(value)
|
264
|
-
notices.save
|
265
|
-
|
266
384
|
end
|
267
385
|
|
268
386
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mns_subscriber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,28 +35,28 @@ cert_chain:
|
|
35
35
|
yOAycOYzp7fxmPl3/HV5D0YOJwuy1XslA50GQJwq12A5vMyUGUCHuxH/zKZcM/zr
|
36
36
|
0QZaKiVqq5ZeGvni0eQSavhQ
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-03-
|
38
|
+
date: 2021-03-29 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: mtlite
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 0.4.0
|
47
44
|
- - "~>"
|
48
45
|
- !ruby/object:Gem::Version
|
49
46
|
version: '0.4'
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.4.1
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 0.4.0
|
57
54
|
- - "~>"
|
58
55
|
- !ruby/object:Gem::Version
|
59
56
|
version: '0.4'
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.4.1
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: sps-sub
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,22 +81,22 @@ dependencies:
|
|
81
81
|
name: daily_notices
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
|
-
- - ">="
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 0.7.0
|
87
84
|
- - "~>"
|
88
85
|
- !ruby/object:Gem::Version
|
89
86
|
version: '0.7'
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.7.1
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.7.0
|
97
94
|
- - "~>"
|
98
95
|
- !ruby/object:Gem::Version
|
99
96
|
version: '0.7'
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 0.7.1
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: recordx_sqlite
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +117,26 @@ dependencies:
|
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: 0.3.1
|
120
|
+
- !ruby/object:Gem::Dependency
|
121
|
+
name: easyimg_utils
|
122
|
+
requirement: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.7'
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 0.7.3
|
130
|
+
type: :runtime
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0.7'
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.7.3
|
120
140
|
description:
|
121
141
|
email: digital.robertson@gmail.com
|
122
142
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|