openhab-scripting 4.1.4 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/entity_lookup.rb +1 -57
  3. data/lib/openhab/dsl/dsl.rb +6 -12
  4. data/lib/openhab/dsl/group.rb +1 -5
  5. data/lib/openhab/dsl/items/comparable_item.rb +49 -0
  6. data/lib/openhab/dsl/items/contact_item.rb +41 -0
  7. data/lib/openhab/dsl/items/date_time_item.rb +64 -0
  8. data/lib/openhab/dsl/items/dimmer_item.rb +59 -0
  9. data/lib/openhab/dsl/items/generic_item.rb +197 -0
  10. data/lib/openhab/dsl/items/group_item.rb +56 -92
  11. data/lib/openhab/dsl/items/image_item.rb +5 -41
  12. data/lib/openhab/dsl/items/item_registry.rb +49 -0
  13. data/lib/openhab/dsl/items/items.rb +71 -35
  14. data/lib/openhab/dsl/items/metadata.rb +325 -0
  15. data/lib/openhab/dsl/items/number_item.rb +6 -312
  16. data/lib/openhab/dsl/items/numeric_item.rb +66 -0
  17. data/lib/openhab/dsl/items/persistence.rb +122 -0
  18. data/lib/openhab/dsl/items/player_item.rb +49 -40
  19. data/lib/openhab/dsl/items/rollershutter_item.rb +25 -77
  20. data/lib/openhab/dsl/items/string_item.rb +16 -58
  21. data/lib/openhab/dsl/items/switch_item.rb +62 -0
  22. data/lib/openhab/dsl/lazy_array.rb +8 -6
  23. data/lib/openhab/dsl/monkey_patch/events/events.rb +2 -2
  24. data/lib/openhab/dsl/monkey_patch/events/item_command.rb +67 -24
  25. data/lib/openhab/dsl/monkey_patch/events/item_event.rb +5 -5
  26. data/lib/openhab/dsl/monkey_patch/events/item_state.rb +10 -11
  27. data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +10 -11
  28. data/lib/openhab/dsl/monkey_patch/ruby/number.rb +25 -2
  29. data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -3
  30. data/lib/openhab/dsl/monkey_patch/ruby/string.rb +24 -24
  31. data/lib/openhab/dsl/states.rb +1 -1
  32. data/lib/openhab/dsl/time_of_day.rb +3 -5
  33. data/lib/openhab/dsl/types/comparable_type.rb +21 -0
  34. data/lib/openhab/dsl/types/date_time_type.rb +334 -0
  35. data/lib/openhab/dsl/types/decimal_type.rb +187 -0
  36. data/lib/openhab/dsl/types/increase_decrease_type.rb +23 -0
  37. data/lib/openhab/dsl/types/next_previous_type.rb +23 -0
  38. data/lib/openhab/dsl/types/numeric_type.rb +39 -0
  39. data/lib/openhab/dsl/types/on_off_type.rb +29 -0
  40. data/lib/openhab/dsl/types/open_closed_type.rb +29 -0
  41. data/lib/openhab/dsl/types/percent_type.rb +68 -0
  42. data/lib/openhab/dsl/types/play_pause_type.rb +27 -0
  43. data/lib/openhab/dsl/types/quantity_type.rb +275 -0
  44. data/lib/openhab/dsl/types/refresh_type.rb +18 -0
  45. data/lib/openhab/dsl/types/rewind_fastforward_type.rb +33 -0
  46. data/lib/openhab/dsl/types/stop_move_type.rb +23 -0
  47. data/lib/openhab/dsl/types/string_type.rb +88 -0
  48. data/lib/openhab/dsl/types/type.rb +72 -0
  49. data/lib/openhab/dsl/types/types.rb +77 -0
  50. data/lib/openhab/dsl/types/un_def_type.rb +22 -0
  51. data/lib/openhab/dsl/types/up_down_type.rb +32 -0
  52. data/lib/openhab/dsl/units.rb +11 -6
  53. data/lib/openhab/version.rb +1 -1
  54. data/lib/openhab.rb +0 -1
  55. metadata +31 -28
  56. data/lib/openhab/dsl/items/datetime_item.rb +0 -75
  57. data/lib/openhab/dsl/items/item_command.rb +0 -90
  58. data/lib/openhab/dsl/items/item_delegate.rb +0 -125
  59. data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +0 -51
  60. data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +0 -140
  61. data/lib/openhab/dsl/monkey_patch/items/items.rb +0 -142
  62. data/lib/openhab/dsl/monkey_patch/items/metadata.rb +0 -328
  63. data/lib/openhab/dsl/monkey_patch/items/persistence.rb +0 -123
  64. data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +0 -71
  65. data/lib/openhab/dsl/monkey_patch/ruby/range.rb +0 -47
  66. data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -32
  67. data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +0 -97
  68. data/lib/openhab/dsl/monkey_patch/types/increase_decrease_type.rb +0 -23
  69. data/lib/openhab/dsl/monkey_patch/types/next_previous_type.rb +0 -23
  70. data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +0 -79
  71. data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +0 -71
  72. data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +0 -77
  73. data/lib/openhab/dsl/monkey_patch/types/play_pause_type.rb +0 -23
  74. data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +0 -69
  75. data/lib/openhab/dsl/monkey_patch/types/refresh_type.rb +0 -23
  76. data/lib/openhab/dsl/monkey_patch/types/rewind_fastforward_type.rb +0 -23
  77. data/lib/openhab/dsl/monkey_patch/types/stop_move_type.rb +0 -23
  78. data/lib/openhab/dsl/monkey_patch/types/types.rb +0 -15
  79. data/lib/openhab/dsl/monkey_patch/types/up_down_type.rb +0 -72
  80. data/lib/openhab/dsl/types/datetime.rb +0 -338
  81. data/lib/openhab/dsl/types/quantity.rb +0 -300
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- module OpenHAB
6
- module DSL
7
- module MonkeyPatch
8
- #
9
- # Patches OpenHAB types
10
- #
11
- module Types
12
- java_import Java::OrgOpenhabCoreLibraryTypes::QuantityType
13
-
14
- #
15
- # MonkeyPatching QuantityType
16
- #
17
- class QuantityType
18
- #
19
- # Compare QuantityType to supplied object
20
- #
21
- # @param [Object] other object to compare to
22
- #
23
- # @return [Integer] -1,0,1 or nil depending on value supplied,
24
- # nil comparison to supplied object is not possible.
25
- #
26
- def <=>(other)
27
- logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
28
- case other
29
- when Java::OrgOpenhabCoreTypes::UnDefType then 1
30
- when String then self <=> Quantity.new(other)
31
- when OpenHAB::DSL::Types::Quantity then self <=> other.quantity
32
- else
33
- other = other.state if other.respond_to? :state
34
- compare_to(other)
35
- end
36
- end
37
-
38
- #
39
- # Coerce objects into a QuantityType
40
- #
41
- # @param [Object] other object to coerce to a QuantityType if possible
42
- #
43
- # @return [Object] Numeric when applicable
44
- #
45
- def coerce(other)
46
- logger.trace("Coercing #{self} as a request from #{other.class}")
47
- case other
48
- when String
49
- [Quantity.new(other), self]
50
- else
51
- [other, self]
52
- end
53
- end
54
-
55
- #
56
- # Compare self to other using the spaceship operator
57
- #
58
- # @param [Object] other object to compare to
59
- #
60
- # @return [Boolean] True if equals
61
- #
62
- def ==(other)
63
- (self <=> other).zero?
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- module OpenHAB
6
- module DSL
7
- module MonkeyPatch
8
- #
9
- # Patches OpenHAB types
10
- #
11
- module Types
12
- java_import Java::OrgOpenhabCoreTypes::RefreshType
13
-
14
- #
15
- # Monkey patch for DSL use
16
- #
17
- class RefreshType
18
- alias inspect to_s
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- module OpenHAB
6
- module DSL
7
- module MonkeyPatch
8
- #
9
- # Patches OpenHAB types
10
- #
11
- module Types
12
- java_import Java::OrgOpenhabCoreLibraryTypes::RewindFastforwardType
13
-
14
- #
15
- # Monkey patch for DSL use
16
- #
17
- class RewindFastforwardType
18
- alias inspect to_s
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- module OpenHAB
6
- module DSL
7
- module MonkeyPatch
8
- #
9
- # Patches OpenHAB types
10
- #
11
- module Types
12
- java_import Java::OrgOpenhabCoreLibraryTypes::StopMoveType
13
-
14
- #
15
- # Monkey patch for DSL use
16
- #
17
- class StopMoveType
18
- alias inspect to_s
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Monkey patch types
4
- require 'openhab/dsl/monkey_patch/types/open_closed_type'
5
- require 'openhab/dsl/monkey_patch/types/on_off_type'
6
- require 'openhab/dsl/monkey_patch/types/decimal_type'
7
- require 'openhab/dsl/monkey_patch/types/increase_decrease_type'
8
- require 'openhab/dsl/monkey_patch/types/next_previous_type'
9
- require 'openhab/dsl/monkey_patch/types/percent_type'
10
- require 'openhab/dsl/monkey_patch/types/play_pause_type'
11
- require 'openhab/dsl/monkey_patch/types/quantity_type'
12
- require 'openhab/dsl/monkey_patch/types/refresh_type'
13
- require 'openhab/dsl/monkey_patch/types/rewind_fastforward_type'
14
- require 'openhab/dsl/monkey_patch/types/stop_move_type'
15
- require 'openhab/dsl/monkey_patch/types/up_down_type'
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
- module OpenHAB
5
- module DSL
6
- module MonkeyPatch
7
- #
8
- # Patches OpenHAB types
9
- #
10
- module Types
11
- java_import Java::OrgOpenhabCoreLibraryTypes::UpDownType
12
-
13
- #
14
- # MonkeyPatching UpDownType
15
- #
16
- class UpDownType
17
- #
18
- # Check if the supplied object is case equals to self
19
- #
20
- # @param [Object] other object to compare
21
- #
22
- # @return [Boolean] True if the other object is a RollershutterItem and has the same state
23
- #
24
- def ===(other)
25
- if other.respond_to?(:state)
26
- self == other.state&.as(UpDownType)
27
- elsif other.is_a? UpDownType
28
- self == other
29
- else
30
- super
31
- end
32
- end
33
-
34
- #
35
- # Test for equality
36
- #
37
- # @param [Object] other Other object to compare against
38
- #
39
- # @return [Boolean] true if self and other can be considered equal, false otherwise
40
- #
41
- def ==(other)
42
- if other.respond_to?(:get_state_as)
43
- self == other.get_state_as(UpDownType)
44
- else
45
- super
46
- end
47
- end
48
-
49
- #
50
- # Check if the state is UP
51
- #
52
- # @return [Boolean] true if UP, false otherwise
53
- #
54
- def up?
55
- self == UP
56
- end
57
-
58
- #
59
- # Check if the state is DOWN
60
- #
61
- # @return [Boolean] true if DOWN, false otherwise
62
- #
63
- def down?
64
- self == DOWN
65
- end
66
-
67
- alias inspect to_s
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,338 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
- require 'forwardable'
5
- require 'time'
6
-
7
- module OpenHAB
8
- module DSL
9
- module Types
10
- #
11
- # Ruby implementation for OpenHAB DateTimeType
12
- #
13
- # @author Anders Alfredsson
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 DateTime
19
- extend Forwardable
20
- include Comparable
21
- include OpenHAB::Log
22
-
23
- def_delegator :datetime, :to_s
24
- def_delegator :zoned_date_time, :month_value, :month
25
- def_delegator :zoned_date_time, :day_of_month, :mday
26
- def_delegator :zoned_date_time, :day_of_year, :yday
27
- def_delegator :zoned_date_time, :minute, :min
28
- def_delegator :zoned_date_time, :second, :sec
29
- def_delegator :zoned_date_time, :nano, :nsec
30
- def_delegator :zoned_date_time, :to_epoch_second, :to_i
31
- alias inspect to_s
32
- alias day mday
33
-
34
- java_import Java::OrgOpenhabCoreLibraryTypes::DateTimeType
35
- java_import java.time.ZonedDateTime
36
- java_import java.time.Instant
37
- java_import java.time.ZoneId
38
- java_import java.time.ZoneOffset
39
- java_import java.time.Duration
40
-
41
- #
42
- # Regex expression to identify strings defining a time in hours, minutes and optionally seconds
43
- #
44
- TIME_ONLY_REGEX = /\A\d\d:\d\d(:\d\d)?\Z/.freeze
45
-
46
- #
47
- # Regex expression to identify strings defining a time in hours, minutes and optionally seconds
48
- #
49
- DATE_ONLY_REGEX = /\A\d{4}-\d\d-\d\d\Z/.freeze
50
-
51
- attr_reader :datetime
52
-
53
- #
54
- # Create a new DateTime instance wrapping an OpenHAB DateTimeType
55
- #
56
- # @param [Java::org::openhab::core::library::types::DateTimeType] datetime The DateTimeType instance to
57
- # delegate to, or an object that can be converted to a DateTimeType
58
- #
59
- def initialize(datetime)
60
- @datetime = case datetime
61
- when DateTimeType
62
- datetime
63
- when ZonedDateTime
64
- DateTimeType.new(datetime)
65
- else
66
- raise "Unexpected type #{datetime.class} provided to DateTime initializer"
67
- end
68
- end
69
-
70
- #
71
- # Compare thes DateTime object to another
72
- #
73
- # @param [Object] other Other object to compare against
74
- #
75
- # @return [Integer] -1, 0 or 1 depending on the outcome
76
- #
77
- def <=>(other)
78
- if other.respond_to?(:zoned_date_time)
79
- return zoned_date_time.to_instant.compare_to(other.zoned_date_time.to_instant)
80
- end
81
-
82
- case other
83
- when TimeOfDay::TimeOfDay, TimeOfDay::TimeOfDayRangeElement then to_tod <=> other
84
- when String then self <=> DateTime.parse(DATE_ONLY_REGEX.match?(other) ? "#{other}'T'00:00:00#{zone}" : other)
85
- else
86
- self <=> DateTime.from(other)
87
- end
88
- end
89
-
90
- #
91
- # Adds another object to this DateTime
92
- #
93
- # @param [Object] other Object to add to this. Can be a Numeric, another DateTime/Time/DateTimeType, a
94
- # Duration or a String that can be parsed into a DateTimeType or Time object
95
- #
96
- # @return [DateTime] A new DateTime object representing the result of the calculation
97
- #
98
- def +(other)
99
- logger.trace("Adding #{other} (#{other.class}) to #{self}")
100
- case other
101
- when Numeric then DateTime.from(to_time + other)
102
- when DateTime, Time then self + other.to_f
103
- when DateTimeType, String then self + DateTime.from(other).to_f
104
- when Duration then DateTime.new(zoned_date_time.plus(other))
105
- end
106
- end
107
-
108
- #
109
- # Subtracts another object from this DateTime
110
- #
111
- # @param [Object] other Object to subtract fom this. Can be a Numeric, another DateTime/Time/DateTimeType, a
112
- # Duration or a String that can be parsed into a DateTimeType or Time object
113
- #
114
- # @return [DateTime, Float] A new DateTime object representing the result of the calculation, or a Float
115
- # representing the time difference in seconds if the subtraction is between two time objects
116
- #
117
- def -(other)
118
- logger.trace("Subtracting #{other} (#{other.class}) from self")
119
- case other
120
- when Numeric then DateTime.from(to_time - other)
121
- when String
122
- dt = DateTime.parse(other)
123
- TIME_ONLY_REGEX.match?(other) ? self - dt.to_f : time_diff(dt)
124
- when Duration then DateTime.new(zoned_date_time.minus(other))
125
- when Time, DateTime, DateTimeType, DateTimeItem then time_diff(other)
126
- end
127
- end
128
-
129
- #
130
- # Convert this DateTime to a ruby Time object
131
- #
132
- # @return [Time] A Time object representing the same instant and timezone
133
- #
134
- def to_time
135
- Time.at(to_i, nsec, :nsec).localtime(utc_offset)
136
- end
137
-
138
- #
139
- # Convert the time part of this DateTime to a TimeOfDay object
140
- #
141
- # @return [TimeOfDay] A TimeOfDay object representing the time
142
- #
143
- def to_time_of_day
144
- TimeOfDay::TimeOfDay.new(h: hour, m: minute, s: second)
145
- end
146
-
147
- alias to_tod to_time_of_day
148
-
149
- #
150
- # Returns the value of time as a floating point number of seconds since the Epoch
151
- #
152
- # @return [Float] Number of seconds since the Epoch, with nanosecond presicion
153
- #
154
- def to_f
155
- zoned_date_time.to_epoch_second + (zoned_date_time.nano / 1_000_000_000)
156
- end
157
-
158
- #
159
- # The ZonedDateTime representing the state
160
- #
161
- # @return [Java::java::time::ZonedDateTime] ZonedDateTime representing the state
162
- #
163
- def zoned_date_time
164
- @datetime.zonedDateTime
165
- end
166
-
167
- alias to_zdt zoned_date_time
168
-
169
- #
170
- # The offset in seconds from UTC
171
- #
172
- # @return [Integer] The offset from UTC, in seconds
173
- #
174
- def utc_offset
175
- zoned_date_time.offset.total_seconds
176
- end
177
-
178
- #
179
- # Returns true if time represents a time in UTC (GMT)
180
- #
181
- # @return [Boolean] true if utc_offset == 0, false otherwise
182
- #
183
- def utc?
184
- utc_offset.zero?
185
- end
186
-
187
- #
188
- # Returns an integer representing the day of the week, 0..6, with Sunday == 0.
189
- #
190
- # @return [Integer] The day of week
191
- #
192
- def wday
193
- zoned_date_time.day_of_week.value % 7
194
- end
195
-
196
- #
197
- # The timezone
198
- #
199
- # @return [String] The timezone in `[+-]hh:mm(:ss)` format ('Z' for UTC) or nil if the Item has no state
200
- #
201
- def zone
202
- zoned_date_time.zone.id
203
- end
204
-
205
- #
206
- # Check if missing method can be delegated to other contained objects
207
- #
208
- # @param [String, Symbol] meth the method name to check for
209
- #
210
- # @return [Boolean] true if DateTimeType, ZonedDateTime or Time responds to the method, false otherwise
211
- #
212
- def respond_to_missing?(meth, *)
213
- @datetime.respond_to?(meth) ||
214
- zoned_date_time.respond_to?(meth) ||
215
- Time.instance_methods.include?(meth.to_sym)
216
- end
217
-
218
- #
219
- # Forward missing methods to the OpenHAB DateTimeType, its ZonedDateTime object or a ruby Time
220
- # object representing the same instant
221
- #
222
- # @param [String] meth method name
223
- # @param [Array] args arguments for method
224
- # @param [Proc] block <description>
225
- #
226
- # @return [Object] Value from delegated method in OpenHAB NumberItem
227
- #
228
- def method_missing(meth, *args, &block)
229
- if @datetime.respond_to?(meth)
230
- @datetime.__send__(meth, *args, &block)
231
- elsif zoned_date_time.respond_to?(meth)
232
- zoned_date_time.__send__(meth, *args, &block)
233
- elsif Time.instance_methods.include?(meth.to_sym)
234
- to_time.send(meth, *args, &block)
235
- else
236
- raise NoMethodError, "undefined method `#{meth}' for #{self.class}"
237
- end
238
- end
239
-
240
- #
241
- # Converts other objects to a DateTimeType
242
- #
243
- # @param [String, Numeric, Time] datetime an object that can be parsed or converted into
244
- # a DateTimeType
245
- #
246
- # @return [Java::org::openhab::core::library::types::DateTimeType] Object representing the same time
247
- #
248
- def self.from(datetime)
249
- case datetime
250
- when String
251
- parse(datetime)
252
- when Numeric
253
- from_numeric(datetime)
254
- when Time
255
- from_time(datetime)
256
- else
257
- raise "Cannot convert #{datetime.class} to DateTime"
258
- end
259
- end
260
-
261
- #
262
- # Converts a Numeric into a DateTimeType
263
- #
264
- # @param [Numeric] numeric A Integer or Float representing the number of seconds since the epoch
265
- #
266
- # @return [Java::org::openhab::core::library::types::DateTimeType] Object representing the same time
267
- #
268
- def self.from_numeric(numeric)
269
- case numeric
270
- when Integer
271
- DateTime.new(ZonedDateTime.ofInstant(Instant.ofEpochSecond(datetime), ZoneId.systemDefault))
272
- else
273
- DateTime.new(ZonedDateTime.ofInstant(Instant.ofEpochSecond(datetime.to_i,
274
- ((datetime % 1) * 1_000_000_000).to_i),
275
- ZoneId.systemDefault))
276
- end
277
- end
278
-
279
- #
280
- # Converts a ruby Time object to an OpenHAB DateTimeType
281
- #
282
- # @param [Time] time The Time object to be converted
283
- #
284
- # @return [Java::org::openhab::core::library::types::DateTimeType] Object representing the same time
285
- #
286
- def self.from_time(time)
287
- instant = Instant.ofEpochSecond(time.to_i, time.nsec)
288
- zone_id = ZoneId.of_offset('UTC', ZoneOffset.of_total_seconds(time.utc_offset))
289
- DateTime.new(ZonedDateTime.ofInstant(instant, zone_id))
290
- end
291
-
292
- #
293
- # Parses a string representing a time into an OpenHAB DateTimeType. First tries to parse it
294
- # using the DateTimeType's parser, then falls back to the ruby Time.parse
295
- #
296
- # @param [String] time_string The string to be parsed
297
- #
298
- # @return [Java::org::openhab::core::library::types::DateTimeType] Object representing the same time
299
- #
300
- def self.parse(time_string)
301
- time_string += 'Z' if TIME_ONLY_REGEX.match?(time_string)
302
- DateTime.new(DateTimeType.new(time_string))
303
- rescue Java::JavaLang::StringIndexOutOfBoundsException, Java::JavaLang::IllegalArgumentException
304
- # Try ruby's Time.parse if OpenHAB's DateTimeType parser fails
305
- begin
306
- time = Time.parse(time_string)
307
- DateTime.from(time)
308
- rescue ArgumentError
309
- raise "Unable to parse #{time_string} into a DateTime"
310
- end
311
- end
312
-
313
- private
314
-
315
- #
316
- # Calculates the difference in time between this instance and another time object
317
- #
318
- # @param [Time, DateTime, DateTimeItem, Java::org::openhab::core::library::types::DateTimeType] time_obj
319
- # The other time object to subtract from self
320
- #
321
- # @return [Float] The time difference between the two objects, in seconds
322
- #
323
- def time_diff(time_obj)
324
- logger.trace("Calculate time difference between #{self} and #{time_obj}")
325
- case time_obj
326
- when Time
327
- to_time - time_obj
328
- when DateTime, DateTimeItem
329
- self - time_obj.to_time
330
- when DateTimeType
331
- self - DateTime.new(time_obj).to_time
332
- end
333
- end
334
- end
335
- end
336
- end
337
- end
338
- # rubocop: enable Metrics/ClassLength