openhab-scripting 2.14.2 → 2.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf896ff53247e4170a9d3c09ebd3b337114bcc8509963001f4ccea9a4c81d52f
4
- data.tar.gz: 974c4e5175053de2818fa725de5376458f21a01bc45fb444ac4a6b82e84685bb
3
+ metadata.gz: 7471d207d040d9fb085fa45e4f6be88f7ad9d99b0987b6a6845f2bb85c8bf5ab
4
+ data.tar.gz: b000d8e9397d5556c4387f09e1ec247ccd8303cfa83b27722737e38324ac91b6
5
5
  SHA512:
6
- metadata.gz: f3d966995bcf7d4d6ae5ff5a6567af8e47e57355d7ac438b46b236755205a6dbc955520f28734901f8e49b8d415b6a0497f82f1a89a698cc90d61363621d9396
7
- data.tar.gz: 0a76fe6c623432d7203ddbac268690be10ff7c9bcdcd1a2b56ace1cda3ead34f036ee70cd7f66c695c284faba921f37b3e5bbf6a091b616b31a2ca94e1c4cb89
6
+ metadata.gz: 13d1994d629262afc44f8c8e62c965e65e383e91224b8fbd12d83f9ec61fa707a0655060c805e3342b373adc5d3034f1744defca1803f84d52190aab055cd8de
7
+ data.tar.gz: 368969daaa876bdebbd0b60b8818f9da333c2c6d9df96fa7f00abf99df4891f32cd2151d576a6819c2213630fd1ccf3e1a81a1ddc5aa48d2bfe20be776a3c91a
@@ -19,6 +19,7 @@ require 'core/dsl/gems'
19
19
  require 'core/dsl/units'
20
20
  require 'core/dsl/types/quantity'
21
21
  require 'core/dsl/states'
22
+ require 'core/dsl/persistence'
22
23
 
23
24
  module OpenHAB
24
25
  #
@@ -30,6 +31,7 @@ module OpenHAB
30
31
  #
31
32
  module DSL
32
33
  # Extend the calling module/class with the DSL
34
+ # rubocop: disable Metrics/MethodLength
33
35
  def self.extended(base)
34
36
  base.send :include, OpenHAB::Core::DSL::Rule
35
37
  base.send :include, OpenHAB::Core::DSL::Items
@@ -40,8 +42,10 @@ module OpenHAB
40
42
  base.send :include, OpenHAB::Core::DSL::Timers
41
43
  base.send :include, OpenHAB::Core::DSL::States
42
44
  base.send :include, OpenHAB::Core::DSL::Tod
45
+ base.send :include, OpenHAB::Core::DSL::Persistence
43
46
  base.send :include, Things
44
47
  end
48
+ # rubocop: enable Metrics/MethodLength
45
49
  end
46
50
  end
47
51
  end
@@ -27,6 +27,7 @@ end
27
27
  #
28
28
  module EntityLookup
29
29
  include Logging
30
+
30
31
  #
31
32
  # Decorate items with Ruby wrappers
32
33
  #
@@ -34,26 +35,32 @@ module EntityLookup
34
35
  #
35
36
  # @return [Array] Array of decorated items
36
37
  #
37
- # rubocop: disable Metrics/MethodLength
38
- # Disabled line length - case dispatch pattern
39
38
  def self.decorate_items(*items)
40
- items.flatten.map do |item|
41
- case item
42
- when GroupItem
43
- decorate_group(item)
44
- when Java::Org.openhab.core.library.items::NumberItem
45
- OpenHAB::Core::DSL::Items::NumberItem.new(item)
46
- when Java::Org.openhab.core.library.items::StringItem
47
- OpenHAB::Core::DSL::Items::StringItem.new(item)
48
- else
49
- item
50
- end
39
+ items.flatten.map { |item| decorate_item(item) }
40
+ end
41
+
42
+ #
43
+ # Decorate item with Ruby wrappers
44
+ #
45
+ # @param [Object] item the item object to decorate
46
+ #
47
+ # @return [Object] the ruby wrapper for the item
48
+ #
49
+ def self.decorate_item(item)
50
+ case item
51
+ when GroupItem
52
+ decorate_group(item)
53
+ when Java::Org.openhab.core.library.items::NumberItem
54
+ OpenHAB::Core::DSL::Items::NumberItem.new(item)
55
+ when Java::Org.openhab.core.library.items::StringItem
56
+ OpenHAB::Core::DSL::Items::StringItem.new(item)
57
+ else
58
+ item
51
59
  end
52
60
  end
53
- # rubocop: enable Metrics/MethodLength
54
61
 
55
62
  #
56
- # Loops up a Thing in the OpenHAB registry replacing '_' with ':'
63
+ # Looks up a Thing in the OpenHAB registry replacing '_' with ':'
57
64
  #
58
65
  # @param [String] name of Thing to lookup in Thing registry
59
66
  #
@@ -86,7 +93,7 @@ module EntityLookup
86
93
  # rubocop: disable Style/GlobalVars
87
94
  item = $ir.get(name)
88
95
  # rubocop: enable Style/GlobalVars
89
- EntityLookup.decorate_items(item).first
96
+ EntityLookup.decorate_item(item)
90
97
  end
91
98
 
92
99
  #
@@ -86,6 +86,15 @@ module OpenHAB
86
86
  def to_s
87
87
  "[#{map(&:to_s).join(',')}]"
88
88
  end
89
+
90
+ #
91
+ # Get an ID for the group, using the label if set, otherwise group name
92
+ #
93
+ # @return [String] label if set otherwise name
94
+ #
95
+ def id
96
+ label || name
97
+ end
89
98
  end
90
99
  end
91
100
  end
@@ -21,7 +21,7 @@ module OpenHAB
21
21
  # rubocop: disable Style/GlobalVars
22
22
  item = $ir.getItem(name)
23
23
  # rubocop: enable Style/GlobalVars
24
- item.is_a?(GroupItem) ? nil : item
24
+ item.is_a?(GroupItem) ? nil : EntityLookup.decorate_item(item)
25
25
  rescue Java::OrgOpenhabCoreItems::ItemNotFoundException
26
26
  nil
27
27
  end
@@ -58,7 +58,7 @@ module OpenHAB
58
58
  when Quantity then coerce_from_quantity(other)
59
59
  when Numeric then coerce_from_numeric(other)
60
60
  else
61
- logger.trace("#{self} cannot be coereced to #{other.class}")
61
+ logger.trace("#{self} cannot be coerced to #{other.class}")
62
62
  nil
63
63
  end
64
64
  end
@@ -71,14 +71,19 @@ module OpenHAB
71
71
  # @return [Integer] -1,0,1 or nil depending on value supplied,
72
72
  # nil comparison to supplied object is not possible.
73
73
  #
74
+ # rubocop: disable Metrics/AbcSize
74
75
  def <=>(other)
75
- logger.trace("Comparing #{self} to #{other}")
76
+ logger.trace("NumberItem #{self} <=> #{other} (#{other.class})")
76
77
  case other
77
78
  when NumberItem then number_item_compare(other)
78
- when Numeric then @number_item.state.to_big_decimal.to_d <=> other.to_d
79
- when String then @number_item.state <=> QuantityType.new(other) if dimension
79
+ when Numeric then @number_item.state.to_big_decimal.to_d <=> other.to_d
80
+ when String then @number_item.state <=> QuantityType.new(other) if dimension
81
+ else
82
+ other = other.state if other.respond_to? :state
83
+ @number_item.state <=> other
80
84
  end
81
85
  end
86
+ # rubocop: enable Metrics/AbcSize
82
87
 
83
88
  #
84
89
  # Convert NumberItem to a Quantity
@@ -75,6 +75,8 @@ module OpenHAB
75
75
  @string_item.state <=> other.state
76
76
  when String
77
77
  @string_item.state.to_s <=> other
78
+ else
79
+ @string_item.state <=> other
78
80
  end
79
81
  end
80
82
 
@@ -96,12 +96,27 @@ class Java::OrgOpenhabCoreLibraryItems::DimmerItem
96
96
  def <=>(other)
97
97
  logger.trace("Comparing #{self} to #{other}")
98
98
  case other
99
- when DimmerItem, NumberItem
100
- state <=> other.state
101
- when DecimalType
102
- state <=> other
99
+ when Java::OrgOpenhabCoreItems::GenericItem, NumberItem then state <=> other.state
100
+ when DecimalType then state <=> other
101
+ when Numeric then state.to_big_decimal.to_d <=> other.to_d
102
+ else compare_to(other)
103
+ end
104
+ end
105
+
106
+ #
107
+ # Coerce objects into a DimmerItem
108
+ #
109
+ # @param [Object] other object to coerce to a DimmerItem if possible
110
+ #
111
+ # @return [Object] Numeric when applicable
112
+ #
113
+ def coerce(other)
114
+ logger.trace("Coercing #{self} as a request from #{other.class}")
115
+ case other
116
+ when Numeric
117
+ [other, state.to_big_decimal.to_d]
103
118
  else
104
- to_i <=> other.to_i
119
+ [other, state]
105
120
  end
106
121
  end
107
122
 
@@ -6,6 +6,7 @@ require 'bigdecimal'
6
6
 
7
7
  # Monkey patch items
8
8
  require 'openhab/core/dsl/monkey_patch/items/metadata'
9
+ require 'openhab/core/dsl/monkey_patch/items/persistence'
9
10
  require 'openhab/core/dsl/monkey_patch/items/contact_item'
10
11
  require 'openhab/core/dsl/monkey_patch/items/dimmer_item'
11
12
  require 'openhab/core/dsl/monkey_patch/items/switch_item'
@@ -127,4 +128,5 @@ class Java::OrgOpenhabCoreItems::GenericItem
127
128
  # rubocop:enable Style/ClassAndModuleChildren
128
129
  prepend OpenHAB::Core::DSL::MonkeyPatch::Items::ItemExtensions
129
130
  prepend OpenHAB::Core::DSL::MonkeyPatch::Items::Metadata
131
+ prepend OpenHAB::Core::DSL::MonkeyPatch::Items::Persistence
130
132
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module DSL
6
+ module MonkeyPatch
7
+ module Items
8
+ #
9
+ # Persistence extension for Items
10
+ #
11
+ module Persistence
12
+ %w[persist last_update].each do |method|
13
+ define_method(method) do |service = nil|
14
+ service ||= persistence_service
15
+ PersistenceExtensions.public_send(method, self, service&.to_s)
16
+ end
17
+ end
18
+
19
+ #
20
+ # Return the previous state of the item
21
+ #
22
+ # @param skip_equal [Boolean] if true, skips equal state values and
23
+ # searches the first state not equal the current state
24
+ # @param service [String] the name of the PersistenceService to use
25
+ #
26
+ # @return the previous state or nil if no previous state could be found,
27
+ # or if the default persistence service is not configured or
28
+ # does not refer to a valid service
29
+ #
30
+ def previous_state(service = nil, skip_equal: false)
31
+ service ||= persistence_service
32
+ PersistenceExtensions.previous_state(self, skip_equal, service&.to_s)
33
+ end
34
+
35
+ %w[
36
+ average_since
37
+ changed_since
38
+ delta_since
39
+ deviation_since
40
+ evolution_rate
41
+ historic_state
42
+ maximum_since
43
+ minimum_since
44
+ sum_since
45
+ updated_since
46
+ variance_since
47
+ ].each do |method|
48
+ define_method(method) do |timestamp, service = nil|
49
+ service ||= persistence_service
50
+ if timestamp.is_a? Java::JavaTimeTemporal::TemporalAmount
51
+ timestamp = Java::JavaTime::ZonedDateTime.now.minus(timestamp)
52
+ end
53
+ PersistenceExtensions.public_send(method, self, timestamp, service&.to_s)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ #
60
+ # Get the specified persistence service from the current thread local variable
61
+ #
62
+ # @return [Object] Persistence service name as String or Symbol, or nil if not set
63
+ #
64
+ def persistence_service
65
+ Thread.current.thread_variable_get(:persistence_service)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -3,4 +3,5 @@
3
3
  # Monkey patch ruby
4
4
  require 'openhab/core/dsl/monkey_patch/ruby/range'
5
5
  require 'openhab/core/dsl/monkey_patch/ruby/number'
6
+ require 'openhab/core/dsl/monkey_patch/ruby/string'
6
7
  require 'bigdecimal/util'
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'openhab/core/dsl/types/quantity'
4
+
5
+ module OpenHAB
6
+ module Core
7
+ module DSL
8
+ module MonkeyPatch
9
+ module Ruby
10
+ #
11
+ # Extend String class
12
+ #
13
+ module StringExtensions
14
+ include OpenHAB::Core
15
+
16
+ #
17
+ # Compares String to another object
18
+ #
19
+ # @param [Object] other object to compare to
20
+ #
21
+ # @return [Boolean] true if the two objects contain the same value, false otherwise
22
+ #
23
+ def ==(other)
24
+ case other
25
+ when OpenHAB::Core::DSL::Types::Quantity, QuantityType
26
+ other == self
27
+ else
28
+ super
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ #
39
+ # Prepend String class with comparison extensions
40
+ #
41
+ class String
42
+ prepend OpenHAB::Core::DSL::MonkeyPatch::Ruby::StringExtensions
43
+ end
@@ -10,15 +10,51 @@ class Java::OrgOpenhabCoreLibraryTypes::DecimalType
10
10
  # rubocop:enable Style/ClassAndModuleChildren
11
11
 
12
12
  #
13
- # Compare self to other using Java BigDecimal compare method
13
+ # Compare DecimalType to supplied object
14
14
  #
15
15
  # @param [Object] other object to compare to
16
16
  #
17
- # @return [Boolean] True if have the same BigDecimal representation, false otherwise
17
+ # @return [Integer] -1,0,1 or nil depending on value supplied, nil comparison to supplied object is not possible.
18
18
  #
19
- def ==(other)
20
- return equals(other) unless other.is_a? Integer
19
+ def <=>(other)
20
+ logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
21
+ case other
22
+ when Numeric
23
+ to_big_decimal.compare_to(other.to_d)
24
+ when Java::OrgOpenhabCoreTypes::UnDefType
25
+ 1
26
+ else
27
+ other = other.state if other.respond_to? :state
28
+ compare_to(other)
29
+ end
30
+ end
31
+
32
+ #
33
+ # Coerce objects into a DecimalType
34
+ #
35
+ # @param [Object] other object to coerce to a DecimalType if possible
36
+ #
37
+ # @return [Object] Numeric when applicable
38
+ #
39
+ def coerce(other)
40
+ logger.trace("Coercing #{self} as a request from #{other.class}")
41
+ case other
42
+ when Numeric
43
+ [other.to_d, to_big_decimal]
44
+ else
45
+ [other, self]
46
+ end
47
+ end
21
48
 
22
- to_big_decimal.compare_to(Java::JavaMath::BigDecimal.new(other)).zero?
49
+ #
50
+ # Compare self to other through the spaceship operator
51
+ #
52
+ # @param [Object] other object to compare to
53
+ #
54
+ # @return [Boolean] True if equals
55
+ #
56
+ def ==(other)
57
+ logger.trace("#{self.class} #{self} == #{other} (#{other.class})")
58
+ (self <=> other).zero?
23
59
  end
24
60
  end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'java'
4
+
5
+ #
6
+ # MonkeyPatching QuantityType
7
+ #
8
+ # rubocop:disable Style/ClassAndModuleChildren
9
+ class Java::OrgOpenhabCoreLibraryTypes::QuantityType
10
+ # rubocop:enable Style/ClassAndModuleChildren
11
+
12
+ #
13
+ # Compare QuantityType to supplied object
14
+ #
15
+ # @param [Object] other object to compare to
16
+ #
17
+ # @return [Integer] -1,0,1 or nil depending on value supplied, nil comparison to supplied object is not possible.
18
+ #
19
+ def <=>(other)
20
+ logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
21
+ case other
22
+ when Java::OrgOpenhabCoreTypes::UnDefType then 1
23
+ when String then self <=> Quantity.new(other)
24
+ when OpenHAB::Core::DSL::Types::Quantity then self <=> other.quantity
25
+ else
26
+ other = other.state if other.respond_to? :state
27
+ compare_to(other)
28
+ end
29
+ end
30
+
31
+ #
32
+ # Coerce objects into a QuantityType
33
+ #
34
+ # @param [Object] other object to coerce to a QuantityType if possible
35
+ #
36
+ # @return [Object] Numeric when applicable
37
+ #
38
+ def coerce(other)
39
+ logger.trace("Coercing #{self} as a request from #{other.class}")
40
+ case other
41
+ when String
42
+ [Quantity.new(other), self]
43
+ else
44
+ [other, self]
45
+ end
46
+ end
47
+
48
+ #
49
+ # Compare self to other using the spaceship operator
50
+ #
51
+ # @param [Object] other object to compare to
52
+ #
53
+ # @return [Boolean] True if equals
54
+ #
55
+ def ==(other)
56
+ (self <=> other).zero?
57
+ end
58
+ end
@@ -5,3 +5,4 @@ require 'core/dsl/monkey_patch/types/open_closed_type'
5
5
  require 'core/dsl/monkey_patch/types/on_off_type'
6
6
  require 'core/dsl/monkey_patch/types/decimal_type'
7
7
  require 'core/dsl/monkey_patch/types/percent_type'
8
+ require 'core/dsl/monkey_patch/types/quantity_type'
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module DSL
6
+ #
7
+ # Provides support for interacting with OpenHAB Persistence service
8
+ #
9
+ module Persistence
10
+ #
11
+ # Sets a thread local variable to set the default persistence service
12
+ # for method calls inside the block
13
+ #
14
+ # @param [Object] Persistence service either as a String or a Symbol
15
+ # @yield [] Block executed in context of the supplied persistence service
16
+ #
17
+ #
18
+ def persistence(service)
19
+ Thread.current.thread_variable_set(:persistence_service, service)
20
+ yield
21
+ ensure
22
+ Thread.current.thread_variable_set(:persistence_service, nil)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -221,20 +221,18 @@ module OpenHAB
221
221
  end
222
222
 
223
223
  #
224
- # Patch event to include event.item when it doesn't exist
225
- # This is to patch a bug see https://github.com/boc-tothefuture/openhab-jruby/issues/75
226
- # It may be fixed in the openhab core in the future, in which case, this patch will no longer be necessary
224
+ # Patch event to decorate event.item with our item wrapper
227
225
  #
228
- # @param [OpenHAB Event] event to check for item accessor
229
- # @param [OpenHAB Event Inputs] inputs inputs to running rule
226
+ # @param [OpenHAB Event] event patch
230
227
  #
231
- def add_event_item(event, inputs)
232
- return if event.nil? || defined?(event.item)
228
+ def decorate_event_item(event)
229
+ return if event.nil?
233
230
 
234
231
  class << event
235
- attr_accessor :item
232
+ def item
233
+ EntityLookup.lookup_item(item_name)
234
+ end
236
235
  end
237
- event.item = inputs&.dig('triggeringItem')
238
236
  end
239
237
 
240
238
  #
@@ -266,6 +264,7 @@ module OpenHAB
266
264
  #
267
265
  #
268
266
  def process_otherwise_task(event, task)
267
+ decorate_event_item(event)
269
268
  logger.trace { "Executing rule '#{name}' otherwise block with event(#{event})" }
270
269
  task.block.call(event)
271
270
  end
@@ -292,9 +291,7 @@ module OpenHAB
292
291
  #
293
292
  #
294
293
  def process_trigger_task(event, task)
295
- # rubocop: disable Style/GlobalVars
296
- triggering_item = $ir.get(event&.itemName)
297
- # rubocop: enable Style/GlobalVars
294
+ triggering_item = EntityLookup.lookup_item(event&.itemName)
298
295
  logger.trace { "Executing rule '#{name}' trigger block with item (#{triggering_item})" }
299
296
  task.block.call(triggering_item) if triggering_item
300
297
  end
@@ -307,8 +304,8 @@ module OpenHAB
307
304
  # @param [Run] task to execute
308
305
  #
309
306
  #
310
- def process_run_task(event, inputs, task)
311
- add_event_item(event, inputs)
307
+ def process_run_task(event, _inputs, task)
308
+ decorate_event_item(event)
312
309
  logger.trace { "Executing rule '#{name}' run block with event(#{event})" }
313
310
  task.block.call(event)
314
311
  end
@@ -69,7 +69,7 @@ module OpenHAB
69
69
  end
70
70
  logger.trace("Creating Changed Wait Change Trigger for #{config}")
71
71
  trigger = append_trigger(trigger, config)
72
- @trigger_delays = { trigger.id => TriggerDelay.new(to: to, from: from, duration: duration) }
72
+ @trigger_delays[trigger.id] = TriggerDelay.new(to: to, from: from, duration: duration)
73
73
  end
74
74
 
75
75
  #
@@ -127,7 +127,7 @@ module OpenHAB
127
127
  end
128
128
 
129
129
  # Modules that refines the Ruby Range object cover? and include? methods to support TimeOfDay ranges
130
- class TimeOfDayRangeElement
130
+ class TimeOfDayRangeElement < Numeric
131
131
  include Comparable
132
132
  include Logging
133
133
 
@@ -138,6 +138,8 @@ module OpenHAB
138
138
  def initialize(sod:, range_begin:)
139
139
  @sod = sod
140
140
  @range_begin = range_begin
141
+
142
+ super()
141
143
  end
142
144
 
143
145
  # Returns the current second of day advanced by 1 second
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '2.14.2'
8
+ VERSION = '2.16.2'
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.2
4
+ version: 2.16.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian O'Connell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-08 00:00:00.000000000 Z
11
+ date: 2021-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -54,15 +54,19 @@ files:
54
54
  - lib/openhab/core/dsl/monkey_patch/items/group_item.rb
55
55
  - lib/openhab/core/dsl/monkey_patch/items/items.rb
56
56
  - lib/openhab/core/dsl/monkey_patch/items/metadata.rb
57
+ - lib/openhab/core/dsl/monkey_patch/items/persistence.rb
57
58
  - lib/openhab/core/dsl/monkey_patch/items/switch_item.rb
58
59
  - lib/openhab/core/dsl/monkey_patch/ruby/number.rb
59
60
  - lib/openhab/core/dsl/monkey_patch/ruby/range.rb
60
61
  - lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb
62
+ - lib/openhab/core/dsl/monkey_patch/ruby/string.rb
61
63
  - lib/openhab/core/dsl/monkey_patch/types/decimal_type.rb
62
64
  - lib/openhab/core/dsl/monkey_patch/types/on_off_type.rb
63
65
  - lib/openhab/core/dsl/monkey_patch/types/open_closed_type.rb
64
66
  - lib/openhab/core/dsl/monkey_patch/types/percent_type.rb
67
+ - lib/openhab/core/dsl/monkey_patch/types/quantity_type.rb
65
68
  - lib/openhab/core/dsl/monkey_patch/types/types.rb
69
+ - lib/openhab/core/dsl/persistence.rb
66
70
  - lib/openhab/core/dsl/property.rb
67
71
  - lib/openhab/core/dsl/rule/automation_rule.rb
68
72
  - lib/openhab/core/dsl/rule/guard.rb