openhab-scripting 4.46.2 → 5.0.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 +4 -4
- data/lib/openhab/core/actions/audio.rb +47 -0
- data/lib/openhab/core/actions/ephemeris.rb +39 -0
- data/lib/openhab/core/actions/exec.rb +51 -0
- data/lib/openhab/core/actions/http.rb +80 -0
- data/lib/openhab/core/actions/ping.rb +30 -0
- data/lib/openhab/core/actions/transformation.rb +32 -0
- data/lib/openhab/core/actions/voice.rb +36 -0
- data/lib/openhab/core/actions.rb +82 -0
- data/lib/openhab/core/dependency_tracking.rb +34 -0
- data/lib/openhab/core/dto/item_channel_link.rb +33 -0
- data/lib/openhab/core/dto/thing.rb +27 -0
- data/lib/openhab/core/dto.rb +11 -0
- data/lib/openhab/core/entity_lookup.rb +152 -70
- data/lib/openhab/core/events/abstract_event.rb +18 -0
- data/lib/openhab/core/events/abstract_item_registry_event.rb +36 -0
- data/lib/openhab/core/events/abstract_thing_registry_event.rb +40 -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 +75 -0
- data/lib/openhab/core/events/item_state_event.rb +79 -0
- data/lib/openhab/core/events/thing_status_info_event.rb +55 -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 +59 -0
- data/lib/openhab/core/items/dimmer_item.rb +148 -0
- data/lib/openhab/core/items/generic_item.rb +292 -0
- data/lib/openhab/core/items/group_item.rb +176 -0
- data/lib/openhab/{dsl → core}/items/image_item.rb +35 -29
- data/lib/openhab/core/items/item.rb +273 -0
- data/lib/openhab/core/items/location_item.rb +34 -0
- data/lib/openhab/core/items/metadata/hash.rb +433 -0
- data/lib/openhab/core/items/metadata/namespace_hash.rb +475 -0
- data/lib/openhab/core/items/metadata/provider.rb +48 -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 +416 -0
- data/lib/openhab/core/items/player_item.rb +66 -0
- data/lib/openhab/core/items/provider.rb +44 -0
- data/lib/openhab/core/items/proxy.rb +136 -0
- data/lib/openhab/core/items/registry.rb +86 -0
- data/lib/openhab/core/items/rollershutter_item.rb +68 -0
- data/lib/openhab/core/items/semantics/enumerable.rb +177 -0
- data/lib/openhab/core/items/semantics.rb +473 -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 +108 -0
- data/lib/openhab/{dsl → core}/lazy_array.rb +9 -3
- data/lib/openhab/core/profile_factory.rb +132 -0
- data/lib/openhab/core/provider.rb +230 -0
- data/lib/openhab/core/proxy.rb +130 -0
- data/lib/openhab/core/registry.rb +40 -0
- data/lib/openhab/core/rules/module.rb +26 -0
- data/lib/openhab/core/rules/provider.rb +25 -0
- data/lib/openhab/core/rules/registry.rb +76 -0
- data/lib/openhab/core/rules/rule.rb +150 -0
- data/lib/openhab/core/rules.rb +25 -0
- data/lib/openhab/core/script_handling.rb +78 -20
- 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/links/provider.rb +78 -0
- data/lib/openhab/core/things/profile_callback.rb +52 -0
- data/lib/openhab/core/things/provider.rb +29 -0
- data/lib/openhab/core/things/proxy.rb +87 -0
- data/lib/openhab/core/things/registry.rb +73 -0
- data/lib/openhab/core/things/thing.rb +194 -0
- data/lib/openhab/core/things.rb +22 -0
- data/lib/openhab/core/timer.rb +148 -0
- data/lib/openhab/{dsl → core}/types/comparable_type.rb +5 -3
- data/lib/openhab/{dsl → core}/types/date_time_type.rb +55 -127
- data/lib/openhab/{dsl → core}/types/decimal_type.rb +50 -48
- data/lib/openhab/{dsl → core}/types/hsb_type.rb +35 -83
- 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/{dsl → core}/types/numeric_type.rb +20 -7
- 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/{dsl → core}/types/percent_type.rb +19 -20
- 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 +325 -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/{dsl → core}/types/string_type.rb +17 -28
- data/lib/openhab/{dsl → core}/types/type.rb +42 -40
- 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 +82 -0
- data/lib/openhab/{dsl → core}/uid.rb +4 -23
- data/lib/openhab/core/value_cache.rb +188 -0
- data/lib/openhab/core.rb +98 -0
- data/lib/openhab/core_ext/between.rb +32 -0
- data/lib/openhab/core_ext/ephemeris.rb +53 -0
- data/lib/openhab/core_ext/java/class.rb +34 -0
- data/lib/openhab/core_ext/java/duration.rb +142 -0
- data/lib/openhab/core_ext/java/list.rb +436 -0
- data/lib/openhab/core_ext/java/local_date.rb +104 -0
- data/lib/openhab/core_ext/java/local_time.rb +118 -0
- data/lib/openhab/core_ext/java/map.rb +66 -0
- data/lib/openhab/core_ext/java/month.rb +71 -0
- data/lib/openhab/core_ext/java/month_day.rb +119 -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 +62 -0
- data/lib/openhab/core_ext/java/unit.rb +15 -0
- data/lib/openhab/core_ext/java/zoned_date_time.rb +213 -0
- data/lib/openhab/core_ext/ruby/array.rb +21 -0
- data/lib/openhab/core_ext/ruby/date.rb +96 -0
- data/lib/openhab/core_ext/ruby/date_time.rb +55 -0
- data/lib/openhab/core_ext/ruby/module.rb +15 -0
- data/lib/openhab/core_ext/ruby/numeric.rb +195 -0
- data/lib/openhab/core_ext/ruby/range.rb +70 -0
- data/lib/openhab/core_ext/ruby/symbol.rb +7 -0
- data/lib/openhab/core_ext/ruby/time.rb +108 -0
- data/lib/openhab/core_ext.rb +18 -0
- data/lib/openhab/dsl/debouncer.rb +259 -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 +1 -1
- data/lib/openhab/dsl/items/builder.rb +578 -0
- data/lib/openhab/dsl/items/ensure.rb +73 -82
- data/lib/openhab/dsl/items/timed_command.rb +214 -159
- data/lib/openhab/dsl/rules/automation_rule.rb +126 -115
- data/lib/openhab/dsl/rules/builder.rb +1935 -0
- data/lib/openhab/dsl/rules/guard.rb +51 -114
- data/lib/openhab/dsl/rules/name_inference.rb +66 -25
- data/lib/openhab/dsl/rules/property.rb +48 -75
- data/lib/openhab/dsl/rules/rule_triggers.rb +22 -27
- data/lib/openhab/dsl/rules/terse.rb +58 -14
- data/lib/openhab/dsl/rules/triggers/changed.rb +48 -94
- data/lib/openhab/dsl/rules/triggers/channel.rb +9 -40
- data/lib/openhab/dsl/rules/triggers/command.rb +14 -63
- data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +34 -69
- data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +6 -14
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +48 -82
- data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +30 -47
- data/lib/openhab/dsl/rules/triggers/trigger.rb +7 -28
- data/lib/openhab/dsl/rules/triggers/updated.rb +21 -45
- data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +257 -102
- data/lib/openhab/dsl/rules/triggers.rb +12 -0
- data/lib/openhab/dsl/rules.rb +8 -0
- data/lib/openhab/dsl/things/builder.rb +299 -0
- data/lib/openhab/{core → dsl}/thread_local.rb +27 -17
- data/lib/openhab/dsl/timer_manager.rb +204 -0
- data/lib/openhab/dsl/version.rb +9 -0
- data/lib/openhab/dsl.rb +979 -0
- data/lib/openhab/log.rb +355 -0
- data/lib/openhab/osgi.rb +68 -0
- data/lib/openhab/rspec/configuration.rb +56 -0
- data/lib/openhab/rspec/example_group.rb +132 -0
- data/lib/openhab/rspec/helpers.rb +458 -0
- data/lib/openhab/rspec/hooks.rb +113 -0
- data/lib/openhab/rspec/jruby.rb +46 -0
- data/lib/openhab/rspec/karaf.rb +851 -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/instance_method_stasher.rb +22 -0
- data/lib/openhab/rspec/mocks/persistence_service.rb +155 -0
- data/lib/openhab/rspec/mocks/safe_caller.rb +40 -0
- data/lib/openhab/rspec/mocks/space.rb +23 -0
- data/lib/openhab/rspec/mocks/synchronous_executor.rb +63 -0
- data/lib/openhab/rspec/mocks/thing_handler.rb +76 -0
- data/lib/openhab/rspec/mocks/timer.rb +134 -0
- data/lib/openhab/rspec/openhab/core/actions.rb +38 -0
- data/lib/openhab/rspec/openhab/core/items/proxy.rb +15 -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 +50 -0
- data/lib/openhab/rspec.rb +26 -0
- data/lib/openhab/yard/base_helper.rb +19 -0
- data/lib/openhab/yard/cli/stats.rb +23 -0
- data/lib/openhab/yard/code_objects/group_object.rb +23 -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/coderay.rb +17 -0
- data/lib/openhab/yard/handlers/jruby/base.rb +58 -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 +30 -0
- data/lib/openhab/yard/handlers/jruby/mixin_handler.rb +23 -0
- data/lib/openhab/yard/html_helper.rb +78 -0
- data/lib/openhab/yard/markdown_helper.rb +148 -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 +38 -0
- metadata +475 -106
- data/lib/openhab/core/item_proxy.rb +0 -29
- data/lib/openhab/core/load_path.rb +0 -19
- data/lib/openhab/core/openhab_setup.rb +0 -29
- data/lib/openhab/core/osgi.rb +0 -58
- data/lib/openhab/core/services.rb +0 -24
- data/lib/openhab/dsl/actions.rb +0 -114
- data/lib/openhab/dsl/between.rb +0 -25
- data/lib/openhab/dsl/channel.rb +0 -43
- data/lib/openhab/dsl/dsl.rb +0 -59
- data/lib/openhab/dsl/group.rb +0 -54
- data/lib/openhab/dsl/imports.rb +0 -21
- data/lib/openhab/dsl/items/color_item.rb +0 -76
- data/lib/openhab/dsl/items/comparable_item.rb +0 -62
- data/lib/openhab/dsl/items/contact_item.rb +0 -41
- data/lib/openhab/dsl/items/date_time_item.rb +0 -65
- data/lib/openhab/dsl/items/dimmer_item.rb +0 -65
- data/lib/openhab/dsl/items/generic_item.rb +0 -229
- data/lib/openhab/dsl/items/group_item.rb +0 -127
- data/lib/openhab/dsl/items/item_equality.rb +0 -59
- data/lib/openhab/dsl/items/item_registry.rb +0 -54
- data/lib/openhab/dsl/items/items.rb +0 -109
- data/lib/openhab/dsl/items/location_item.rb +0 -59
- data/lib/openhab/dsl/items/metadata.rb +0 -326
- data/lib/openhab/dsl/items/number_item.rb +0 -17
- data/lib/openhab/dsl/items/numeric_item.rb +0 -87
- data/lib/openhab/dsl/items/persistence.rb +0 -307
- data/lib/openhab/dsl/items/player_item.rb +0 -58
- data/lib/openhab/dsl/items/rollershutter_item.rb +0 -51
- data/lib/openhab/dsl/items/semantics/enumerable.rb +0 -91
- data/lib/openhab/dsl/items/semantics.rb +0 -227
- data/lib/openhab/dsl/items/string_item.rb +0 -51
- data/lib/openhab/dsl/items/switch_item.rb +0 -70
- data/lib/openhab/dsl/monkey_patch/actions/actions.rb +0 -4
- data/lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb +0 -39
- data/lib/openhab/dsl/monkey_patch/events/events.rb +0 -7
- data/lib/openhab/dsl/monkey_patch/events/item_command.rb +0 -85
- data/lib/openhab/dsl/monkey_patch/events/item_event.rb +0 -28
- data/lib/openhab/dsl/monkey_patch/events/item_state.rb +0 -61
- data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +0 -60
- data/lib/openhab/dsl/monkey_patch/events/thing_status_info.rb +0 -33
- data/lib/openhab/dsl/monkey_patch/java/java.rb +0 -4
- data/lib/openhab/dsl/monkey_patch/java/local_time.rb +0 -44
- data/lib/openhab/dsl/monkey_patch/java/time_extensions.rb +0 -50
- data/lib/openhab/dsl/monkey_patch/java/zoned_date_time.rb +0 -45
- data/lib/openhab/dsl/monkey_patch/ruby/number.rb +0 -104
- data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -6
- data/lib/openhab/dsl/monkey_patch/ruby/string.rb +0 -47
- data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -61
- data/lib/openhab/dsl/openhab.rb +0 -30
- data/lib/openhab/dsl/persistence.rb +0 -27
- data/lib/openhab/dsl/rules/item_event.rb +0 -19
- data/lib/openhab/dsl/rules/rule.rb +0 -160
- data/lib/openhab/dsl/rules/rule_config.rb +0 -147
- data/lib/openhab/dsl/rules/triggers/generic.rb +0 -31
- data/lib/openhab/dsl/rules/triggers/triggers.rb +0 -11
- data/lib/openhab/dsl/rules/triggers/watch/watch.rb +0 -81
- data/lib/openhab/dsl/states.rb +0 -89
- data/lib/openhab/dsl/things.rb +0 -147
- data/lib/openhab/dsl/time/month_day.rb +0 -180
- data/lib/openhab/dsl/time/time_of_day.rb +0 -235
- data/lib/openhab/dsl/timers/manager.rb +0 -119
- data/lib/openhab/dsl/timers/reentrant_timer.rb +0 -38
- data/lib/openhab/dsl/timers/timer.rb +0 -132
- data/lib/openhab/dsl/timers.rb +0 -77
- data/lib/openhab/dsl/types/increase_decrease_type.rb +0 -23
- data/lib/openhab/dsl/types/next_previous_type.rb +0 -23
- data/lib/openhab/dsl/types/on_off_type.rb +0 -28
- data/lib/openhab/dsl/types/open_closed_type.rb +0 -29
- data/lib/openhab/dsl/types/play_pause_type.rb +0 -27
- data/lib/openhab/dsl/types/point_type.rb +0 -180
- data/lib/openhab/dsl/types/quantity_type.rb +0 -265
- data/lib/openhab/dsl/types/refresh_type.rb +0 -18
- data/lib/openhab/dsl/types/rewind_fastforward_type.rb +0 -33
- data/lib/openhab/dsl/types/stop_move_type.rb +0 -23
- data/lib/openhab/dsl/types/types.rb +0 -83
- data/lib/openhab/dsl/types/un_def_type.rb +0 -22
- data/lib/openhab/dsl/types/up_down_type.rb +0 -32
- data/lib/openhab/dsl/units.rb +0 -45
- data/lib/openhab/log/configuration.rb +0 -21
- data/lib/openhab/log/logger.rb +0 -282
- data/lib/openhab/version.rb +0 -9
- data/lib/openhab.rb +0 -36
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "timecop"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module RSpec
|
|
7
|
+
module Mocks
|
|
8
|
+
class Timer < Core::Timer
|
|
9
|
+
# @!visibility private
|
|
10
|
+
module MockedZonedDateTime
|
|
11
|
+
def now
|
|
12
|
+
mocked_time_stack_item = Timecop.top_stack_item
|
|
13
|
+
return super unless mocked_time_stack_item
|
|
14
|
+
|
|
15
|
+
mocked_time_stack_item.time.to_zoned_date_time
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
ZonedDateTime.singleton_class.prepend(MockedZonedDateTime)
|
|
19
|
+
|
|
20
|
+
# @!visibility private
|
|
21
|
+
module MockedLocalDate
|
|
22
|
+
def now
|
|
23
|
+
mocked_time_stack_item = Timecop.top_stack_item
|
|
24
|
+
return super unless mocked_time_stack_item
|
|
25
|
+
|
|
26
|
+
mocked_time_stack_item.time.to_zoned_date_time.to_local_date
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
LocalDate.singleton_class.prepend(MockedLocalDate)
|
|
30
|
+
|
|
31
|
+
# @!visibility private
|
|
32
|
+
module MockedLocalTime
|
|
33
|
+
def now
|
|
34
|
+
mocked_time_stack_item = Timecop.top_stack_item
|
|
35
|
+
return super unless mocked_time_stack_item
|
|
36
|
+
|
|
37
|
+
mocked_time_stack_item.time.to_zoned_date_time.to_local_time
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
LocalTime.singleton_class.prepend(MockedLocalTime)
|
|
41
|
+
|
|
42
|
+
# @!visibility private
|
|
43
|
+
module MockedMonthDay
|
|
44
|
+
def now
|
|
45
|
+
mocked_time_stack_item = Timecop.top_stack_item
|
|
46
|
+
return super unless mocked_time_stack_item
|
|
47
|
+
|
|
48
|
+
mocked_time_stack_item.time.to_zoned_date_time.to_month_day
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
MonthDay.singleton_class.prepend(MockedMonthDay)
|
|
52
|
+
|
|
53
|
+
# extend Timecop to support Java time classes
|
|
54
|
+
# @!visibility private
|
|
55
|
+
module TimeCopStackItem
|
|
56
|
+
def parse_time(*args)
|
|
57
|
+
if args.length == 1
|
|
58
|
+
arg = args.first
|
|
59
|
+
if arg.is_a?(Time) ||
|
|
60
|
+
(defined?(DateTime) && arg.is_a?(DateTime)) ||
|
|
61
|
+
(defined?(Date) && arg.is_a?(Date))
|
|
62
|
+
return super
|
|
63
|
+
elsif arg.respond_to?(:to_zoned_date_time)
|
|
64
|
+
return arg.to_zoned_date_time.to_time
|
|
65
|
+
elsif arg.is_a?(java.time.temporal.TemporalAmount)
|
|
66
|
+
return (ZonedDateTime.now + arg).to_time
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
super
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
Timecop::TimeStackItem.prepend(TimeCopStackItem)
|
|
74
|
+
|
|
75
|
+
attr_reader :execution_time, :id, :block
|
|
76
|
+
|
|
77
|
+
def initialize(time, id:, thread_locals:, block:) # rubocop:disable Lint/MissingSuper
|
|
78
|
+
@time = time
|
|
79
|
+
@id = id
|
|
80
|
+
@block = block
|
|
81
|
+
@thread_locals = thread_locals
|
|
82
|
+
reschedule!(time)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def reschedule!(time = nil)
|
|
86
|
+
Thread.current[:openhab_rescheduled_timer] = true if Thread.current[:openhab_rescheduled_timer] == self
|
|
87
|
+
@execution_time = new_execution_time(time || @time)
|
|
88
|
+
@executed = false
|
|
89
|
+
|
|
90
|
+
DSL::TimerManager.instance.add(self)
|
|
91
|
+
|
|
92
|
+
self
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def execute
|
|
96
|
+
raise "Timer already cancelled" if cancelled?
|
|
97
|
+
raise "Timer already executed" if terminated?
|
|
98
|
+
|
|
99
|
+
@executed = true
|
|
100
|
+
super
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def cancel
|
|
104
|
+
return false if terminated? || cancelled?
|
|
105
|
+
|
|
106
|
+
DSL::TimerManager.instance.delete(self)
|
|
107
|
+
cancel!
|
|
108
|
+
true
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def cancel!
|
|
112
|
+
@execution_time = nil
|
|
113
|
+
true
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def cancelled?
|
|
117
|
+
@execution_time.nil?
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def terminated?
|
|
121
|
+
@executed || cancelled?
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def running?
|
|
125
|
+
false
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def active?
|
|
129
|
+
!terminated?
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Actions
|
|
6
|
+
# rubocop:disable Lint/UnusedMethodArgument
|
|
7
|
+
# redefine these to do nothing so that rules won't fail
|
|
8
|
+
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
def notify(msg, email: nil)
|
|
12
|
+
logger.debug("notify: #{msg}")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Voice
|
|
16
|
+
class << self
|
|
17
|
+
def say(text, voice: nil, sink: nil, volume: nil)
|
|
18
|
+
logger.debug("say: #{text}")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Audio
|
|
24
|
+
class << self
|
|
25
|
+
def play_sound(filename, sink: nil, volume: nil)
|
|
26
|
+
logger.debug("play_sound: #{filename}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def play_stream(url, sink: nil)
|
|
30
|
+
logger.debug("play_stream: #{url}")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# rubocop:enable Lint/UnusedMethodArgument
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Things
|
|
6
|
+
class Proxy
|
|
7
|
+
@proxies = {}
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
# ensure each item only has a single proxy, so that
|
|
11
|
+
# expect(item).to receive(:method) works
|
|
12
|
+
def new(thing)
|
|
13
|
+
return super unless defined?(::RSpec) && ::RSpec.current_example&.example_group&.consistent_proxies?
|
|
14
|
+
|
|
15
|
+
@proxies.fetch(thing.uid.to_s) do
|
|
16
|
+
@proxies[thing.uid.to_s] = super
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def reset_cache
|
|
21
|
+
@proxies = {}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module RSpec
|
|
5
|
+
# based on https://stackoverflow.com/questions/1197224/source-shell-script-into-environment-within-a-ruby-script#19826329
|
|
6
|
+
# @!visibility private
|
|
7
|
+
module Shell
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# Read in the bash environment, after an optional command.
|
|
11
|
+
# Returns Array of key/value pairs.
|
|
12
|
+
def shell_env(cmd = nil)
|
|
13
|
+
cmd = "#{cmd} > /dev/null; " if cmd
|
|
14
|
+
env = `#{cmd}printenv -0`
|
|
15
|
+
env.split("\0").map { |l| l.split("=", 2) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Source a given file, and compare environment before and after.
|
|
19
|
+
# Returns Hash of any keys that have changed.
|
|
20
|
+
def shell_source(file)
|
|
21
|
+
(shell_env(". #{File.realpath(file)}") - shell_env).to_h
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Find variables changed as a result of sourcing the given file,
|
|
25
|
+
# and update in ENV.
|
|
26
|
+
def source_env_from(file)
|
|
27
|
+
shell_source(file).each { |k, v| ENV[k] = v }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module RSpec
|
|
5
|
+
# @!visibility private
|
|
6
|
+
module SuspendRules
|
|
7
|
+
# I'd prefer to prepend a module, but I can't because of
|
|
8
|
+
# https://github.com/jruby/jruby/issues/6966#issuecomment-1172983776
|
|
9
|
+
class ::OpenHAB::DSL::Rules::AutomationRule # rubocop:disable Style/ClassAndModuleChildren
|
|
10
|
+
def execute(mod = nil, inputs = nil)
|
|
11
|
+
if SuspendRules.suspended?
|
|
12
|
+
logger.trace("Skipping execution of #{uid} because rules are suspended.")
|
|
13
|
+
return
|
|
14
|
+
end
|
|
15
|
+
execute!(mod, inputs)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
# private_constant :AutomationRule
|
|
19
|
+
# DSL::Rules::AutomationRule.prepend(AutomationRule)
|
|
20
|
+
|
|
21
|
+
module DSL
|
|
22
|
+
def after(*, **)
|
|
23
|
+
return if SuspendRules.suspended?
|
|
24
|
+
|
|
25
|
+
super
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
private_constant :DSL
|
|
29
|
+
OpenHAB::DSL.prepend(DSL)
|
|
30
|
+
|
|
31
|
+
@suspended = false
|
|
32
|
+
|
|
33
|
+
class << self
|
|
34
|
+
# @!visibility private
|
|
35
|
+
def suspend_rules
|
|
36
|
+
old_suspended = @suspended
|
|
37
|
+
@suspended = true
|
|
38
|
+
yield
|
|
39
|
+
ensure
|
|
40
|
+
@suspended = old_suspended
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @!visibility private
|
|
44
|
+
def suspended?
|
|
45
|
+
@suspended
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
unless RUBY_ENGINE == "jruby" &&
|
|
4
|
+
Gem::Version.new(RUBY_ENGINE_VERSION) >= Gem::Version.new("9.3.8.0")
|
|
5
|
+
raise Gem::RubyVersionMismatch, "openhab-scripting requires JRuby 9.3.8.0 or newer"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
require "jruby"
|
|
9
|
+
|
|
10
|
+
require "diff/lcs"
|
|
11
|
+
|
|
12
|
+
require "openhab/log"
|
|
13
|
+
|
|
14
|
+
require_relative "rspec/configuration"
|
|
15
|
+
require_relative "rspec/helpers"
|
|
16
|
+
require_relative "rspec/karaf"
|
|
17
|
+
require_relative "rspec/hooks"
|
|
18
|
+
|
|
19
|
+
return unless defined?(RSpec)
|
|
20
|
+
|
|
21
|
+
RSpec.configure do |c|
|
|
22
|
+
c.add_setting :openhab_automation_search_paths, default: [
|
|
23
|
+
"#{org.openhab.core.OpenHAB.config_folder}/automation/ruby",
|
|
24
|
+
"#{org.openhab.core.OpenHAB.config_folder}/automation/jsr223"
|
|
25
|
+
]
|
|
26
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module YARD
|
|
5
|
+
# @!visibility private
|
|
6
|
+
module BaseHelper
|
|
7
|
+
def link_object(obj, title = nil, *)
|
|
8
|
+
::YARD::Handlers::JRuby::Base.infer_java_class(obj) if obj.is_a?(String)
|
|
9
|
+
obj = ::YARD::Registry.resolve(object, obj, true, true) if obj.is_a?(String)
|
|
10
|
+
if obj.is_a?(::YARD::CodeObjects::Java::Base) && (see = obj.docstring.tag(:see))
|
|
11
|
+
# link to the first see tag
|
|
12
|
+
return linkify(see.name, title&.to_s || see.text)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module YARD
|
|
5
|
+
module CLI
|
|
6
|
+
module Stats
|
|
7
|
+
::YARD::CLI::Stats.prepend(self)
|
|
8
|
+
|
|
9
|
+
def stats_for_constants
|
|
10
|
+
objs = all_objects.select { |m| m.type == :constant }
|
|
11
|
+
undoc = objs.find_all do |m|
|
|
12
|
+
# allow constants that are simple aliases
|
|
13
|
+
# to not have additional documentation
|
|
14
|
+
m.docstring.blank? && m.target.nil?
|
|
15
|
+
end
|
|
16
|
+
@undoc_list |= undoc if @undoc_list
|
|
17
|
+
|
|
18
|
+
output "Constants", objs.size, undoc.size
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module YARD
|
|
5
|
+
module CodeObjects
|
|
6
|
+
class GroupObject < ::YARD::CodeObjects::Base
|
|
7
|
+
attr_reader :full_name
|
|
8
|
+
|
|
9
|
+
def initialize(namespace, name)
|
|
10
|
+
@full_name = name
|
|
11
|
+
name = name.delete(%(.?"')).tr(" ", "-")
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def path
|
|
16
|
+
"group#{sep}#{super}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
alias_method :to_s, :full_name
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module CodeObjects
|
|
5
|
+
module Java
|
|
6
|
+
#
|
|
7
|
+
# Represents a java.lang.Class
|
|
8
|
+
#
|
|
9
|
+
# Which might be a class, an enum, or an interface
|
|
10
|
+
module Base
|
|
11
|
+
module ClassMethods
|
|
12
|
+
def new(name)
|
|
13
|
+
super(:root, name)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.included(klass)
|
|
18
|
+
klass.singleton_class.include(ClassMethods)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def visibility
|
|
22
|
+
:private
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def simple_name
|
|
26
|
+
name.to_s.split(".").last
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module CodeObjects
|
|
5
|
+
module Java
|
|
6
|
+
module Proxy
|
|
7
|
+
CodeObjects::Proxy.prepend(self)
|
|
8
|
+
|
|
9
|
+
def initialize(namespace, name, type = nil)
|
|
10
|
+
if name.match?(/^([a-zA-Z_$][a-zA-Z\d_$]*\.)+/)
|
|
11
|
+
@namespace = Registry.root
|
|
12
|
+
@name = name.to_sym
|
|
13
|
+
@obj = nil
|
|
14
|
+
@imethod = nil
|
|
15
|
+
self.type = type
|
|
16
|
+
return
|
|
17
|
+
end
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "coderay"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module YARD
|
|
7
|
+
module CodeRay
|
|
8
|
+
module HtmlHelper
|
|
9
|
+
::CodeRay::Scanners.list.each do |scanner|
|
|
10
|
+
define_method("html_syntax_highlight_#{scanner}") do |source|
|
|
11
|
+
::CodeRay.scan(source, scanner).html
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Handlers
|
|
5
|
+
module JRuby
|
|
6
|
+
module Base
|
|
7
|
+
class << self
|
|
8
|
+
def infer_java_class(klass, inferred_type = nil, comments = nil, statement = nil)
|
|
9
|
+
components = klass.split(".")
|
|
10
|
+
components.pop if components.last == "freeze"
|
|
11
|
+
|
|
12
|
+
class_first_char = components.last[0]
|
|
13
|
+
is_field = components.last == components.last.upcase
|
|
14
|
+
container_first_char = components[-2]&.[](0)
|
|
15
|
+
is_method = container_first_char &&
|
|
16
|
+
class_first_char != class_first_char.upcase &&
|
|
17
|
+
container_first_char == container_first_char.upcase
|
|
18
|
+
is_package = !is_method && !is_field && class_first_char != class_first_char.upcase
|
|
19
|
+
|
|
20
|
+
# methods aren't supported right now
|
|
21
|
+
return if is_method
|
|
22
|
+
|
|
23
|
+
javadocs = YARD::Config.options.dig(:jruby, "javadocs") || {}
|
|
24
|
+
|
|
25
|
+
href_base = javadocs.find { |package, _href| klass == package || klass.start_with?("#{package}.") }&.last
|
|
26
|
+
return unless href_base
|
|
27
|
+
|
|
28
|
+
inferred_type = CodeObjects::Java::FieldObject if is_field
|
|
29
|
+
inferred_type = CodeObjects::Java::PackageObject if is_package
|
|
30
|
+
if inferred_type.nil?
|
|
31
|
+
docstring = Docstring.parser.parse(comments || statement&.comments).to_docstring
|
|
32
|
+
inferred_type = if docstring.has_tag?(:interface)
|
|
33
|
+
CodeObjects::Java::InterfaceObject
|
|
34
|
+
else
|
|
35
|
+
CodeObjects::Java::ClassObject
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
inferred_type.new(klass) do |o|
|
|
40
|
+
o.source = statement if statement
|
|
41
|
+
suffix = "/package-summary" if is_package
|
|
42
|
+
field = "##{components.pop}" if is_field
|
|
43
|
+
link = "#{href_base}#{components.join("/")}#{suffix}.html#{field}"
|
|
44
|
+
o.docstring.add_tag(Tags::Tag.new(:see, klass, nil, link)) unless o.docstring.has_tag?(:see)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def infer_java_class(statement, inferred_type = nil, comments = nil)
|
|
50
|
+
return unless statement.is_a?(Parser::Ruby::AstNode)
|
|
51
|
+
return unless statement.type == :call
|
|
52
|
+
|
|
53
|
+
Base.infer_java_class(statement.source, inferred_type, comments, statement)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Handlers
|
|
5
|
+
module JRuby
|
|
6
|
+
module ClassHandler
|
|
7
|
+
include Base
|
|
8
|
+
|
|
9
|
+
Ruby::ClassHandler.prepend(self)
|
|
10
|
+
|
|
11
|
+
def parse_superclass(superclass)
|
|
12
|
+
infer_java_class(superclass, CodeObjects::Java::ClassObject)&.then { |k| return k }
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Handlers
|
|
5
|
+
module JRuby
|
|
6
|
+
module ConstantHandler
|
|
7
|
+
include Base
|
|
8
|
+
|
|
9
|
+
Ruby::ConstantHandler.prepend(self)
|
|
10
|
+
|
|
11
|
+
def process_constant(statement)
|
|
12
|
+
infer_java_class(statement[1], nil, statement.comments)
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Handlers
|
|
5
|
+
module JRuby
|
|
6
|
+
class JavaImportHandler < Ruby::Base
|
|
7
|
+
include Base
|
|
8
|
+
|
|
9
|
+
handles method_call(:java_import)
|
|
10
|
+
|
|
11
|
+
process do
|
|
12
|
+
statement.parameters(false).each do |klass|
|
|
13
|
+
# first we auto-create the CodeObject for the class
|
|
14
|
+
obj = infer_java_class(klass)
|
|
15
|
+
next unless obj
|
|
16
|
+
|
|
17
|
+
# don't overwrite an already-extant object with the same name
|
|
18
|
+
next if ::YARD::Registry.at("#{namespace.path}::#{obj.simple_name}")
|
|
19
|
+
|
|
20
|
+
# then we create a new constant in the current namespace
|
|
21
|
+
register CodeObjects::ConstantObject.new(namespace, obj.simple_name) { |o|
|
|
22
|
+
o.source = statement
|
|
23
|
+
o.value = klass.source
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Handlers
|
|
5
|
+
module JRuby
|
|
6
|
+
module MixinHandler
|
|
7
|
+
include Base
|
|
8
|
+
|
|
9
|
+
Ruby::MixinHandler.prepend(self)
|
|
10
|
+
|
|
11
|
+
def process_mixin(mixin)
|
|
12
|
+
if infer_java_class(mixin, CodeObjects::Java::InterfaceObject)
|
|
13
|
+
# make the Ruby::MixinHandler accept that this is a ref
|
|
14
|
+
def mixin.ref?
|
|
15
|
+
true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|