openhab-scripting 4.22.0 → 4.24.0

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: '02875983081fc90123fdb23c933a77a5553255acf34904cb13bba5bfafc69f63'
4
- data.tar.gz: c90dbef96592a4230b6a8a904493ef4db46f8a2654ac7352989111df97847638
3
+ metadata.gz: 2b0032a1e364c6042f9f01f21c8315f0cbaf2e3b311c7e227073eb26394f8f8a
4
+ data.tar.gz: c3c2279228081ec8f9a565dd9e3fd8a2d42b1c09d01c6de85951493a79f8f098
5
5
  SHA512:
6
- metadata.gz: 4c8194316eee36dd5de3a10644abb991124f19a3ba4b9a079b1304bd0ee28a1ae95b0177cb6cad18f344da4ac7dceb6f3bbfde423b0c59f33f903265a4acd0cc
7
- data.tar.gz: 3b6ba33eba28b704488d830c250a8b09ff67e7cd754179e6536b6752fb4fedf7be9c47c40358704bfdbbc27f33446116597c2ee711aea6758ef2120cb85f2c3c
6
+ metadata.gz: 9ac07684db4dc05fa66423d2d775d8bbddeb197b672d6e7bd87a3ff811e0c1d9ea1a93da26a9775bfa4d2fba3b07d915783caf3eadaace99d6e09b2fe65ceb2e
7
+ data.tar.gz: 9f5be2827c0dddc7224b91d2fb9afbeffeb276b9395ff2439910415aade2019c8f2f374e07e47b38719f8c70ace700d3c4f3b7d8509086404037d21f338e3c7f
@@ -48,10 +48,51 @@ module OpenHAB
48
48
  # convert it to an HSBType
49
49
  # @!visibility private
50
50
  def format_type(command)
51
+ return format_hash(command.to_hash) if command.respond_to?(:to_hash)
51
52
  return Types::HSBType.new(command) if command.respond_to?(:to_str)
52
53
 
53
54
  super
54
55
  end
56
+
57
+ #
58
+ # Convert the ColorItem to a hash
59
+ # @param [:hsb, :rgb] format for hash
60
+ # @return [Hash] in requested format
61
+ def to_h(format = :hsb)
62
+ values = to_a(format)
63
+ keys = (format == :hsb ? %i[hue saturation brightness] : %i[red green blue])
64
+ keys.zip(values).to_h
65
+ end
66
+
67
+ #
68
+ # Convert the ColorItem to an array of values
69
+ # @param [:hsb, :rgb] format for elements in the array
70
+ # @return [Array] of ColorItem components in requested format
71
+ def to_a(format = :hsb)
72
+ case format
73
+ when :hsb then [hue, saturation, brightness]
74
+ when :rgb then [red, green, blue].map(&:to_byte)
75
+ else
76
+ raise ArgumentError, "Unsupported format #{format}"
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ # Mapping of hash values sets to conversion methods
83
+ HASH_KEYS = { %i[r g b] => :from_rgb,
84
+ %i[red green blue] => :from_rgb,
85
+ %i[h s b] => :from_hsb,
86
+ %i[hue saturation brightness] => :from_hsb }.freeze
87
+
88
+ def format_hash(hash)
89
+ hash = hash.transform_keys(&:to_sym)
90
+ HASH_KEYS.each do |key_set, method|
91
+ values = hash.values_at(*key_set).compact
92
+ return Types::HSBType.public_send(method, *values) if values.length == 3
93
+ end
94
+ raise ArgumentError, "Supplied hash (#{hash}) must contain one of the following keysets #{keys.keys}"
95
+ end
55
96
  end
56
97
  end
57
98
  end
@@ -25,7 +25,14 @@ module OpenHAB
25
25
  super
26
26
  end
27
27
 
28
- #
28
+ # Support conversion to location items from a hash
29
+ # @!visibility private
30
+ def format_type(command)
31
+ return PointType.new(command.to_hash) if command.respond_to?(:to_hash)
32
+
33
+ super
34
+ end
35
+
29
36
  # Type Coercion
30
37
  #
31
38
  # Coerce object to a PointType
@@ -152,7 +152,7 @@ module OpenHAB
152
152
  @thread_locals = Thread.current[:RULE_NAME] ? { RULE_NAME: Thread.current[:RULE_NAME] } : {}
153
153
  set_name("Cancels implicit timer for #{timed_command_details.item.id}")
154
154
  set_triggers([OpenHAB::DSL::Rules::Triggers::Trigger.trigger(
155
- type: OpenHAB::DSL::Rules::Triggers::Trigger::ITEM_STATE_UPDATE,
155
+ type: OpenHAB::DSL::Rules::Triggers::Trigger::ITEM_STATE_CHANGE,
156
156
  config: { 'itemName' => timed_command_details.item.name }
157
157
  )])
158
158
  end
@@ -107,10 +107,13 @@ module OpenHAB
107
107
  # Extend MonthDay java object with some helper methods
108
108
  class MonthDay
109
109
  include OpenHAB::Log
110
+ java_import java.time.format.DateTimeFormatter
110
111
  # Parse MonthDay string as defined with by Monthday class without leading double dash "--"
111
112
  def self.parse(string)
112
- ## string = "--#{string}" unless string.to_s.start_with? '--'
113
- java_send :parse, [java.lang.CharSequence], "--#{string}"
113
+ logger.trace("#{self.class}.parse #{string} (#{string.class})")
114
+ java_send :parse, [java.lang.CharSequence, java.time.format.DateTimeFormatter],
115
+ string.to_s,
116
+ DateTimeFormatter.ofPattern('[--]M-d')
114
117
  end
115
118
 
116
119
  # Can the supplied object be parsed into a MonthDay
@@ -123,6 +126,9 @@ module OpenHAB
123
126
  to_string.delete_prefix('--')
124
127
  end
125
128
 
129
+ # remove the inherited #== method to use our <=> below
130
+ remove_method :==
131
+
126
132
  # Extends MonthDay comparison to support Strings
127
133
  # Necessary to support mixed ranges of Strings and MonthDay types
128
134
  # @return [Number, nil] -1,0,1 if other MonthDay is less than, equal to, or greater than this MonthDay
@@ -47,7 +47,7 @@ module OpenHAB
47
47
  # @param saturation [PercentType, Numeric] Saturation component (0-100%)
48
48
  # @param brightness [PercentType, Numeric] Brightness component (0-100%)
49
49
  # @return [HSBType]
50
- def from_hsv(hue, saturation, brightness)
50
+ def from_hsb(hue, saturation, brightness)
51
51
  new(hue, saturation, brightness)
52
52
  end
53
53
 
@@ -17,6 +17,7 @@ module OpenHAB
17
17
  # @param longitude [DecimalType, QuantityType, StringType, Numeric]
18
18
  # @param altitude [DecimalType, QuantityType, StringType, Numeric]
19
19
  def initialize(*args) # rubocop:disable Metrics
20
+ args = from_hash(args.first.to_hash) if args.first.respond_to? :to_hash
20
21
  if (2..3).cover?(args.length)
21
22
  args = args.each_with_index.map do |value, index|
22
23
  if value.is_a?(DecimalType) || value.is_a?(StringType)
@@ -118,6 +119,13 @@ module OpenHAB
118
119
  QuantityType.new(raw_altitude.to_big_decimal, Units::METRE)
119
120
  end
120
121
 
122
+ #
123
+ # Convert the PointType to a hash
124
+ # @return [Hash] with keys latitude/longitude/altitude
125
+ def to_h
126
+ { latitude: latitude, longitude: longitude, altitude: altitude }
127
+ end
128
+
121
129
  #
122
130
  # Calculate the distance in meters from other, ignoring altitude.
123
131
  #
@@ -138,7 +146,7 @@ module OpenHAB
138
146
 
139
147
  # coerce an object to a PointType
140
148
  # @return [PointType]
141
- def coerce_single(other)
149
+ def coerce_single(other) # rubocop:disable Metrics
142
150
  logger.trace("Coercing #{self} as a request from #{other.class}")
143
151
  if other.is_a?(PointType)
144
152
  other
@@ -148,7 +156,22 @@ module OpenHAB
148
156
  other.state
149
157
  elsif other.respond_to?(:to_str)
150
158
  PointType.new(other.to_str)
159
+ elsif other.respond_to?(:to_hash)
160
+ PointType.new(other.to_hash)
161
+ end
162
+ end
163
+
164
+ #
165
+ # Convert hash into ordered arguments for constructor
166
+ #
167
+ def from_hash(hash)
168
+ keys = [%i[lat long alt], %i[latitude longitude altitude]]
169
+ keys.each do |key_set|
170
+ values = hash.transform_keys(&:to_sym).values_at(*key_set)
171
+
172
+ return *values.compact if values[0..1].all?
151
173
  end
174
+ raise ArgumentError, "Supplied arguments (#{hash}) must contain one of the following sets #{keys}"
152
175
  end
153
176
  end
154
177
  end
@@ -5,5 +5,5 @@
5
5
  #
6
6
  module OpenHAB
7
7
  # @return [String] Version of OpenHAB helper libraries
8
- VERSION = '4.22.0'
8
+ VERSION = '4.24.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.22.0
4
+ version: 4.24.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: 2021-12-03 00:00:00.000000000 Z
11
+ date: 2021-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler