openhab-jrubyscripting 5.0.0.rc9 → 5.0.0.rc11

Sign up to get free protection for your applications and to get access to all the features.
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