ruby-macrodroid 0.9.9 → 0.9.10
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 +3 -2
- data.tar.gz.sig +0 -0
- data/lib/ruby-macrodroid.rb +47 -33
- data/lib/ruby-macrodroid/actions.rb +77 -50
- data/lib/ruby-macrodroid/base.rb +6 -4
- data/lib/ruby-macrodroid/macro.rb +39 -22
- metadata +2 -2
- 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: cfb8dbf1cb2f5796722de69e98afcb6d7058ba6faf743740a989589fd3d72fc5
|
4
|
+
data.tar.gz: 4b6ff72308bae85939e3eadf7776a3b56d2b8084103633dbb7754f496fb7c037
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 722fc170955c3ee925821859e87c3380b5769db34081c8318ee043218e2bb36ae43e104d6c701238ef887405c30c8d05ab3cba32a040e6430392bc60dd6dbce1
|
7
|
+
data.tar.gz: 2343b75872d051e055d3dd6955dcf03c7c236ef5f77e1b43b5618515b8f0170728878336fe8a2aed5eac51ddce9361c751f3d9170418ee289d2e5522b18ff472
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
�
|
2
|
-
|
1
|
+
��-��TCc������(�M
|
2
|
+
n+F��
|
3
|
+
vkG EE ��A��m��<��dB$%����7j}i]�<ڴ��s��&|\n���e����W�"�T6A���ҎC� �'H�oq}���Pԅ˭�S�)�D�J��[�ٳFa#��PE�hby^�1b����wO"��Qʢ�g�ha����������`*��6/��G�}�Y�Z�u���wu��+�g</4�>$�D����.��XU���`q-
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/ruby-macrodroid.rb
CHANGED
@@ -122,6 +122,7 @@ class MacroDroid
|
|
122
122
|
@picture_path = picture_path
|
123
123
|
|
124
124
|
@geofences = {}
|
125
|
+
@macros = []
|
125
126
|
|
126
127
|
if obj then
|
127
128
|
|
@@ -145,34 +146,7 @@ class MacroDroid
|
|
145
146
|
|
146
147
|
if s =~ /m(?:acro)?:\s/ then
|
147
148
|
|
148
|
-
|
149
|
-
|
150
|
-
s2 = s.gsub(/^g:/,'geofence:').gsub(/^m:/,'macro:')\
|
151
|
-
.gsub(/^d:/,'description:').gsub(/^v:/,'variable:')\
|
152
|
-
.gsub(/^t:/,'trigger:').gsub(/^a:/,'action:')\
|
153
|
-
.gsub(/^c:/,'constraint:').gsub(/^#.*/,'')
|
154
|
-
|
155
|
-
a = s2.split(/(?=^macro:)/)
|
156
|
-
|
157
|
-
raw_geofences = a.shift if a.first =~ /^geofence/
|
158
|
-
raw_macros = a.join
|
159
|
-
#raw_macros, raw_geofences .reverse
|
160
|
-
|
161
|
-
puts 'raw_macros: ' + raw_macros.inspect if @debug
|
162
|
-
|
163
|
-
if raw_geofences then
|
164
|
-
|
165
|
-
geoxml = RowX.new(raw_geofences).to_xml
|
166
|
-
|
167
|
-
geodoc = Rexle.new(geoxml)
|
168
|
-
geofences = geodoc.root.xpath('item/geofence')
|
169
|
-
@geofences = fetch_geofences(geofences) if geofences.any?
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
xml = RowX.new(raw_macros, allow_lonely_keyfield: true).to_xml
|
174
|
-
puts 'xml: ' + xml if @debug
|
175
|
-
import_rowxml(xml)
|
149
|
+
import_txt(s)
|
176
150
|
|
177
151
|
elsif s =~ /^# /
|
178
152
|
xml = pc_to_xml(s)
|
@@ -229,6 +203,10 @@ class MacroDroid
|
|
229
203
|
def export(filepath)
|
230
204
|
FileX.write filepath, to_json
|
231
205
|
end
|
206
|
+
|
207
|
+
def import(s)
|
208
|
+
import_txt(s)
|
209
|
+
end
|
232
210
|
|
233
211
|
def to_json()
|
234
212
|
|
@@ -337,7 +315,7 @@ class MacroDroid
|
|
337
315
|
|
338
316
|
m = Macro.new(geofences: @geofences.map(&:last), deviceid: @deviceid,
|
339
317
|
remote_url: @remote_url, picture_path: @picture_path,
|
340
|
-
debug: @debug )
|
318
|
+
parent: self, debug: @debug )
|
341
319
|
m.import_h(macro)
|
342
320
|
m
|
343
321
|
|
@@ -356,15 +334,50 @@ class MacroDroid
|
|
356
334
|
puts 'import_rowxml: @geofences: ' + @geofences.inspect if @debug
|
357
335
|
geofences = @geofences
|
358
336
|
|
359
|
-
|
337
|
+
a = doc.root.xpath('item').map do |node|
|
360
338
|
puts ('geofences: ' + geofences.inspect).highlight if @debug
|
361
339
|
Macro.new(geofences: geofences.map(&:last), deviceid: @deviceid,
|
362
340
|
remote_url: @remote_url, picture_path: @picture_path,
|
363
|
-
debug: @debug).import_xml(node)
|
341
|
+
parent: self, debug: @debug).import_xml(node)
|
364
342
|
|
365
343
|
end
|
344
|
+
|
345
|
+
@macros.concat a
|
366
346
|
|
367
|
-
end
|
347
|
+
end
|
348
|
+
|
349
|
+
def import_txt(s)
|
350
|
+
|
351
|
+
puts 'before RowX.new' if @debug
|
352
|
+
|
353
|
+
s2 = s.gsub(/^g:/,'geofence:').gsub(/^m:/,'macro:')\
|
354
|
+
.gsub(/^d:/,'description:').gsub(/^v:/,'variable:')\
|
355
|
+
.gsub(/^t:/,'trigger:').gsub(/^a:/,'action:')\
|
356
|
+
.gsub(/^c:/,'constraint:').gsub(/^#.*/,'')
|
357
|
+
|
358
|
+
a = s2.split(/(?=^macro:)/)
|
359
|
+
|
360
|
+
raw_geofences = a.shift if a.first =~ /^geofence/
|
361
|
+
raw_macros = a.join
|
362
|
+
#raw_macros, raw_geofences .reverse
|
363
|
+
|
364
|
+
puts 'raw_macros: ' + raw_macros.inspect if @debug
|
365
|
+
|
366
|
+
if raw_geofences then
|
367
|
+
|
368
|
+
geoxml = RowX.new(raw_geofences).to_xml
|
369
|
+
|
370
|
+
geodoc = Rexle.new(geoxml)
|
371
|
+
geofences = geodoc.root.xpath('item/geofence')
|
372
|
+
@geofences = fetch_geofences(geofences) if geofences.any?
|
373
|
+
|
374
|
+
end
|
375
|
+
|
376
|
+
xml = RowX.new(raw_macros, allow_lonely_keyfield: true).to_xml
|
377
|
+
puts 'xml: ' + xml if @debug
|
378
|
+
import_rowxml(xml)
|
379
|
+
|
380
|
+
end
|
368
381
|
|
369
382
|
def import_xml(raws)
|
370
383
|
|
@@ -384,7 +397,8 @@ class MacroDroid
|
|
384
397
|
@macros = doc.root.xpath('macro').map do |node|
|
385
398
|
puts 'node: ' + node.inspect if @debug
|
386
399
|
Macro.new(geofences: @geofences.map(&:last), deviceid: @deviceid,
|
387
|
-
picture_path: @picture_path, debug: @debug)
|
400
|
+
picture_path: @picture_path, parent: self, debug: @debug)\
|
401
|
+
.import_xml(node)
|
388
402
|
|
389
403
|
end
|
390
404
|
end
|
@@ -150,7 +150,7 @@ class OpenWebPageAction < ApplicationAction
|
|
150
150
|
|
151
151
|
def initialize(obj={}, macro=nil)
|
152
152
|
|
153
|
-
$debug =
|
153
|
+
$debug = false
|
154
154
|
puts ('obj: ' + obj.inspect).debug if $debug
|
155
155
|
|
156
156
|
h = if obj.is_a? Hash then
|
@@ -190,9 +190,9 @@ class OpenWebPageAction < ApplicationAction
|
|
190
190
|
#h[:url_to_open] = h[:url] if h[:url] and h[:url].length > 1
|
191
191
|
|
192
192
|
options = {
|
193
|
-
variable_to_save_response: {:string_value=>"", :name=>"coords",
|
194
|
-
decimal_value: 0.0, isLocal: true, m_boolean_value: false,
|
195
|
-
excludeFromLog: false, int_value: 0, type: 2},
|
193
|
+
#variable_to_save_response: {:string_value=>"", :name=>"coords",
|
194
|
+
#decimal_value: 0.0, isLocal: true, m_boolean_value: false,
|
195
|
+
#excludeFromLog: false, int_value: 0, type: 2},
|
196
196
|
url_to_open: '',
|
197
197
|
http_get: true,
|
198
198
|
disable_url_encode: false,
|
@@ -298,7 +298,7 @@ class TakePictureAction < CameraAction
|
|
298
298
|
|
299
299
|
e, macro = obj
|
300
300
|
|
301
|
-
puts 'e: ' + e.xml.inspect
|
301
|
+
#puts 'e: ' + e.xml.inspect
|
302
302
|
|
303
303
|
a = e.xpath('item/*')
|
304
304
|
|
@@ -312,7 +312,7 @@ class TakePictureAction < CameraAction
|
|
312
312
|
|
313
313
|
desc = h2[:description]
|
314
314
|
h2.delete :description
|
315
|
-
puts 'desc: ' + desc.inspect
|
315
|
+
#puts 'desc: ' + desc.inspect
|
316
316
|
|
317
317
|
if desc.length > 1 then
|
318
318
|
|
@@ -469,10 +469,14 @@ end
|
|
469
469
|
|
470
470
|
# Conditions/Loops
|
471
471
|
#
|
472
|
-
class IfConditionAction < Action
|
473
472
|
|
473
|
+
class IfAction < Action
|
474
|
+
using ColouredText
|
475
|
+
|
474
476
|
def initialize(obj=nil)
|
475
|
-
|
477
|
+
|
478
|
+
$debug = false
|
479
|
+
|
476
480
|
options = {
|
477
481
|
a: true,
|
478
482
|
constraint_list: []
|
@@ -492,10 +496,10 @@ class IfConditionAction < Action
|
|
492
496
|
super()
|
493
497
|
puts 'e.xml: ' + e.xml if $debug
|
494
498
|
puts 'e.text: ' + e.text.to_s.strip if $debug
|
495
|
-
raw_txt = e.text.to_s.strip[
|
499
|
+
raw_txt = e.text.to_s.strip[/^#{@label}[^$]+/i] || e.text('item/description')
|
496
500
|
puts 'raw_txt: ' + raw_txt.inspect if $debug
|
497
501
|
|
498
|
-
clause = raw_txt[
|
502
|
+
clause = raw_txt[/^#{@label}(.*)/i,1]
|
499
503
|
puts 'clause: ' + clause.inspect if $debug
|
500
504
|
conditions = clause.split(/\s+\b(?:AND|OR)\b\s+/i)
|
501
505
|
puts 'conditions: ' + conditions.inspect if $debug
|
@@ -514,6 +518,7 @@ class IfConditionAction < Action
|
|
514
518
|
|
515
519
|
# find any nested actions
|
516
520
|
item = e.element('item')
|
521
|
+
#puts ('item: ' + item.xml.inspect).debug if $debug
|
517
522
|
|
518
523
|
if item then
|
519
524
|
|
@@ -534,19 +539,13 @@ class IfConditionAction < Action
|
|
534
539
|
|
535
540
|
end
|
536
541
|
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
@label = 'If '
|
542
|
-
|
543
542
|
end
|
544
|
-
|
543
|
+
|
545
544
|
def to_s(colour: false, indent: 0)
|
546
545
|
|
547
546
|
h = @h.clone
|
548
547
|
#h.delete :macro
|
549
|
-
@s =
|
548
|
+
@s = @label
|
550
549
|
operator = @h[:is_or_condition] ? 'OR' : 'AND'
|
551
550
|
constraints = @constraints.map \
|
552
551
|
{|x| ' ' * indent + x.to_summary(colour: colour)}.join(" %s " % operator)
|
@@ -557,7 +556,18 @@ class IfConditionAction < Action
|
|
557
556
|
out << s + constraints
|
558
557
|
out.join("\n")
|
559
558
|
|
560
|
-
end
|
559
|
+
end
|
560
|
+
|
561
|
+
end
|
562
|
+
|
563
|
+
class IfConditionAction < IfAction
|
564
|
+
|
565
|
+
def initialize(obj=nil)
|
566
|
+
|
567
|
+
@label = 'If '
|
568
|
+
super(obj)
|
569
|
+
|
570
|
+
end
|
561
571
|
|
562
572
|
end
|
563
573
|
|
@@ -605,41 +615,15 @@ class ElseAction < Action
|
|
605
615
|
|
606
616
|
end
|
607
617
|
|
608
|
-
class ElseIfConditionAction <
|
618
|
+
class ElseIfConditionAction < IfAction
|
609
619
|
|
610
|
-
def initialize(
|
611
|
-
|
612
|
-
options = {
|
613
|
-
constraint_list: ''
|
614
|
-
}
|
615
|
-
|
616
|
-
super(options.merge h)
|
617
|
-
@label = 'Else If '
|
620
|
+
def initialize(obj=nil)
|
618
621
|
|
619
|
-
|
620
|
-
|
621
|
-
def to_s(colour: false, indent: 0)
|
622
|
-
|
623
|
-
h = @h.clone
|
624
|
-
h.delete :macro
|
625
|
-
@s = 'Else If '
|
626
|
-
operator = @h[:is_or_condition] ? 'OR' : 'AND'
|
627
|
-
constraints = @constraints.map \
|
628
|
-
{|x| ' ' * indent + x.to_summary(colour: colour)}.join(" %s " % operator)
|
629
|
-
|
630
|
-
out = []
|
631
|
-
out << "; %s" % @h[:comment] if @h[:comment]
|
632
|
-
s = @s.lines.map {|x| (' ' * indent) + x}.join
|
633
|
-
out << s + constraints
|
634
|
-
out.join("\n")
|
622
|
+
@label = 'Else If '
|
623
|
+
super(obj)
|
635
624
|
|
636
|
-
end
|
637
|
-
|
638
|
-
def to_summary(colour: false)
|
639
|
-
'foo'
|
640
625
|
end
|
641
|
-
|
642
|
-
|
626
|
+
|
643
627
|
end
|
644
628
|
|
645
629
|
|
@@ -1722,6 +1706,49 @@ class ConfirmNextAction < Action
|
|
1722
1706
|
|
1723
1707
|
end
|
1724
1708
|
|
1709
|
+
class DisableMacroAction < Action
|
1710
|
+
|
1711
|
+
def initialize(obj=nil)
|
1712
|
+
|
1713
|
+
h = if obj.is_a? Hash then
|
1714
|
+
|
1715
|
+
obj
|
1716
|
+
|
1717
|
+
elsif obj.is_a? Array
|
1718
|
+
|
1719
|
+
e, macro = obj
|
1720
|
+
|
1721
|
+
# find the macro guid for the given name
|
1722
|
+
name = e.text('item/description').to_s
|
1723
|
+
found = macro.parent.macros.find {|macro| macro.title =~ /#{name}/ }
|
1724
|
+
|
1725
|
+
if found then
|
1726
|
+
{macro_name: found.title, GUID: found.guid}
|
1727
|
+
else
|
1728
|
+
{macro_name: name}
|
1729
|
+
end
|
1730
|
+
|
1731
|
+
end
|
1732
|
+
|
1733
|
+
# state: 0 = enable, 1 = disable, 2 = toggle
|
1734
|
+
|
1735
|
+
options = {macro_name: "Change brightness", state: 1, GUID: nil}
|
1736
|
+
super(options.merge h)
|
1737
|
+
|
1738
|
+
end
|
1739
|
+
|
1740
|
+
def to_s(colour: false, indent: 0)
|
1741
|
+
|
1742
|
+
state = %w(Enable Disable Toggle)[@h[:state]]
|
1743
|
+
@s = state + ' macro'# + @h.inspect
|
1744
|
+
@s += "\n" + @h[:macro_name]
|
1745
|
+
super()
|
1746
|
+
|
1747
|
+
end
|
1748
|
+
|
1749
|
+
alias to_summary to_s
|
1750
|
+
end
|
1751
|
+
|
1725
1752
|
# MacroDroid Specific
|
1726
1753
|
#
|
1727
1754
|
class ExportMacrosAction < Action
|
data/lib/ruby-macrodroid/base.rb
CHANGED
@@ -34,7 +34,9 @@ module ObjectX
|
|
34
34
|
r = ap.find_action action
|
35
35
|
puts 'r: ' + r.inspect if debug
|
36
36
|
|
37
|
-
|
37
|
+
nested = description.element('item/description')
|
38
|
+
|
39
|
+
if r[1].any? and not nested then
|
38
40
|
|
39
41
|
macro.add r[0].new(r[1])
|
40
42
|
|
@@ -194,11 +196,11 @@ class MacroObject
|
|
194
196
|
private
|
195
197
|
|
196
198
|
def hashify(h)
|
197
|
-
puts 'h: ' + h.inspect
|
199
|
+
#puts 'h: ' + h.inspect
|
198
200
|
h2 = h.inject({}) do |r,x|
|
199
|
-
puts 'x: ' + x.inspect #if $debug
|
201
|
+
#puts 'x: ' + x.inspect #if $debug
|
200
202
|
key, value = x
|
201
|
-
puts 'key: ' + key.inspect #if $debug
|
203
|
+
#puts 'key: ' + key.inspect #if $debug
|
202
204
|
new_key = key.to_s.gsub(/\w_\w/){|x| x[0] + x[-1].upcase}
|
203
205
|
new_key = new_key.prepend 'm_' unless @list.include? new_key
|
204
206
|
new_key = 'm_SIGUID' if new_key == 'm_siguid'
|
@@ -181,7 +181,29 @@ class ActionsNlp
|
|
181
181
|
|
182
182
|
end
|
183
183
|
|
184
|
-
def actions(params)
|
184
|
+
def actions(params)
|
185
|
+
|
186
|
+
# -- Conditions/Loops ---------------------------------------------
|
187
|
+
#
|
188
|
+
|
189
|
+
get /else if (.*)/i do
|
190
|
+
[ElseIfConditionAction, {}]
|
191
|
+
end
|
192
|
+
|
193
|
+
#e.g a: if Airplane mode enabled
|
194
|
+
#
|
195
|
+
get /if (.*)/i do
|
196
|
+
[IfConditionAction, {}]
|
197
|
+
end
|
198
|
+
|
199
|
+
get /else/i do
|
200
|
+
[ElseAction, {}]
|
201
|
+
end
|
202
|
+
|
203
|
+
get /End If/i do
|
204
|
+
[EndIfAction, {}]
|
205
|
+
end
|
206
|
+
|
185
207
|
|
186
208
|
# -- Connectivity ------------------------------------------------------
|
187
209
|
|
@@ -195,7 +217,7 @@ class ActionsNlp
|
|
195
217
|
end
|
196
218
|
|
197
219
|
# e.g. message popup: hello world!
|
198
|
-
get /^message popup: (.*)/i do |msg|
|
220
|
+
get /^(?:message popup|popup message): (.*)/i do |msg|
|
199
221
|
[ToastAction, {msg: msg}]
|
200
222
|
end
|
201
223
|
|
@@ -357,22 +379,15 @@ class ActionsNlp
|
|
357
379
|
[KeepAwakeAction, {enabled: false, screen_option: 0}]
|
358
380
|
end
|
359
381
|
|
360
|
-
#e.g a: if Airplane mode enabled
|
361
|
-
#
|
362
|
-
get /if (.*)/i do
|
363
|
-
[IfConditionAction, {}]
|
364
|
-
end
|
365
|
-
|
366
|
-
get /else/i do
|
367
|
-
[ElseAction, {}]
|
368
|
-
end
|
369
|
-
|
370
|
-
get /End If/i do
|
371
|
-
[EndIfAction, {}]
|
372
|
-
end
|
373
382
|
|
374
383
|
# -- MacroDroid Specific ------------------------------------------------
|
375
384
|
#
|
385
|
+
|
386
|
+
get /^((?:En|Dis)able) Macro$/i do |rawstate|
|
387
|
+
state = %w(enable disable toggle).index(rawstate.downcase)
|
388
|
+
[DisableMacroAction, {state: state}]
|
389
|
+
end
|
390
|
+
|
376
391
|
get /^Set Variable$/i do
|
377
392
|
[SetVariableAction, {}]
|
378
393
|
end
|
@@ -421,7 +436,7 @@ class ConstraintsNlp
|
|
421
436
|
|
422
437
|
# -- MacroDroid specific -----------------------------------------------------------------------
|
423
438
|
|
424
|
-
get /^(\w+) (=) (
|
439
|
+
get /^(\w+) (=) (.*)/i do |loperand, operator, roperand|
|
425
440
|
|
426
441
|
h = {
|
427
442
|
loperand: loperand,
|
@@ -475,19 +490,20 @@ class Macro
|
|
475
490
|
include ObjectX
|
476
491
|
|
477
492
|
attr_reader :local_variables, :triggers, :actions, :constraints,
|
478
|
-
:guid, :deviceid
|
493
|
+
:guid, :deviceid, :parent
|
479
494
|
attr_accessor :title, :description, :remote_url, :picture_path
|
480
495
|
|
481
496
|
def initialize(name=nil, geofences: nil, deviceid: nil, remote_url: nil, \
|
482
|
-
picture_path: nil, debug: false)
|
497
|
+
picture_path: nil, parent: nil, debug: false)
|
483
498
|
|
484
499
|
@title, @geofences, @deviceid, @debug = name, geofences, deviceid, debug
|
485
|
-
@remote_url, @picture_path = remote_url, picture_path
|
500
|
+
@remote_url, @picture_path, @parent = remote_url, picture_path, parent
|
486
501
|
|
487
502
|
puts 'inside Macro#initialize' if @debug
|
488
503
|
|
489
504
|
@local_variables, @triggers, @actions, @constraints = {}, [], [], []
|
490
505
|
@h = {}
|
506
|
+
@guid = generate_guid()
|
491
507
|
|
492
508
|
end
|
493
509
|
|
@@ -529,7 +545,7 @@ class Macro
|
|
529
545
|
m_description: '',
|
530
546
|
m_name: title(),
|
531
547
|
m_excludeLog: false,
|
532
|
-
m_GUID: guid
|
548
|
+
m_GUID: @guid,
|
533
549
|
m_isOrCondition: false,
|
534
550
|
m_enabled: true,
|
535
551
|
m_descriptionOpen: false,
|
@@ -548,6 +564,7 @@ class Macro
|
|
548
564
|
puts 'h:' + h.inspect
|
549
565
|
end
|
550
566
|
|
567
|
+
@guid = h[:guid]
|
551
568
|
@category = h[:category]
|
552
569
|
@title = h[:name]
|
553
570
|
@description = h[:description]
|
@@ -1036,8 +1053,8 @@ EOF
|
|
1036
1053
|
|
1037
1054
|
private
|
1038
1055
|
|
1039
|
-
def
|
1040
|
-
'-' + rand(1..9).to_s + 18.times.map { rand 9 }.join
|
1056
|
+
def generate_guid()
|
1057
|
+
('-' + rand(1..9).to_s + 18.times.map { rand 9 }.join).to_i
|
1041
1058
|
end
|
1042
1059
|
|
1043
1060
|
def object(h={})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-macrodroid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
NZ2kdBIUDnAM24e0/wXdVxg4HnsZbdymxyzMQ4P5pKYcpI6oisBxI37p/Xy+wAg3
|
36
36
|
SBHno3GEuuD8ZWj24IMJpfbp
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-10-
|
38
|
+
date: 2020-10-18 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: glw
|
metadata.gz.sig
CHANGED
Binary file
|