openhab-scripting 5.14.0 → 5.15.1

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: 29d5852ff9f0b047b5e70f69d8ece471770b59a86f4989a3120a7c6027fec1b9
4
- data.tar.gz: 39c590e109e6c5349fd6b4b5eee9bf2e5a3058f4b8cf875b6b69f02bb89996df
3
+ metadata.gz: a2150062e6b4a58f888b09bb106f39cb57c7e67749b85dfc13978a8437702e33
4
+ data.tar.gz: 22cfc6729962a702bae8ecc83d26280e4967834a8235bd7ee9ac8f3596796f50
5
5
  SHA512:
6
- metadata.gz: 41707220dfe28a3a7395b4d0b7c8538e8150448934d97f63d5b96a533f859f681b47d68bb83688cfa316737b34622f90c7da670915a454427a9c4c705d9cfa9e
7
- data.tar.gz: 9c8ae71904b136e9aa2e11027e0de57101721b7096352994a2d636595f69b32a07e0992bf476a0200e0e6de5330a6a70d6e6f363f2e1f4c687ff1b033f013710
6
+ metadata.gz: bfab71ec2435493bafdf61bf447a34a644e366494a9ccdf174a98d9035b1cc8fd9828ca174c5288d2c41a5798cb6ea2bad8bd78f492cb5564f0f3cbf6fcf7023
7
+ data.tar.gz: 36ff08d089054720805effeb0fa16557b767a87b8238c45d7c3c2e5d5fc12ac0dffae5b0f2f7226435e68c5ddfb03a252a8ad12e680f422695040869865716cb
@@ -193,4 +193,12 @@ module Enumerable
193
193
  def ensure
194
194
  OpenHAB::DSL::Items::Ensure::ItemDelegate.new(self)
195
195
  end
196
+
197
+ #
198
+ # Send a toggle command to every item in the collection
199
+ # @return [self]
200
+ #
201
+ def toggle
202
+ each(&:toggle)
203
+ end
196
204
  end
@@ -112,8 +112,30 @@ module OpenHAB
112
112
  # end
113
113
  # end
114
114
  #
115
+ # @example
116
+ # def add_tv(builder, tv)
117
+ # builder.frame label: tv.location.label do
118
+ # builder.switch item: tv.points(Semantics::Switch), label: "Power"
119
+ # end
120
+ # end
121
+ #
122
+ # sitemaps.build do |builder|
123
+ # builder.sitemap "tvs", label: "TVs" do
124
+ # items.equipments(Semantics::TV).each do |tv|
125
+ # add_tv(builder, tv)
126
+ # end
127
+ # end
128
+ # end
129
+ #
115
130
  def build(update: true, &block)
116
- DSL::Sitemaps::Builder.new(self, update: update).instance_eval(&block)
131
+ builder_proxy = SimpleDelegator.new(nil) if block.arity == 1
132
+ builder = DSL::Sitemaps::Builder.new(self, builder_proxy, update: update)
133
+ if block.arity == 1
134
+ builder_proxy.__setobj__(builder)
135
+ yield builder_proxy
136
+ else
137
+ builder.instance_eval(&block)
138
+ end
117
139
  end
118
140
 
119
141
  # For use in specs
@@ -12,8 +12,9 @@ module OpenHAB
12
12
  # Base sitemap builder DSL
13
13
  class Builder
14
14
  # @!visibility private
15
- def initialize(provider, update:)
15
+ def initialize(provider, builder_proxy, update:)
16
16
  @provider = provider
17
+ @builder_proxy = builder_proxy
17
18
  @update = update
18
19
  end
19
20
 
@@ -23,8 +24,7 @@ module OpenHAB
23
24
  # @return [SitemapBuilder]
24
25
  # @!visibility public
25
26
  def sitemap(name, label: nil, icon: nil, &block)
26
- sitemap = SitemapBuilder.new(name, label: label, icon: icon)
27
- sitemap.instance_eval_with_dummy_items(&block) if block
27
+ sitemap = SitemapBuilder.new(name, @builder_proxy, label: label, icon: icon, &block)
28
28
  sitemap = sitemap.build
29
29
  if @update && @provider.get(sitemap.uid)
30
30
  @provider.update(sitemap)
@@ -106,6 +106,7 @@ module OpenHAB
106
106
  # One or more visibility rules (see {#visibility})
107
107
  # @!visibility private
108
108
  def initialize(type,
109
+ builder_proxy,
109
110
  item: nil,
110
111
  label: nil,
111
112
  icon: nil,
@@ -113,13 +114,15 @@ module OpenHAB
113
114
  label_color: nil,
114
115
  value_color: nil,
115
116
  icon_color: nil,
116
- visibility: nil)
117
+ visibility: nil,
118
+ &block)
117
119
  unless SitemapBuilder.factory.respond_to?("create_#{type}")
118
120
  raise ArgumentError,
119
121
  "#{type} is not a valid widget type"
120
122
  end
121
123
 
122
124
  @type = type
125
+ @builder_proxy = builder_proxy
123
126
  @item = item
124
127
  @label = label
125
128
  @icon = icon
@@ -133,6 +136,22 @@ module OpenHAB
133
136
  self.value_color(value_color) if value_color
134
137
  self.icon_color(icon_color) if icon_color
135
138
  self.visibility(*visibility) if visibility
139
+
140
+ return unless block
141
+
142
+ @builder_proxy ||= SimpleDelegator.new(nil) if block.arity == 1
143
+
144
+ if @builder_proxy
145
+ old_obj = @builder_proxy.__getobj__
146
+ @builder_proxy.__setobj__(self)
147
+ begin
148
+ yield @builder_proxy
149
+ ensure
150
+ @builder_proxy.__setobj__(old_obj)
151
+ end
152
+ else
153
+ instance_eval_with_dummy_items(&block)
154
+ end
136
155
  end
137
156
 
138
157
  # Adds one or more new rules for setting the label color
@@ -272,8 +291,8 @@ module OpenHAB
272
291
  # @!method initialize(item: nil, label: nil, icon: nil, static_icon: nil, mappings: nil, label_color: nil, value_color: nil, icon_color: nil, visibility: nil)
273
292
  # @param mappings [Hash, Array, nil] Mappings from command to label (see {SwitchBuilder#mappings})
274
293
  # @!visibility private
275
- def initialize(type, mappings: nil, **kwargs)
276
- super(type, **kwargs)
294
+ def initialize(type, builder_proxy, mappings: nil, **kwargs, &block)
295
+ super(type, builder_proxy, **kwargs, &block)
277
296
 
278
297
  @mappings = mappings
279
298
  end
@@ -313,8 +332,8 @@ module OpenHAB
313
332
  # @param range [Range, nil] Allowed range of the value (see {SetpointBuilder#range})
314
333
  # @param step [Numeric,nil] How far the value will change with each button press (see {SetpointBuilder#step})
315
334
  # @!visibility private
316
- def initialize(type, range: nil, step: nil, **kwargs)
317
- super(type, **kwargs)
335
+ def initialize(type, builder_proxy, range: nil, step: nil, **kwargs, &block)
336
+ super(type, builder_proxy, **kwargs, &block)
318
337
 
319
338
  @range = range
320
339
  @step = step
@@ -349,8 +368,8 @@ module OpenHAB
349
368
  # @param frequency [Numeric, nil]
350
369
  # How often to send requests (in seconds) (see {SliderBuilder#frequency})
351
370
  # @!visibility private
352
- def initialize(type, switch: nil, frequency: nil, **kwargs)
353
- super(type, **kwargs)
371
+ def initialize(type, builder_proxy, switch: nil, frequency: nil, **kwargs, &block)
372
+ super(type, builder_proxy, **kwargs, &block)
354
373
 
355
374
  @switch = switch
356
375
  @frequency = frequency
@@ -388,8 +407,8 @@ module OpenHAB
388
407
  # @param [String, nil] url (see {VideoBuilder#url})
389
408
  # @param [:mjpeg, :hls, nil] encoding (see {VideoBuilder#encoding})
390
409
  # @!visibility private
391
- def initialize(type, url: nil, encoding: nil, **kwargs)
392
- super(type, **kwargs)
410
+ def initialize(type, builder_proxy, url: nil, encoding: nil, **kwargs, &block)
411
+ super(type, builder_proxy, **kwargs, &block)
393
412
 
394
413
  @url = url
395
414
  self.encoding = encoding
@@ -457,14 +476,16 @@ module OpenHAB
457
476
  # Formatting string for values on the y axis (see {ChartBuilder#y_axis_pattern})
458
477
  # @!visibility private
459
478
  def initialize(type,
479
+ builder_proxy,
460
480
  service: nil,
461
481
  refresh: nil,
462
482
  period: nil,
463
483
  legend: nil,
464
484
  group: nil,
465
485
  y_axis_pattern: nil,
466
- **kwargs)
467
- super(type, **kwargs)
486
+ **kwargs,
487
+ &block)
488
+ super(type, builder_proxy, **kwargs, &block)
468
489
 
469
490
  @service = service
470
491
  self.refresh = refresh
@@ -514,8 +535,8 @@ module OpenHAB
514
535
  # @!method initialize(item: nil, label: nil, icon: nil, static_icon: nil, height: nil, label_color: nil, value_color: nil, icon_color: nil, visibility: nil)
515
536
  # @param height [Integer] The number of element rows to fill (see {DefaultBuilder#height})
516
537
  # @!visibility private
517
- def initialize(type, height: nil, **kwargs)
518
- super(type, **kwargs)
538
+ def initialize(type, builder_proxy, height: nil, **kwargs, &block)
539
+ super(type, builder_proxy, **kwargs, &block)
519
540
 
520
541
  @height = height
521
542
  end
@@ -539,8 +560,8 @@ module OpenHAB
539
560
  # @!method initialize(item: nil, label: nil, icon: nil, static_icon: nil, url: nil, height: nil, label_color: nil, value_color: nil, icon_color: nil, visibility: nil)
540
561
  # @param url [String, nil] (see {WebviewBuilder#url})
541
562
  # @!visibility private
542
- def initialize(type, url: nil, **kwargs)
543
- super(type, **kwargs)
563
+ def initialize(type, builder_proxy, url: nil, **kwargs, &block)
564
+ super(type, builder_proxy, **kwargs, &block)
544
565
 
545
566
  @url = url
546
567
  end
@@ -565,8 +586,8 @@ module OpenHAB
565
586
  # @!method initialize(item: nil, label: nil, icon: nil, static_icon: nil, frequency: nil, label_color: nil, value_color: nil, icon_color: nil, visibility: nil)
566
587
  # @param frequency [Numeric, nil] How often to send requests (see {ColorpickerBuilder#frequency})
567
588
  # @!visibility private
568
- def initialize(type, frequency: nil, **kwargs)
569
- super(type, **kwargs)
589
+ def initialize(type, builder_proxy, frequency: nil, **kwargs, &block)
590
+ super(type, builder_proxy, **kwargs, &block)
570
591
 
571
592
  @frequency = frequency
572
593
  end
@@ -601,8 +622,8 @@ module OpenHAB
601
622
  # @param [:text, :number, :date, :time, :datetime, nil] hint
602
623
  # Gives a hint to the user interface to use a widget adapted to a specific use (see {InputBuilder#hint})
603
624
  # @!visibility private
604
- def initialize(type, hint: nil, **kwargs)
605
- super(type, **kwargs)
625
+ def initialize(type, builder_proxy, hint: nil, **kwargs, &block)
626
+ super(type, builder_proxy, **kwargs, &block)
606
627
 
607
628
  self.hint = hint
608
629
  end
@@ -644,24 +665,26 @@ module OpenHAB
644
665
  # @example
645
666
  # # This creates a buttongrid to emulate a TV remote control
646
667
  # sitemaps.build do
647
- # buttongrid item: LivingRoom_TV_RCButton, buttons: [
648
- # [1, 1, "BACK", "Back", "f7:return"],
649
- # [1, 2, "HOME", "Menu", "material:apps"],
650
- # [1, 3, "YELLOW", "Search", "f7:search"],
651
- # [2, 2, "UP", "Up", "f7:arrowtriangle_up"],
652
- # [4, 2, "DOWN", "Down", "f7:arrowtriangle_down"],
653
- # [3, 1, "LEFT", "Left", "f7:arrowtriangle_left"],
654
- # [3, 3, "RIGHT", "Right", "f7:arrowtriangle_right"],
655
- # [3, 2, "ENTER", "Enter", "material:adjust"]
656
- # ]
668
+ # sitemap "remote", label: "TV Remote Control" do
669
+ # buttongrid item: LivingRoom_TV_RCButton, buttons: [
670
+ # [1, 1, "BACK", "Back", "f7:return"],
671
+ # [1, 2, "HOME", "Menu", "material:apps"],
672
+ # [1, 3, "YELLOW", "Search", "f7:search"],
673
+ # [2, 2, "UP", "Up", "f7:arrowtriangle_up"],
674
+ # [4, 2, "DOWN", "Down", "f7:arrowtriangle_down"],
675
+ # [3, 1, "LEFT", "Left", "f7:arrowtriangle_left"],
676
+ # [3, 3, "RIGHT", "Right", "f7:arrowtriangle_right"],
677
+ # [3, 2, "ENTER", "Enter", "material:adjust"]
678
+ # ]
679
+ # end
657
680
  # end
658
681
  #
659
682
  # @see https://www.openhab.org/docs/ui/sitemaps.html#element-type-buttongrid
660
683
  # @!visibility private
661
- def initialize(type, buttons: [], **kwargs)
662
- super(type, **kwargs)
663
- buttons.each { |button| validate_button(button) }
684
+ def initialize(type, builder_proxy, buttons: [], **kwargs, &block)
664
685
  @buttons = buttons
686
+ super(type, builder_proxy, **kwargs, &block)
687
+ buttons.each { |button| validate_button(button) }
665
688
  end
666
689
 
667
690
  #
@@ -998,9 +1021,10 @@ module OpenHAB
998
1021
  class_eval <<~RUBY, __FILE__, __LINE__ + 1
999
1022
  def #{method}(*args, **kwargs, &block) # def frame(*args, **kwargs, &block)
1000
1023
  widget = #{method.capitalize}Builder.new(#{method.inspect}, # widget = FrameBuilder.new(:frame,
1024
+ @builder_proxy, # @builder_proxy,
1001
1025
  *args, # *args,
1002
- **kwargs) # **kwargs)
1003
- widget.instance_eval_with_dummy_items(&block) if block # widget.instance_eval_with_dummy_items(&block) if block
1026
+ **kwargs, # **kwargs,
1027
+ &block) # &block)
1004
1028
  children << widget # children << widget
1005
1029
  widget # widget
1006
1030
  end # end
@@ -1011,9 +1035,9 @@ module OpenHAB
1011
1035
  # @!method initialize(item: nil, label: nil, icon: nil, static_icon: nil, label_color: nil, value_color: nil, icon_color: nil, visibility: nil)
1012
1036
  # @!visibility private
1013
1037
  def initialize(*, **)
1014
- super
1015
-
1016
1038
  @children = []
1039
+
1040
+ super
1017
1041
  end
1018
1042
 
1019
1043
  # @!visibility private
@@ -1062,8 +1086,8 @@ module OpenHAB
1062
1086
  # @param url [String, nil] The URL for the image (see {ImageBuilder#url})
1063
1087
  # @param refresh [Numeric, nil] How often to refresh the image (see {ImageBuilder#refresh})
1064
1088
  # @!visibility private
1065
- def initialize(type, url: nil, refresh: nil, **kwargs)
1066
- super(type, **kwargs)
1089
+ def initialize(type, builder_proxy, url: nil, refresh: nil, **kwargs, &block)
1090
+ super(type, builder_proxy, **kwargs, &block)
1067
1091
 
1068
1092
  @url = url
1069
1093
  @refresh = refresh
@@ -1111,8 +1135,8 @@ module OpenHAB
1111
1135
  # @param label [String, nil]
1112
1136
  # @param icon [String, nil]
1113
1137
  # @!visibility private
1114
- def initialize(name, label: nil, icon: nil)
1115
- super(:sitemap, label: label, icon: icon)
1138
+ def initialize(name, builder_proxy, label: nil, icon: nil)
1139
+ super(:sitemap, builder_proxy, label: label, icon: icon)
1116
1140
 
1117
1141
  @name = name
1118
1142
  end
@@ -4,6 +4,6 @@ module OpenHAB
4
4
  module DSL
5
5
  # Version of openHAB helper libraries
6
6
  # @return [String]
7
- VERSION = "5.14.0"
7
+ VERSION = "5.15.1"
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.0
4
+ version: 5.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian O'Connell
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-01-05 00:00:00.000000000 Z
13
+ date: 2024-01-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler