ruby-macrodroid 0.8.0 → 0.8.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3e810bea9dc68b5b0bb2623b46a08544ed42db8112f0b2be703bbac6dce6178
4
- data.tar.gz: d41bbc4bae9e9c5e7f65684db06c54bb0d058aee56b69f8c58a7dff99724725d
3
+ metadata.gz: a58f2837ede78c4bdb29b2673c38cf07b850dd8431aa47bf59b9ba08512d1970
4
+ data.tar.gz: 5300eb53b78a33b8d52682ac21fc901a8fab86f273c581a4fdf5e4fbb033c404
5
5
  SHA512:
6
- metadata.gz: 5de76ced91b66dae5ce7fba414c4ea09dff2ffbf9c3cd04009c6a270570825605035413fc5b6d3cc115f79816b98d1484bfcb85688f5853e44af5d69fc872539
7
- data.tar.gz: 9fe273f88915114ec327913317000548e2fe12a3cac2548a237e13dc7fb8115eb135d329bf1375278414e4b21522faf2de066a5b924ed6152fe63b6a7c7a1103
6
+ metadata.gz: af593ce8663d6a1842fc3f49dedee195119c82dab6f2f2bba8f9f96cce1ef6e8065efa281777598502261e168ee452cccb09583460b15f7e425ea39a65e8f6b8
7
+ data.tar.gz: d0f84f3016d838e0fc326695dec1631fbfa27f07951045a3518cc7ad36b3f899e03a060459f72864568ea50e74c68009d9baf6411e31de36b8cea56f3be7bc93
@@ -1,2 +1,2 @@
1
- t_�
2
- K��/�%f8���Ɛ03R�y�}=n�K��+`�#J�Rs'��<���#S�]k� �W$Rگ�WI�q{*�=w�#>�$�0��eل�tYe`����6��O�։/.�X��-0(Y��Yç�\\��6�&�0�����@�B������6�$k�)����}���@h���2���INV#3��ۋٶ��,f\K�4#Q`��7X���g|s;�D���2$����ɭ[K;��1f�X��DB߇jPP��J�GA���#K�3�Ӻօ&��JSzL�IZ��� kK&��sh+��(��9��Hdi"��(�"��M�6g�r��MC�1r_[&J�K�����FN�|�L�hطG>_��߉9�cJ�� �
1
+ ����M�#�6��G�B|�K�Ovn^?ZM+����E�'�[�.T�A�A0@:tZߣ�(���<�=�<t-y��)L M�/Ф��ųļzJ���_F��c��U���� O��-�O�x���jdK=��\�d�̽W�)7�%h�e�B������+,TD��(,�|�poY�O��*F�:kH\�>�re2�}��B*��m��asRbH!�烆ZYlT�J��؈#u�H��"
2
+ d1��x�ƪ�e�^���?���5)�
data.tar.gz.sig CHANGED
Binary file
@@ -40,10 +40,7 @@ require 'geocoder'
40
40
  require 'subunit'
41
41
  require 'rxfhelper'
42
42
  require 'chronic_cron'
43
- require 'ruby-macrodroid/base'
44
- require 'ruby-macrodroid/triggers'
45
- require 'ruby-macrodroid/actions'
46
- require 'ruby-macrodroid/constraints'
43
+
47
44
 
48
45
  MODEL =<<EOF
49
46
  device
@@ -157,6 +154,16 @@ class ActionsNlp
157
154
  [ToastAction, {msg: msg}]
158
155
  end
159
156
 
157
+ # e.g. Popup Message\n hello world!
158
+ get /^Popup Message\n\s+(.*)/im do |msg|
159
+ [ToastAction, {msg: msg}]
160
+ end
161
+
162
+ # e.g. Popup Message
163
+ get /^Popup Message$/i do
164
+ [ToastAction, {}]
165
+ end
166
+
160
167
  # e.g. say current time
161
168
  get /^say current[ _]time/i do
162
169
  [SayTimeAction, {}]
@@ -246,16 +253,17 @@ class ActionsNlp
246
253
  [KeepAwakeAction, {enabled: false, screen_option: 0}]
247
254
  end
248
255
 
256
+ #a: Disable Keep Awake
257
+ #
258
+ get /if (.*)/i do
259
+ [IfConditionAction, {}]
260
+ end
249
261
 
250
262
  end
251
263
 
252
264
  alias find_action run_route
253
265
 
254
- def to_s(colour: false)
255
- 'ActionsNlp ' + @h.inspect
256
- end
257
266
 
258
- alias to_summary to_s
259
267
  end
260
268
 
261
269
  class ConstraintsNlp
@@ -282,6 +290,60 @@ class ConstraintsNlp
282
290
  end
283
291
 
284
292
 
293
+ module Params
294
+
295
+ refine Hash do
296
+
297
+ # turns keys from camelCase into snake_case
298
+
299
+ def to_snake_case(h=self)
300
+
301
+ h.inject({}) do |r, x|
302
+
303
+ key, value = x
304
+ #puts 'value: ' + value.inspect
305
+
306
+ val = if value.is_a?(Hash) then
307
+ to_snake_case(value)
308
+ elsif value.is_a?(Array) and value.first.is_a? Hash
309
+ value.map {|row| to_snake_case(row)}
310
+ else
311
+ value
312
+ end
313
+
314
+ r.merge key.to_s.sub(/^m_/,'').gsub(/[A-Z][a-z]/){|x| '_' +
315
+ x.downcase}.gsub(/[a-z][A-Z]/){|x| x[0] + '_' + x[1].downcase}\
316
+ .downcase.to_sym => val
317
+
318
+ end
319
+ end
320
+
321
+ # turns keys from snake_case to CamelCase
322
+ def to_camel_case(h=self)
323
+
324
+ h.inject({}) do |r,x|
325
+
326
+ key, value = x
327
+
328
+ val = if value.is_a?(Hash) then
329
+ to_camel_case(value)
330
+ elsif value.is_a?(Array) and value.first.is_a? Hash
331
+ value.map {|row| to_camel_case(row)}
332
+ else
333
+ value
334
+ end
335
+
336
+ r.merge({key.to_s.gsub(/(?<!^m)_[a-z]/){|x| x[-1].upcase} => val})
337
+ end
338
+
339
+ end
340
+
341
+
342
+ end
343
+
344
+ end
345
+
346
+
285
347
 
286
348
  class Macro
287
349
  using ColouredText
@@ -356,7 +418,25 @@ class Macro
356
418
  @description = h[:description]
357
419
 
358
420
  # fetch the local variables
359
- @local_variables = h['local_variables']
421
+ if h[:local_variables].any? and h[:local_variables].first.any? then
422
+
423
+ @local_variables = h[:local_variables].map do |var|
424
+
425
+ val = case var[:type]
426
+ when 0 # boolean
427
+ var[:boolean_value]
428
+ when 1 # integer
429
+ var[:int_value]
430
+ when 2 # string
431
+ var[:string_value]
432
+ when 3 # decimal
433
+ var[:decimal_Value]
434
+ end
435
+
436
+ [var[:name], val]
437
+
438
+ end.to_h
439
+ end
360
440
 
361
441
  # fetch the triggers
362
442
  @triggers = h[:trigger_list].map do |trigger|
@@ -463,20 +543,42 @@ class Macro
463
543
  @actions = node.xpath('action').map do |e|
464
544
 
465
545
  puts 'action e: ' + e.xml.inspect if @debug
466
- r = ap.find_action e.text
546
+ puts 'e.text ' + e.text if @debug
547
+
548
+ inner_lines = e.xpath('item/description/text()')
549
+
550
+ action = if e.text.to_s.strip.empty? then
551
+ inner_lines.shift
552
+ else
553
+ e.text.strip
554
+ end
555
+
556
+ r = ap.find_action action
467
557
  puts 'found action ' + r.inspect if @debug
468
558
 
469
559
  if r then
470
560
 
471
- a = e.xpath('item/*')
561
+ loose = inner_lines.shift
472
562
 
473
- h = if a.any? then
474
- a.map {|node| [node.name.to_sym, node.text.to_s]}.to_h
563
+ raw_attributes = if loose then
564
+
565
+ puts 'do something ' + loose.to_s if @debug
566
+ loose.to_s
567
+
475
568
  else
476
- {}
569
+
570
+ a = e.xpath('item/*')
571
+
572
+ h = if a.any? then
573
+ a.map {|node| [node.name.to_sym, node.text.to_s]}.to_h
574
+ else
575
+ {}
576
+ end
577
+
578
+ r[1].merge(h)
579
+
477
580
  end
478
-
479
- r[0].new(r[1].merge(h))
581
+ r[0].new(raw_attributes)
480
582
  end
481
583
 
482
584
  end
@@ -584,7 +686,7 @@ EOF
584
686
 
585
687
  end
586
688
 
587
- if s =~ /^If/i then
689
+ if s =~ /^(?:If|WHILE \/ DO)/i then
588
690
 
589
691
  if indent < 1 then
590
692
 
@@ -607,22 +709,39 @@ EOF
607
709
  end.join("\n")
608
710
 
609
711
  a = [
610
- (colour ? "m".bg_cyan.gray.bold : 'm') + ': ' + @title,
611
- @triggers.map {|x| (colour ? "t".bg_red.gray.bold : 't') \
612
- + ": %s" % x}.join("\n"),
613
- actions
712
+ (colour ? "m".bg_cyan.gray.bold : 'm') + ': ' + @title
614
713
  ]
615
714
 
715
+ if @description and @description.length >= 1 then
716
+ a << (colour ? "d".bg_gray.gray.bold : 'd') + ': ' \
717
+ + @description.gsub(/\n/,"\n ")
718
+ end
719
+
720
+ if @local_variables.length >= 1 then
721
+
722
+ vars = @local_variables.map do |k,v|
723
+ label = colour ? 'v'.bg_magenta : 'v'
724
+ label += ': '
725
+ label + "%s: %s" % [k,v]
726
+ end
727
+
728
+ a << vars.join("\n")
729
+ end
730
+
731
+ a << @triggers.map {|x| (colour ? "t".bg_red.gray.bold : 't') \
732
+ + ": %s" % x}.join("\n")
733
+ a << actions
734
+
735
+
616
736
  if @constraints.any? then
617
737
  a << @constraints.map do |x|
618
738
  (colour ? "c".bg_green.gray.bold : 'c') + ": %s" % x
619
739
  end.join("\n")
620
740
  end
621
741
 
622
- if @description and @description.length >= 1 then
623
- a.insert(1, (colour ? "d".bg_gray.gray.bold : 'd') + ': ' \
624
- + @description.gsub(/\n/,"\n "))
625
- end
742
+
743
+
744
+
626
745
 
627
746
  a.join("\n") + "\n"
628
747
 
@@ -1160,3 +1279,8 @@ class DroidSim
1160
1279
 
1161
1280
 
1162
1281
  end
1282
+
1283
+ require 'ruby-macrodroid/base'
1284
+ require 'ruby-macrodroid/triggers'
1285
+ require 'ruby-macrodroid/actions'
1286
+ require 'ruby-macrodroid/constraints'
@@ -272,7 +272,10 @@ class TakePictureAction < CameraAction
272
272
 
273
273
  end
274
274
 
275
- class IfConditionAction < Action
275
+
276
+ # Conditions/Loops
277
+ #
278
+ class IfConfirmedThenAction < Action
276
279
 
277
280
  def initialize(h={})
278
281
 
@@ -286,6 +289,92 @@ class IfConditionAction < Action
286
289
 
287
290
  super(h2)
288
291
 
292
+ @label = 'If Confirmed Then '
293
+
294
+ end
295
+
296
+ def to_s(colour: false)
297
+
298
+ @s = "If Confirmed Then " #+ @constraints.map(&:to_s).join(" %s " % operator)
299
+ super(colour: colour)
300
+
301
+ end
302
+ end
303
+
304
+ # Conditions/Loops
305
+ #
306
+ class LoopAction < Action
307
+
308
+ def initialize(h={})
309
+
310
+ options = {
311
+
312
+ }
313
+
314
+ h2 = options.merge(h)
315
+
316
+ super(h2)
317
+
318
+ @label = 'WHILE / DO '
319
+
320
+ end
321
+
322
+ def to_s(colour: false)
323
+
324
+ @s = 'WHILE / DO '
325
+ super()
326
+
327
+ end
328
+ end
329
+
330
+ # Conditions/Loops
331
+ #
332
+ class EndLoopAction < Action
333
+
334
+ def initialize(h={})
335
+
336
+ options = {
337
+
338
+ }
339
+
340
+ h2 = options.merge(h)
341
+
342
+ super(h2)
343
+
344
+ @label = 'End Loop '
345
+
346
+ end
347
+
348
+ def to_s(colour: false)
349
+
350
+ 'End Loop '
351
+
352
+ end
353
+ end
354
+
355
+ # Conditions/Loops
356
+ #
357
+ class IfConditionAction < Action
358
+
359
+ def initialize(obj=nil)
360
+
361
+ h = if obj.is_a? Hash then
362
+ obj
363
+ else
364
+ # get the constraints
365
+
366
+ end
367
+
368
+ options = {
369
+ a: true,
370
+ constraint_list: ''
371
+ }
372
+
373
+ macro = h[:macro]
374
+ h2 = options.merge(filter(options,h).merge(macro: macro))
375
+
376
+ super(h2)
377
+
289
378
  @label = 'If '
290
379
 
291
380
  end
@@ -317,7 +406,7 @@ class ElseAction < Action
317
406
 
318
407
  end
319
408
 
320
- class ElseIfConditionAction < IfConditionAction
409
+ class ElseIfConditionAction < Action
321
410
 
322
411
  def initialize(h={})
323
412
 
@@ -326,9 +415,14 @@ class ElseIfConditionAction < IfConditionAction
326
415
  }
327
416
 
328
417
  super(options.merge h)
329
- @label = 'ElseIf '
418
+ @label = 'Else If '
330
419
 
331
420
  end
421
+
422
+ def to_s(colour: false)
423
+ @s = 'Else If '
424
+ super()
425
+ end
332
426
 
333
427
 
334
428
  end
@@ -643,7 +737,7 @@ class ClipboardAction < DeviceAction
643
737
  end
644
738
 
645
739
  def to_s(colour: false)
646
- 'ClipboardAction ' + @h.inspect
740
+ 'Fill Clipboard' + "\n " + @h[:clipboard_text] #+ @h.inspect
647
741
  end
648
742
 
649
743
  alias to_summary to_s
@@ -793,6 +887,11 @@ end
793
887
  #
794
888
  class CameraFlashLightAction < DeviceSettingsAction
795
889
 
890
+ # options
891
+ # 0 Toch On
892
+ # 1 Torch Off
893
+ # 2 Torch Toggle
894
+ #
796
895
  def initialize(h={})
797
896
 
798
897
  options = {
@@ -1001,6 +1100,40 @@ class FileAction < Action
1001
1100
 
1002
1101
  end
1003
1102
 
1103
+
1104
+
1105
+ # Category: Files
1106
+ #
1107
+ class FileOperationV21Action < FileAction
1108
+
1109
+ def initialize(h={})
1110
+
1111
+ options = {
1112
+ :app_name=>"", :class_name=>"", :package_name=>"", :file_path=>"",
1113
+ :file_extensions=>["jpg", "jpeg", "png", "raw", "bmp", "tif", "tiff",
1114
+ "gif"], :file_option=>2, :from_name=>"Sent",
1115
+ :from_uri_string=>"", :option=>2
1116
+ }
1117
+
1118
+ super(options.merge h)
1119
+
1120
+ end
1121
+
1122
+ def to_s(colour: false)
1123
+
1124
+ operation = ['Copy', 'Move', 'Delete', 'Create Folder']
1125
+ file = ['All Files', 'All Media Files', 'Images', 'Audio', 'Videos', 'Specify File Pattern', 'Folder']
1126
+
1127
+ detail = @h[:from_name]
1128
+ detail += ' to: ' + @h[:to_name] if @h[:option] == 1
1129
+ @s = "%s %s" % [operation[@h[:option]], file[@h[:file_option]]] \
1130
+ + "\n " + detail #+ @h.inspect
1131
+ super()
1132
+ end
1133
+
1134
+ alias to_summary to_s
1135
+ end
1136
+
1004
1137
  # Category: Files
1005
1138
  #
1006
1139
  class OpenFileAction < FileAction
@@ -1026,6 +1159,30 @@ class OpenFileAction < FileAction
1026
1159
  end
1027
1160
 
1028
1161
 
1162
+ # Category: Files
1163
+ #
1164
+ class WriteToFileAction < FileAction
1165
+
1166
+ def initialize(h={})
1167
+
1168
+ options = {
1169
+ app_name: '',
1170
+ class_name: '',
1171
+ package_name: '',
1172
+ file_path: ''
1173
+ }
1174
+
1175
+ super(options.merge h)
1176
+
1177
+ end
1178
+
1179
+ def to_s(colour: false)
1180
+ 'Write To File' + "\n " + @h[:filename] #+ @h.inspect
1181
+ end
1182
+
1183
+ alias to_summary to_s
1184
+ end
1185
+
1029
1186
  class LocationAction < Action
1030
1187
 
1031
1188
  def initialize(h={})
@@ -1188,6 +1345,32 @@ class ClearLogAction < LoggingAction
1188
1345
  alias to_summary to_s
1189
1346
  end
1190
1347
 
1348
+ # MacroDroid Specific
1349
+ #
1350
+ class ConfirmNextAction < Action
1351
+
1352
+ def initialize(h={})
1353
+
1354
+ options = {
1355
+ :message=>"Do you want to fill the clipboard? ", :title=>"Fill clipboard? ", :negative_text=>"NO", :positive_text=>"YES", :class_type=>"ConfirmNextAction"
1356
+
1357
+ }
1358
+
1359
+ super(h)
1360
+
1361
+ end
1362
+
1363
+ def to_s(colour: false)
1364
+
1365
+ @s = 'Confirm Next' + "\n %s: %s" % [@h[:title], @h[:message]]
1366
+ super()
1367
+
1368
+ end
1369
+
1370
+ alias to_summary to_s
1371
+
1372
+ end
1373
+
1191
1374
  # MacroDroid Specific
1192
1375
  #
1193
1376
  class ExportMacrosAction < Action
@@ -1211,6 +1394,101 @@ class ExportMacrosAction < Action
1211
1394
 
1212
1395
  end
1213
1396
 
1397
+
1398
+ # MacroDroid Specific
1399
+ #
1400
+ class SetVariableAction < Action
1401
+
1402
+ def initialize(h={})
1403
+
1404
+ options = {
1405
+ :user_prompt=>true,
1406
+ :user_prompt_message=>"Please enter a word to see it reversed",
1407
+ :user_prompt_show_cancel=>true,
1408
+ :user_prompt_stop_after_cancel=>true,
1409
+ :user_prompt_title=>"Word reverse",
1410
+ :name => 'word'
1411
+ }
1412
+ super(h)
1413
+
1414
+ end
1415
+
1416
+ def to_s(colour: false)
1417
+
1418
+ input = if @h[:user_prompt] then
1419
+ '[User Prompt]'
1420
+ elsif @h[:expression]
1421
+ @h[:expression]
1422
+ elsif @h[:int_value_increment]
1423
+ '(+1)'
1424
+ elsif @h[:int_value_decrement]
1425
+ '(-1)'
1426
+ elsif @h[:int_random]
1427
+ "Random %d -> %d" % [@h[:int_random_min], @h[:int_random_max]]
1428
+ else
1429
+
1430
+ =begin
1431
+ sym = case @h[:variable][:type]
1432
+ when 0 # boolean
1433
+ :new_boolean_value
1434
+ when 1 # integer
1435
+ :new_int_value
1436
+ when 2 # string
1437
+ :new_string_value
1438
+ when 3 # decimal
1439
+ :new_double_value
1440
+ end
1441
+
1442
+ @h[sym].to_s
1443
+ =end
1444
+ a = %i(new_boolean_value new_int_value new_string_value new_double_value)
1445
+ @h[a[@h[:variable][:type]]].to_s
1446
+
1447
+ end
1448
+
1449
+ @s = 'Set Variable' + ("\n %s: " % @h[:variable][:name]) + input #+ @h.inspect
1450
+ super()
1451
+
1452
+ end
1453
+
1454
+ alias to_summary to_s
1455
+
1456
+ end
1457
+
1458
+
1459
+
1460
+ # MacroDroid Specific
1461
+ #
1462
+ class TextManipulationAction < Action
1463
+
1464
+ def initialize(h={})
1465
+
1466
+ options = {
1467
+
1468
+ }
1469
+ super(h)
1470
+
1471
+ end
1472
+
1473
+ def to_s(colour: false)
1474
+
1475
+ tm = @h[:text_manipulation]
1476
+
1477
+ s = case tm[:type].to_sym
1478
+ when :SubstringManipulation
1479
+ "Substring(%s, %s)" % [@h[:text], tm[:params].join(', ')]
1480
+ end
1481
+
1482
+
1483
+ 'Text Manipulation' + "\n " + s #+ ' ' + @h.inspect
1484
+
1485
+
1486
+ end
1487
+
1488
+ alias to_summary to_s
1489
+
1490
+ end
1491
+
1214
1492
  class PauseAction < Action
1215
1493
 
1216
1494
  def initialize(h={})
@@ -1572,7 +1850,13 @@ end
1572
1850
  #
1573
1851
  class ToastAction < NotificationsAction
1574
1852
 
1575
- def initialize(h={})
1853
+ def initialize(obj)
1854
+
1855
+ h = if obj.is_a? Hash then
1856
+ obj
1857
+ else
1858
+ {msg: obj}
1859
+ end
1576
1860
 
1577
1861
  if h[:msg] then
1578
1862
  h[:message_text] = h[:msg]
@@ -1603,7 +1887,7 @@ class ToastAction < NotificationsAction
1603
1887
  end
1604
1888
 
1605
1889
  def to_s(colour: false)
1606
- "Popup Message\n %s" % @h[:message_text]
1890
+ @s = "Popup Message\n %s" % @h[:message_text]
1607
1891
  end
1608
1892
 
1609
1893
  end
@@ -8,58 +8,6 @@
8
8
  #
9
9
 
10
10
 
11
- module Params
12
-
13
- refine Hash do
14
-
15
- # turns keys from camelCase into snake_case
16
-
17
- def to_snake_case(h=self)
18
-
19
- h.inject({}) do |r, x|
20
-
21
- key, value = x
22
- #puts 'value: ' + value.inspect
23
-
24
- val = if value.is_a?(Hash) then
25
- to_snake_case(value)
26
- elsif value.is_a?(Array) and value.first.is_a? Hash
27
- value.map {|row| to_snake_case(row)}
28
- else
29
- value
30
- end
31
-
32
- r.merge key.to_s.sub(/^m_/,'').gsub(/[A-Z][a-z]/){|x| '_' +
33
- x.downcase}.gsub(/[a-z][A-Z]/){|x| x[0] + '_' + x[1].downcase}\
34
- .downcase.to_sym => val
35
-
36
- end
37
- end
38
-
39
- # turns keys from snake_case to CamelCase
40
- def to_camel_case(h=self)
41
-
42
- h.inject({}) do |r,x|
43
-
44
- key, value = x
45
-
46
- val = if value.is_a?(Hash) then
47
- to_camel_case(value)
48
- elsif value.is_a?(Array) and value.first.is_a? Hash
49
- value.map {|row| to_camel_case(row)}
50
- else
51
- value
52
- end
53
-
54
- r.merge({key.to_s.gsub(/(?<!^m)_[a-z]/){|x| x[-1].upcase} => val})
55
- end
56
-
57
- end
58
-
59
-
60
- end
61
-
62
- end
63
11
 
64
12
  class MacroObject
65
13
  using ColouredText
@@ -1,4 +1,4 @@
1
- # file: ruby-macrodroid/constraints.rb
1
+ # file: ruby-macrodroid/triggers.rb
2
2
 
3
3
  # This file contains the following classes:
4
4
  #
@@ -26,6 +26,8 @@
26
26
  #
27
27
 
28
28
 
29
+
30
+
29
31
  class Trigger < MacroObject
30
32
  using Params
31
33
 
@@ -132,7 +134,9 @@ class ApplicationLaunchedTrigger < Trigger
132
134
  end
133
135
 
134
136
  def to_s(colour: false)
135
- 'ApplicationLaunchedTrigger ' + @h.inspect
137
+ a = @h[:application_name_list]
138
+ apps = a.length > 1 ? "[%s]" % a.join(', ') : a.first
139
+ 'Application Launched' + "\n " + apps
136
140
  end
137
141
 
138
142
  alias to_summary to_s
@@ -971,6 +975,28 @@ class MusicPlayingTrigger < DeviceEventsTrigger
971
975
  end
972
976
 
973
977
 
978
+ # Category: Device Events
979
+ #
980
+ class NFCTrigger < DeviceEventsTrigger
981
+
982
+ def initialize(h={})
983
+
984
+ options = {
985
+ }
986
+
987
+ super(options.merge h)
988
+
989
+ end
990
+
991
+ def to_s(colour: false)
992
+ 'NFC Tag' + "\n " + @h[:tag_name]
993
+ end
994
+
995
+ alias to_summary to_s
996
+
997
+ end
998
+
999
+
974
1000
  # Category: Device Events
975
1001
  #
976
1002
  class DeviceUnlockedTrigger < DeviceEventsTrigger
@@ -1254,6 +1280,28 @@ class SunriseSunsetTrigger < Trigger
1254
1280
  end
1255
1281
 
1256
1282
 
1283
+ # Category: MacroDroid Specific
1284
+ #
1285
+ class EmptyTrigger < Trigger
1286
+
1287
+ def initialize(h={})
1288
+
1289
+ options = {
1290
+
1291
+ }
1292
+
1293
+ super(options.merge h)
1294
+
1295
+ end
1296
+
1297
+ def to_s(colour: false)
1298
+ 'EmptyTrigger'
1299
+ end
1300
+
1301
+ alias to_summary to_s
1302
+ end
1303
+
1304
+
1257
1305
  class SensorsTrigger < Trigger
1258
1306
 
1259
1307
  def initialize(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.8.0
4
+ version: 0.8.6
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-15 00:00:00.000000000 Z
38
+ date: 2020-09-19 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: glw
metadata.gz.sig CHANGED
Binary file