openhab-jrubyscripting 5.0.0.rc1
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 +7 -0
- data/lib/openhab/core/actions.rb +163 -0
- data/lib/openhab/core/entity_lookup.rb +144 -0
- data/lib/openhab/core/events/abstract_event.rb +17 -0
- data/lib/openhab/core/events/item_channel_link.rb +36 -0
- data/lib/openhab/core/events/item_command_event.rb +78 -0
- data/lib/openhab/core/events/item_event.rb +22 -0
- data/lib/openhab/core/events/item_state_changed_event.rb +52 -0
- data/lib/openhab/core/events/item_state_event.rb +51 -0
- data/lib/openhab/core/events/thing.rb +29 -0
- data/lib/openhab/core/events/thing_status_info_event.rb +53 -0
- data/lib/openhab/core/events.rb +10 -0
- data/lib/openhab/core/items/accepted_data_types.rb +29 -0
- data/lib/openhab/core/items/color_item.rb +52 -0
- data/lib/openhab/core/items/contact_item.rb +52 -0
- data/lib/openhab/core/items/date_time_item.rb +58 -0
- data/lib/openhab/core/items/dimmer_item.rb +148 -0
- data/lib/openhab/core/items/generic_item.rb +344 -0
- data/lib/openhab/core/items/group_item.rb +174 -0
- data/lib/openhab/core/items/image_item.rb +109 -0
- data/lib/openhab/core/items/location_item.rb +34 -0
- data/lib/openhab/core/items/metadata/hash.rb +390 -0
- data/lib/openhab/core/items/metadata/namespace_hash.rb +469 -0
- data/lib/openhab/core/items/metadata.rb +11 -0
- data/lib/openhab/core/items/number_item.rb +62 -0
- data/lib/openhab/core/items/numeric_item.rb +22 -0
- data/lib/openhab/core/items/persistence.rb +327 -0
- data/lib/openhab/core/items/player_item.rb +66 -0
- data/lib/openhab/core/items/proxy.rb +59 -0
- data/lib/openhab/core/items/registry.rb +66 -0
- data/lib/openhab/core/items/rollershutter_item.rb +68 -0
- data/lib/openhab/core/items/semantics/enumerable.rb +152 -0
- data/lib/openhab/core/items/semantics.rb +476 -0
- data/lib/openhab/core/items/state_storage.rb +53 -0
- data/lib/openhab/core/items/string_item.rb +28 -0
- data/lib/openhab/core/items/switch_item.rb +78 -0
- data/lib/openhab/core/items.rb +114 -0
- data/lib/openhab/core/lazy_array.rb +52 -0
- data/lib/openhab/core/profile_factory.rb +118 -0
- data/lib/openhab/core/script_handling.rb +55 -0
- data/lib/openhab/core/things/channel.rb +48 -0
- data/lib/openhab/core/things/channel_uid.rb +51 -0
- data/lib/openhab/core/things/item_channel_link.rb +33 -0
- data/lib/openhab/core/things/profile_callback.rb +52 -0
- data/lib/openhab/core/things/proxy.rb +69 -0
- data/lib/openhab/core/things/registry.rb +46 -0
- data/lib/openhab/core/things/thing.rb +194 -0
- data/lib/openhab/core/things.rb +22 -0
- data/lib/openhab/core/timer.rb +128 -0
- data/lib/openhab/core/types/comparable_type.rb +23 -0
- data/lib/openhab/core/types/date_time_type.rb +259 -0
- data/lib/openhab/core/types/decimal_type.rb +192 -0
- data/lib/openhab/core/types/hsb_type.rb +183 -0
- data/lib/openhab/core/types/increase_decrease_type.rb +34 -0
- data/lib/openhab/core/types/next_previous_type.rb +34 -0
- data/lib/openhab/core/types/numeric_type.rb +52 -0
- data/lib/openhab/core/types/on_off_type.rb +46 -0
- data/lib/openhab/core/types/open_closed_type.rb +41 -0
- data/lib/openhab/core/types/percent_type.rb +95 -0
- data/lib/openhab/core/types/play_pause_type.rb +38 -0
- data/lib/openhab/core/types/point_type.rb +117 -0
- data/lib/openhab/core/types/quantity_type.rb +327 -0
- data/lib/openhab/core/types/raw_type.rb +26 -0
- data/lib/openhab/core/types/refresh_type.rb +27 -0
- data/lib/openhab/core/types/rewind_fastforward_type.rb +38 -0
- data/lib/openhab/core/types/stop_move_type.rb +34 -0
- data/lib/openhab/core/types/string_type.rb +76 -0
- data/lib/openhab/core/types/type.rb +117 -0
- data/lib/openhab/core/types/un_def_type.rb +38 -0
- data/lib/openhab/core/types/up_down_type.rb +50 -0
- data/lib/openhab/core/types.rb +69 -0
- data/lib/openhab/core/uid.rb +36 -0
- data/lib/openhab/core.rb +85 -0
- data/lib/openhab/core_ext/java/duration.rb +115 -0
- data/lib/openhab/core_ext/java/local_date.rb +93 -0
- data/lib/openhab/core_ext/java/local_time.rb +106 -0
- data/lib/openhab/core_ext/java/month.rb +59 -0
- data/lib/openhab/core_ext/java/month_day.rb +105 -0
- data/lib/openhab/core_ext/java/period.rb +103 -0
- data/lib/openhab/core_ext/java/temporal_amount.rb +34 -0
- data/lib/openhab/core_ext/java/time.rb +58 -0
- data/lib/openhab/core_ext/java/unit.rb +15 -0
- data/lib/openhab/core_ext/java/zoned_date_time.rb +116 -0
- data/lib/openhab/core_ext/ruby/array.rb +21 -0
- data/lib/openhab/core_ext/ruby/class.rb +15 -0
- data/lib/openhab/core_ext/ruby/date.rb +89 -0
- data/lib/openhab/core_ext/ruby/numeric.rb +190 -0
- data/lib/openhab/core_ext/ruby/range.rb +70 -0
- data/lib/openhab/core_ext/ruby/time.rb +104 -0
- data/lib/openhab/core_ext.rb +18 -0
- data/lib/openhab/dsl/events/watch_event.rb +18 -0
- data/lib/openhab/dsl/events.rb +9 -0
- data/lib/openhab/dsl/gems.rb +3 -0
- data/lib/openhab/dsl/items/builder.rb +618 -0
- data/lib/openhab/dsl/items/ensure.rb +93 -0
- data/lib/openhab/dsl/items/timed_command.rb +236 -0
- data/lib/openhab/dsl/rules/automation_rule.rb +308 -0
- data/lib/openhab/dsl/rules/builder.rb +1373 -0
- data/lib/openhab/dsl/rules/guard.rb +115 -0
- data/lib/openhab/dsl/rules/name_inference.rb +160 -0
- data/lib/openhab/dsl/rules/property.rb +76 -0
- data/lib/openhab/dsl/rules/rule_triggers.rb +96 -0
- data/lib/openhab/dsl/rules/terse.rb +63 -0
- data/lib/openhab/dsl/rules/triggers/changed.rb +169 -0
- data/lib/openhab/dsl/rules/triggers/channel.rb +57 -0
- data/lib/openhab/dsl/rules/triggers/command.rb +107 -0
- data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +161 -0
- data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +164 -0
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +195 -0
- data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +127 -0
- data/lib/openhab/dsl/rules/triggers/trigger.rb +56 -0
- data/lib/openhab/dsl/rules/triggers/updated.rb +130 -0
- data/lib/openhab/dsl/rules/triggers/watch/watch.rb +55 -0
- data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +155 -0
- data/lib/openhab/dsl/rules/triggers.rb +12 -0
- data/lib/openhab/dsl/rules.rb +29 -0
- data/lib/openhab/dsl/script_handling.rb +55 -0
- data/lib/openhab/dsl/things/builder.rb +263 -0
- data/lib/openhab/dsl/thread_local.rb +48 -0
- data/lib/openhab/dsl/timer_manager.rb +191 -0
- data/lib/openhab/dsl/version.rb +9 -0
- data/lib/openhab/dsl.rb +686 -0
- data/lib/openhab/log.rb +348 -0
- data/lib/openhab/osgi.rb +70 -0
- data/lib/openhab/rspec/configuration.rb +56 -0
- data/lib/openhab/rspec/example_group.rb +90 -0
- data/lib/openhab/rspec/helpers.rb +439 -0
- data/lib/openhab/rspec/hooks.rb +93 -0
- data/lib/openhab/rspec/jruby.rb +46 -0
- data/lib/openhab/rspec/karaf.rb +811 -0
- data/lib/openhab/rspec/mocks/bundle_install_support.rb +25 -0
- data/lib/openhab/rspec/mocks/bundle_resolver.rb +30 -0
- data/lib/openhab/rspec/mocks/event_admin.rb +146 -0
- data/lib/openhab/rspec/mocks/metadata_provider.rb +75 -0
- data/lib/openhab/rspec/mocks/persistence_service.rb +140 -0
- data/lib/openhab/rspec/mocks/safe_caller.rb +40 -0
- data/lib/openhab/rspec/mocks/synchronous_executor.rb +56 -0
- data/lib/openhab/rspec/mocks/thing_handler.rb +76 -0
- data/lib/openhab/rspec/mocks/timer.rb +95 -0
- data/lib/openhab/rspec/openhab/core/actions.rb +26 -0
- data/lib/openhab/rspec/openhab/core/items/proxy.rb +27 -0
- data/lib/openhab/rspec/openhab/core/things/proxy.rb +27 -0
- data/lib/openhab/rspec/shell.rb +31 -0
- data/lib/openhab/rspec/suspend_rules.rb +60 -0
- data/lib/openhab/rspec.rb +17 -0
- data/lib/openhab/yard/cli/stats.rb +23 -0
- data/lib/openhab/yard/code_objects/group_object.rb +17 -0
- data/lib/openhab/yard/code_objects/java/base.rb +31 -0
- data/lib/openhab/yard/code_objects/java/class_object.rb +11 -0
- data/lib/openhab/yard/code_objects/java/field_object.rb +15 -0
- data/lib/openhab/yard/code_objects/java/interface_object.rb +15 -0
- data/lib/openhab/yard/code_objects/java/package_object.rb +11 -0
- data/lib/openhab/yard/code_objects/java/proxy.rb +23 -0
- data/lib/openhab/yard/handlers/jruby/base.rb +49 -0
- data/lib/openhab/yard/handlers/jruby/class_handler.rb +18 -0
- data/lib/openhab/yard/handlers/jruby/constant_handler.rb +18 -0
- data/lib/openhab/yard/handlers/jruby/java_import_handler.rb +27 -0
- data/lib/openhab/yard/handlers/jruby/mixin_handler.rb +23 -0
- data/lib/openhab/yard/html_helper.rb +44 -0
- data/lib/openhab/yard/tags/constant_directive.rb +20 -0
- data/lib/openhab/yard/tags/group_directive.rb +24 -0
- data/lib/openhab/yard/tags/library.rb +3 -0
- data/lib/openhab/yard.rb +32 -0
- metadata +504 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Extensions to Date
|
|
4
|
+
class Date
|
|
5
|
+
#
|
|
6
|
+
# Extends {#+} to allow adding a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
7
|
+
#
|
|
8
|
+
# @param [java.time.temporal.TemporalAmount] other
|
|
9
|
+
# @return [LocalDate] If other is a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
10
|
+
#
|
|
11
|
+
def plus_with_temporal(other)
|
|
12
|
+
return to_local_date + other if other.is_a?(java.time.temporal.TemporalAmount)
|
|
13
|
+
|
|
14
|
+
plus_without_temporal(other)
|
|
15
|
+
end
|
|
16
|
+
alias_method :plus_without_temporal, :+
|
|
17
|
+
alias_method :+, :plus_with_temporal
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# Extends {#-} to allow subtracting a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
21
|
+
#
|
|
22
|
+
# @param [java.time.temporal.TemporalAmount] other
|
|
23
|
+
# @return [LocalDate] If other is a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
24
|
+
#
|
|
25
|
+
def minus_with_temporal(other)
|
|
26
|
+
case other
|
|
27
|
+
when java.time.temporal.TemporalAmount, java.time.LocalDate
|
|
28
|
+
to_local_date - other
|
|
29
|
+
else
|
|
30
|
+
minus_without_temporal(other)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
alias_method :minus_without_temporal, :-
|
|
34
|
+
alias_method :-, :minus_with_temporal
|
|
35
|
+
|
|
36
|
+
# @return [LocalDate]
|
|
37
|
+
def to_local_date(_context = nil)
|
|
38
|
+
java.time.LocalDate.of(year, month, day)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @return [Month]
|
|
42
|
+
def to_month
|
|
43
|
+
java.time.Month.of(month)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [MonthDay]
|
|
47
|
+
def to_month_day
|
|
48
|
+
java.time.MonthDay.of(month, day)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @param [ZonedDateTime, nil] context
|
|
52
|
+
# A {ZonedDateTime} used to fill in missing fields during conversion.
|
|
53
|
+
# {OpenHAB::CoreExt::Java::ZonedDateTime.now ZonedDateTime.now} is assumed
|
|
54
|
+
# if not given.
|
|
55
|
+
# @return [ZonedDateTime]
|
|
56
|
+
def to_zoned_date_time(context = nil)
|
|
57
|
+
to_local_date.to_zoned_date_time(context)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @return [Integer, nil]
|
|
61
|
+
def compare_with_coercion(other)
|
|
62
|
+
return compare_without_coercion(other) if other.is_a?(self.class)
|
|
63
|
+
|
|
64
|
+
return self <=> other.to_date(self) if other.is_a?(java.time.MonthDay)
|
|
65
|
+
|
|
66
|
+
if other.respond_to?(:coerce) && (lhs, rhs = coerce(self))
|
|
67
|
+
return lhs <=> rhs
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
compare_without_coercion(other)
|
|
71
|
+
end
|
|
72
|
+
alias_method :compare_without_coercion, :<=>
|
|
73
|
+
alias_method :<=>, :compare_with_coercion
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Convert `other` to Date, if possible.
|
|
77
|
+
#
|
|
78
|
+
# @param [#to_date] other
|
|
79
|
+
# @return [Array, nil]
|
|
80
|
+
#
|
|
81
|
+
def coerce(other)
|
|
82
|
+
return nil unless other.respond_to?(:to_date)
|
|
83
|
+
return [other.to_date(self), self] if other.method(:to_date).arity == 1
|
|
84
|
+
|
|
85
|
+
[other.to_date, self]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
alias_method :inspect, :to_s
|
|
89
|
+
end
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Extensions to Integer
|
|
4
|
+
class Integer
|
|
5
|
+
class << self
|
|
6
|
+
#
|
|
7
|
+
# @!macro def_duration_method
|
|
8
|
+
# @!method $1
|
|
9
|
+
#
|
|
10
|
+
# Create {Duration} of `self` $1
|
|
11
|
+
#
|
|
12
|
+
# @return [Duration]
|
|
13
|
+
#
|
|
14
|
+
# @!visibility private
|
|
15
|
+
def def_duration_method(unit)
|
|
16
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
17
|
+
def #{unit} # def seconds
|
|
18
|
+
java.time.Duration.of_#{unit}(self) # java.time.Duration.of_seconds(self)
|
|
19
|
+
end # end
|
|
20
|
+
RUBY
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# @!macro def_period_method
|
|
25
|
+
# @!method $1
|
|
26
|
+
#
|
|
27
|
+
# Create {Period} of `self` $1
|
|
28
|
+
#
|
|
29
|
+
# @return [Period]
|
|
30
|
+
#
|
|
31
|
+
# @!visibility private
|
|
32
|
+
def def_period_method(unit)
|
|
33
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
34
|
+
def #{unit} # def days
|
|
35
|
+
java.time.Period.of_#{unit}(self) # java.time.Period.of_days(self)
|
|
36
|
+
end # end
|
|
37
|
+
RUBY
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Create {Duration} of `self` milliseconds
|
|
43
|
+
#
|
|
44
|
+
# @return [Duration]
|
|
45
|
+
#
|
|
46
|
+
def milliseconds
|
|
47
|
+
Duration.of_millis(self)
|
|
48
|
+
end
|
|
49
|
+
alias_method :millisecond, :milliseconds
|
|
50
|
+
alias_method :ms, :milliseconds
|
|
51
|
+
def_duration_method(:seconds)
|
|
52
|
+
alias_method :second, :seconds
|
|
53
|
+
def_duration_method(:minutes)
|
|
54
|
+
alias_method :minute, :minutes
|
|
55
|
+
def_duration_method(:hours)
|
|
56
|
+
alias_method :hour, :hours
|
|
57
|
+
def_period_method(:days)
|
|
58
|
+
alias_method :day, :days
|
|
59
|
+
def_period_method(:months)
|
|
60
|
+
alias_method :month, :months
|
|
61
|
+
def_period_method(:years)
|
|
62
|
+
alias_method :year, :years
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Extensions to Float
|
|
66
|
+
class Float
|
|
67
|
+
#
|
|
68
|
+
# Create {Duration} of `self` milliseconds
|
|
69
|
+
#
|
|
70
|
+
# @return [Duration]
|
|
71
|
+
#
|
|
72
|
+
def milliseconds
|
|
73
|
+
java.time.Duration.of_nanos((self * 1_000_000).to_i)
|
|
74
|
+
end
|
|
75
|
+
alias_method :millisecond, :milliseconds
|
|
76
|
+
alias_method :ms, :milliseconds
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Create {Duration} of `self` seconds
|
|
80
|
+
#
|
|
81
|
+
# @return [Duration]
|
|
82
|
+
#
|
|
83
|
+
def seconds
|
|
84
|
+
(self * 1000).milliseconds
|
|
85
|
+
end
|
|
86
|
+
alias_method :second, :seconds
|
|
87
|
+
|
|
88
|
+
#
|
|
89
|
+
# Create {Duration} of `self` minutes
|
|
90
|
+
#
|
|
91
|
+
# @return [Duration]
|
|
92
|
+
#
|
|
93
|
+
def minutes
|
|
94
|
+
(self * 60).seconds
|
|
95
|
+
end
|
|
96
|
+
alias_method :minute, :minutes
|
|
97
|
+
|
|
98
|
+
#
|
|
99
|
+
# Create {Duration} of `self` hours
|
|
100
|
+
#
|
|
101
|
+
# @return [Duration]
|
|
102
|
+
#
|
|
103
|
+
def hours
|
|
104
|
+
(self * 60).minutes
|
|
105
|
+
end
|
|
106
|
+
alias_method :hour, :hours
|
|
107
|
+
|
|
108
|
+
#
|
|
109
|
+
# Create {Duration} of `self` days
|
|
110
|
+
#
|
|
111
|
+
# @return [Duration]
|
|
112
|
+
#
|
|
113
|
+
def days
|
|
114
|
+
(self * 24).hours
|
|
115
|
+
end
|
|
116
|
+
alias_method :day, :days
|
|
117
|
+
|
|
118
|
+
#
|
|
119
|
+
# Create {Duration} of `self` months
|
|
120
|
+
#
|
|
121
|
+
# @return [Duration]
|
|
122
|
+
#
|
|
123
|
+
def months
|
|
124
|
+
(self * java.time.temporal.ChronoUnit::MONTHS.duration.to_i).seconds
|
|
125
|
+
end
|
|
126
|
+
alias_method :month, :months
|
|
127
|
+
|
|
128
|
+
#
|
|
129
|
+
# Create {Duration} of `self` years
|
|
130
|
+
#
|
|
131
|
+
# @return [Duration]
|
|
132
|
+
#
|
|
133
|
+
def years
|
|
134
|
+
(self * java.time.temporal.ChronoUnit::YEARS.duration.to_i).seconds
|
|
135
|
+
end
|
|
136
|
+
alias_method :year, :years
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
module OpenHAB
|
|
140
|
+
module CoreExt
|
|
141
|
+
module Ruby
|
|
142
|
+
#
|
|
143
|
+
# Extend Numeric to create quantity object
|
|
144
|
+
#
|
|
145
|
+
module QuantityTypeConversion
|
|
146
|
+
#
|
|
147
|
+
# Convert Numeric to a QuantityType
|
|
148
|
+
#
|
|
149
|
+
# @param [String, javax.measure.Unit] unit
|
|
150
|
+
#
|
|
151
|
+
# @return [QuantityType] `self` as a {QuantityType} of the supplied Unit
|
|
152
|
+
#
|
|
153
|
+
def |(unit) # rubocop:disable Naming/BinaryOperatorParameterName
|
|
154
|
+
unit = org.openhab.core.types.util.UnitUtils.parse_unit(unit.to_str) if unit.respond_to?(:to_str)
|
|
155
|
+
|
|
156
|
+
return super unless unit.is_a?(javax.measure.Unit)
|
|
157
|
+
|
|
158
|
+
Core::Types::QuantityType.new(to_d.to_java, unit)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Extensions to Numeric
|
|
163
|
+
module Numeric
|
|
164
|
+
include QuantityTypeConversion
|
|
165
|
+
# non-Integer/Float (i.e. BigDecimal) can still be converted to Duration, via converting to float first
|
|
166
|
+
extend Forwardable
|
|
167
|
+
def_delegators :to_f,
|
|
168
|
+
:milliseconds,
|
|
169
|
+
:millisecond,
|
|
170
|
+
:ms,
|
|
171
|
+
:seconds,
|
|
172
|
+
:second,
|
|
173
|
+
:minutes,
|
|
174
|
+
:minute,
|
|
175
|
+
:hours,
|
|
176
|
+
:hour,
|
|
177
|
+
:day,
|
|
178
|
+
:days,
|
|
179
|
+
:month,
|
|
180
|
+
:months,
|
|
181
|
+
:year,
|
|
182
|
+
:years
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
# Integer already has #|, so we have to prepend it here
|
|
186
|
+
::Integer.prepend(QuantityTypeConversion)
|
|
187
|
+
::Numeric.include(Numeric)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module CoreExt
|
|
5
|
+
module Ruby
|
|
6
|
+
# Extensions to Range
|
|
7
|
+
module Range
|
|
8
|
+
def cover?(object)
|
|
9
|
+
# inverted circular range
|
|
10
|
+
if circular?
|
|
11
|
+
return object >= self.begin || object < self.end if exclude_end?
|
|
12
|
+
|
|
13
|
+
return object >= self.begin || object <= self.end
|
|
14
|
+
end
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Delegates to {#cover?} if {#circular?}
|
|
19
|
+
# @!visibility private
|
|
20
|
+
def ===(object)
|
|
21
|
+
return cover?(object) if circular?
|
|
22
|
+
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# normal Range#each will not yield at all if begin > end
|
|
27
|
+
def each
|
|
28
|
+
return super unless circular?
|
|
29
|
+
return to_enum(:each) unless block_given?
|
|
30
|
+
|
|
31
|
+
val = self.begin
|
|
32
|
+
loop do
|
|
33
|
+
is_end = val == self.end
|
|
34
|
+
break if is_end && exclude_end?
|
|
35
|
+
|
|
36
|
+
yield val
|
|
37
|
+
break if is_end
|
|
38
|
+
|
|
39
|
+
val = val.succ
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Checks if this range is circular
|
|
45
|
+
#
|
|
46
|
+
# A circular range is one whose data type will repeat if keep you keep
|
|
47
|
+
# calling #succ on it, and whose beginning is after its end.
|
|
48
|
+
#
|
|
49
|
+
# Used by {#cover?} to check if the value is between `end` and `begin`,
|
|
50
|
+
# instead of `begin` and `end`.
|
|
51
|
+
#
|
|
52
|
+
# @return [true, false]
|
|
53
|
+
#
|
|
54
|
+
def circular?
|
|
55
|
+
return false if self.begin.nil? || self.end.nil?
|
|
56
|
+
return false if self.begin <= self.end
|
|
57
|
+
|
|
58
|
+
case self.begin || self.end
|
|
59
|
+
when java.time.LocalTime, java.time.MonthDay, java.time.Month
|
|
60
|
+
true
|
|
61
|
+
else
|
|
62
|
+
false
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
::Range.prepend(self)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "forwardable"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module CoreExt
|
|
7
|
+
module Ruby
|
|
8
|
+
# Extensions to Time and DateTime
|
|
9
|
+
module TimeExtensions
|
|
10
|
+
extend Forwardable
|
|
11
|
+
|
|
12
|
+
# @!visibility private
|
|
13
|
+
def self.included(base)
|
|
14
|
+
base.send :alias_method, :plus_without_temporal, :+
|
|
15
|
+
base.send :alias_method, :+, :plus_with_temporal
|
|
16
|
+
base.send :alias_method, :minus_without_temporal, :-
|
|
17
|
+
base.send :alias_method, :-, :minus_with_temporal
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# @!method +(other)
|
|
22
|
+
#
|
|
23
|
+
# Extends {#+} to allow adding a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
24
|
+
#
|
|
25
|
+
# @param [java.time.temporal.TemporalAmount] other
|
|
26
|
+
# @return [ZonedDateTime] If other is a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
27
|
+
# @return [Time] If other is a Numeric
|
|
28
|
+
#
|
|
29
|
+
def plus_with_temporal(other)
|
|
30
|
+
return to_zoned_date_time + other if other.is_a?(java.time.temporal.TemporalAmount)
|
|
31
|
+
|
|
32
|
+
plus_without_temporal(other)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
#
|
|
36
|
+
# @!method -(other)
|
|
37
|
+
#
|
|
38
|
+
# Extends {#-} to allow subtracting a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
39
|
+
#
|
|
40
|
+
# @param [java.time.temporal.TemporalAmount] other
|
|
41
|
+
# @return [ZonedDateTime] If other is a {java.time.temporal.TemporalAmount TemporalAmount}
|
|
42
|
+
# @return [Time] If other is a Numeric
|
|
43
|
+
#
|
|
44
|
+
def minus_with_temporal(other)
|
|
45
|
+
return to_zoned_date_time - other if other.is_a?(java.time.temporal.TemporalAmount)
|
|
46
|
+
|
|
47
|
+
minus_without_temporal(other)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @return [LocalDate]
|
|
51
|
+
def to_local_date(_context = nil)
|
|
52
|
+
java.time.LocalDate.of(year, month, day)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @!method to_local_time
|
|
56
|
+
# @return [LocalTime]
|
|
57
|
+
def_delegator :to_zoned_date_time, :to_local_time
|
|
58
|
+
|
|
59
|
+
# @return [Month]
|
|
60
|
+
def to_month
|
|
61
|
+
java.time.Month.of(month)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# @return [MonthDay]
|
|
65
|
+
def to_month_day
|
|
66
|
+
java.time.MonthDay.of(month, day)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @param [ZonedDateTime, nil] context
|
|
70
|
+
# A {ZonedDateTime} used to fill in missing fields
|
|
71
|
+
# during conversion. Not used in this class.
|
|
72
|
+
# @return [ZonedDateTime]
|
|
73
|
+
def to_zoned_date_time(context = nil) # rubocop:disable Lint/UnusedMethodArgument
|
|
74
|
+
to_java(ZonedDateTime)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Converts to a {ZonedDateTime} if `other`
|
|
79
|
+
# is also convertible to a ZonedDateTime.
|
|
80
|
+
#
|
|
81
|
+
# @param [#to_zoned_date_time] other
|
|
82
|
+
# @return [Array, nil]
|
|
83
|
+
#
|
|
84
|
+
def coerce(other)
|
|
85
|
+
[other.to_zoned_date_time(to_zoned_date_time), self] if other.respond_to?(:to_zoned_date_time)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Extensions to Ruby Time
|
|
94
|
+
#
|
|
95
|
+
class Time
|
|
96
|
+
include(OpenHAB::CoreExt::Ruby::TimeExtensions)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# Extensions to Ruby DateTime
|
|
101
|
+
#
|
|
102
|
+
class DateTime
|
|
103
|
+
include(OpenHAB::CoreExt::Ruby::TimeExtensions)
|
|
104
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Dir[File.expand_path("core_ext/**/*.rb", __dir__)].sort.each do |f|
|
|
4
|
+
require f
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
module OpenHAB
|
|
8
|
+
# Extensions to core classes
|
|
9
|
+
module CoreExt
|
|
10
|
+
# Extensions to core Java classes
|
|
11
|
+
module Java
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Extensions to core Ruby classes
|
|
15
|
+
module Ruby
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module DSL
|
|
5
|
+
module Events
|
|
6
|
+
#
|
|
7
|
+
# Event object passed by a {Rules::Builder#watch} trigger.
|
|
8
|
+
#
|
|
9
|
+
# @!attribute [r] path
|
|
10
|
+
# @return [Pathname] The path that had an event
|
|
11
|
+
# @!attribute [r] type
|
|
12
|
+
# @return [:created, :modified, :deleted] Type of change
|
|
13
|
+
# @!attribute [r] attachment
|
|
14
|
+
# @return [Object] The trigger's attachment
|
|
15
|
+
WatchEvent = Struct.new(:type, :path, :attachment)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|