openhab-scripting 4.1.4 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/entity_lookup.rb +1 -57
  3. data/lib/openhab/dsl/actions.rb +2 -3
  4. data/lib/openhab/dsl/dsl.rb +8 -12
  5. data/lib/openhab/dsl/group.rb +1 -5
  6. data/lib/openhab/dsl/items/color_item.rb +60 -0
  7. data/lib/openhab/dsl/items/comparable_item.rb +49 -0
  8. data/lib/openhab/dsl/items/contact_item.rb +41 -0
  9. data/lib/openhab/dsl/items/date_time_item.rb +64 -0
  10. data/lib/openhab/dsl/items/dimmer_item.rb +59 -0
  11. data/lib/openhab/dsl/items/ensure.rb +93 -0
  12. data/lib/openhab/dsl/items/generic_item.rb +174 -0
  13. data/lib/openhab/dsl/items/group_item.rb +121 -89
  14. data/lib/openhab/dsl/items/image_item.rb +5 -41
  15. data/lib/openhab/dsl/items/item_equality.rb +36 -0
  16. data/lib/openhab/dsl/items/item_registry.rb +49 -0
  17. data/lib/openhab/dsl/items/items.rb +81 -35
  18. data/lib/openhab/dsl/items/metadata.rb +325 -0
  19. data/lib/openhab/dsl/items/number_item.rb +6 -312
  20. data/lib/openhab/dsl/items/numeric_item.rb +68 -0
  21. data/lib/openhab/dsl/items/persistence.rb +122 -0
  22. data/lib/openhab/dsl/items/player_item.rb +49 -40
  23. data/lib/openhab/dsl/items/rollershutter_item.rb +25 -77
  24. data/lib/openhab/dsl/items/string_item.rb +16 -58
  25. data/lib/openhab/dsl/items/switch_item.rb +62 -0
  26. data/lib/openhab/dsl/lazy_array.rb +8 -6
  27. data/lib/openhab/dsl/monkey_patch/events/events.rb +2 -2
  28. data/lib/openhab/dsl/monkey_patch/events/item_command.rb +67 -24
  29. data/lib/openhab/dsl/monkey_patch/events/item_event.rb +5 -5
  30. data/lib/openhab/dsl/monkey_patch/events/item_state.rb +10 -11
  31. data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +10 -11
  32. data/lib/openhab/dsl/monkey_patch/ruby/number.rb +25 -2
  33. data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -3
  34. data/lib/openhab/dsl/monkey_patch/ruby/string.rb +24 -24
  35. data/lib/openhab/dsl/rules/terse.rb +24 -0
  36. data/lib/openhab/dsl/states.rb +1 -1
  37. data/lib/openhab/dsl/time_of_day.rb +3 -5
  38. data/lib/openhab/dsl/types/comparable_type.rb +21 -0
  39. data/lib/openhab/dsl/types/date_time_type.rb +334 -0
  40. data/lib/openhab/dsl/types/decimal_type.rb +187 -0
  41. data/lib/openhab/dsl/types/hsb_type.rb +201 -0
  42. data/lib/openhab/dsl/types/increase_decrease_type.rb +23 -0
  43. data/lib/openhab/dsl/types/next_previous_type.rb +23 -0
  44. data/lib/openhab/dsl/types/numeric_type.rb +39 -0
  45. data/lib/openhab/dsl/types/on_off_type.rb +29 -0
  46. data/lib/openhab/dsl/types/open_closed_type.rb +29 -0
  47. data/lib/openhab/dsl/types/percent_type.rb +70 -0
  48. data/lib/openhab/dsl/types/play_pause_type.rb +27 -0
  49. data/lib/openhab/dsl/types/quantity_type.rb +275 -0
  50. data/lib/openhab/dsl/types/refresh_type.rb +18 -0
  51. data/lib/openhab/dsl/types/rewind_fastforward_type.rb +33 -0
  52. data/lib/openhab/dsl/types/stop_move_type.rb +23 -0
  53. data/lib/openhab/dsl/types/string_type.rb +88 -0
  54. data/lib/openhab/dsl/types/type.rb +72 -0
  55. data/lib/openhab/dsl/types/types.rb +78 -0
  56. data/lib/openhab/dsl/types/un_def_type.rb +22 -0
  57. data/lib/openhab/dsl/types/up_down_type.rb +32 -0
  58. data/lib/openhab/dsl/units.rb +11 -6
  59. data/lib/openhab/version.rb +1 -1
  60. data/lib/openhab.rb +0 -1
  61. metadata +36 -28
  62. data/lib/openhab/dsl/items/datetime_item.rb +0 -75
  63. data/lib/openhab/dsl/items/item_command.rb +0 -90
  64. data/lib/openhab/dsl/items/item_delegate.rb +0 -125
  65. data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +0 -51
  66. data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +0 -140
  67. data/lib/openhab/dsl/monkey_patch/items/items.rb +0 -142
  68. data/lib/openhab/dsl/monkey_patch/items/metadata.rb +0 -328
  69. data/lib/openhab/dsl/monkey_patch/items/persistence.rb +0 -123
  70. data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +0 -71
  71. data/lib/openhab/dsl/monkey_patch/ruby/range.rb +0 -47
  72. data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -32
  73. data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +0 -97
  74. data/lib/openhab/dsl/monkey_patch/types/increase_decrease_type.rb +0 -23
  75. data/lib/openhab/dsl/monkey_patch/types/next_previous_type.rb +0 -23
  76. data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +0 -79
  77. data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +0 -71
  78. data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +0 -77
  79. data/lib/openhab/dsl/monkey_patch/types/play_pause_type.rb +0 -23
  80. data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +0 -69
  81. data/lib/openhab/dsl/monkey_patch/types/refresh_type.rb +0 -23
  82. data/lib/openhab/dsl/monkey_patch/types/rewind_fastforward_type.rb +0 -23
  83. data/lib/openhab/dsl/monkey_patch/types/stop_move_type.rb +0 -23
  84. data/lib/openhab/dsl/monkey_patch/types/types.rb +0 -15
  85. data/lib/openhab/dsl/monkey_patch/types/up_down_type.rb +0 -72
  86. data/lib/openhab/dsl/types/datetime.rb +0 -338
  87. data/lib/openhab/dsl/types/quantity.rb +0 -300
@@ -1,323 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bigdecimal'
4
- require 'forwardable'
5
- require 'java'
6
- require 'openhab/dsl/types/quantity'
7
- require 'openhab/dsl/items/item_delegate'
3
+ require 'openhab/dsl/items/numeric_item'
8
4
 
9
5
  module OpenHAB
10
6
  module DSL
11
7
  module Items
12
- #
13
- # Delegation to OpenHAB Number Item
14
- #
15
- # rubocop: disable Metrics/ClassLength
16
- # Disabled because this class has a single responsibility, there does not appear a logical
17
- # way of breaking it up into multiple classes
18
- class NumberItem < Numeric
19
- extend OpenHAB::DSL::Items::ItemDelegate
20
- extend OpenHAB::DSL::Items::ItemCommand
8
+ java_import org.openhab.core.library.items.NumberItem
21
9
 
22
- def_item_delegator :@number_item
23
-
24
- java_import org.openhab.core.library.types.DecimalType
25
- java_import org.openhab.core.library.types.QuantityType
26
- java_import org.openhab.core.types.util.UnitUtils
27
- java_import org.openhab.core.library.unit.Units
28
-
29
- item_type Java::OrgOpenhabCoreLibraryItems::NumberItem
30
-
31
- #
32
- # Create a new NumberItem
33
- #
34
- # @param [Java::Org::openhab::core::library::items::NumberItem] number_item OpenHAB number item to delegate to
35
- #
36
- def initialize(number_item)
37
- @number_item = number_item
38
- item_missing_delegate { @number_item }
39
- super()
40
- end
41
-
42
- #
43
- # Check if NumberItem is truthy? as per defined by library
44
- #
45
- # @return [Boolean] True if item is not in state UNDEF or NULL and value is not zero.
46
- #
47
- def truthy?
48
- @number_item.state? && @number_item.state != DecimalType::ZERO
49
- end
50
-
51
- #
52
- # Coerce objects into a NumberItem
53
- #
54
- # @param [Object] other object to coerce to a NumberItem if possible
55
- #
56
- # @return [Object] NumberItem, QuantityTypes, BigDecimal or nil depending on NumberItem configuration
57
- # and/or supplied object
58
- #
59
- def coerce(other)
60
- logger.trace("Coercing #{self} as a request from #{other.class}")
61
- case other
62
- when Quantity then coerce_from_quantity(other)
63
- when Numeric then coerce_from_numeric(other)
64
- else
65
- logger.trace("#{self} cannot be coerced to #{other.class}")
66
- nil
67
- end
68
- end
69
-
70
- #
71
- # Compare NumberItem to supplied object
72
- #
73
- # @param [Object] other object to compare to
74
- #
75
- # @return [Integer] -1,0,1 or nil depending on value supplied,
76
- # nil comparison to supplied object is not possible.
77
- #
78
- def <=>(other)
79
- logger.trace("NumberItem #{self} <=> #{other} (#{other.class})")
80
- case other
81
- when NumberItem then number_item_compare(other)
82
- when Numeric then numeric_compare(other)
83
- when String then string_compare(other)
84
- else state_compare(other)
85
- end
86
- end
87
-
88
- #
89
- # Convert NumberItem to a Quantity
90
- #
91
- # @param [Object] other String or Unit representing an OpenHAB Unit
92
- #
93
- # @return [OpenHAB::DSL::Types::Quantity] NumberItem converted to supplied Unit
94
- #
95
- def |(other)
96
- other = UnitUtils.parse_unit(other) if other.is_a? String
97
-
98
- if dimension
99
- to_qt | other
100
- else
101
- Quantity.new(QuantityType.new(to_d.to_java, other))
102
- end
103
- end
104
-
105
- #
106
- # Convert NumberItem to a Quantity
107
- #
108
- # @return [OpenHAB::DSL::Types::Quantity] NumberItem converted to a QuantityUnit
109
- #
110
- def to_qt
111
- if dimension
112
- Quantity.new(@number_item.get_state_as(QuantityType))
113
- else
114
- Quantity.new(QuantityType.new(to_d.to_java, Units::ONE))
115
- end
116
- end
117
-
118
- #
119
- # Converts the NumberItem to an Integer
120
- #
121
- # @return [Integer] NumberItem as an integer
122
- #
123
- def to_i
124
- to_d&.to_i
125
- end
126
-
127
- #
128
- # Converts the NumberItem to a float
129
- #
130
- # @return [Float] NumberItem as a float
131
- #
132
- def to_f
133
- to_d&.to_f
134
- end
135
-
136
- #
137
- # Converts the NumberItem to a BigDecimal
138
- #
139
- # @return [BigDecimal] NumberItem as a BigDecimal
140
- #
141
- def to_d
142
- @number_item.state.to_big_decimal.to_d if @number_item.state.respond_to? :to_big_decimal
143
- end
144
-
145
- #
146
- # Get the Dimension attached to the NumberItem
147
- #
148
- # @return [Java::org::openhab::core::library::types::QuantityType] dimension
149
- #
150
- def dimension
151
- @number_item.dimension
152
- end
153
-
154
- %w[+ - * /].each do |operation|
155
- define_method(operation) do |other|
156
- logger.trace("Execution math operation '#{operation}' on #{inspect} with #{other.inspect}")
157
- left_operand, right_operand = operands_for_operation(other)
158
- left_operand.public_send(operation, right_operand)
159
- end
160
- end
161
-
162
- private
163
-
164
- #
165
- # Compare if other responds to state
166
- #
167
- # @param [Object] other object to compare to
168
- #
169
- # @return [Integer] -1,0,1 depending on less than, equal to or greater than other
170
- #
171
- def state_compare(other)
172
- other = other.state if other.respond_to? :state
173
- @number_item.state <=> other
174
- end
175
-
176
- #
177
- # Compare if other is a String
178
- #
179
- # @param [String] other object to compare to
180
- #
181
- # @return [Integer] -1,0,1,nil depending on less than, equal to or greater than other
182
- # nil if this number item does not have a dimension
183
- #
184
- def string_compare(other)
185
- @number_item.state <=> QuantityType.new(other) if dimension
186
- end
187
-
188
- #
189
- # Compare if other is a Numeric
190
- #
191
- # @param [String] other to compare to
192
- #
193
- # @return [Integer] -1,0,1 depending on less than, equal to or greater than other
194
- #
195
- def numeric_compare(other)
196
- @number_item.state.to_big_decimal.to_d <=> other.to_d
197
- end
198
-
199
- #
200
- # Get the operands for any operation
201
- #
202
- # @param [Object] other object to convert to a compatible operand
203
- #
204
- # @return [Array[Object,Object]] of operands where the first value is the left operand
205
- # and the second value is the right operand
206
- #
207
- def operands_for_operation(other)
208
- case other
209
- when NumberItem then number_item_operands(other)
210
- when Numeric then [to_d, other.to_d]
211
- when String then string_operands(other)
212
- else
213
- return other.coerce(to_d) if other.respond_to? :coerce
214
-
215
- raise ArgumentError, "#{other.class} can't be coerced into a NumberItem"
216
- end
217
- end
218
-
219
- #
220
- # Get operands for an operation when the right operand is provided as a string
221
- #
222
- # @param [String] other right operand
223
- #
224
- # @return [Array[QuantityType,QuantiyType]] of operands where the first value is the left operand
225
- # and the second value is the right operand
226
- #
227
- def string_operands(other)
228
- return [to_qt, Quantity.new(other)] if dimension
229
-
230
- raise ArgumentError, 'Strings are only valid operands if NumberItem is dimensions=ed.'
231
- end
232
-
233
- #
234
- # Get operands for an operation when the right operand is provided is another number item
235
- #
236
- # @param [NumberItem] other right operand
237
- #
238
- # @return [Array<QuantityType,QuantityType>,Array<BigDecimal,BigDecimal>] of operands depending on
239
- # if the left or right operand has a dimensions
240
- #
241
- def number_item_operands(other)
242
- if dimension || other.dimension
243
- dimensioned_operands(other)
244
- else
245
- logger.trace("Both objects lack dimension, self='#{self}' other='#{other}'")
246
- # If nothing has a dimension, just use BigDecimals
247
- [to_d, other.to_d]
248
- end
249
- end
250
-
251
- #
252
- # Get operands for an operation when the left or right operand has a dimension
253
- #
254
- # @param [NumberItem] other right operand
255
- #
256
- # @return [Array<QuantityType,QuantityType>] of operands
257
- #
258
- def dimensioned_operands(other)
259
- logger.trace("Dimensions self='#{dimension}' other='#{other.dimension}'")
260
- if dimension
261
- if other.dimension
262
- # If both numbers have dimensions, do the math on the quantity types.
263
- [to_qt, other.to_qt]
264
- else
265
- # If this number has dimension and the other does not,
266
- # do math with this quantity type and the other as a big decimal
267
- [to_qt, other]
268
- end
269
- else
270
- # If this number has no dimension and the other does, convert this into a dimensionless quantity
271
- [to_qt, other]
272
- end
273
- end
274
-
275
- #
276
- # Compare two number items, taking into account any dimensions
277
- #
278
- # @param [NumberItem] other number item
279
- #
280
- # @return [-1,0,1] depending on if other object is less than, equal to or greater than self
281
- #
282
- def number_item_compare(other)
283
- if other.dimension
284
- logger.trace('Other is dimensioned, converting self and other to QuantityTypes to compare')
285
- to_qt <=> other.to_qt
286
- else
287
- @number_item.state <=> other.state
288
- end
289
- end
290
-
291
- #
292
- # Coerce from a numberic object depnding on dimension and state
293
- #
294
- # @param [Numeric] other numeric object to convert
295
- #
296
- # @return [Array<QuantityType,QuantityType>,Array<BigDecimal,BigDecimal>,nil] depending on
297
- # if this object has a dimension or state
298
- #
299
- def coerce_from_numeric(other)
300
- if dimension
301
- [Quantity.new(other), to_qt]
302
- elsif @number_item.state?
303
- [other.to_d, @number_item.state.to_big_decimal.to_d]
304
- end
305
- end
306
-
307
- #
308
- # Coerce when other is a quantity
309
- #
310
- # @param [QuantityType] other
311
- #
312
- # @return [Array<QuanityType,QuantityType] other and self as a quantity type
313
- #
314
- def coerce_from_quantity(other)
315
- as_qt = to_qt
316
- logger.trace("Converted #{self} to a Quantity #{as_qt}")
317
- [other, as_qt]
318
- end
10
+ # Adds methods to core OpenHAB NumberItem type to make it more natural in
11
+ # Ruby
12
+ class NumberItem < GenericItem
13
+ include NumericItem
319
14
  end
320
15
  end
321
16
  end
322
17
  end
323
- # rubocop: enable Metrics/ClassLength
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ require_relative 'comparable_item'
6
+ require_relative 'item_equality'
7
+
8
+ module OpenHAB
9
+ module DSL
10
+ module Items
11
+ # Mixin for implementing type coercieon, equality, and arithmetic for
12
+ # number-like items
13
+ module NumericItem
14
+ include Comparable
15
+ include ComparableItem
16
+
17
+ # apply meta-programming methods to including class
18
+ def self.included(klass)
19
+ klass.prepend ItemEquality # make sure this is first
20
+ klass.extend Forwardable
21
+ klass.delegate %i[+ - * / % | positive? negative? to_d to_f to_i to_int zero?] => :state
22
+ # remove the JRuby default == so that we can inherit the Ruby method
23
+ klass.remove_method :==
24
+ end
25
+
26
+ #
27
+ # Check if NumericItem is truthy? as per defined by library
28
+ #
29
+ # @return [Boolean] True if item is not in state +UNDEF+ or +NULL+ and value is not zero.
30
+ #
31
+ def truthy?
32
+ state && !state.zero?
33
+ end
34
+
35
+ #
36
+ # Type Coercion
37
+ #
38
+ # Coerce object to a NumericType
39
+ #
40
+ # @param [Types::NumericType, Numeric] other object to coerce to a
41
+ # DateTimeType
42
+ #
43
+ # @return [[Types::NumericType, Types::NumericType]]
44
+ #
45
+ def coerce(other)
46
+ logger.trace("Coercing #{self} as a request from #{other.class}")
47
+ return [other, nil] unless state?
48
+ return [other, state] if other.is_a?(Types::NumericType) || other.respond_to?(:to_d)
49
+
50
+ raise TypeError, "can't convert #{other.class} into #{self.class}"
51
+ end
52
+
53
+ # strip trailing zeros from commands
54
+ # @!visibility private
55
+ def format_type(command)
56
+ # DecimalType and PercentType we want to make sure we don't have extra zeros
57
+ if command.instance_of?(Types::DecimalType) || command.instance_of?(Types::PercentType)
58
+ return command.to_big_decimal.strip_trailing_zeros.to_plain_string
59
+ end
60
+ # BigDecimal types have trailing zeros stripped
61
+ return command.to_java.strip_trailing_zeros.to_plain_string if command.is_a?(BigDecimal)
62
+
63
+ super
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module DSL
5
+ module Items
6
+ #
7
+ # Persistence extension for Items
8
+ #
9
+ module Persistence
10
+ java_import Java::OrgOpenhabCoreTypesUtil::UnitUtils
11
+
12
+ # A wrapper for OpenHAB's HistoricItem that returns the state directly
13
+ class HistoricState < SimpleDelegator
14
+ attr_reader :timestamp, :state
15
+
16
+ def initialize(state, timestamp)
17
+ @state = state
18
+ @timestamp = timestamp
19
+ super(@state)
20
+ end
21
+ end
22
+
23
+ # All persistence methods that could return a QuantityType
24
+ QUANTITY_METHODS = %i[average_since
25
+ delta_since
26
+ deviation_since
27
+ sum_since
28
+ variance_since].freeze
29
+
30
+ # All persistence methods that require a timestamp
31
+ PERSISTENCE_METHODS = (QUANTITY_METHODS +
32
+ %i[changed_since
33
+ evolution_rate
34
+ historic_state
35
+ maximum_since
36
+ minimum_since
37
+ updated_since]).freeze
38
+ private_constant :QUANTITY_METHODS, :PERSISTENCE_METHODS
39
+
40
+ %i[persist last_update].each do |method|
41
+ define_method(method) do |service = nil|
42
+ service ||= persistence_service
43
+ PersistenceExtensions.public_send(method, self, service&.to_s)
44
+ end
45
+ end
46
+
47
+ #
48
+ # Return the previous state of the item
49
+ #
50
+ # @param skip_equal [Boolean] if true, skips equal state values and
51
+ # searches the first state not equal the current state
52
+ # @param service [String] the name of the PersistenceService to use
53
+ #
54
+ # @return the previous state or nil if no previous state could be found,
55
+ # or if the default persistence service is not configured or
56
+ # does not refer to a valid service
57
+ #
58
+ def previous_state(service = nil, skip_equal: false)
59
+ service ||= persistence_service
60
+ result = PersistenceExtensions.previous_state(self, skip_equal, service&.to_s)
61
+ HistoricState.new(quantify(result.state), result.timestamp)
62
+ end
63
+
64
+ PERSISTENCE_METHODS.each do |method|
65
+ define_method(method) do |timestamp, service = nil|
66
+ service ||= persistence_service
67
+ result = PersistenceExtensions.public_send(method, self, to_zdt(timestamp), service&.to_s)
68
+ if result.is_a? Java::OrgOpenhabCorePersistence::HistoricItem
69
+ return HistoricState.new(quantify(result.state), result.timestamp)
70
+ end
71
+
72
+ QUANTITY_METHODS.include?(method) ? quantify(result) : result
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ #
79
+ # Convert timestamp to ZonedDateTime if it's a TemporalAmount
80
+ #
81
+ # @param [Object] timestamp to convert
82
+ #
83
+ # @return [ZonedDateTime]
84
+ #
85
+ def to_zdt(timestamp)
86
+ if timestamp.is_a? Java::JavaTimeTemporal::TemporalAmount
87
+ logger.trace("Converting #{timestamp} (#{timestamp.class}) to ZonedDateTime")
88
+ Java::JavaTime::ZonedDateTime.now.minus(timestamp)
89
+ else
90
+ timestamp
91
+ end
92
+ end
93
+
94
+ #
95
+ # Convert value to QuantityType if it is a DecimalType and a unit is defined
96
+ #
97
+ # @param [Object] value The value to convert
98
+ #
99
+ # @return [Object] QuantityType or the original value
100
+ #
101
+ def quantify(value)
102
+ if value.is_a?(Types::DecimalType) && state_description&.pattern
103
+ item_unit = UnitUtils.parse_unit(state_description.pattern)
104
+ logger.trace("Unitizing #{value} with unit #{item_unit}")
105
+ Types::QuantityType.new(value.to_big_decimal, item_unit)
106
+ else
107
+ value
108
+ end
109
+ end
110
+
111
+ #
112
+ # Get the specified persistence service from the current thread local variable
113
+ #
114
+ # @return [Object] Persistence service name as String or Symbol, or nil if not set
115
+ #
116
+ def persistence_service
117
+ Thread.current.thread_variable_get(:persistence_service)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,48 +1,57 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
4
- require 'java'
5
- require 'openhab/dsl/items/item_command'
6
- require 'openhab/dsl/items/item_delegate'
7
-
8
3
  module OpenHAB
9
4
  module DSL
10
5
  module Items
11
- #
12
- # Delegator to OpenHAB Player Item
13
- #
14
- class PlayerItem
15
- extend OpenHAB::DSL::Items::ItemCommand
16
- extend OpenHAB::DSL::Items::ItemDelegate
17
- extend Forwardable
18
-
19
- def_item_delegator :@player_item
20
-
21
- item_type Java::OrgOpenhabCoreLibraryItems::PlayerItem, :play? => :playing?,
22
- :pause? => :paused?,
23
- :rewind? => :rewinding?,
24
- :fastforward? => :fastforwarding?
25
-
26
- # rubocop: disable Style/Alias
27
- # Disabled because 'alias' does not work with the dynamically defined methods
28
- alias_method :fast_forward, :fastforward
29
- alias_method :fast_forwarding?, :fastforwarding?
30
- # rubocop: enable Style/Alias
31
-
32
- #
33
- # Creates a new PlayerItem
34
- #
35
- # @param [Java::OrgOpenhabCoreLibraryItems::PlayerItem] player_item
36
- # The OpenHAB PlayerItem to delegate to
37
- #
38
- def initialize(player_item)
39
- logger.trace("Wrapping #{player_item}")
40
- @player_item = player_item
41
-
42
- item_missing_delegate { @player_item }
43
-
44
- super()
45
- end
6
+ java_import org.openhab.core.library.items.PlayerItem
7
+
8
+ # Adds methods to core OpenHAB NumberItem type to make it more natural in
9
+ # Ruby
10
+ class PlayerItem < GenericItem
11
+ remove_method :==
12
+
13
+ # @!method play?
14
+ # Check if the item state == +PLAYING+
15
+ # @return [Boolean]
16
+
17
+ # @deprecated
18
+ # @!parse alias play? playing?
19
+
20
+ # @!method paused?
21
+ # Check if the item state == +PAUSED+
22
+ # @return [Boolean]
23
+
24
+ # @!method rewinding?
25
+ # Check if the item state == +REWIND+
26
+ # @return [Boolean]
27
+
28
+ # @!method fast_forwarding?
29
+ # Check if the item state == +FASTFORWARD+
30
+ # @return [Boolean]
31
+
32
+ # @!method play
33
+ # Send the +PLAY+ command to the item
34
+ # @return [PlayerItem] +self+
35
+
36
+ # @!method pause
37
+ # Send the +PAUSE+ command to the item
38
+ # @return [PlayerItem] +self+
39
+
40
+ # @!method rewind
41
+ # Send the +REWIND+ command to the item
42
+ # @return [PlayerItem] +self+
43
+
44
+ # @!method fast_forward
45
+ # Send the +FASTFORWARD+ command to the item
46
+ # @return [PlayerItem] +self+
47
+
48
+ # @!method next
49
+ # Send the +NEXT+ command to the item
50
+ # @return [PlayerItem] +self+
51
+
52
+ # @!method previous
53
+ # Send the +PREVIOUS+ command to the item
54
+ # @return [PlayerItem] +self+
46
55
  end
47
56
  end
48
57
  end