diff --git a/lib/openhab/core/items/group_item.rb b/lib/openhab/core/items/group_item.rb index f0f0546e0..b9bdc0767 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 725c4bd1e..e18fb6f23 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