Class: OpenHAB::DSL::Items::ItemBuilder
- Inherits:
-
Object
- Object
- OpenHAB::DSL::Items::ItemBuilder
- Includes:
- Core::EntityLookup
- Defined in:
- lib/openhab/dsl/items/builder.rb
Overview
The ItemBuilder DSL allows you to customize an Item
Direct Known Subclasses
Instance Attribute Summary collapse
-
#autoupdate ⇒ true, ...
Autoupdate setting.
-
#channels ⇒ String, ...
Channel to link the item to.
-
#command_options ⇒ Hash, ...
A list of valid commands If a hash, keys are commands, and values are labels.
-
#dimension ⇒ String?
Unit dimension (for number items only).
-
#format ⇒ String?
The formatting pattern for the item's state.
-
#groups ⇒ Array<String, GroupItem>
readonly
Groups to which this item should be added.
-
#icon ⇒ Symbol, ...
The icon to be associated with the item.
-
#label ⇒ String?
Item label.
- #metadata ⇒ Core::Items::Metadata::NamespaceHash readonly
-
#name ⇒ String
Item name.
-
#range ⇒ Range?
The valid range for a number item.
-
#read_only ⇒ true, ...
(also: #read_only?)
If the item is read-only, and does not accept commands.
-
#state ⇒ Core::Types::State
Initial state.
-
#state_options ⇒ Hash, ...
A list of valid states If a hash, keys are commands, and values are labels.
-
#step ⇒ Number?
The step size for a number item.
-
#tags ⇒ Array<String, Semantics::Tag>
readonly
Tags to apply to this item.
-
#type ⇒ Symbol
readonly
The type of this item.
-
#unit ⇒ String?
Unit (for number items only).
Instance Method Summary collapse
-
#alexa(value, config = nil) ⇒ void
Shortcut for adding Alexa metadata.
-
#channel(channel, config = {}) ⇒ void
Add a channel link to this item.
-
#expire(duration, command: nil, state: nil, ignore_state_updates: nil, ignore_commands: nil) ⇒ void
Configure item expiration.
-
#ga(value, config = nil) ⇒ void
Shortcut for adding Google Assistant metadata.
-
#group(*groups) ⇒ void
Add this item to a group.
-
#homekit(value, config = nil) ⇒ void
Shortcut for adding Homekit metadata.
-
#initialize(type, name = nil, label = nil, provider:, dimension: nil, unit: nil, format: nil, range: nil, step: nil, read_only: nil, command_options: nil, state_options: nil, icon: nil, group: nil, groups: nil, tag: nil, tags: nil, autoupdate: nil, thing: nil, channel: nil, expire: nil, alexa: nil, ga: nil, homekit: nil, metadata: nil, state: nil) ⇒ ItemBuilder
constructor
A new instance of ItemBuilder.
- #inspect ⇒ String
-
#tag(*tags) ⇒ void
Tag item.
-
#to_s ⇒ String
The item's label if one is defined, otherwise its name.
Methods included from Core::EntityLookup
#items, #method_missing, #things
Constructor Details
#initialize(type, name = nil, label = nil, provider:, dimension: nil, unit: nil, format: nil, range: nil, step: nil, read_only: nil, command_options: nil, state_options: nil, icon: nil, group: nil, groups: nil, tag: nil, tags: nil, autoupdate: nil, thing: nil, channel: nil, expire: nil, alexa: nil, ga: nil, homekit: nil, metadata: nil, state: nil) ⇒ ItemBuilder
Returns a new instance of ItemBuilder.
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 |
# File 'lib/openhab/dsl/items/builder.rb', line 335 def initialize(type, name = nil, label = nil, provider:, dimension: nil, unit: nil, format: nil, range: nil, step: nil, read_only: nil, command_options: nil, state_options: nil, icon: nil, group: nil, groups: nil, tag: nil, tags: nil, autoupdate: nil, thing: nil, channel: nil, expire: nil, alexa: nil, ga: nil, # rubocop:disable Naming/MethodParameterName homekit: nil, metadata: nil, state: nil) raise ArgumentError, "`name` cannot be nil" if name.nil? if dimension raise ArgumentError, "`dimension` can only be specified with NumberItem" unless type == :number begin org.openhab.core.types.util.UnitUtils.parse_dimension(dimension.to_s) rescue java.lang.IllegalArgumentException raise ArgumentError, "Invalid dimension '#{dimension}'" end end name = name.name if name.respond_to?(:name) if provider.is_a?(GroupItemBuilder) name = "#{provider.name_base}#{name}" label = "#{provider.label_base}#{label}".strip if label end @provider = provider @type = type @name = name.to_s @label = label @dimension = dimension @format = format @range = range @step = step @read_only = read_only @command_options = command_options @state_options = state_options self.unit = unit @icon = icon @groups = [] @tags = [] @metadata = Core::Items::Metadata::NamespaceHash.new @metadata.merge!(metadata) if metadata @autoupdate = autoupdate @channels = [] @thing = thing @expire = nil if expire expire = Array(expire) expire_config = expire.pop if expire.last.is_a?(Hash) expire_config ||= {} self.expire(*expire, **expire_config) end self.alexa(alexa) if alexa self.ga(ga) if ga self.homekit(homekit) if homekit self.state = state self.group(*group) self.group(*groups) self.tag(*tag) self.tag(*tags) self.channel(*channel) if channel end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class OpenHAB::Core::EntityLookup
Instance Attribute Details
#autoupdate ⇒ true, ...
Autoupdate setting
254 255 256 |
# File 'lib/openhab/dsl/items/builder.rb', line 254 def autoupdate @autoupdate end |
#channels ⇒ String, ...
Channel to link the item to
257 258 259 |
# File 'lib/openhab/dsl/items/builder.rb', line 257 def channels @channels end |
#command_options ⇒ Hash, ...
A list of valid commands If a hash, keys are commands, and values are labels
238 239 240 |
# File 'lib/openhab/dsl/items/builder.rb', line 238 def command_options @command_options end |
#dimension ⇒ String?
Unit dimension (for number items only)
If #unit is provided, and #dimension is not, it will be inferred.
211 212 213 |
# File 'lib/openhab/dsl/items/builder.rb', line 211 def dimension @dimension end |
#format ⇒ String?
224 225 226 |
# File 'lib/openhab/dsl/items/builder.rb', line 224 def format @format end |
#groups ⇒ Array<String, GroupItem> (readonly)
Groups to which this item should be added
248 249 250 |
# File 'lib/openhab/dsl/items/builder.rb', line 248 def groups @groups end |
#icon ⇒ Symbol, ...
The icon to be associated with the item
245 246 247 |
# File 'lib/openhab/dsl/items/builder.rb', line 245 def icon @icon end |
#label ⇒ String?
Item label
205 206 207 |
# File 'lib/openhab/dsl/items/builder.rb', line 205 def label @label end |
#metadata ⇒ Core::Items::Metadata::NamespaceHash (readonly)
259 260 261 |
# File 'lib/openhab/dsl/items/builder.rb', line 259 def metadata @metadata end |
#name ⇒ String
Item name
202 203 204 |
# File 'lib/openhab/dsl/items/builder.rb', line 202 def name @name end |
#range ⇒ Range?
The valid range for a number item
227 228 229 |
# File 'lib/openhab/dsl/items/builder.rb', line 227 def range @range end |
#read_only ⇒ true, ... Also known as: read_only?
If the item is read-only, and does not accept commands
233 234 235 |
# File 'lib/openhab/dsl/items/builder.rb', line 233 def read_only @read_only end |
#state ⇒ Core::Types::State
Initial state
If #state is set to a QuantityType, and #unit is not set, it will be inferred.
265 266 267 |
# File 'lib/openhab/dsl/items/builder.rb', line 265 def state @state end |
#state_options ⇒ Hash, ...
A list of valid states If a hash, keys are commands, and values are labels
242 243 244 |
# File 'lib/openhab/dsl/items/builder.rb', line 242 def state_options @state_options end |
#step ⇒ Number?
The step size for a number item
230 231 232 |
# File 'lib/openhab/dsl/items/builder.rb', line 230 def step @step end |
#tags ⇒ Array<String, Semantics::Tag> (readonly)
Tags to apply to this item
251 252 253 |
# File 'lib/openhab/dsl/items/builder.rb', line 251 def tags @tags end |
#type ⇒ Symbol (readonly)
The type of this item
199 200 201 |
# File 'lib/openhab/dsl/items/builder.rb', line 199 def type @type end |
#unit ⇒ String?
Unit (for number items only)
Due to #format inference, setting the unit is cross-compatible with openHAB 3.4 and 4.0.
218 219 220 |
# File 'lib/openhab/dsl/items/builder.rb', line 218 def unit @unit end |
Instance Method Details
#alexa(value, config = nil) ⇒ void
This method returns an undefined value.
Shortcut for adding Alexa metadata
|
# File 'lib/openhab/dsl/items/builder.rb', line 454
|
#channel(channel, config = {}) ⇒ void
This method returns an undefined value.
Add a channel link to this item.
514 515 516 517 518 |
# File 'lib/openhab/dsl/items/builder.rb', line 514 def channel(channel, config = {}) channel = channel.to_s channel = "#{@thing}:#{channel}" if @thing && !channel.include?(":") @channels << [channel, config] end |
#expire(duration, command: nil, state: nil, ignore_state_updates: nil, ignore_commands: nil) ⇒ void
This method returns an undefined value.
Configure item expiration
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 |
# File 'lib/openhab/dsl/items/builder.rb', line 550 def expire(*args, command: nil, state: nil, ignore_state_updates: nil, ignore_commands: nil) unless (0..2).cover?(args.length) raise ArgumentError, "wrong number of arguments (given #{args.length}, expected 0..2)" end return @expire if args.empty? state = args.last if args.length == 2 raise ArgumentError, "cannot provide both command and state" if command && state duration = args.first return @expire = nil if duration.nil? duration = duration.to_s[2..].downcase if duration.is_a?(Duration) state = "'#{state}'" if state.respond_to?(:to_str) && type == :string value = duration value += ",state=#{state}" if state value += ",command=#{command}" if command config = { ignoreStateUpdates: ignore_state_updates, ignoreCommands: ignore_commands } config.compact! @expire = [value, config] end |
#ga(value, config = nil) ⇒ void
This method returns an undefined value.
Shortcut for adding Google Assistant metadata
|
# File 'lib/openhab/dsl/items/builder.rb', line 465
|
#group(*groups) ⇒ void
This method returns an undefined value.
Add this item to a group
444 445 446 447 448 449 450 451 452 |
# File 'lib/openhab/dsl/items/builder.rb', line 444 def group(*groups) unless groups.all? do |group| group.is_a?(String) || group.is_a?(Core::Items::GroupItem) || group.is_a?(GroupItemBuilder) end raise ArgumentError, "`group` must be a `GroupItem`, `GroupItemBuilder`, or a `String`" end @groups.concat(groups) end |
#homekit(value, config = nil) ⇒ void
This method returns an undefined value.
Shortcut for adding Homekit metadata
487 488 489 490 491 492 |
# File 'lib/openhab/dsl/items/builder.rb', line 487 %i[alexa ga homekit].each do |shortcut| define_method(shortcut) do |value = nil, config = nil| value, config = value if value.is_a?(Array) metadata[shortcut] = [value, config] end end |
#inspect ⇒ String
657 658 659 660 661 662 663 664 |
# File 'lib/openhab/dsl/items/builder.rb', line 657 def inspect s = "#<OpenHAB::Core::Items::#{inspect_type}ItemBuilder#{type_details} #{name} #{label.inspect}" s += " category=#{icon.inspect}" if icon s += " tags=#{tags.inspect}" unless tags.empty? s += " groups=#{groups.map { |g| g.respond_to?(:name) ? g.name : g }.inspect}" unless groups.empty? s += " metadata=#{metadata.to_h.inspect}" unless metadata.empty? "#{s}>" end |
#tag(*tags) ⇒ void
This method returns an undefined value.
Tag item
434 435 436 |
# File 'lib/openhab/dsl/items/builder.rb', line 434 def tag(*tags) @tags += self.class.normalize_tags(*tags) end |
#to_s ⇒ String
The item's label if one is defined, otherwise its name.
424 425 426 |
# File 'lib/openhab/dsl/items/builder.rb', line 424 def to_s label || name end |