openhab-scripting 4.33.0 → 4.34.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 806613696649b2b84a4dd23339f58c9e25dff4a9834c5fa952b50effd915307a
4
- data.tar.gz: 6faf4c72cae568ae889d188b73040ae74c73f57864b30588d57fdce097f37420
3
+ metadata.gz: 0b5fd36cfc11c1123c6dc979a7d7072ee7aff804deded7d4bb72716be4c2e216
4
+ data.tar.gz: f324548ea1075012f58076195a8c25d8cb6bb4afe62344d9752ba4a2415a4394
5
5
  SHA512:
6
- metadata.gz: '026014989011c7cc84fe58d783766a8a48ee9d4da002ca6724010bbcd873ed26484934c9a6bfc232fe71f073d51e5589fa583e1e621fa29d9c1b4601dcdceedd'
7
- data.tar.gz: 9a75b467b814a87bb0efcb10baeed5700a28fd81423f0d87124e072f102280e53688fc2ef8cdea06820dfb4008d0bffefa1c3d250b759c177c8f1ad591342491
6
+ metadata.gz: 49b5fab340c77c046ad534568efb939206ab11824f6f08c56622a691d066fd4ce79c308e153d4b45d408cb901f461f5b97c6b14b00deceaba70efbdb46475e2c
7
+ data.tar.gz: 70c98aaec888f7c889a3bcac861caf216fee51b71c0f086c624ad4caf51f497f6db56c4b218e808524fa3b903d2c149a4c580a862878158fd988d12eb2ce8659
@@ -18,7 +18,7 @@ module OpenHAB
18
18
  # @param [Hash] values Keys and values to set for running thread, if hash is nil no values are set
19
19
  #
20
20
  def self.thread_local(**values)
21
- old_values = values.map { |key, _value| [key, Thread.current[key]] }.to_h
21
+ old_values = values.to_h { |key, _value| [key, Thread.current[key]] }
22
22
  values.each { |key, value| Thread.current[key] = value }
23
23
  logger.trace "Executing block with thread local context: #{values} - old context: #{old_values}"
24
24
  yield
@@ -145,7 +145,7 @@ module OpenHAB
145
145
  include OpenHAB::Log
146
146
  include OpenHAB::Core::ThreadLocal
147
147
 
148
- def initialize(timed_command_details, semaphore, &block) # rubocop:disable Metric/MethodLength
148
+ def initialize(timed_command_details, semaphore, &block) # rubocop:disable Metrics/MethodLength
149
149
  super()
150
150
  @semaphore = semaphore
151
151
  @timed_command_details = timed_command_details
@@ -42,7 +42,7 @@ module OpenHAB
42
42
  @guard = config.guard
43
43
  # Convert between to correct range or nil if not set
44
44
  between = config.between&.then { between(config.between) }
45
- @between = between || OpenHAB::DSL::Between::ALL_DAY
45
+ @between = between
46
46
  @trigger_conditions = config.trigger_conditions
47
47
  @attachments = config.attachments
48
48
  end
@@ -153,6 +153,8 @@ module OpenHAB
153
153
  # Loggging inflates method length
154
154
  def check_guards(event:)
155
155
  if @guard.should_run? event
156
+ return true if @between.nil?
157
+
156
158
  now = Time.now
157
159
  return true if @between.cover? now
158
160
 
@@ -13,16 +13,19 @@ module OpenHAB
13
13
  #
14
14
  # Create a rule that executes at the specified interval
15
15
  #
16
- # @param [Object] value Symbol or Duration to execute this rule
16
+ # @param [Object] value String, Symbol, Duration, or MonthDay to execute this rule
17
17
  # @param [Object] at TimeOfDay or String representing TimeOfDay in which to execute rule
18
18
  # @param [Object] attach object to be attached to the trigger
19
19
  #
20
20
  #
21
21
  def every(value, at: nil, attach: nil)
22
+ return every(MonthDay.parse(value), at: at, attach: attach) if value.is_a? String
23
+
22
24
  cron_expression = case value
23
25
  when Symbol then Cron.from_symbol(value, at)
24
26
  when Java::JavaTime::Duration then Cron.from_duration(value, at)
25
- else raise ArgumentExpression, 'Unknown interval'
27
+ when Java::JavaTime::MonthDay then Cron.from_monthday(value, at)
28
+ else raise ArgumentError, 'Unknown interval'
26
29
  end
27
30
  cron(cron_expression, attach: attach)
28
31
  end
@@ -32,8 +35,18 @@ module OpenHAB
32
35
  #
33
36
  # @param [String] expression OpenHAB style cron expression
34
37
  # @param [Object] attach object to be attached to the trigger
38
+ # @param [Hash] elements cron expression elements (second, minute, hour, dom, month, dow, year)
35
39
  #
36
- def cron(expression, attach: nil)
40
+ def cron(expression = nil, attach: nil, **fields)
41
+ if fields.any?
42
+ raise ArgumentError, 'Cron elements cannot be used with a cron expression' if expression
43
+
44
+ cron_expression = Cron.from_fields(fields)
45
+ return cron(cron_expression, attach: attach)
46
+ end
47
+
48
+ raise ArgumentError, 'Missing cron expression or elements' unless expression
49
+
37
50
  cron = Cron.new(rule_triggers: @rule_triggers)
38
51
  cron.trigger(config: { 'cronExpression' => expression }, attach: attach)
39
52
  end
@@ -59,7 +72,8 @@ module OpenHAB
59
72
  hour: '*',
60
73
  dom: '?',
61
74
  month: '*',
62
- dow: '?'
75
+ dow: '?',
76
+ year: '*'
63
77
  }.freeze
64
78
  private_constant :CRON_EXPRESSION_MAP
65
79
 
@@ -96,7 +110,7 @@ module OpenHAB
96
110
  #
97
111
  # Create a cron map from a duration
98
112
  #
99
- # @param [java::time::Duration] duration
113
+ # @param [Java::JavaTime::Duration] duration
100
114
  # @param [Object] at TimeOfDay or String representing time of day
101
115
  #
102
116
  # @return [Hash] map describing cron expression
@@ -107,6 +121,20 @@ module OpenHAB
107
121
  map_to_cron(duration_to_map(duration))
108
122
  end
109
123
 
124
+ #
125
+ # Create a cron map from a MonthDay
126
+ #
127
+ # @param [Java::JavaTime::MonthDay] month_day
128
+ # @param [Object] at TimeOfDay or String representing time of day
129
+ #
130
+ # @return [Hash] map describing cron expression
131
+ #
132
+ def self.from_monthday(monthday, at)
133
+ expression_map = EXPRESSION_MAP[:day].merge(month: monthday.month_value, dom: monthday.day_of_month)
134
+ expression_map = at_condition(expression_map, at) if at
135
+ map_to_cron(expression_map)
136
+ end
137
+
110
138
  #
111
139
  # Create a cron map from a symbol
112
140
  #
@@ -121,6 +149,19 @@ module OpenHAB
121
149
  map_to_cron(expression_map)
122
150
  end
123
151
 
152
+ #
153
+ # Create a cron map from cron elements
154
+ #
155
+ # @param [Hash] elements Cron fields (second, minute, hour, dom, month, dow, year)
156
+ #
157
+ # @return [Hash] map describing cron expression
158
+ #
159
+ def self.from_fields(fields)
160
+ fields = fields.transform_values { |value| value.to_s.gsub(/\s+/, '') }
161
+ expression_map = CRON_EXPRESSION_MAP.merge(fields)
162
+ map_to_cron(expression_map)
163
+ end
164
+
124
165
  #
125
166
  # Map cron expression to to cron string
126
167
  #
@@ -129,7 +170,7 @@ module OpenHAB
129
170
  # @return [String] OpenHAB cron string
130
171
  #
131
172
  def self.map_to_cron(map)
132
- %i[second minute hour dom month dow].map { |field| map.fetch(field) }.join(' ')
173
+ %i[second minute hour dom month dow year].map { |field| map.fetch(field) }.join(' ')
133
174
  end
134
175
 
135
176
  #
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '4.33.0'
8
+ VERSION = '4.34.1'
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: 4.33.0
4
+ version: 4.34.1
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: 2022-03-09 00:00:00.000000000 Z
11
+ date: 2022-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler