mindwords 0.6.3 → 0.6.7

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/mindwords.rb +176 -162
  4. data.tar.gz.sig +0 -0
  5. metadata +30 -30
  6. metadata.gz.sig +3 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18ab26d7ab5ff288172a06294982093e97db2b22998cb627ce5f7201dac62a6f
4
- data.tar.gz: b717eb9f9b9c99d88ed27b33913834f361ceb5715fd9e4e7bdff3bcf7abf9089
3
+ metadata.gz: 7d489cc248683b435ca0ba18e673b7aa75aa23395a73235df19ac355e928dae4
4
+ data.tar.gz: c8276a4a42198bae89ab48af00ec48b491e5a55761e9c3ed47e20524121dbc11
5
5
  SHA512:
6
- metadata.gz: ab92bd3423e50ad635cfd986d817a874db78b2fb7d57db01300400ce4dd5d267d706e1e642442c6bf4d9b5a84448d8be0fe0c13684cf3cfb160523e67da251d0
7
- data.tar.gz: b7b6e3e7971d76f3cd42989a2b69fb6e1d5a933c80f5bcfa61fc65542819ecc2d9b711f7d4af8d77ad8a9d3f4cf7e8a310cd1ce68574d511fbfa2e73af020c13
6
+ metadata.gz: 0f059026fe87db1dec7cd710093ccca7129817b4c461ae0f17d27aba822dce298b3a1948b8ce6c17493a802d39d0ded59edd2651b3d56c763ba455a2e68f9dd0
7
+ data.tar.gz: 3ee4096a398584ef5207fe2902d0e73806cee0791030461220b129f3169c62525c56a78cb288b9f19788813decc341ccb1e26bb6997affd68d6e0af70cd98118
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/mindwords.rb CHANGED
@@ -8,124 +8,138 @@ require 'line-tree'
8
8
 
9
9
  module HashCopy
10
10
  refine Hash do
11
-
11
+
12
12
  def deep_clone()
13
13
  Marshal.load(Marshal.dump(self))
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
18
18
 
19
19
  class MindWords
20
20
  using ColouredText
21
21
  using HashCopy
22
-
22
+ include RXFHelperModule
23
+
23
24
  attr_accessor :lines, :filepath
24
-
25
+
25
26
  def initialize(raws='', parent: nil, debug: false)
26
27
 
27
28
  @parent, @debug = parent, debug
28
-
29
- s, type = RXFHelper.read raws
30
-
31
- @filepath = raws if type == :file or type == :dfs
32
- lines = s.strip.gsub(/^\n/,'').lines.uniq
33
- lines.shift if lines.first =~ /<\?mindwords\?>/
34
-
35
- @lines = lines.inject([]) do |r,line|
36
-
37
- # the following does 2 things:
38
- # 1. splits words separated by a bar (|) onto their own line
39
- # 2. prefixes a word with an underscore if the word is the
40
- # same as the hashtag. That way it's not removed by the
41
- # redundancy checker
42
29
 
43
- raw_words, raw_hashtags = line.split(/(?= #)/,2)
44
- words = raw_words.split(/ *\| */)
45
- hashtags = raw_hashtags.scan(/(?<=#)\w+/)
46
-
47
- words.each do |word|
48
-
49
- linex = (word + raw_hashtags)
50
- r << (hashtags.include?(word) ? linex.sub!(/\b#{word}\b/, '_\0') \
51
- : linex)
52
- end
30
+ import(raws) if raws.length > 1
53
31
 
54
- r
55
- end
56
-
57
32
  end
58
-
33
+
59
34
  def add(s)
60
-
35
+
61
36
  @lines.concat s.strip.lines
62
-
37
+
63
38
  end
64
-
39
+
65
40
  def breadcrumb()
66
41
  @parent.attributes[:breadcrumb].split(/ +\/ +/) if @parent
67
42
  end
68
-
43
+
69
44
  def headings()
70
45
  breadcrumb[0..-2]
71
46
  end
72
-
73
-
47
+
48
+
74
49
  def element(id)
75
-
50
+
76
51
  doc = Rexle.new(to_xml())
77
52
  e = doc.root.element("//*[@id='#{id}']")
78
53
  #e.attributes[:breadcrumb].to_s if e
79
-
54
+
80
55
  end
81
-
82
- def hashtags()
83
- @parent.attributes[:hashtags].split if @parent
56
+
57
+ # If title supplied, searches for a requested title and returns the
58
+ # associated hashtags
59
+ # When no title is supplied, it will return the hashtags for the
60
+ # parent element of a search result object
61
+ #
62
+ def hashtags(title=nil)
63
+
64
+ if title then
65
+ found = search(title)
66
+ found.hashtags() if found
67
+ else
68
+ @parent.attributes[:hashtags].split if @parent and @parent.attributes[:hashtags]
69
+ end
70
+
84
71
  end
85
-
72
+
73
+ def import(raws)
74
+
75
+ s, type = RXFHelper.read raws
76
+
77
+ @filepath = raws if type == :file or type == :dfs
78
+ lines = (s.strip.gsub(/(^\n|\r)/,'') + "\n").lines.uniq
79
+ lines.shift if lines.first =~ /<\?mindwords\?>/
80
+
81
+ @lines = lines.inject([]) do |r,line|
82
+
83
+ # the following does 2 things:
84
+ # 1. splits words separated by a bar (|) onto their own line
85
+ # 2. prefixes a word with an underscore if the word is the
86
+ # same as the hashtag. That way it's not removed by the
87
+ # redundancy checker
88
+
89
+ raw_words, raw_hashtags = line.split(/(?= #)/,2)
90
+ words = raw_words.split(/ *\| */)
91
+ hashtags = raw_hashtags.scan(/(?<=#)\w+/)
92
+
93
+ words.each do |word|
94
+
95
+ linex = (word + raw_hashtags)
96
+ r << (hashtags.include?(word) ? linex.sub!(/\b#{word}\b/, '_\0') \
97
+ : linex)
98
+ end
99
+
100
+ r
101
+ end
102
+ end
103
+
86
104
  # helpful when searching for a word itself using autosuggest
87
105
  #
88
106
  def lookup(s)
89
107
  self.to_words.keys.sort.grep /^#{s}/i
90
- end
91
-
92
- # same as #lines but inludes the breadcrumb path; Helpful to identify
108
+ end
109
+
110
+ # same as #lines but inludes the breadcrumb path; Helpful to identify
93
111
  # which words don't have a breadcrumb path.
94
112
  #
95
113
  def linesplus()
96
-
114
+
97
115
  to_a.map do |word, _|
98
116
  r = search word
99
117
  r ? [word, r.breadcrumb] : [r, nil]
100
118
  end
101
-
119
+
102
120
  end
103
121
 
104
122
  def save(file=@filepath)
105
-
123
+
106
124
  return if @lines.empty?
107
-
125
+
108
126
  puts 'before save' if @debug
109
-
110
- if File.exists? file then
111
- File.write file, to_s()
112
- else
113
- raise 'Filepath not given'
114
- end
115
-
127
+
128
+ FileX.write file, to_s()
129
+
116
130
  end
117
131
 
118
- # Accepts a list of words with the aim of returning a MindWords document
132
+ # Accepts a list of words with the aim of returning a MindWords document
119
133
  # using matched words with hashtags from the existing MindWords document.
120
134
  #
121
135
  def reflect(raws)
122
-
136
+
123
137
  h = to_h
124
-
138
+
125
139
  missing_words = []
126
-
140
+
127
141
  # add the tags from the main list
128
- a = raws.strip.lines.map do |x|
142
+ a = raws.strip.lines.map do |x|
129
143
  if h[x.chomp] then
130
144
  [x.chomp, h[x.chomp]]
131
145
  else
@@ -147,162 +161,162 @@ class MindWords
147
161
  raws3 = a.uniq.map {|s,tags| [s, tags.map {|x| '#' + x }.join(' ')].join(' ') }.join("\n")
148
162
 
149
163
  [MindWords.new(raws3), missing_words]
150
-
164
+
151
165
  end
152
-
166
+
153
167
  def search(keyword, succinct: true)
154
-
168
+
155
169
  a = @lines.grep(/#{keyword}/i).map do |line|
156
-
170
+
157
171
  puts 'line: ' + line.inspect if @debug
158
-
172
+
159
173
  words = line.split
160
174
  r = words.grep /#{keyword}/i
161
175
  i = words.index r[0]
162
-
176
+
163
177
  [line, i]
164
-
178
+
165
179
  end
166
-
180
+
167
181
  return nil if a.empty?
168
182
  #return a[0][0] if a.length < 2
169
183
 
170
184
  a2 = a.sort_by(&:last).map(&:first)
171
185
  puts 'a2: ' + a2.inspect if @debug
172
186
  e = element(keyword.downcase.gsub(/ +/,'-'))
173
-
187
+
174
188
  return MindWords.new(a2.uniq.join, debug: @debug) if e.nil?
175
189
 
176
190
  # find and add any linkage support lines
177
191
  #
178
-
192
+
179
193
  a3 = []
180
194
 
181
195
  a2.each do |line|
182
-
196
+
183
197
  line.chomp.scan(/#[^ ]+/).each do |hashtag|
184
-
198
+
185
199
  puts 'hashtag: ' + hashtag.inspect if @debug
186
200
  r2 = @lines.grep(/^#{hashtag[1..-1]} #/)
187
- a3 << r2.first if r2
188
-
201
+ a3 << r2.first if r2
202
+
189
203
  end
190
204
  end
191
205
 
192
206
  puts 'a2: ' + a2.inspect if @debug
193
207
  a2.concat a3
194
-
208
+
195
209
  if succinct then
196
210
  MindWords.new(a2.uniq.join, parent: e, debug: @debug)
197
211
  else
198
212
  MindWords.new(a2.uniq.join, debug: @debug)
199
213
  end
200
-
214
+
201
215
  end
202
-
216
+
203
217
  def sort()
204
218
  s = @lines.sort.join
205
-
219
+
206
220
  def s.to_s()
207
221
  self.lines.map do |x|
208
222
  title, hashtags = x.split(/(?=#)/,2)
209
223
  title + hashtags.chomp.brown
210
224
  end.join("\n")
211
- end
212
-
225
+ end
226
+
213
227
  return s
214
228
  end
215
-
229
+
216
230
  def sort!()
217
231
  @lines = sort().lines
218
232
  self
219
233
  end
220
-
234
+
221
235
  def tag_sort()
222
-
223
- h = @lines.group_by {|x| x[/#\w+/]}
236
+
237
+ h = @lines.group_by {|x| x[/#\w+/]}
224
238
  s = h.sort.map {|key, value| value.sort }.join
225
-
239
+
226
240
  def s.to_s()
227
241
  self.lines.map do |x|
228
242
  title, hashtags = x.split(/(?=#)/,2)
229
243
  title + hashtags.chomp.brown
230
244
  end.join("\n")
231
245
  end
232
-
246
+
233
247
  return s
234
-
248
+
235
249
  end
236
-
250
+
237
251
  def tag_sort!()
238
252
  @lines = tag_sort().lines
239
253
  self
240
254
  end
241
255
 
242
256
  def to_a()
243
-
244
- @lines.map do |x|
257
+
258
+ @lines.map do |x|
245
259
  s, rawtags = x.split(/(?= #)/,2)
246
260
  [s, rawtags.scan(/(?<=#)\w+/)]
247
261
  end
248
-
262
+
249
263
  end
250
-
264
+
251
265
  def to_h()
252
266
  to_a.to_h
253
267
  end
254
-
268
+
255
269
  def to_hashtags()
256
270
  @hashtags
257
271
  end
258
272
 
259
273
  def to_outline(sort: true)
260
-
274
+
261
275
  build()
262
-
276
+
263
277
  if sort then
264
278
  a = LineTree.new(@outline).to_a
265
- puts ('a: ' + a.inspect).debug if @debug
279
+ puts ('a: ' + a.inspect).debug if @debug
266
280
  a2tree(tree_sort(a))
267
281
  else
268
282
  @outline
269
283
  end
270
-
284
+
271
285
  end
272
-
286
+
273
287
  alias to_tree to_outline
274
-
288
+
275
289
  def to_s(colour: false)
276
-
290
+
277
291
  header = "<?mindwords?>\n\n"
278
292
  return header + @lines.map(&:chomp).join("\n") unless colour
279
-
293
+
280
294
  body = @lines.map do |x|
281
295
  title, hashtags = x.split(/(?=#)/,2)
282
296
  title + hashtags.chomp.brown
283
297
  end.join("\n")
284
-
298
+
285
299
  header + body
286
-
287
- end
288
-
300
+
301
+ end
302
+
289
303
  def to_words()
290
-
304
+
291
305
  h = {}
292
-
306
+
293
307
  Rexle.new(to_xml).root.each_recursive do |e|
294
-
308
+
295
309
  h[e.attributes[:title]] = {
296
- breadcrumb: e.attributes[:breadcrumb],
310
+ breadcrumb: e.attributes[:breadcrumb],
297
311
  hashtags: e.attributes[:hashtags]
298
312
  }
299
-
313
+
300
314
  end
301
-
315
+
302
316
  h
303
-
304
- end
305
-
317
+
318
+ end
319
+
306
320
  def to_xml()
307
321
  build() unless @xml
308
322
  @xml
@@ -311,13 +325,13 @@ class MindWords
311
325
  private
312
326
 
313
327
  def build()
314
-
328
+
315
329
  h = {}
316
330
 
317
331
  @lines.each do |line|
318
332
 
319
333
  title, rawtags = line.split(/(?= #)/,2)
320
-
334
+
321
335
  rawtags.scan(/#(\w+)/).flatten(1).each do |rawtag|
322
336
  tag = rawtag.gsub(/ +/, '_')
323
337
  h[tag] ||= []
@@ -325,32 +339,32 @@ class MindWords
325
339
  end
326
340
 
327
341
  end
328
-
342
+
329
343
  @hashtags = h.deep_clone.sort.map {|tag, fields| [tag, fields.sort]}.to_h
330
344
 
331
-
345
+
332
346
  a = rexlize(h)
333
347
  doc = Rexle.new(['root', {}, '', *a])
334
348
 
335
349
  # apply node nesting
336
350
 
337
351
  doc.root.elements.each do |e|
338
-
352
+
339
353
  doc.root.xpath('//' + e.name).each do |e2|
340
-
354
+
341
355
  next if e2 === e
342
-
356
+
343
357
  e2.parent.add e
344
358
  e2.delete
345
-
359
+
346
360
  end
347
-
361
+
348
362
  end
349
363
 
350
-
364
+
351
365
  # remove duplicates which appear in the same branch above the nested node
352
366
  rm_duplicates(doc)
353
-
367
+
354
368
  # remove redundant nodes (outsiders)
355
369
  # a redundant node is where all children exist in existing nested nodes
356
370
 
@@ -363,60 +377,60 @@ class MindWords
363
377
  e.backtrack.to_s if dups
364
378
 
365
379
  end
366
-
380
+
367
381
  puts 'redundants: ' + redundants.inspect if @debug
368
382
 
369
383
  redundants.compact.each {|x| doc.element(x).delete }
370
-
384
+
371
385
  node = if @parent then
372
386
  found = doc.root.element('//' + @parent.name)
373
387
  found ? found.parent : doc.root
374
388
  else
375
389
  doc.root
376
390
  end
377
-
378
- # the following removes any undescore prefix from words which were the
391
+
392
+ # the following removes any undescore prefix from words which were the
379
393
  # same as the hashtag
380
-
394
+
381
395
  node.root.each_recursive do |e|
382
396
 
383
397
  next unless e
384
398
  puts 'e: ' + e.inspect if @debug
385
-
399
+
386
400
  e.attributes[:id] = e.attributes[:id].sub(/^_/,'') if e.attributes[:id]
387
401
  e.attributes[:title] = e.attributes[:title].sub(/^_/,'') if e.attributes[:title]
388
402
  e.value = e.value.sub(/^_/,'')
389
403
  e.name = e.name.sub(/^_/,'')
390
-
391
- end
392
-
404
+
405
+ end
406
+
393
407
  # ----
394
-
408
+
395
409
  @outline = treeize node
396
-
410
+
397
411
  node.root.each_recursive do |e|
398
-
399
- e.attributes[:id] = e.attributes[:title].downcase.gsub(/ +/,'-')
400
-
412
+
413
+ e.attributes[:id] = e.attributes[:title].downcase.gsub(/ +/,'-')
414
+
401
415
  s = e.parent.attributes[:breadcrumb] ? \
402
416
  e.parent.attributes[:breadcrumb].to_s + ' / ' : ''
403
417
  e.attributes[:breadcrumb] = s + e.value.strip
404
-
418
+
405
419
  r = @lines.grep(/^#{e.attributes[:title]} #/i)
406
420
  next unless r.any?
407
421
  e.attributes[:hashtags] = r[0].scan(/(?<=#)\w+/).join(' ')
408
422
 
409
-
423
+
410
424
  end
411
-
425
+
412
426
  @xml = node.xml pretty: true
413
427
 
414
428
  end
415
-
429
+
416
430
  def rexlize(a)
417
-
431
+
418
432
  a.map do |x|
419
-
433
+
420
434
  puts 'x: ' + x.inspect if @debug
421
435
 
422
436
  case x
@@ -424,41 +438,41 @@ class MindWords
424
438
  [x.downcase.gsub(/ +/,''), {title: x}, x]
425
439
  when Hash
426
440
  [
427
- x.keys.first.downcase.gsub(/_/,' '),
428
- {title: x.keys.first},
441
+ x.keys.first.downcase.gsub(/_/,' '),
442
+ {title: x.keys.first},
429
443
  x.keys.first,
430
444
  *rexlize(x.values.first)
431
445
  ]
432
446
  when Array
433
447
  [
434
- x.first.downcase.gsub(/_/,' '),
448
+ x.first.downcase.gsub(/_/,' '),
435
449
  {title: x.first}, x.first, *rexlize(x.last)
436
450
  ]
437
451
  end
438
452
  end
439
453
 
440
454
  end
441
-
455
+
442
456
  def rm_duplicates(doc)
443
-
457
+
444
458
  duplicates = []
445
-
459
+
446
460
  doc.root.each_recursive do |e|
447
461
 
448
462
  rows = e.parent.xpath('//' + e.name)
449
463
  next if rows.length < 2
450
464
 
451
465
  rows[0..-2].each {|e2| duplicates << e.backtrack.to_s }
452
-
466
+
453
467
  end
454
468
 
455
469
  duplicates.each do |path|
456
-
470
+
457
471
  puts 'pathx: ' + path.inspect if @debug
458
472
  e = doc.element(path)
459
473
  e.delete if e
460
-
461
- end
474
+
475
+ end
462
476
 
463
477
  end
464
478
 
@@ -470,13 +484,13 @@ class MindWords
470
484
 
471
485
  puts 'e: ' + e.inspect if @debug
472
486
  if e.is_a? Rexle::Element then
473
- (' ' * indent) + e.value.to_s + "\n" + treeize(e,indent+1)
487
+ (' ' * indent) + e.value.to_s + "\n" + treeize(e,indent+1)
474
488
  end
475
489
  end
476
490
 
477
491
  lines.join
478
492
  end
479
-
493
+
480
494
  def tree_sort(a)
481
495
 
482
496
  if a.first.is_a? Array then
@@ -496,7 +510,7 @@ class MindWords
496
510
  (' ' * indent) + title + "\n" + children
497
511
  end.join
498
512
 
499
- end
513
+ end
500
514
 
501
515
  end
502
516
 
@@ -506,7 +520,7 @@ class MindWordsWidget
506
520
 
507
521
  end
508
522
 
509
-
523
+
510
524
  # can be used for main entries or a words list
511
525
  #
512
526
  def input(content: '', action: 'mwupdate', target: 'icontent')
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mindwords
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,31 +11,31 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMTA2MDAzNzI2WhcN
15
- MjIwMTA2MDAzNzI2WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCnNKTu
17
- gn/UJQjyq6a2T4UUemzEz8RnPLYDFkt+iM4mXm7dqSkZ5EdSEHdJ26r2P07yZjyB
18
- wg/WciIAG2tStBa9Kz3JLe4PveWMTlWDy0SruFAlUYVo8xaZjJmn7eAYFQz9mvVM
19
- 6HYp0ov8hDtYiDuhcmJ9tlVciusDcGuF9J9XoG3wH75EgRCVbxVXPTufhJNxAfmg
20
- Z8Z6pGm6gVRZ4YJ50+14vwTyyTjB3uFmJtjIn4UhDmAP3l1YUEQq0RCqEgdigzu7
21
- k1gX0A5Fs+5BKqK9kTlpZuceDH4Hqcmm4DPZ+asiXIYoRetlYaw/QJMpVpgOQ4tU
22
- PP0ZGl/QUSmrru/5uK+P4xOUL07O1dd+K6tyR8SC3Gh4Wzow8rUtyh7cXPz58bGY
23
- RtZaWPTWgz8FZs3S7NcIBdGU0Hlj8Z5QL26LatKIRsJz1yNaV8dRWZbhU9ML6RRJ
24
- 7T2avgjLyj1WWyx3Sg8afxxZ0Odp5wBc1LiqdqI+OybheGZdR1z17k/Xyj8CAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUWkD96lfk
26
- uPyGnc/MJwjZ5vZICwEwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwMTI3MTQ1NDM4WhcN
15
+ MjMwMTI3MTQ1NDM4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC5j1vd
17
+ M1N+azakESYbM6MEesfRhcOCklUmUNk5LlHcrtoySInNFd9ky7EMilTg8hRPrf5m
18
+ YgEx9+6V4iAGhRrkmyPdjGbNvgjyGqPjzouwtElA1SIh6geIaiDr3GAQQ4Amez/g
19
+ jM0bh1xybLIhBxUJ+QDB/MCyWX7c6Lf2mmbWpKJJi9DxdgZT19nD5VrjLE989UwN
20
+ XOt/jc8s9zc3RFNadSTqVAWXXUb8F9Uh0zrkNwJD0jhmpHEyg7uZ6cHrxD9zZbLf
21
+ YLJFU+QgPCSUkJX3KUcLbpwHJbmwVbaRwHz16AanbyvBa3jHBOTLoRywpvjPQuec
22
+ vr+4cUzHHad9G329gwk9F/3VY0KMtvjxwsRKJ6R+0QacNNG/uyzDirlPfx2N9qy/
23
+ +vxoLS8NDLDG7lxa+vSXqBhfBlUGUTV+N3g7zwUQOfLetAza48Mzlhbtom/7GhXW
24
+ RLyW+RLWrNZmyxzmcTzIXMJknJcdh1lErfqlK4xJoFjoOz+Ezt91yfqo7pcCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUsko1pK7R
26
+ 6H51ylxgR7A2RLZ7B6UwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAbe9+Fvsl1/YO5V70fwm9KI6qDR8TBYVSgFBBHnBb
29
- vua8Qp+neqsLq/NVF/MAgBa8klFOw0LLPjKphKLSbJd7pb34etJytsIWcF2WLCGG
30
- s9JBtt3URieOcvKVyCnjAA4aQ3YGvgaM3t94y/LaoSQZEgu8385NczGI8GCFSEV5
31
- 0pv/71aTh42DuIbFrF5Qf7XMncgMzxZuVWaWuU25Nh4bK6swzSV8Pba89c8LhVj2
32
- WUxqYCA9Lrgw2H/RWxQIXS1xQ+zXLHc+ExzJ/qEDef7wsz3wIYRoGHbhciXxLHce
33
- +0EOblxngt+AdCB4PmQlVA5LdFSRzxMv84tGrnhAGefjGPe1KzegthuN7sl0yugD
34
- tiF/wCtUE7D7XQOINuJSGP2e+9XU3GmTZQvrdEuOO3LcTSU9jfn04leXaQ4pwv2M
35
- aWH7D2AmhOpqNwWnPHzWR/yzpigAVTrvpHfRxZleQj6Z/090nIH2KR0RdioMmPFq
36
- 3+574KQzs/gR9Y5a+iMcvHRN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAR1wfQlkrJf5zvVkq5Cl2fcXYKRnhk8N9lxUZPA2Z
29
+ nXfHed/9gdLpGLQHV91Q0W2taDFDnOpRj3e2dZxdihrJ4qJJ55w9cUgGcpqTjmgE
30
+ p/5Pxgy25wdHte0URJvy4fnIB0NjVe+pTLENGLhk9O+ktKxfI5b+3ImOHLirfsiM
31
+ Nt1J9bxPr++9WzOnvOBNpt+dSZE42/mEAoVHCLGp06XSCuj3TRE93TetO5K8Rqrz
32
+ Gr2rktYjmK75ckHc2Owb7k5q4MhENXDF0w+boTHKwhZ3YZ23ORWBAAe6EWZ5CJif
33
+ ACsKYTamTZJ1XtnSuwfZJ66HujeZDeDeU4Jn0IWl0Ocpuf5cGdgZdQ/jlA02M4Ev
34
+ 1IAsJkbXAdPHh9mLKUSeH2E1qJ8tg7MFVdBZMkvG4PNXXEk5fzijsrxrXbpY4IgW
35
+ eUqhPOSrxIRLebVebvo/SHN6+ed3Q1tXowsbLGCT9QwqbaZ5MZ7zks92mIWeJvsA
36
+ JdpabIXfcOANNKd0ha4NO+Yu
37
37
  -----END CERTIFICATE-----
38
- date: 2021-05-24 00:00:00.000000000 Z
38
+ date: 2022-01-27 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: line-tree
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '0.9'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.9.2
49
+ version: 0.9.3
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,27 +56,27 @@ dependencies:
56
56
  version: '0.9'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.9.2
59
+ version: 0.9.3
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rxfhelper
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '1.1'
66
+ version: '1.2'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 1.1.3
69
+ version: 1.2.1
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '1.1'
76
+ version: '1.2'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 1.1.3
79
+ version: 1.2.1
80
80
  description:
81
81
  email: digital.robertson@gmail.com
82
82
  executables: []
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- � �� ����H\��`��z�yR�Њx'�# ����q�μ[�l|��?p�i�1�y���+�Ot)��5���ttU|X��cTb���O����m s�5�GkB(Q/��a�KM�~��A(:��[�"�T �d~��#��B��c��WŘ�e�u-al�i*�!�j�<Cʉ2���vu�=rf�A�5���� �F��d`�a�(P�1T��G�T���V Gvu`o|*$�7��Zճ5�9�՟ؿ�V4l52�9<��ߚ�m���؉�\�E��TQ���ˀ�Ċ�H�q�[ �$��U_�0���7�h� ae6}c�������6�Ɉ˪�`��R"X�Â�:ଃ���<UsUi�}�
1
+ 2��O�aK?��V�� J$�J����9��/�
2
+ ���W�O5;fl�3.��%D��P�Ӈ|V��RՁV�N螴�>�i�.^�r=�(`n �0>�TX���P�ڥ��gQ�{��P�^�)�R��1� 0�
3
+ Y�S2��P�&P��Y"s����ĶE��t\3a����3�r2��}�%Y� k�h!/�`��eţx��rǍ�eK��{�0���y�A�/����9׷U�X}?�+.��_smkh�P�`F�f��/6��jO��N��47�n���m�H$�����j���ܻ-��\ �ra|���N��l|�#������G���`Ϣ����ڼER�V���Z2EԷj��^� 6m��3��fא����,�n٣��U