ruby-macrodroid 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/ruby-macrodroid.rb +216 -43
- metadata +44 -4
- 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: dfb49da8914ecdd5cc21ca0223801fa0d432890a3df4c352ab7c3914c1bd63fe
|
4
|
+
data.tar.gz: 9f402e6d1c9dbd17f5cb7d3741bcc7c487461a5438adf3cba81a71df9feb50f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0753ef46f3cdbc1e5a8fb6539747e662a2e537089aa83e32ecf47c89334b1acb71ced47f77230e1fcae00314d8dd70e8e4d37380c27f25ebb0ccafe837121daa
|
7
|
+
data.tar.gz: e78f3fc06bcdbd1685de98d5473b2564d904a722053527505002f5a5bbfa43e51e99832d2a9a29eb5a12d3e9bab94d91429f78628625e74acbae6876b909f43a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/ruby-macrodroid.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
|
5
5
|
require 'uuid'
|
6
6
|
require 'yaml'
|
7
|
+
require 'glw'
|
8
|
+
require 'geozone'
|
7
9
|
require 'rxfhelper'
|
8
10
|
require 'chronic_cron'
|
9
11
|
|
@@ -60,7 +62,11 @@ class TriggersNlp
|
|
60
62
|
get /^failed_login?$/i do
|
61
63
|
[FailedLoginTrigger, {}]
|
62
64
|
end
|
63
|
-
|
65
|
+
|
66
|
+
get /^Geofence (Entry|Exit) \(([^\)]+)/i do |direction, name|
|
67
|
+
enter_area = direction.downcase.to_sym == :entry
|
68
|
+
[GeofenceTrigger, {name: name, enter_area: enter_area}]
|
69
|
+
end
|
64
70
|
|
65
71
|
end
|
66
72
|
|
@@ -81,14 +87,17 @@ class ActionsNlp
|
|
81
87
|
|
82
88
|
def actions(params)
|
83
89
|
|
90
|
+
# e.g. message popup: hello world!
|
84
91
|
get /^message popup: (.*)/i do |msg|
|
85
92
|
[ToastAction, {msg: msg}]
|
86
93
|
end
|
87
94
|
|
95
|
+
# e.g. Popup Message 'hello world!'
|
88
96
|
get /^Popup[ _]Message ['"]([^'"]+)/i do |msg|
|
89
97
|
[ToastAction, {msg: msg}]
|
90
98
|
end
|
91
99
|
|
100
|
+
# e.g. say current time
|
92
101
|
get /^say current[ _]time/i do
|
93
102
|
[SayTimeAction, {}]
|
94
103
|
end
|
@@ -105,6 +114,46 @@ class ActionsNlp
|
|
105
114
|
get /^take_picture/i do
|
106
115
|
[TakePictureAction, {}]
|
107
116
|
end
|
117
|
+
|
118
|
+
# e.g. Display Notification: Hi there: This is the body of the message
|
119
|
+
get /^Display Notification: ([^:]+): [^$]+$/i do |subject, text|
|
120
|
+
[NotificationAction, {subject: subject, text: text}]
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
# e.g. Enable Wifi
|
125
|
+
get /^(Enable|Disable) Wifi$/i do |raw_state|
|
126
|
+
|
127
|
+
state = raw_state.downcase.to_sym == :enable ? 0 : 1
|
128
|
+
[SetWifiAction, {state: state}]
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
# e.g. Play: Altair
|
133
|
+
get /^Play: (.*)$/i do |name|
|
134
|
+
|
135
|
+
[PlaySoundAction, {file_path: name}]
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
# e.g. Launch Settings
|
140
|
+
get /^Launch (.*)$/i do |application|
|
141
|
+
|
142
|
+
h = {
|
143
|
+
application_name: application,
|
144
|
+
package_to_launch: 'com.android.' + application.downcase
|
145
|
+
}
|
146
|
+
[LaunchActivityAction, h]
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
# e.g. HTTP GET http://someurl.com/something
|
151
|
+
get /^HTTP GET ([^$]+)$/i do |url|
|
152
|
+
|
153
|
+
[OpenWebPageAction, url_to_open: url]
|
154
|
+
|
155
|
+
end
|
156
|
+
|
108
157
|
|
109
158
|
end
|
110
159
|
|
@@ -195,9 +244,9 @@ class Macro
|
|
195
244
|
attr_reader :local_variables, :triggers, :actions, :constraints, :guid
|
196
245
|
attr_accessor :title, :description
|
197
246
|
|
198
|
-
def initialize(name=nil, debug: false)
|
247
|
+
def initialize(name=nil, geofence: geofence, debug: false)
|
199
248
|
|
200
|
-
@title, @debug = name, debug
|
249
|
+
@title, @geofence, @debug = name, geofence, debug
|
201
250
|
|
202
251
|
puts 'inside Macro#initialize' if @debug
|
203
252
|
|
@@ -405,14 +454,23 @@ class Macro
|
|
405
454
|
|
406
455
|
end
|
407
456
|
|
457
|
+
# invokes the actions
|
458
|
+
#
|
408
459
|
def run()
|
409
460
|
@actions.map(&:invoke)
|
410
461
|
end
|
462
|
+
|
463
|
+
# prepares the environment in order for triggers to test fire successfully
|
464
|
+
# Used for testing
|
465
|
+
#
|
466
|
+
def set_env()
|
467
|
+
@triggers.each(&:set_env)
|
468
|
+
end
|
411
469
|
|
412
470
|
def to_pc()
|
413
471
|
|
414
|
-
heading = '# ' + @title
|
415
|
-
heading += '# ' + @description if @description
|
472
|
+
heading = '# ' + @title
|
473
|
+
heading += '\n# ' + @description if @description
|
416
474
|
condition = @triggers.first.to_pc
|
417
475
|
actions = @actions.map(&:to_pc).join("\n")
|
418
476
|
|
@@ -426,14 +484,34 @@ EOF
|
|
426
484
|
end
|
427
485
|
|
428
486
|
def to_s()
|
487
|
+
|
429
488
|
a = [
|
430
489
|
'm: ' + @title,
|
431
490
|
@triggers.map {|x| "t: %s" % x}.join("\n"),
|
432
491
|
@actions.map {|x| "a: %s" % x}.join("\n"),
|
433
492
|
@constraints.map {|x| "a: %s" % x}.join("\n")
|
434
493
|
]
|
435
|
-
|
494
|
+
|
495
|
+
if @description and @description.length >= 1 then
|
496
|
+
a.insert(1, 'd: ' + @description)
|
497
|
+
end
|
498
|
+
|
436
499
|
a.join("\n")
|
500
|
+
|
501
|
+
end
|
502
|
+
|
503
|
+
def to_summary()
|
504
|
+
|
505
|
+
a = [
|
506
|
+
'm: ' + @title,
|
507
|
+
't: ' + @triggers.map(&:to_s).join(", "),
|
508
|
+
'a: ' + @actions.map(&:to_s).join(", "),
|
509
|
+
]
|
510
|
+
|
511
|
+
a << 'c: ' + @constraints.map(&:to_s).join(", ") if @constraints.any?
|
512
|
+
|
513
|
+
a.join("\n") + "\n"
|
514
|
+
|
437
515
|
end
|
438
516
|
|
439
517
|
private
|
@@ -446,7 +524,15 @@ EOF
|
|
446
524
|
|
447
525
|
puts ('inside object h:' + h.inspect).debug if @debug
|
448
526
|
klass = Object.const_get h[:class_type]
|
449
|
-
klass.
|
527
|
+
puts klass.inspect.highlight if $debug
|
528
|
+
|
529
|
+
if klass == GeofenceTrigger then
|
530
|
+
puts 'GeofenceTrigger found'.highlight if $debug
|
531
|
+
klass.new(@geofence, h)
|
532
|
+
else
|
533
|
+
klass.new h
|
534
|
+
end
|
535
|
+
|
450
536
|
end
|
451
537
|
|
452
538
|
end
|
@@ -459,7 +545,7 @@ class MacroDroid
|
|
459
545
|
using ColouredText
|
460
546
|
using Params
|
461
547
|
|
462
|
-
attr_reader :macros
|
548
|
+
attr_reader :macros, :geofence
|
463
549
|
|
464
550
|
def initialize(obj=nil, debug: false)
|
465
551
|
|
@@ -481,8 +567,11 @@ class MacroDroid
|
|
481
567
|
@h = build_h
|
482
568
|
|
483
569
|
else
|
570
|
+
|
571
|
+
puts 's: ' + s.inspect if @debug
|
484
572
|
|
485
|
-
xml = if s =~
|
573
|
+
xml = if s =~ /m:\s/ then
|
574
|
+
puts 'before text_to_xml' if @debug
|
486
575
|
text_to_xml(s)
|
487
576
|
elsif s =~ /^# /
|
488
577
|
pc_to_xml(s)
|
@@ -545,6 +634,29 @@ class MacroDroid
|
|
545
634
|
|
546
635
|
alias to_json export_json
|
547
636
|
|
637
|
+
|
638
|
+
def to_h()
|
639
|
+
|
640
|
+
@h.merge(macro_list: @macros.map(&:to_h)).to_camel_case
|
641
|
+
|
642
|
+
end
|
643
|
+
|
644
|
+
# returns pseudocode
|
645
|
+
#
|
646
|
+
def to_pc()
|
647
|
+
@macros.map(&:to_pc).join("\n\n")
|
648
|
+
end
|
649
|
+
|
650
|
+
def to_s()
|
651
|
+
@macros.map(&:to_s).join("\n")
|
652
|
+
end
|
653
|
+
|
654
|
+
def to_summary()
|
655
|
+
@macros.map(&:to_summary).join("\n")
|
656
|
+
end
|
657
|
+
|
658
|
+
private
|
659
|
+
|
548
660
|
def import_json(s)
|
549
661
|
|
550
662
|
h = JSON.parse(s, symbolize_names: true)
|
@@ -552,11 +664,23 @@ class MacroDroid
|
|
552
664
|
|
553
665
|
@h = h.to_snake_case
|
554
666
|
puts ('@h: ' + @h.inspect).debug if @debug
|
555
|
-
|
667
|
+
|
668
|
+
|
669
|
+
# fetch the geofence data
|
670
|
+
if @h[:geofence_data] then
|
671
|
+
|
672
|
+
@geofence = @h[:geofence_data][:geofence_map].map do |id, properties|
|
673
|
+
[id, GeofenceMap.new(properties)]
|
674
|
+
end.to_h
|
675
|
+
|
676
|
+
end
|
677
|
+
|
556
678
|
@macros = @h[:macro_list].map do |macro|
|
557
679
|
|
558
680
|
puts ('macro: ' + macro.inspect).debug if @debug
|
559
|
-
|
681
|
+
puts '@geofence: ' + @geofence.inspect if @debug
|
682
|
+
|
683
|
+
m = Macro.new(geofence: @geofence, debug: @debug )
|
560
684
|
m.import_h(macro)
|
561
685
|
m
|
562
686
|
|
@@ -612,7 +736,8 @@ class MacroDroid
|
|
612
736
|
|
613
737
|
def text_to_xml(s)
|
614
738
|
|
615
|
-
a = s.split(/.*(?=^m:)/)
|
739
|
+
a = s.split(/.*(?=^m:)/)
|
740
|
+
puts 'a : ' + a.inspect if @debug
|
616
741
|
a.map!(&:chomp)
|
617
742
|
|
618
743
|
macros = a.map do |x|
|
@@ -636,23 +761,18 @@ class MacroDroid
|
|
636
761
|
doc.root.xml pretty: true
|
637
762
|
|
638
763
|
end
|
764
|
+
|
639
765
|
|
640
|
-
|
641
|
-
|
642
|
-
@h.merge(macro_list: @macros.map(&:to_h)).to_camel_case
|
766
|
+
end
|
643
767
|
|
644
|
-
|
768
|
+
class GeofenceMap
|
645
769
|
|
646
|
-
|
647
|
-
|
648
|
-
def
|
649
|
-
@
|
650
|
-
end
|
651
|
-
|
652
|
-
def to_s()
|
653
|
-
@macros.map(&:to_s).join("\n")
|
770
|
+
attr_accessor :name, :longitude, :latitude, :radius, :id
|
771
|
+
|
772
|
+
def initialize(h)
|
773
|
+
@id, @latitude, @longitude, @name, @radius = h.values
|
654
774
|
end
|
655
|
-
|
775
|
+
|
656
776
|
end
|
657
777
|
|
658
778
|
class MacroObject
|
@@ -663,6 +783,8 @@ class MacroObject
|
|
663
783
|
|
664
784
|
def initialize(h={})
|
665
785
|
|
786
|
+
$env ||= {}
|
787
|
+
|
666
788
|
@h = {constraint_list: [], is_or_condition: false,
|
667
789
|
is_disabled: false}.merge(h)
|
668
790
|
@list = []
|
@@ -691,6 +813,10 @@ class MacroObject
|
|
691
813
|
h2.merge('m_classType' => self.class.to_s)
|
692
814
|
|
693
815
|
end
|
816
|
+
|
817
|
+
def to_s()
|
818
|
+
"#<%s %s>" % [self.class, @h.inspect]
|
819
|
+
end
|
694
820
|
|
695
821
|
protected
|
696
822
|
|
@@ -1205,29 +1331,22 @@ class TimerTrigger < Trigger
|
|
1205
1331
|
use_alarm: false
|
1206
1332
|
}
|
1207
1333
|
|
1208
|
-
super(options.merge filter(options,h))
|
1334
|
+
super(options.merge filter(options, h))
|
1209
1335
|
|
1210
1336
|
end
|
1211
1337
|
|
1212
1338
|
def match?(detail={time: $env[:time]}, model=nil)
|
1213
|
-
|
1214
|
-
a = @h[:days_of_week]
|
1215
|
-
a.unshift a.pop
|
1216
|
-
|
1217
|
-
dow = a.map.with_index {|x, i| x ? i : nil }.compact.join(',')
|
1218
|
-
|
1219
|
-
s = "%s %s * * %s" % [@h[:minute], @h[:hour], dow]
|
1220
|
-
|
1221
|
-
if $debug then
|
1222
|
-
puts 's: ' + s.inspect
|
1223
|
-
puts 'detail: ' + detail.inspect
|
1224
|
-
puts '@h: ' + @h.inspect
|
1225
|
-
end
|
1226
1339
|
|
1227
|
-
|
1340
|
+
time() == detail[:time]
|
1228
1341
|
|
1229
1342
|
end
|
1230
1343
|
|
1344
|
+
# sets the environmental conditions for this trigger to fire
|
1345
|
+
#
|
1346
|
+
def set_env()
|
1347
|
+
$env[:time] = time()
|
1348
|
+
end
|
1349
|
+
|
1231
1350
|
def to_pc()
|
1232
1351
|
"time.is? '%s'" % self.to_s.gsub(',', ' or')
|
1233
1352
|
end
|
@@ -1243,6 +1362,20 @@ class TimerTrigger < Trigger
|
|
1243
1362
|
|
1244
1363
|
"at %s on %s" % [time, days.join(', ')]
|
1245
1364
|
end
|
1365
|
+
|
1366
|
+
private
|
1367
|
+
|
1368
|
+
def time()
|
1369
|
+
|
1370
|
+
a = @h[:days_of_week].clone
|
1371
|
+
a.unshift a.pop
|
1372
|
+
|
1373
|
+
dow = a.map.with_index {|x, i| x ? i : nil }.compact.join(',')
|
1374
|
+
s = "%s %s * * %s" % [@h[:minute], @h[:hour], dow]
|
1375
|
+
recent_time = ($env && $env[:time]) ? $env[:time] : Time.now
|
1376
|
+
ChronicCron.new(s, recent_time).to_time
|
1377
|
+
|
1378
|
+
end
|
1246
1379
|
|
1247
1380
|
end
|
1248
1381
|
|
@@ -1622,8 +1755,15 @@ end
|
|
1622
1755
|
#
|
1623
1756
|
class GeofenceTrigger < Trigger
|
1624
1757
|
|
1625
|
-
def initialize(h={})
|
1758
|
+
def initialize(geofence, h={})
|
1626
1759
|
|
1760
|
+
if h[:name] then
|
1761
|
+
|
1762
|
+
found = geofence.find {|x| x.name == h[:name]}
|
1763
|
+
h[:geofence_id] = found.id
|
1764
|
+
|
1765
|
+
end
|
1766
|
+
|
1627
1767
|
options = {
|
1628
1768
|
update_rate_text: '5 Minutes',
|
1629
1769
|
geofence_id: '',
|
@@ -1632,9 +1772,18 @@ class GeofenceTrigger < Trigger
|
|
1632
1772
|
enter_area: true
|
1633
1773
|
}
|
1634
1774
|
|
1635
|
-
super(options.merge h)
|
1775
|
+
super(options.merge filter(options, h))
|
1776
|
+
@geofence = geofence
|
1636
1777
|
|
1637
1778
|
end
|
1779
|
+
|
1780
|
+
def to_s()
|
1781
|
+
|
1782
|
+
puts ' @geofence: ' + @geofence.inspect if $debug
|
1783
|
+
direction = @h[:enter_area] ? 'Entry' : 'Exit'
|
1784
|
+
"Geofence %s (%s)" % [direction, @geofence[@h[:geofence_id].to_sym].name]
|
1785
|
+
|
1786
|
+
end
|
1638
1787
|
|
1639
1788
|
end
|
1640
1789
|
|
@@ -1939,6 +2088,10 @@ class LaunchActivityAction < ApplicationAction
|
|
1939
2088
|
super(options.merge h)
|
1940
2089
|
|
1941
2090
|
end
|
2091
|
+
|
2092
|
+
def to_s()
|
2093
|
+
'Launch ' + @h[:application_name]
|
2094
|
+
end
|
1942
2095
|
|
1943
2096
|
end
|
1944
2097
|
|
@@ -1976,6 +2129,10 @@ class OpenWebPageAction < ApplicationAction
|
|
1976
2129
|
super(options.merge h)
|
1977
2130
|
|
1978
2131
|
end
|
2132
|
+
|
2133
|
+
def to_s()
|
2134
|
+
'HTTP GET'
|
2135
|
+
end
|
1979
2136
|
|
1980
2137
|
end
|
1981
2138
|
|
@@ -2060,6 +2217,11 @@ class SetWifiAction < ConnectivityAction
|
|
2060
2217
|
super(options.merge h)
|
2061
2218
|
|
2062
2219
|
end
|
2220
|
+
|
2221
|
+
def to_s()
|
2222
|
+
action = @h[:state] == 0 ? 'Enable' : 'Disable'
|
2223
|
+
action + ' Wifi'
|
2224
|
+
end
|
2063
2225
|
|
2064
2226
|
end
|
2065
2227
|
|
@@ -2720,6 +2882,10 @@ class PlaySoundAction < MediaAction
|
|
2720
2882
|
super(options.merge h)
|
2721
2883
|
|
2722
2884
|
end
|
2885
|
+
|
2886
|
+
def to_s()
|
2887
|
+
'Play: ' + @h[:file_path]
|
2888
|
+
end
|
2723
2889
|
|
2724
2890
|
end
|
2725
2891
|
|
@@ -2924,6 +3090,9 @@ end
|
|
2924
3090
|
class NotificationAction < NotificationsAction
|
2925
3091
|
|
2926
3092
|
def initialize(h={})
|
3093
|
+
|
3094
|
+
h[:notification_subject] = h[:subject] if h[:subject]
|
3095
|
+
h[:notification_text] = h[:text] if h[:text]
|
2927
3096
|
|
2928
3097
|
options = {
|
2929
3098
|
ringtone_name: 'Default',
|
@@ -2939,9 +3108,13 @@ class NotificationAction < NotificationsAction
|
|
2939
3108
|
run_macro_when_pressed: false
|
2940
3109
|
}
|
2941
3110
|
|
2942
|
-
super(options.merge h)
|
3111
|
+
super(options.merge filter(options, h))
|
2943
3112
|
|
2944
3113
|
end
|
3114
|
+
|
3115
|
+
def to_s()
|
3116
|
+
'Display Notification: ' + "%s: %s" % [@h[:notification_subject], @h[:notification_text]]
|
3117
|
+
end
|
2945
3118
|
|
2946
3119
|
end
|
2947
3120
|
|
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.
|
4
|
+
version: 0.6.0
|
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-09-
|
38
|
+
date: 2020-09-04 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: uuid
|
@@ -57,6 +57,46 @@ dependencies:
|
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 2.3.9
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: glw
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.2'
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.2.2
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.2'
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.2.2
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: geozone
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 0.1.0
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.1.0
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.1'
|
60
100
|
- !ruby/object:Gem::Dependency
|
61
101
|
name: rxfhelper
|
62
102
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +106,7 @@ dependencies:
|
|
66
106
|
version: '1.0'
|
67
107
|
- - ">="
|
68
108
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.
|
109
|
+
version: 1.0.5
|
70
110
|
type: :runtime
|
71
111
|
prerelease: false
|
72
112
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -76,7 +116,7 @@ dependencies:
|
|
76
116
|
version: '1.0'
|
77
117
|
- - ">="
|
78
118
|
- !ruby/object:Gem::Version
|
79
|
-
version: 1.0.
|
119
|
+
version: 1.0.5
|
80
120
|
- !ruby/object:Gem::Dependency
|
81
121
|
name: chronic_cron
|
82
122
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|