openhab-scripting 4.1.4 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab/core/entity_lookup.rb +1 -57
- data/lib/openhab/dsl/actions.rb +2 -3
- data/lib/openhab/dsl/dsl.rb +8 -12
- data/lib/openhab/dsl/group.rb +1 -5
- data/lib/openhab/dsl/items/color_item.rb +60 -0
- data/lib/openhab/dsl/items/comparable_item.rb +49 -0
- data/lib/openhab/dsl/items/contact_item.rb +41 -0
- data/lib/openhab/dsl/items/date_time_item.rb +64 -0
- data/lib/openhab/dsl/items/dimmer_item.rb +59 -0
- data/lib/openhab/dsl/items/ensure.rb +93 -0
- data/lib/openhab/dsl/items/generic_item.rb +174 -0
- data/lib/openhab/dsl/items/group_item.rb +121 -89
- data/lib/openhab/dsl/items/image_item.rb +5 -41
- data/lib/openhab/dsl/items/item_equality.rb +36 -0
- data/lib/openhab/dsl/items/item_registry.rb +49 -0
- data/lib/openhab/dsl/items/items.rb +81 -35
- data/lib/openhab/dsl/items/metadata.rb +325 -0
- data/lib/openhab/dsl/items/number_item.rb +6 -312
- data/lib/openhab/dsl/items/numeric_item.rb +68 -0
- data/lib/openhab/dsl/items/persistence.rb +122 -0
- data/lib/openhab/dsl/items/player_item.rb +49 -40
- data/lib/openhab/dsl/items/rollershutter_item.rb +25 -77
- data/lib/openhab/dsl/items/string_item.rb +16 -58
- data/lib/openhab/dsl/items/switch_item.rb +62 -0
- data/lib/openhab/dsl/lazy_array.rb +8 -6
- data/lib/openhab/dsl/monkey_patch/events/events.rb +2 -2
- data/lib/openhab/dsl/monkey_patch/events/item_command.rb +67 -24
- data/lib/openhab/dsl/monkey_patch/events/item_event.rb +5 -5
- data/lib/openhab/dsl/monkey_patch/events/item_state.rb +10 -11
- data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +10 -11
- data/lib/openhab/dsl/monkey_patch/ruby/number.rb +25 -2
- data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -3
- data/lib/openhab/dsl/monkey_patch/ruby/string.rb +24 -24
- data/lib/openhab/dsl/rules/terse.rb +24 -0
- data/lib/openhab/dsl/states.rb +1 -1
- data/lib/openhab/dsl/time_of_day.rb +3 -5
- data/lib/openhab/dsl/types/comparable_type.rb +21 -0
- data/lib/openhab/dsl/types/date_time_type.rb +334 -0
- data/lib/openhab/dsl/types/decimal_type.rb +187 -0
- data/lib/openhab/dsl/types/hsb_type.rb +201 -0
- data/lib/openhab/dsl/types/increase_decrease_type.rb +23 -0
- data/lib/openhab/dsl/types/next_previous_type.rb +23 -0
- data/lib/openhab/dsl/types/numeric_type.rb +39 -0
- data/lib/openhab/dsl/types/on_off_type.rb +29 -0
- data/lib/openhab/dsl/types/open_closed_type.rb +29 -0
- data/lib/openhab/dsl/types/percent_type.rb +70 -0
- data/lib/openhab/dsl/types/play_pause_type.rb +27 -0
- data/lib/openhab/dsl/types/quantity_type.rb +275 -0
- data/lib/openhab/dsl/types/refresh_type.rb +18 -0
- data/lib/openhab/dsl/types/rewind_fastforward_type.rb +33 -0
- data/lib/openhab/dsl/types/stop_move_type.rb +23 -0
- data/lib/openhab/dsl/types/string_type.rb +88 -0
- data/lib/openhab/dsl/types/type.rb +72 -0
- data/lib/openhab/dsl/types/types.rb +78 -0
- data/lib/openhab/dsl/types/un_def_type.rb +22 -0
- data/lib/openhab/dsl/types/up_down_type.rb +32 -0
- data/lib/openhab/dsl/units.rb +11 -6
- data/lib/openhab/version.rb +1 -1
- data/lib/openhab.rb +0 -1
- metadata +36 -28
- data/lib/openhab/dsl/items/datetime_item.rb +0 -75
- data/lib/openhab/dsl/items/item_command.rb +0 -90
- data/lib/openhab/dsl/items/item_delegate.rb +0 -125
- data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +0 -51
- data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +0 -140
- data/lib/openhab/dsl/monkey_patch/items/items.rb +0 -142
- data/lib/openhab/dsl/monkey_patch/items/metadata.rb +0 -328
- data/lib/openhab/dsl/monkey_patch/items/persistence.rb +0 -123
- data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +0 -71
- data/lib/openhab/dsl/monkey_patch/ruby/range.rb +0 -47
- data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -32
- data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +0 -97
- data/lib/openhab/dsl/monkey_patch/types/increase_decrease_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/next_previous_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +0 -79
- data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +0 -71
- data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +0 -77
- data/lib/openhab/dsl/monkey_patch/types/play_pause_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +0 -69
- data/lib/openhab/dsl/monkey_patch/types/refresh_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/rewind_fastforward_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/stop_move_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/types.rb +0 -15
- data/lib/openhab/dsl/monkey_patch/types/up_down_type.rb +0 -72
- data/lib/openhab/dsl/types/datetime.rb +0 -338
- data/lib/openhab/dsl/types/quantity.rb +0 -300
data/lib/openhab.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.
|
4
|
+
version: 4.5.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-10-
|
11
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -54,16 +54,26 @@ files:
|
|
54
54
|
- lib/openhab/dsl/dsl.rb
|
55
55
|
- lib/openhab/dsl/gems.rb
|
56
56
|
- lib/openhab/dsl/group.rb
|
57
|
-
- lib/openhab/dsl/items/
|
57
|
+
- lib/openhab/dsl/items/color_item.rb
|
58
|
+
- lib/openhab/dsl/items/comparable_item.rb
|
59
|
+
- lib/openhab/dsl/items/contact_item.rb
|
60
|
+
- lib/openhab/dsl/items/date_time_item.rb
|
61
|
+
- lib/openhab/dsl/items/dimmer_item.rb
|
62
|
+
- lib/openhab/dsl/items/ensure.rb
|
63
|
+
- lib/openhab/dsl/items/generic_item.rb
|
58
64
|
- lib/openhab/dsl/items/group_item.rb
|
59
65
|
- lib/openhab/dsl/items/image_item.rb
|
60
|
-
- lib/openhab/dsl/items/
|
61
|
-
- lib/openhab/dsl/items/
|
66
|
+
- lib/openhab/dsl/items/item_equality.rb
|
67
|
+
- lib/openhab/dsl/items/item_registry.rb
|
62
68
|
- lib/openhab/dsl/items/items.rb
|
69
|
+
- lib/openhab/dsl/items/metadata.rb
|
63
70
|
- lib/openhab/dsl/items/number_item.rb
|
71
|
+
- lib/openhab/dsl/items/numeric_item.rb
|
72
|
+
- lib/openhab/dsl/items/persistence.rb
|
64
73
|
- lib/openhab/dsl/items/player_item.rb
|
65
74
|
- lib/openhab/dsl/items/rollershutter_item.rb
|
66
75
|
- lib/openhab/dsl/items/string_item.rb
|
76
|
+
- lib/openhab/dsl/items/switch_item.rb
|
67
77
|
- lib/openhab/dsl/lazy_array.rb
|
68
78
|
- lib/openhab/dsl/monkey_patch/actions/actions.rb
|
69
79
|
- lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb
|
@@ -73,36 +83,16 @@ files:
|
|
73
83
|
- lib/openhab/dsl/monkey_patch/events/item_state.rb
|
74
84
|
- lib/openhab/dsl/monkey_patch/events/item_state_changed.rb
|
75
85
|
- lib/openhab/dsl/monkey_patch/events/thing_status_info.rb
|
76
|
-
- lib/openhab/dsl/monkey_patch/items/contact_item.rb
|
77
|
-
- lib/openhab/dsl/monkey_patch/items/dimmer_item.rb
|
78
|
-
- lib/openhab/dsl/monkey_patch/items/items.rb
|
79
|
-
- lib/openhab/dsl/monkey_patch/items/metadata.rb
|
80
|
-
- lib/openhab/dsl/monkey_patch/items/persistence.rb
|
81
|
-
- lib/openhab/dsl/monkey_patch/items/switch_item.rb
|
82
86
|
- lib/openhab/dsl/monkey_patch/ruby/number.rb
|
83
|
-
- lib/openhab/dsl/monkey_patch/ruby/range.rb
|
84
87
|
- lib/openhab/dsl/monkey_patch/ruby/ruby.rb
|
85
88
|
- lib/openhab/dsl/monkey_patch/ruby/string.rb
|
86
|
-
- lib/openhab/dsl/monkey_patch/ruby/time.rb
|
87
|
-
- lib/openhab/dsl/monkey_patch/types/decimal_type.rb
|
88
|
-
- lib/openhab/dsl/monkey_patch/types/increase_decrease_type.rb
|
89
|
-
- lib/openhab/dsl/monkey_patch/types/next_previous_type.rb
|
90
|
-
- lib/openhab/dsl/monkey_patch/types/on_off_type.rb
|
91
|
-
- lib/openhab/dsl/monkey_patch/types/open_closed_type.rb
|
92
|
-
- lib/openhab/dsl/monkey_patch/types/percent_type.rb
|
93
|
-
- lib/openhab/dsl/monkey_patch/types/play_pause_type.rb
|
94
|
-
- lib/openhab/dsl/monkey_patch/types/quantity_type.rb
|
95
|
-
- lib/openhab/dsl/monkey_patch/types/refresh_type.rb
|
96
|
-
- lib/openhab/dsl/monkey_patch/types/rewind_fastforward_type.rb
|
97
|
-
- lib/openhab/dsl/monkey_patch/types/stop_move_type.rb
|
98
|
-
- lib/openhab/dsl/monkey_patch/types/types.rb
|
99
|
-
- lib/openhab/dsl/monkey_patch/types/up_down_type.rb
|
100
89
|
- lib/openhab/dsl/persistence.rb
|
101
90
|
- lib/openhab/dsl/rules/automation_rule.rb
|
102
91
|
- lib/openhab/dsl/rules/guard.rb
|
103
92
|
- lib/openhab/dsl/rules/property.rb
|
104
93
|
- lib/openhab/dsl/rules/rule.rb
|
105
94
|
- lib/openhab/dsl/rules/rule_config.rb
|
95
|
+
- lib/openhab/dsl/rules/terse.rb
|
106
96
|
- lib/openhab/dsl/rules/triggers/changed.rb
|
107
97
|
- lib/openhab/dsl/rules/triggers/channel.rb
|
108
98
|
- lib/openhab/dsl/rules/triggers/command.rb
|
@@ -113,8 +103,26 @@ files:
|
|
113
103
|
- lib/openhab/dsl/things.rb
|
114
104
|
- lib/openhab/dsl/time_of_day.rb
|
115
105
|
- lib/openhab/dsl/timers.rb
|
116
|
-
- lib/openhab/dsl/types/
|
117
|
-
- lib/openhab/dsl/types/
|
106
|
+
- lib/openhab/dsl/types/comparable_type.rb
|
107
|
+
- lib/openhab/dsl/types/date_time_type.rb
|
108
|
+
- lib/openhab/dsl/types/decimal_type.rb
|
109
|
+
- lib/openhab/dsl/types/hsb_type.rb
|
110
|
+
- lib/openhab/dsl/types/increase_decrease_type.rb
|
111
|
+
- lib/openhab/dsl/types/next_previous_type.rb
|
112
|
+
- lib/openhab/dsl/types/numeric_type.rb
|
113
|
+
- lib/openhab/dsl/types/on_off_type.rb
|
114
|
+
- lib/openhab/dsl/types/open_closed_type.rb
|
115
|
+
- lib/openhab/dsl/types/percent_type.rb
|
116
|
+
- lib/openhab/dsl/types/play_pause_type.rb
|
117
|
+
- lib/openhab/dsl/types/quantity_type.rb
|
118
|
+
- lib/openhab/dsl/types/refresh_type.rb
|
119
|
+
- lib/openhab/dsl/types/rewind_fastforward_type.rb
|
120
|
+
- lib/openhab/dsl/types/stop_move_type.rb
|
121
|
+
- lib/openhab/dsl/types/string_type.rb
|
122
|
+
- lib/openhab/dsl/types/type.rb
|
123
|
+
- lib/openhab/dsl/types/types.rb
|
124
|
+
- lib/openhab/dsl/types/un_def_type.rb
|
125
|
+
- lib/openhab/dsl/types/up_down_type.rb
|
118
126
|
- lib/openhab/dsl/units.rb
|
119
127
|
- lib/openhab/log/configuration.rb
|
120
128
|
- lib/openhab/log/logger.rb
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'forwardable'
|
4
|
-
require 'java'
|
5
|
-
require 'time'
|
6
|
-
require 'openhab/dsl/types/datetime'
|
7
|
-
require 'openhab/dsl/items/item_delegate'
|
8
|
-
require 'openhab/dsl/items/item_command'
|
9
|
-
|
10
|
-
module OpenHAB
|
11
|
-
module DSL
|
12
|
-
module Items
|
13
|
-
#
|
14
|
-
# Delegation to OpenHAB DateTime Item
|
15
|
-
#
|
16
|
-
# @author Anders Alfredsson
|
17
|
-
#
|
18
|
-
class DateTimeItem
|
19
|
-
extend Forwardable
|
20
|
-
extend OpenHAB::DSL::Items::ItemDelegate
|
21
|
-
extend OpenHAB::DSL::Items::ItemCommand
|
22
|
-
include Comparable
|
23
|
-
|
24
|
-
def_item_delegator :@datetime_item
|
25
|
-
|
26
|
-
item_type Java::OrgOpenhabCoreLibraryItems::DateTimeItem
|
27
|
-
|
28
|
-
#
|
29
|
-
# Create a new DateTimeItem
|
30
|
-
#
|
31
|
-
# @param [Java::org::openhab::core::libarary::items::DateTimeItem] datetime_item Openhab DateTimeItem to
|
32
|
-
# delegate to
|
33
|
-
#
|
34
|
-
def initialize(datetime_item)
|
35
|
-
@datetime_item = datetime_item
|
36
|
-
item_missing_delegate { @datetime_item }
|
37
|
-
item_missing_delegate { to_dt }
|
38
|
-
end
|
39
|
-
|
40
|
-
#
|
41
|
-
# Return an instance of DateTime that wraps the DateTimeItem's state
|
42
|
-
#
|
43
|
-
# @return [OpenHAB::DSL::Types::DateTime] Wrapper for the Item's state, or nil if it has no state
|
44
|
-
#
|
45
|
-
def to_dt
|
46
|
-
OpenHAB::DSL::Types::DateTime.new(@datetime_item.state) if state?
|
47
|
-
end
|
48
|
-
|
49
|
-
#
|
50
|
-
# Compare the Item's state to another Item or object that can be compared
|
51
|
-
#
|
52
|
-
# @param [Object] other Other objet to compare against
|
53
|
-
#
|
54
|
-
# @return [Integer] -1, 0 or 1 depending on the result of the comparison
|
55
|
-
#
|
56
|
-
def <=>(other)
|
57
|
-
return unless state?
|
58
|
-
|
59
|
-
logger.trace("Comparing self (#{self.class}) to #{other} (#{other.class})")
|
60
|
-
other = other.to_dt if other.is_a? DateTimeItem
|
61
|
-
to_dt <=> other
|
62
|
-
end
|
63
|
-
|
64
|
-
#
|
65
|
-
# Get the time zone of the Item
|
66
|
-
#
|
67
|
-
# @return [String] The timezone in `[+-]hh:mm(:ss)` format or nil if the Item has no state
|
68
|
-
#
|
69
|
-
def zone
|
70
|
-
to_dt.zone if state?
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'java'
|
4
|
-
require 'openhab/log/logger'
|
5
|
-
require 'openhab/dsl/monkey_patch/events/item_command'
|
6
|
-
|
7
|
-
module OpenHAB
|
8
|
-
module DSL
|
9
|
-
module Items
|
10
|
-
#
|
11
|
-
# Holds methods to automatically generate commands and
|
12
|
-
# accessors for items
|
13
|
-
module ItemCommand
|
14
|
-
include OpenHAB::Log
|
15
|
-
|
16
|
-
#
|
17
|
-
# For every value in the supplied enumeration create a corresponding method mapped to the lowercase
|
18
|
-
# string representation of the enum value For example, an enum with values of STOP and START
|
19
|
-
# would create methods stop() and start() that send the corresponding STOP and START commands to the item
|
20
|
-
#
|
21
|
-
# @param [Java::JavaLang::Enum] command_enum Enumeration to create commands for
|
22
|
-
# @param [Hash] optional hash in which if a generated method name mactches a key, the value of that key
|
23
|
-
# will be used as the method name instead, for example `:play? => :playing?`
|
24
|
-
#
|
25
|
-
#
|
26
|
-
def item_command(command_enum, methods = {})
|
27
|
-
# rubocop:disable Style/HashEachMethods
|
28
|
-
# Disable rule because Java enum does not support each_value
|
29
|
-
command_enum.values.each do |command|
|
30
|
-
command_method = command.to_s.downcase
|
31
|
-
command_method = methods.transform_keys(&:to_sym).fetch(command_method.to_sym, command_method)
|
32
|
-
logger.trace("Creating command method (#{command_method}) for #{self}")
|
33
|
-
define_method(command_method) do
|
34
|
-
self.command(command)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
# rubocop:enable Style/HashEachMethods
|
38
|
-
end
|
39
|
-
|
40
|
-
#
|
41
|
-
# For every value in the supplied enumeration create a corresponding method mapped to the lowercase
|
42
|
-
# string representation appended with a question mark '?' of the enum value For example,
|
43
|
-
# an enum with values of UP and DOWN would create methods up? and down? that check
|
44
|
-
# if the current state matches the value of the enum
|
45
|
-
#
|
46
|
-
# @param [Java::JavaLang::Enum] command_enum Enumeration to create methods for each value
|
47
|
-
# to check if current state matches that enum
|
48
|
-
# @param [Hash] optional hash in which if a generated method name mactches a key, the value of that key
|
49
|
-
# will be used as the method name instead, for example `:play? => :playing?`
|
50
|
-
#
|
51
|
-
#
|
52
|
-
def item_state(command_enum, methods = {})
|
53
|
-
# rubocop:disable Style/HashEachMethods
|
54
|
-
# Disable rule because Java enum does not support each_value
|
55
|
-
command_enum.values.each do |command|
|
56
|
-
status_method = "#{command.to_s.downcase}?"
|
57
|
-
status_method = methods.transform_keys(&:to_sym).fetch(status_method.to_sym, status_method)
|
58
|
-
logger.trace("Creating status method (#{status_method}) for #{self}")
|
59
|
-
define_method(status_method) do
|
60
|
-
state? && state.as(command_enum) == command
|
61
|
-
end
|
62
|
-
end
|
63
|
-
# rubocop:enable Style/HashEachMethods
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Extract the accepted state and command types from the specified OpenHAB
|
68
|
-
# Item class and pass them to item_state/item_command
|
69
|
-
#
|
70
|
-
# @param [Java::JavaLang::Class] item_class a Class that implements Java::OrgOpenhabCoreItems::Item
|
71
|
-
# @param [Hash] optional hash in which if a generated method name mactches a key, the value of that key
|
72
|
-
# will be used as the method name instead, for example `:play? => :playing?`
|
73
|
-
#
|
74
|
-
def item_type(item_class, methods = {}) # rubocop:disable Metrics/MethodLength
|
75
|
-
item_class.field_reader(:ACCEPTED_DATA_TYPES)
|
76
|
-
item_class.field_reader(:ACCEPTED_COMMAND_TYPES)
|
77
|
-
item_class.ACCEPTED_DATA_TYPES.select(&:is_enum)
|
78
|
-
.grep_v(UnDefType)
|
79
|
-
.each { |type| item_state(type.ruby_class, methods) }
|
80
|
-
item_class.ACCEPTED_COMMAND_TYPES.select(&:is_enum)
|
81
|
-
.grep_v(UnDefType)
|
82
|
-
.each do |type|
|
83
|
-
item_command(type.ruby_class, methods)
|
84
|
-
MonkeyPatch::Events::ItemCommandEvent.def_enum_predicates(type.ruby_class)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'java'
|
4
|
-
require 'openhab/log/logger'
|
5
|
-
require 'forwardable'
|
6
|
-
|
7
|
-
module OpenHAB
|
8
|
-
module DSL
|
9
|
-
module Items
|
10
|
-
#
|
11
|
-
# Holds methods to delegate to items
|
12
|
-
#
|
13
|
-
module ItemDelegate
|
14
|
-
include OpenHAB::Log
|
15
|
-
|
16
|
-
# @return [Array<Symbol>] Array of methods that by default will be forwarded to an OpenHAB Item.
|
17
|
-
DEFAULT_DELEGATION_METHODS = %i[to_s groups].freeze
|
18
|
-
private_constant :DEFAULT_DELEGATION_METHODS
|
19
|
-
|
20
|
-
#
|
21
|
-
# Extends calling object with DSL and helper methods
|
22
|
-
#
|
23
|
-
# @param [Object] base Object to decorate with DSL and helper methods
|
24
|
-
#
|
25
|
-
#
|
26
|
-
def self.extended(base)
|
27
|
-
base.extend Forwardable
|
28
|
-
base.include OpenHAB::DSL::Items::ItemDelegate
|
29
|
-
end
|
30
|
-
|
31
|
-
#
|
32
|
-
# Delegate a set of methods to the supplied delegator
|
33
|
-
#
|
34
|
-
# @param [Java::OrgOpenhabCoreItems::GenericItem] item to delegate methods to
|
35
|
-
# @param [Symbol] methods to delegate, if not supplied default methods are used
|
36
|
-
#
|
37
|
-
#
|
38
|
-
def def_item_delegator(item, *methods)
|
39
|
-
methods = DEFAULT_DELEGATION_METHODS if methods.size.zero?
|
40
|
-
methods.each do |method|
|
41
|
-
logger.trace("Creating delegate for (#{method}) to #{item}) for #{self.class}")
|
42
|
-
def_delegator item, method
|
43
|
-
end
|
44
|
-
define_method(:oh_item) { instance_variable_get(item) }
|
45
|
-
define_method(:hash) { oh_item.hash_code }
|
46
|
-
define_method(:eql?) { |other| hash == other.hash }
|
47
|
-
end
|
48
|
-
|
49
|
-
#
|
50
|
-
# Delegates methods to the object returned from the supplied block if
|
51
|
-
# they don't exist in the object this is included in. If the supplied block returns nil, no delegation occurs
|
52
|
-
# If this item is called more than once delegation occurs in the order of invocation, i.e. the object returned
|
53
|
-
# by the first block is delegated to if it responds to the missing method,
|
54
|
-
# then the second block is processed, etc.
|
55
|
-
#
|
56
|
-
# @param [Proc] &delegate delgegate block
|
57
|
-
#
|
58
|
-
#
|
59
|
-
def item_missing_delegate(&delegate)
|
60
|
-
@delegates ||= []
|
61
|
-
@delegates << delegate
|
62
|
-
end
|
63
|
-
|
64
|
-
#
|
65
|
-
# Delegate missing method calls to delegates supplied to item_delgate method
|
66
|
-
# if no delegates exist or respond to missing method, super is invoked which will
|
67
|
-
# throw the appropriate method missing error
|
68
|
-
#
|
69
|
-
# @param [String] meth misisng method
|
70
|
-
# @param [Array] *args Arguments to the missing method
|
71
|
-
# @param [Proc] &block supplied to the missing method
|
72
|
-
#
|
73
|
-
# @return [Object] Result of missing method invocation
|
74
|
-
#
|
75
|
-
def method_missing(meth, *args, &block)
|
76
|
-
logger.trace("Method (#{meth}) missing for item #{self.class}")
|
77
|
-
delegate = delegate_for(meth)
|
78
|
-
if delegate
|
79
|
-
logger.trace("Delegating #{meth} to #{delegate.class}")
|
80
|
-
delegate.__send__(meth, *args, &block)
|
81
|
-
else
|
82
|
-
super
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
#
|
87
|
-
# Checks if any of the supplied delgates respond to a specific method
|
88
|
-
#
|
89
|
-
# @param [String] meth method to check for
|
90
|
-
# @param [Boolean] _include_private if private methods should be checked
|
91
|
-
#
|
92
|
-
# @return [Boolean] True if any delegates respond to method, false otherwise
|
93
|
-
#
|
94
|
-
def respond_to_missing?(meth, _include_private = false)
|
95
|
-
logger.trace("Checking if (#{self.class}) responds to (#{meth})")
|
96
|
-
responds = !delegate_for(meth).nil?
|
97
|
-
logger.trace("(#{self.class}) responds to (#{meth}) (#{responds})")
|
98
|
-
responds
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
#
|
104
|
-
# Find a delegate for the supplied method
|
105
|
-
#
|
106
|
-
# @param [String] meth method to find delegate for
|
107
|
-
#
|
108
|
-
# @return [Boolean] True if any method responds to the supplied delegate, false otherwise
|
109
|
-
#
|
110
|
-
def delegate_for(meth)
|
111
|
-
(@delegates || []).each do |delegate_block|
|
112
|
-
delegate = delegate_block.call(meth)
|
113
|
-
logger.trace("Checking if delegate (#{delegate.class}) responds to (#{meth})")
|
114
|
-
if delegate.respond_to? meth
|
115
|
-
logger.trace("Delegate (#{delegate.class}) found for method (#{meth})")
|
116
|
-
return delegate
|
117
|
-
end
|
118
|
-
end
|
119
|
-
logger.trace("No delegate found for method (#{meth})")
|
120
|
-
nil
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'java'
|
4
|
-
require 'openhab/dsl/items/item_command'
|
5
|
-
|
6
|
-
module OpenHAB
|
7
|
-
module DSL
|
8
|
-
module MonkeyPatch
|
9
|
-
#
|
10
|
-
# Patches OpenHAB items
|
11
|
-
#
|
12
|
-
module Items
|
13
|
-
java_import Java::OrgOpenhabCoreLibraryItems::ContactItem
|
14
|
-
|
15
|
-
#
|
16
|
-
# Alias class for ContactItem
|
17
|
-
#
|
18
|
-
::Contact = ContactItem
|
19
|
-
|
20
|
-
#
|
21
|
-
# Monkey patch Contact Item with Ruby methods
|
22
|
-
#
|
23
|
-
class ContactItem
|
24
|
-
extend OpenHAB::DSL::Items::ItemCommand
|
25
|
-
|
26
|
-
java_import Java::OrgOpenhabCoreLibraryTypes::OpenClosedType
|
27
|
-
|
28
|
-
item_type Java::OrgOpenhabCoreLibraryItems::ContactItem
|
29
|
-
|
30
|
-
#
|
31
|
-
# Compares contacts to OpenClosedTypes
|
32
|
-
#
|
33
|
-
# @param [Object] other object to compare to
|
34
|
-
#
|
35
|
-
# @return [Boolean] True if contact has a state and state equals other, nil if no state,
|
36
|
-
# result from super if not supplied an OpenClosedType
|
37
|
-
#
|
38
|
-
def ==(other)
|
39
|
-
other = other.get_state_as(OpenClosedType) if other.respond_to?(:get_state_as)
|
40
|
-
|
41
|
-
if other.is_a? OpenClosedType
|
42
|
-
state? && state == other
|
43
|
-
else
|
44
|
-
super
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,140 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'java'
|
4
|
-
require 'openhab/dsl/items/item_command'
|
5
|
-
require 'forwardable'
|
6
|
-
|
7
|
-
module OpenHAB
|
8
|
-
module DSL
|
9
|
-
module MonkeyPatch
|
10
|
-
#
|
11
|
-
# Patches OpenHAB items
|
12
|
-
#
|
13
|
-
module Items
|
14
|
-
java_import Java::OrgOpenhabCoreLibraryItems::DimmerItem
|
15
|
-
java_import Java::OrgOpenhabCoreItems::GenericItem
|
16
|
-
|
17
|
-
#
|
18
|
-
# Alias class for is_a? testing
|
19
|
-
#
|
20
|
-
::Dimmer = DimmerItem
|
21
|
-
|
22
|
-
#
|
23
|
-
# Monkey Patch DimmerItem
|
24
|
-
#
|
25
|
-
class DimmerItem
|
26
|
-
include Comparable
|
27
|
-
java_import Java::OrgOpenhabCoreLibraryTypes::DecimalType
|
28
|
-
java_import Java::OrgOpenhabCoreLibraryTypes::IncreaseDecreaseType
|
29
|
-
|
30
|
-
extend Forwardable
|
31
|
-
extend OpenHAB::DSL::Items::ItemCommand
|
32
|
-
|
33
|
-
item_type Java::OrgOpenhabCoreLibraryItems::DimmerItem
|
34
|
-
|
35
|
-
def_delegator :state, :to_s
|
36
|
-
|
37
|
-
#
|
38
|
-
# Dim the dimmer
|
39
|
-
#
|
40
|
-
# @param [Integer] amount to dim by
|
41
|
-
#
|
42
|
-
# @return [Integer] level target for dimmer
|
43
|
-
#
|
44
|
-
def dim(amount = 1)
|
45
|
-
[state&.to_big_decimal&.intValue&.-(amount), 0].compact
|
46
|
-
.max
|
47
|
-
.tap { |target| command(target) }
|
48
|
-
end
|
49
|
-
|
50
|
-
#
|
51
|
-
# Brighten the dimmer
|
52
|
-
#
|
53
|
-
# @param [Integer] amount to brighten by
|
54
|
-
#
|
55
|
-
# @return [Integer] level target for dimmer
|
56
|
-
#
|
57
|
-
def brighten(amount = 1)
|
58
|
-
state&.to_big_decimal&.intValue&.+(amount)&.tap { |target| command(target) }
|
59
|
-
end
|
60
|
-
|
61
|
-
#
|
62
|
-
# Compare DimmerItem to supplied object
|
63
|
-
#
|
64
|
-
# @param [Object] other object to compare to
|
65
|
-
#
|
66
|
-
# @return [Integer] -1,0,1 or nil depending on value supplied,
|
67
|
-
# nil comparison to supplied object is not possible.
|
68
|
-
#
|
69
|
-
def <=>(other)
|
70
|
-
logger.trace("Comparing #{self} to #{other}")
|
71
|
-
case other
|
72
|
-
when GenericItem, NumberItem then state <=> other.state
|
73
|
-
when DecimalType then state <=> other
|
74
|
-
when Numeric then state.to_big_decimal.to_d <=> other.to_d
|
75
|
-
else compare_to(other)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
#
|
80
|
-
# Coerce objects into a DimmerItem
|
81
|
-
#
|
82
|
-
# @param [Object] other object to coerce to a DimmerItem if possible
|
83
|
-
#
|
84
|
-
# @return [Object] Numeric when applicable
|
85
|
-
#
|
86
|
-
def coerce(other)
|
87
|
-
logger.trace("Coercing #{self} as a request from #{other.class}")
|
88
|
-
case other
|
89
|
-
when Numeric then [other, state.to_big_decimal.to_d]
|
90
|
-
else [other, state]
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
#
|
95
|
-
# Compare DimmerItem to supplied object.
|
96
|
-
# The == operator needs to be overridden because the parent java object
|
97
|
-
# has .equals which overrides the <=> operator above
|
98
|
-
#
|
99
|
-
# @param [Object] other object to compare to
|
100
|
-
#
|
101
|
-
# @return [Integer] true if the two objects contain the same value, false otherwise
|
102
|
-
#
|
103
|
-
def ==(other)
|
104
|
-
(self <=> other).zero?
|
105
|
-
end
|
106
|
-
|
107
|
-
#
|
108
|
-
# Define math operations
|
109
|
-
#
|
110
|
-
%i[+ - / *].each do |operator|
|
111
|
-
define_method(operator) do |other|
|
112
|
-
right, left = coerce(other)
|
113
|
-
left.send(operator, right)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
#
|
118
|
-
# Check if dimmer has a state and state is not zero
|
119
|
-
#
|
120
|
-
# @return [Boolean] True if dimmer is not NULL or UNDEF and value is not 0
|
121
|
-
#
|
122
|
-
def truthy?
|
123
|
-
state? && state != DecimalType::ZERO
|
124
|
-
end
|
125
|
-
|
126
|
-
#
|
127
|
-
# Value of dimmer
|
128
|
-
#
|
129
|
-
# @return [Integer] Value of dimmer or nil if state is UNDEF or NULL
|
130
|
-
#
|
131
|
-
def to_i
|
132
|
-
state&.to_big_decimal&.intValue
|
133
|
-
end
|
134
|
-
|
135
|
-
alias to_int to_i
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|