openhab-scripting 4.26.3 → 4.26.4
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 +4 -4
- data/lib/openhab/dsl/time/month_day.rb +74 -51
- data/lib/openhab/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd63a855a2b36bd98bbec644125c3d3969b5de15c34a6a068c1569be78af7df7
|
4
|
+
data.tar.gz: 742a8bc187187d0b3efec387286781464567bb87e77723b7c46a97fa5f5b3f82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b70022cd9e0fdcc545611ca0a36b5a6122884b8cccfa1f1992cbec7b1d19b24cb86fa55e127b258500c318090dbf0bb9009d3916d32d61c0c2ca3f2e0edb290
|
7
|
+
data.tar.gz: cd6bcd955c3c853bc6e52cdd999e096ca5ecc78bbd61f1db4ff9426395220fe9156a8f458deee0637f85e1c6dc27f2e7b74c8835c2c984d84f2baa92c4a9eb65
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'java'
|
4
|
+
|
3
5
|
module OpenHAB
|
4
6
|
module DSL
|
5
7
|
# Support for time related functions
|
@@ -8,40 +10,21 @@ module OpenHAB
|
|
8
10
|
module MonthDayRange
|
9
11
|
include OpenHAB::Log
|
10
12
|
|
11
|
-
java_import java.time.Year
|
12
|
-
|
13
|
-
# Lambdas are used to calculate the year for the month day
|
14
|
-
# which must happen during evaluation time to support that rules
|
15
|
-
# creation and evaluation for execution are done in distinct phases
|
16
|
-
@current_year = -> { return Year.now }
|
17
|
-
@next_year = -> { return Year.now.plus_years(1) }
|
18
|
-
|
19
|
-
class << self
|
20
|
-
attr_reader :current_year, :next_year
|
21
|
-
end
|
22
|
-
|
23
13
|
# Creates a range that can be compared against MonthDay objects, strings
|
24
14
|
# or anything responding to 'to_date' to see if they are within the range
|
25
15
|
# @return Range object representing a MonthDay Range
|
26
|
-
# rubocop:disable Metrics/AbcSize
|
27
|
-
# Range method cannot be broken up cleaner
|
28
16
|
def self.range(range)
|
29
|
-
logger.trace "Creating MonthDay range from #{range}"
|
30
17
|
raise ArgumentError, 'Supplied object must be a range' unless range.is_a? Range
|
31
18
|
|
32
19
|
start = MonthDay.parse(range.begin)
|
33
20
|
ending = MonthDay.parse(range.end)
|
34
21
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
ending_year = ending < start ? next_year : current_year
|
22
|
+
start_range = DayOfYear.new(month_day: start, range: start..ending)
|
23
|
+
ending_range = DayOfYear.new(month_day: ending, range: start..ending)
|
24
|
+
logger.trace "Month Day Range Start(#{start}) - End (#{ending}) - Created from (#{range})"
|
39
25
|
|
40
|
-
start_range = MonthDayRangeElement.new(month_day: start, year: current_year)
|
41
|
-
ending_range = MonthDayRangeElement.new(month_day: ending, year: ending_year)
|
42
26
|
range.exclude_end? ? (start_range...ending_range) : (start_range..ending_range)
|
43
27
|
end
|
44
|
-
# rubocop:enable Metrics/AbcSize
|
45
28
|
|
46
29
|
# Checks if supplied range can be converted to a month day range
|
47
30
|
# @param [Range] range to check begin and end values of
|
@@ -52,54 +35,80 @@ module OpenHAB
|
|
52
35
|
MonthDay.day_of_month?(range.begin) && MonthDay.day_of_month?(range.end)
|
53
36
|
end
|
54
37
|
|
55
|
-
#
|
56
|
-
#
|
57
|
-
|
58
|
-
class MonthDayRangeElement
|
38
|
+
# Converts a MonthDay to a day of year
|
39
|
+
# which is represented as a number from 1 to 732 to support comparisions when the range overlaps a year boundary
|
40
|
+
class DayOfYear
|
59
41
|
include Comparable
|
60
42
|
include OpenHAB::Log
|
61
43
|
java_import java.time.LocalDate
|
62
|
-
|
44
|
+
|
45
|
+
attr_accessor :month_day
|
46
|
+
|
47
|
+
# Number of days in a leap year
|
48
|
+
DAYS_IN_YEAR = 366
|
63
49
|
|
64
50
|
# Create a new MonthDayRange element
|
65
51
|
# @param [MonthDay] MonthDay element
|
66
|
-
# @param [
|
52
|
+
# @param [Range] Underlying MonthDay range
|
67
53
|
#
|
68
|
-
def initialize(month_day:,
|
54
|
+
def initialize(month_day:, range:)
|
69
55
|
@month_day = month_day
|
70
|
-
@
|
71
|
-
end
|
72
|
-
|
73
|
-
# Convert into a LocalDate using year lambda supplied in initializer
|
74
|
-
def to_local_date
|
75
|
-
@year.call.at_month_day(@month_day)
|
56
|
+
@range = range
|
76
57
|
end
|
77
58
|
|
78
59
|
# Returns the MonthDay advanced by 1 day
|
79
60
|
# Required by Range class
|
80
61
|
def succ
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
62
|
+
next_day_of_month = @month_day.day_of_month + 1
|
63
|
+
next_month = @month_day.month_value
|
64
|
+
|
65
|
+
if next_day_of_month > @month_day.month.max_length
|
66
|
+
next_day_of_month = 1
|
67
|
+
next_month = @month_day.month.plus(1).value
|
68
|
+
end
|
69
|
+
|
70
|
+
DayOfYear.new(month_day: MonthDay.of(next_month, next_day_of_month), range: @range)
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Offset by 1 year if the range begin is greater than the range end
|
75
|
+
# and if the month day is less than the begining of the range
|
76
|
+
# @return [Number] 366 if the month_day should be offset by a year
|
77
|
+
def offset
|
78
|
+
@range.begin > @range.end && month_day < @range.begin ? DAYS_IN_YEAR : 0
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Calculate the day within the range for the underlying month day
|
83
|
+
# @return [Number] Representation of the MonthDay as a number from 1 to 732
|
84
|
+
def day_in_range
|
85
|
+
@day_in_range ||= month_day.max_day_of_year + offset
|
85
86
|
end
|
86
87
|
|
87
88
|
# Compare MonthDayRangeElement to other objects as required by Range class
|
88
|
-
# rubocop:disable Metrics/AbcSize
|
89
|
-
# Case statement needs to work against multiple types
|
90
|
-
def <=>(other)
|
89
|
+
def <=>(other) # rubocop:disable Metrics/AbcSize
|
91
90
|
case other
|
92
|
-
when
|
93
|
-
when
|
94
|
-
when
|
91
|
+
when DayOfYear then day_in_range.<=>(other.day_in_range)
|
92
|
+
when MonthDay then self.<=>(DayOfYear.new(month_day: other, range: @range))
|
93
|
+
when LocalDate then self.<=>(MonthDay.of(other.month_value, other.day_of_month))
|
94
|
+
when Date then self.<=>(MonthDay.of(other.month, other.day))
|
95
95
|
else
|
96
|
-
return self.<=>(other.to_local_date) if other.respond_to?
|
97
|
-
return self.<=>(other.to_date) if other.respond_to?
|
96
|
+
return self.<=>(other.to_local_date) if other.respond_to?(:to_local_date)
|
97
|
+
return self.<=>(other.to_date) if other.respond_to?(:to_date)
|
98
98
|
|
99
99
|
raise "Unable to convert #{other.class} to compare to MonthDay"
|
100
100
|
end
|
101
101
|
end
|
102
|
-
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
java_import java.time.Month
|
106
|
+
# Extend Month with helper method
|
107
|
+
class Month
|
108
|
+
# Calcalute and memoize the maximum number of days in a year before this month
|
109
|
+
# @return [Number] maximum nummber of days in a year before this month
|
110
|
+
def max_days_before
|
111
|
+
@max_days_before ||= Month.values.select { |month| month < self }.sum(&:max_length)
|
103
112
|
end
|
104
113
|
end
|
105
114
|
|
@@ -108,6 +117,7 @@ module OpenHAB
|
|
108
117
|
class MonthDay
|
109
118
|
include OpenHAB::Log
|
110
119
|
java_import java.time.format.DateTimeFormatter
|
120
|
+
java_import java.time.Month
|
111
121
|
|
112
122
|
#
|
113
123
|
# Constructor
|
@@ -117,11 +127,9 @@ module OpenHAB
|
|
117
127
|
#
|
118
128
|
# @return [Object] MonthDay object
|
119
129
|
#
|
120
|
-
# rubocop:
|
121
|
-
def self.new(m:, d:)
|
130
|
+
def self.new(m:, d:) # rubocop:disable Naming/MethodParameterName
|
122
131
|
MonthDay.of(m, d)
|
123
132
|
end
|
124
|
-
# rubocop: enable Naming/MethodParameterName
|
125
133
|
|
126
134
|
# Parse MonthDay string as defined with by Monthday class without leading double dash "--"
|
127
135
|
def self.parse(string)
|
@@ -136,11 +144,23 @@ module OpenHAB
|
|
136
144
|
/^-*[01][0-9]-[0-3]\d$/.match? obj.to_s
|
137
145
|
end
|
138
146
|
|
147
|
+
# Get the maximum (supports leap years) day of the year this month day could be
|
148
|
+
def max_day_of_year
|
149
|
+
day_of_month + month.max_days_before
|
150
|
+
end
|
151
|
+
|
139
152
|
# Remove -- from MonthDay string representation
|
140
153
|
def to_s
|
141
154
|
to_string.delete_prefix('--')
|
142
155
|
end
|
143
156
|
|
157
|
+
# Checks if MonthDay is between the dates of the supplied range
|
158
|
+
# @param [Range] range to check against MonthDay
|
159
|
+
# @return [true,false] true if the MonthDay falls within supplied range, false otherwise
|
160
|
+
def between?(range)
|
161
|
+
MonthDayRange.range(range).cover? self
|
162
|
+
end
|
163
|
+
|
144
164
|
# remove the inherited #== method to use our <=> below
|
145
165
|
remove_method :==
|
146
166
|
|
@@ -151,6 +171,9 @@ module OpenHAB
|
|
151
171
|
case other
|
152
172
|
when String
|
153
173
|
self.<=>(MonthDay.parse(other))
|
174
|
+
when OpenHAB::DSL::Between::MonthDayRange::DayOfYear
|
175
|
+
# Compare with DayOfYear and invert result
|
176
|
+
-other.<=>(self)
|
154
177
|
else
|
155
178
|
super
|
156
179
|
end
|
data/lib/openhab/version.rb
CHANGED
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.26.
|
4
|
+
version: 4.26.4
|
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-01-
|
11
|
+
date: 2022-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|