openhab-scripting 4.33.1 → 4.34.0

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: c0fd2f85782ad0a007078d471419f3f9992b458208a7874e39e80ecd5a85d0d8
4
- data.tar.gz: 41f084c809a72e5bec86051ebe717ed23754071f41fec8ecc440eeb6b8213116
3
+ metadata.gz: 4f374040f733839953804416c74c3690e1c9643143c1af746218528d7e1da50f
4
+ data.tar.gz: 5db466d2078bd40e3c47dd699296e9da8270a8c292d1ada94f67c3ff7dd8762f
5
5
  SHA512:
6
- metadata.gz: 94153780fdbbc416f95d75629cd5e379538d5e9be267286ed92f765bb18fc1c3a373ccf6abc8e9053bc03d36779270f177c9174858281a0bd00016bdadf4ffa5
7
- data.tar.gz: dc8c70670e7ca22e718339e2247de37e8cf6b6c50a4039ade08b6ecb0247a42f6c44adf3e43f088c4fc12088de757f807ba578e8d1f4806f8d0a76d07504b2df
6
+ metadata.gz: 0200afe739c2e8a3f4dccc02dd138b3946b610276186baeb1ae729633e5be359e466b0046e3c2c8151124968d94d918e7fbde72e22f3994996832d379f30a817
7
+ data.tar.gz: b9f109a2ee3665319110ee3354bba1efa9d5cbebe31634ca0b78e84aaea39ad3a07dc96ac5a744b52eda4dc19cd8c890abd6a53c2d5181eaa13f14f9afd9760a
@@ -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.1'
8
+ VERSION = '4.34.0'
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.1
4
+ version: 4.34.0
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-10 00:00:00.000000000 Z
11
+ date: 2022-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler