From e23b90540fbd4bb19b5bee8d879fad4bfe23306b Mon Sep 17 00:00:00 2001 From: jimtng <2554958+jimtng@users.noreply.github.com> Date: Wed, 21 Aug 2024 02:57:36 +1000 Subject: [PATCH] Support adding group members with `GroupItem.members.add` (#322) Signed-off-by: Jimmy Tanagra --- lib/openhab/core/items/group_item.rb | 20 ++++++++++++++++++++ spec/openhab/core/items/group_item_spec.rb | 12 ++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lib/openhab/core/items/group_item.rb b/lib/openhab/core/items/group_item.rb index f0f0546e0a..b9bdc07672 100644 --- a/lib/openhab/core/items/group_item.rb +++ b/lib/openhab/core/items/group_item.rb @@ -83,6 +83,26 @@ def initialize(group_item) @group = group_item end + # + # Adds a member to the group + # + # @param [Item, String] member The item to add to the group + # @return [Members] self + # + def add(member) + if member.is_a?(String) + member = items[member] + raise ArgumentError, "Item not found: #{member}" if member.nil? + end + + member = member.__getobj__ if member.is_a?(Proxy) + raise ArgumentError, "Member must be an Item" unless member.is_a?(Item) + + group.add_member(member) + self + end + alias_method :<<, :add + # Explicit conversion to Array # # @return [Array] diff --git a/spec/openhab/core/items/group_item_spec.rb b/spec/openhab/core/items/group_item_spec.rb index 725c4bd1e8..e18fb6f239 100644 --- a/spec/openhab/core/items/group_item_spec.rb +++ b/spec/openhab/core/items/group_item_spec.rb @@ -72,6 +72,18 @@ Den_Temp, LivingRoom] end + + describe "#add" do + it "can be used to add a new member" do + expect(Temperatures.members.count).to be 3 + items.build do + number_item "Kitchen_Temp" + end + Temperatures.members.add Kitchen_Temp + expect(Temperatures.members.count).to be 4 + expect(Temperatures.members).to include Kitchen_Temp + end + end end describe "#all_members" do