openhab-jrubyscripting 5.0.0.rc9 → 5.0.0.rc11

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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/actions/audio.rb +47 -0
  3. data/lib/openhab/core/actions/ephemeris.rb +39 -0
  4. data/lib/openhab/core/actions/exec.rb +51 -0
  5. data/lib/openhab/core/actions/http.rb +80 -0
  6. data/lib/openhab/core/actions/ping.rb +30 -0
  7. data/lib/openhab/core/actions/transformation.rb +32 -0
  8. data/lib/openhab/core/actions/voice.rb +36 -0
  9. data/lib/openhab/core/actions.rb +23 -120
  10. data/lib/openhab/core/{events → dto}/item_channel_link.rb +1 -4
  11. data/lib/openhab/core/{events → dto}/thing.rb +10 -12
  12. data/lib/openhab/core/dto.rb +11 -0
  13. data/lib/openhab/core/entity_lookup.rb +1 -1
  14. data/lib/openhab/core/events/abstract_event.rb +1 -0
  15. data/lib/openhab/core/events/abstract_item_registry_event.rb +36 -0
  16. data/lib/openhab/core/events/abstract_thing_registry_event.rb +40 -0
  17. data/lib/openhab/core/events/item_command_event.rb +1 -1
  18. data/lib/openhab/core/events/item_state_changed_event.rb +6 -6
  19. data/lib/openhab/core/events/item_state_event.rb +6 -6
  20. data/lib/openhab/core/events/thing_status_info_event.rb +8 -6
  21. data/lib/openhab/core/items/generic_item.rb +2 -1
  22. data/lib/openhab/core/items/persistence.rb +52 -18
  23. data/lib/openhab/core/items/player_item.rb +1 -1
  24. data/lib/openhab/core/items/proxy.rb +20 -14
  25. data/lib/openhab/core/items/registry.rb +2 -0
  26. data/lib/openhab/core/items.rb +3 -3
  27. data/lib/openhab/core/profile_factory.rb +3 -1
  28. data/lib/openhab/core/proxy.rb +125 -0
  29. data/lib/openhab/core/things/links/provider.rb +1 -1
  30. data/lib/openhab/core/things/proxy.rb +8 -0
  31. data/lib/openhab/core/types/date_time_type.rb +2 -1
  32. data/lib/openhab/core/types/decimal_type.rb +1 -1
  33. data/lib/openhab/core/types/un_def_type.rb +2 -2
  34. data/lib/openhab/core/value_cache.rb +1 -1
  35. data/lib/openhab/core_ext/ephemeris.rb +53 -0
  36. data/lib/openhab/core_ext/java/class.rb +1 -1
  37. data/lib/openhab/core_ext/java/duration.rb +25 -1
  38. data/lib/openhab/core_ext/java/local_date.rb +2 -0
  39. data/lib/openhab/core_ext/java/month_day.rb +2 -0
  40. data/lib/openhab/core_ext/java/zoned_date_time.rb +85 -0
  41. data/lib/openhab/core_ext/ruby/date.rb +2 -0
  42. data/lib/openhab/core_ext/ruby/date_time.rb +1 -0
  43. data/lib/openhab/core_ext/ruby/time.rb +1 -0
  44. data/lib/openhab/dsl/debouncer.rb +259 -0
  45. data/lib/openhab/dsl/items/builder.rb +4 -2
  46. data/lib/openhab/dsl/items/timed_command.rb +31 -13
  47. data/lib/openhab/dsl/rules/automation_rule.rb +28 -21
  48. data/lib/openhab/dsl/rules/builder.rb +357 -37
  49. data/lib/openhab/dsl/rules/guard.rb +12 -54
  50. data/lib/openhab/dsl/rules/name_inference.rb +11 -0
  51. data/lib/openhab/dsl/rules/property.rb +3 -4
  52. data/lib/openhab/dsl/rules/terse.rb +4 -1
  53. data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +5 -6
  54. data/lib/openhab/dsl/rules/triggers/cron/cron.rb +1 -0
  55. data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +19 -31
  56. data/lib/openhab/dsl/rules/triggers/watch/watch.rb +1 -0
  57. data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +22 -30
  58. data/lib/openhab/dsl/things/builder.rb +1 -1
  59. data/lib/openhab/dsl/thread_local.rb +1 -0
  60. data/lib/openhab/dsl/version.rb +1 -1
  61. data/lib/openhab/dsl.rb +224 -3
  62. data/lib/openhab/rspec/hooks.rb +5 -2
  63. data/lib/openhab/rspec/karaf.rb +7 -0
  64. data/lib/openhab/rspec/mocks/instance_method_stasher.rb +22 -0
  65. data/lib/openhab/rspec/mocks/space.rb +23 -0
  66. data/lib/openhab/rspec/openhab/core/actions.rb +16 -4
  67. data/lib/openhab/rspec/openhab/core/items/proxy.rb +1 -13
  68. data/lib/openhab/rspec/suspend_rules.rb +1 -14
  69. data/lib/openhab/yard/base_helper.rb +19 -0
  70. data/lib/openhab/yard/code_objects/group_object.rb +9 -3
  71. data/lib/openhab/yard/coderay.rb +17 -0
  72. data/lib/openhab/yard/handlers/jruby/base.rb +10 -1
  73. data/lib/openhab/yard/handlers/jruby/java_import_handler.rb +3 -0
  74. data/lib/openhab/yard/html_helper.rb +49 -15
  75. data/lib/openhab/yard/markdown_helper.rb +135 -0
  76. data/lib/openhab/yard.rb +6 -0
  77. metadata +36 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b818f8062ce950e265819455075b42fd1cf2d1fc6270b57f547b3e93f19f0656
4
- data.tar.gz: '08c396633d12172da0751719196247319731205b9ee6704ea4844bd3709321aa'
3
+ metadata.gz: bc3911eb787dc73ea31109aa6d4d8c3896a1019b381a70030f152c668f0b8f2e
4
+ data.tar.gz: ebd2d7005e9f17827a4bf58d38b7fc2476a497cb428aab0270290c3c98461b80
5
5
  SHA512:
6
- metadata.gz: ac9760ebe37190c941c973a4526ec8b8a7a2b1584585f324f80c531849f879f7cb471bcbac1beae02f3412fb6822fbb7e50e343e6e015e5ddbb9f5b552712a70
7
- data.tar.gz: bc0ec52bafce17c3f090984370d98695fa49bfc1799293d1d6f421764f7a8ecfbe814c6d2b7bd6b03f023c0daefa517f3595bebcd7c0af53d0ce53ee153d4360
6
+ metadata.gz: df4c1df793cd44700467728c63df6ba9d12ecf7111fc7daf2b9a8f4953c68575082f9f4b87f70a42bfedcc9af70d4537e45b6fb2d8b78ac8e7e3f7cca22aaf4b
7
+ data.tar.gz: de1c8f5847bbbeb3eed3268ceedc2a61213b4f6ab269372a08bd4d8217f6b384a2c62b5ceb1f9de2777d264d0d6eb4e02fde6f245fa4fcc0dc03d068041a11bb
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see https://www.openhab.org/docs/configuration/multimedia.html#actions-2 Audio Actions
7
+ class Audio
8
+ class << self
9
+ #
10
+ # Play an audio file via openHAB sound service, Audio.playSound()
11
+ #
12
+ # @param filename [String] The sound file to play
13
+ # @param sink [String] Specify a particular sink to output the speech
14
+ # @param volume [PercentType] Specify the volume for the speech
15
+ #
16
+ # @return [void]
17
+ #
18
+ # @example Play an audio file
19
+ # rule 'Play an audio file' do
20
+ # every :hour
21
+ # run { Audio.play_sound "beep.mp3", volume: 100 }
22
+ # end
23
+ #
24
+ def play_sound(filename, sink: nil, volume: nil)
25
+ volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
26
+ playSound(sink&.to_s, filename.to_s, volume)
27
+ end
28
+
29
+ #
30
+ # Play an audio stream from an URL to the given sink(s). Set url to nil if streaming should be stopped
31
+ #
32
+ # @param [String] url The URL of the audio stream
33
+ # @param [String] sink The audio sink, or nil to use the default audio sink
34
+ #
35
+ # @return [void]
36
+ #
37
+ # @example Play an audio stream
38
+ # Audio.play_stream 'example.com'
39
+ #
40
+ def play_stream(url, sink: nil)
41
+ playStream(sink&.to_s, url)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see CoreExt::Ephemeris
7
+ class Ephemeris
8
+ class << self
9
+ #
10
+ # Human readable name of the given holiday
11
+ #
12
+ # @param [Symbol, #holiday, nil] holiday
13
+ # @return [String, nil]
14
+ #
15
+ # @example
16
+ # Ephemeris.holiday_name(Date.today) # => "Christmas"
17
+ # Ephemeris.holiday_name(:christmas) # => "Christmas"
18
+ #
19
+ def holiday_name(holiday)
20
+ holiday = holiday.holiday if holiday.respond_to?(:holiday)
21
+ return nil if holiday.nil?
22
+
23
+ ::Ephemeris.get_holiday_description(to_holiday_property_key(holiday))
24
+ end
25
+
26
+ private
27
+
28
+ def to_holiday_property_key(holiday)
29
+ holiday = holiday.to_s
30
+ return holiday.upcase unless holiday.include?(".")
31
+
32
+ religion, holiday = holiday.split(/\.([^.]*)$/)
33
+ :"#{religion}.#{holiday.upcase}"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see https://www.openhab.org/docs/configuration/actions.html#exec-actions Exec Actions
7
+ class Exec
8
+ class << self # rubocop:disable Lint/EmptyClass
9
+ # @!method execute_command_line
10
+ #
11
+ # @return [void]
12
+ #
13
+ # @overload execute_command_line(command_line)
14
+ #
15
+ # Executes a command on the command line without waiting for the
16
+ # command to complete.
17
+ #
18
+ # @param [String] command_line
19
+ # @return [void]
20
+ #
21
+ # @example Execute an external command
22
+ # rule 'Run a command' do
23
+ # every :day
24
+ # run do
25
+ # Exec.execute_command_line('/bin/true')
26
+ # end
27
+ # end
28
+ #
29
+ # @overload execute_command_line(timeout, command_line)
30
+ #
31
+ # Executes a command on the command and waits timeout seconds for
32
+ # the command to complete, returning the output from the command
33
+ # as a String.
34
+ #
35
+ # @param [Duration] timeout
36
+ # @param [String] command_line
37
+ # @return [String]
38
+ #
39
+ # @example Execute an external command and process its results
40
+ # rule 'Run a command' do
41
+ # every :day
42
+ # run do
43
+ # TodaysHoliday_String.update(Exec.execute_command_line(5.seconds, '/home/cody/determine_holiday.rb')
44
+ # end
45
+ # end
46
+ #
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see https://www.openhab.org/docs/configuration/actions.html#http-actions HTTP Actions
7
+ class HTTP
8
+ class << self
9
+ #
10
+ # Sends an HTTP GET request and returns the result as a String.
11
+ #
12
+ # @param [String] url
13
+ # @param [Hash<String, String>] headers
14
+ # @param [Duration, int, nil] timeout Timeout (in milliseconds, if given as an Integer)
15
+ # @return [String] the response body
16
+ # @return [nil] if an error occurred
17
+ #
18
+ def send_http_get_request(url, headers: {}, timeout: nil)
19
+ timeout ||= 5_000
20
+ timeout = timeout.to_millis if timeout.is_a?(Duration)
21
+
22
+ sendHttpGetRequest(url, headers, timeout)
23
+ end
24
+
25
+ #
26
+ # Sends an HTTP PUT request and returns the result as a String.
27
+ #
28
+ # @param [String] url
29
+ # @param [String] content_type
30
+ # @param [String] content
31
+ # @param [Hash<String, String>] headers
32
+ # @param [Duration, int, nil] timeout Timeout (in milliseconds, if given as an Integer)
33
+ # @return [String] the response body
34
+ # @return [nil] if an error occurred
35
+ #
36
+ def send_http_put_request(url, content_type = nil, content = nil, headers: {}, timeout: nil)
37
+ timeout ||= 1_000
38
+ timeout = timeout.to_millis if timeout.is_a?(Duration)
39
+
40
+ sendHttpPutRequest(url, content_type, content, headers, timeout)
41
+ end
42
+
43
+ #
44
+ # Sends an HTTP POST request and returns the result as a String.
45
+ #
46
+ # @param [String] url
47
+ # @param [String] content_type
48
+ # @param [String] content
49
+ # @param [Hash<String, String>] headers
50
+ # @param [Duration, int, nil] timeout Timeout (in milliseconds, if given as an Integer)
51
+ # @return [String] the response body
52
+ # @return [nil] if an error occurred
53
+ #
54
+ def send_http_post_request(url, content_type = nil, content = nil, headers: {}, timeout: nil)
55
+ timeout ||= 1_000
56
+ timeout = timeout.to_millis if timeout.is_a?(Duration)
57
+
58
+ sendHttpPostRequest(url, content_type, content, headers, timeout)
59
+ end
60
+
61
+ #
62
+ # Sends an HTTP DELETE request and returns the result as a String.
63
+ #
64
+ # @param [String] url
65
+ # @param [Hash<String, String>] headers
66
+ # @param [Duration, int, nil] timeout Timeout (in milliseconds, if given as an Integer)
67
+ # @return [String] the response body
68
+ # @return [nil] if an error occurred
69
+ #
70
+ def send_http_delete_request(url, headers: {}, timeout: nil)
71
+ timeout ||= 1_000
72
+ timeout = timeout.to_millis if timeout.is_a?(Duration)
73
+
74
+ sendHttpDeleteRequest(url, headers, timeout)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see org.openhab.core.model.script.actions.Ping
7
+ class Ping
8
+ class << self
9
+ #
10
+ # Checks the vitality of host.
11
+ #
12
+ # If port is `nil`, a regular ping is issued. If other ports are
13
+ # specified we try to open a new Socket with the given timeout.
14
+ #
15
+ # @param [String] host
16
+ # @param [int, nil] port
17
+ # @param [Duration, Integer, nil] timeout Connect timeout (in milliseconds, if given as an Integer)
18
+ # @return [true, false]
19
+ #
20
+ def check_vitality(host, port = nil, timeout = nil)
21
+ port ||= 0
22
+ timeout ||= 0
23
+ timeout = timeout.to_millis if timeout.is_a?(Duration)
24
+ checkVitality(host, port, timeout)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see org.openhab.core.transform.actions.Transformation
7
+ class Transformation
8
+ class << self
9
+ # @!visibility private
10
+ alias_method :transform_raw, :transform if instance_methods.include?(:say)
11
+
12
+ #
13
+ # Applies a transformation of a given type with some function to a value.
14
+ #
15
+ # @param [String, Symbol] type The transformation type, e.g. REGEX
16
+ # or MAP
17
+ # @param [String, Symbol] function The function to call. This value depends
18
+ # on the transformation type
19
+ # @param [String] value The value to apply the transformation to
20
+ # @return [String] the transformed value, or the original value if an error occurred
21
+ #
22
+ # @example Run a transformation
23
+ # Transformation.transform(:map, "myfan.map", 0)
24
+ #
25
+ def transform(type, function, value)
26
+ transform_raw(type.to_s.upcase, function.to_s, value.to_s)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Actions
6
+ # @see https://www.openhab.org/docs/configuration/multimedia.html#actions-3 Voice Actions
7
+ class Voice
8
+ class << self
9
+ # @!visibility private
10
+ alias_method :raw_say, :say if instance_methods.include?(:say)
11
+
12
+ #
13
+ # Say text via openHAB Text-To-Speech service, Voice.say()
14
+ #
15
+ # @param text [String] The text to say
16
+ # @param voice [String] Specify a particular voice to use
17
+ # @param sink [String] Specify a particular sink to output the speech
18
+ # @param volume [PercentType] Specify the volume for the speech
19
+ #
20
+ # @return [void]
21
+ #
22
+ # @example Run the TTS engine and output to the default audio sink.
23
+ # rule 'Say the time every hour' do
24
+ # every :hour
25
+ # run { Voice.say "The time is #{TimeOfDay.now}" }
26
+ # end
27
+ #
28
+ def say(text, voice: nil, sink: nil, volume: nil)
29
+ volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
30
+ raw_say(text.to_s, voice&.to_s, sink&.to_s, volume)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -6,64 +6,24 @@ module OpenHAB
6
6
  # Access to global actions.
7
7
  #
8
8
  # All openHAB's actions including those provided by add-ons are available, notably:
9
- # * Audio
10
- # * Voice
11
- # * Things
12
- # * Ephemeris
13
- # * Exec
14
- # * HTTP
15
- # * Ping
9
+ # * {Audio}
10
+ # * {CoreExt::Ephemeris Ephemeris}
11
+ # * {Exec}
12
+ # * {HTTP}
13
+ # * {Items::Persistence PersistenceExtensions}
14
+ # * {Ping}
15
+ # * {Items::Semantics Semantics}
16
+ # * {Transformation}
17
+ # * {Voice}
16
18
  #
17
19
  # From add-ons, e.g.:
18
- # * Transformation
19
- # * PersistenceExtensions (see {Items::Persistence})
20
- # * NotificationAction (from [openHAB Cloud Connector](https://www.openhab.org/addons/integrations/openhabcloud/))
21
- #
22
- # Global actions are available as "global" methods on {OpenHAB::DSL}, or
23
- # explicitly from this {Actions} module, or you can explicitly reference a
24
- # specific action.
20
+ # * NotificationAction (from
21
+ # [openHAB Cloud Connector](https://www.openhab.org/addons/integrations/openhabcloud/);
22
+ # see {notify notify})
25
23
  #
26
24
  # Thing-specific actions can be accessed from the {Things::Thing Thing} object.
27
25
  # See {Things::Thing#actions Thing#actions}.
28
26
  #
29
- # @example Run the TTS engine and output to the default audio sink. For more information see [Voice](https://www.openhab.org/docs/configuration/multimedia.html#voice)
30
- # rule 'Say the time every hour' do
31
- # every :hour
32
- # run { say "The time is #{TimeOfDay.now}" }
33
- # end
34
- #
35
- # rule 'Play an audio file' do
36
- # every :hour
37
- # run { play_sound "beep.mp3", volume: 100 }
38
- # end
39
- #
40
- # play_stream 'example.com'
41
- #
42
- # @example Send a broadcast notification via the openHAB Cloud
43
- # rule 'Send an alert' do
44
- # changed Alarm_Triggered, to: ON
45
- # run { notify 'Red Alert!' }
46
- # end
47
- #
48
- # @example Execute an external command
49
- # rule 'Run a command' do
50
- # every :day
51
- # run do
52
- # execute_command_line('/bin/true')
53
- # end
54
- # end
55
- #
56
- # @example Execute an external command, referencing the Exec module directly
57
- # rule 'Run a command' do
58
- # every :day
59
- # run do
60
- # OpenHAB::Core::Actions::Exec::execute_command_line('/bin/true')
61
- # end
62
- # end
63
- #
64
- # @example Run a transformation
65
- # transform("MAP", "myfan.map", "0")
66
- #
67
27
  module Actions
68
28
  OSGi.services("org.openhab.core.model.script.engine.action.ActionService")&.each do |service|
69
29
  action_class = service.action_class
@@ -91,18 +51,24 @@ module OpenHAB
91
51
  module_function
92
52
 
93
53
  #
94
- # Send notification to an email or broadcast
54
+ # Send a notification.
95
55
  #
96
- # @param msg [String] The notification message to send
97
- # @param email [String, nil] The email address to send to. If nil, the message will be broadcast
56
+ # @param msg [String] The message to send.
57
+ # @param email [String, nil] The email address to send to. If `nil`,
58
+ # the message will be broadcast.
98
59
  # @param icon [String, Symbol, nil]
99
60
  # @param severity [String, Symbol, nil]
100
- #
101
61
  # @return [void]
102
62
  #
63
+ # @example Send a broadcast notification via openHAB Cloud
64
+ # rule 'Send an alert' do
65
+ # changed Alarm_Triggered, to: ON
66
+ # run { notify 'Red Alert!' }
67
+ # end
68
+ #
103
69
  def notify(msg, email: nil, icon: nil, severity: nil)
104
70
  unless Actions.const_defined?(:NotificationAction)
105
- raise NoMethodError, "NotificationAction is not available. Please install the openHAB cloud addon"
71
+ raise NotImplementedError, "NotificationAction is not available. Please install the openHAB Cloud addon."
106
72
  end
107
73
 
108
74
  if email
@@ -111,69 +77,6 @@ module OpenHAB
111
77
  NotificationAction.send_broadcast_notification(msg.to_s, icon&.to_s, severity&.to_s)
112
78
  end
113
79
  end
114
-
115
- #
116
- # Say text via openHAB Text-To-Speech service, Voice.say()
117
- #
118
- # @param text [String] The text to say
119
- # @param voice [String] Specify a particular voice to use
120
- # @param sink [String] Specify a particular sink to output the speech
121
- # @param volume [PercentType] Specify the volume for the speech
122
- #
123
- # @return [void]
124
- #
125
- def say(text, voice: nil, sink: nil, volume: nil)
126
- volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
127
- Voice.say(text.to_s, voice&.to_s, sink&.to_s, volume)
128
- end
129
-
130
- #
131
- # Play an audio file via openHAB sound service, Audio.playSound()
132
- #
133
- # @param filename [String] The sound file to play
134
- # @param sink [String] Specify a particular sink to output the speech
135
- # @param volume [PercentType] Specify the volume for the speech
136
- #
137
- # @return [void]
138
- #
139
- def play_sound(filename, sink: nil, volume: nil)
140
- volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
141
- Audio.play_sound(sink&.to_s, filename.to_s, volume)
142
- end
143
-
144
- #
145
- # Play an audio stream from an URL to the given sink(s). Set url to nil if streaming should be stopped
146
- #
147
- # @param [String] url The URL of the audio stream
148
- # @param [String] sink The audio sink, or nil to use the default audio sink
149
- #
150
- # @return [void]
151
- #
152
- def play_stream(url, sink: nil)
153
- Audio.play_stream(sink&.to_s, url)
154
- end
155
-
156
- #
157
- # Delegate missing methods to any available global actions.
158
- #
159
- def method_missing(method, *args, &block)
160
- Actions.constants.each do |constant|
161
- mod = Actions.const_get(constant)
162
- return mod.public_send(method, *args, &block) if mod.respond_to?(method)
163
- end
164
-
165
- super
166
- end
167
-
168
- # @!visibility private
169
- def respond_to_missing?(method_name, _include_private = false)
170
- Actions.constants.each do |constant|
171
- mod = Actions.const_get(constant)
172
- return true if mod.respond_to?(method_name)
173
- end
174
-
175
- super
176
- end
177
80
  end
178
81
  end
179
82
  end
@@ -2,18 +2,15 @@
2
2
 
3
3
  module OpenHAB
4
4
  module Core
5
- module Events
5
+ module DTO
6
6
  java_import org.openhab.core.thing.link.dto.ItemChannelLinkDTO
7
7
 
8
- # Strictly speaking this class isn't an event, but it's accessed from an AbstractItemChannelLinkEvent
9
-
10
8
  # Adds methods to core openHAB ItemChannelLinkDTO to make it more natural in Ruby
11
9
  class ItemChannelLinkDTO
12
10
  #
13
11
  # @!attribute [r] item_name
14
12
  # @return [String] The name of the item that was linked or unlinked.
15
13
  #
16
- alias_method :item_name, :itemName
17
14
 
18
15
  #
19
16
  # @!attribute [r] item
@@ -2,26 +2,24 @@
2
2
 
3
3
  module OpenHAB
4
4
  module Core
5
- module Events
5
+ module DTO
6
6
  java_import org.openhab.core.thing.dto.AbstractThingDTO
7
7
 
8
- # Strictly speaking this class isn't an event, but it's accessed from an AbstractThingRegistryEvent
9
-
10
8
  # Adds methods to core openHAB AbstractThingDTO to make it more natural in Ruby
11
9
  class AbstractThingDTO
12
- # @!method uid
13
- # The thing's UID
14
- # @return [String]
10
+ # @!attribute [r] uid
11
+ # The thing's UID
12
+ # @return [String]
15
13
  alias_method :uid, :UID
16
14
 
17
- # @!method thing_type_uid
18
- # The thing type's UID
19
- # @return [String]
15
+ # @!attribute [r] thing_type_uid
16
+ # The thing type's UID
17
+ # @return [String]
20
18
  alias_method :thing_type_uid, :thingTypeUID
21
19
 
22
- # @!method bridge_uid
23
- # The bridge's UID
24
- # @return [String]
20
+ # @!attribute [r] bridge_uid
21
+ # The Bridge's UID
22
+ # @return [String, nil]
25
23
  alias_method :bridge_uid, :bridgeUID
26
24
  end
27
25
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ # Contains data transfer objects that represent other openHAB objects
6
+ # when they need to be represented with simple classes, such as for JSON
7
+ # responses, or when being attached to events sent over the event bus.
8
+ module DTO
9
+ end
10
+ end
11
+ end
@@ -36,7 +36,7 @@ module OpenHAB
36
36
 
37
37
  # @return [Boolean] if dummy items should be created in this context
38
38
  def create_dummy_items?
39
- @create_dummy_items
39
+ defined?(@create_dummy_items) && @create_dummy_items
40
40
  end
41
41
 
42
42
  # @!visibility private
@@ -10,6 +10,7 @@ module OpenHAB
10
10
  # @return [Object]
11
11
  attr_accessor :attachment
12
12
 
13
+ # @return [String]
13
14
  alias_method :inspect, :to_s
14
15
  end
15
16
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.items.events.AbstractItemRegistryEvent,
7
+ org.openhab.core.items.events.ItemAddedEvent,
8
+ org.openhab.core.items.events.ItemUpdatedEvent,
9
+ org.openhab.core.items.events.ItemRemovedEvent
10
+
11
+ #
12
+ # The {AbstractEvent} sent when an {Item} is added, updated, or removed
13
+ # from its registry.
14
+ #
15
+ # @!attribute [r] item
16
+ # @return [DTO::ItemDTO] The item that triggered this event.
17
+ #
18
+ class AbstractItemRegistryEvent < AbstractEvent; end
19
+
20
+ #
21
+ # The {AbstractEvent} sent with an `item_added` trigger.
22
+ #
23
+ class ItemAddedEvent < AbstractItemRegistryEvent; end
24
+
25
+ #
26
+ # The {AbstractEvent} sent with an `item_updated` trigger.
27
+ #
28
+ class ItemUpdatedEvent < AbstractItemRegistryEvent; end
29
+
30
+ #
31
+ # The {AbstractEvent} sent with an `item_removed` trigger.
32
+ #
33
+ class ItemRemovedEvent < AbstractItemRegistryEvent; end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.thing.events.AbstractThingRegistryEvent,
7
+ org.openhab.core.thing.events.ThingAddedEvent,
8
+ org.openhab.core.thing.events.ThingUpdatedEvent,
9
+ org.openhab.core.thing.events.ThingRemovedEvent
10
+
11
+ #
12
+ # The {AbstractEvent} sent when a {Things::Thing Thing} is added,
13
+ # updated, or removed from its registry.
14
+ #
15
+ #
16
+ # @!attribute [r] thing
17
+ # @return [DTO::AbstractThingDTO] The thing that triggered this event.
18
+ #
19
+ class AbstractThingRegistryEvent < AbstractEvent; end
20
+
21
+ #
22
+ # The {AbstractEvent} sent with a
23
+ # {DSL::Rules::BuilderDSL#thing_added thing_added trigger}.
24
+ #
25
+ class ThingAddedEvent < AbstractThingRegistryEvent; end
26
+
27
+ #
28
+ # The {AbstractEvent} sent with a
29
+ # {DSL::Rules::BuilderDSL#thing_updated thing_updated trigger}.
30
+ #
31
+ class ThingUpdatedEvent < AbstractThingRegistryEvent; end
32
+
33
+ #
34
+ # The {AbstractEvent} sent with a
35
+ # {DSL::Rules::BuilderDSL#thing_removed thing_removed trigger}.
36
+ #
37
+ class ThingRemovedEvent < AbstractThingRegistryEvent; end
38
+ end
39
+ end
40
+ end