openhab-jrubyscripting 5.0.0.rc5 → 5.0.0.rc6

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/actions.rb +6 -6
  3. data/lib/openhab/core/dependency_tracking.rb +34 -0
  4. data/lib/openhab/core/entity_lookup.rb +132 -78
  5. data/lib/openhab/core/events/item_channel_link.rb +2 -2
  6. data/lib/openhab/core/events/item_command_event.rb +1 -1
  7. data/lib/openhab/core/events/item_event.rb +2 -2
  8. data/lib/openhab/core/events/item_state_changed_event.rb +1 -1
  9. data/lib/openhab/core/events/thing.rb +1 -1
  10. data/lib/openhab/core/items/accepted_data_types.rb +2 -2
  11. data/lib/openhab/core/items/contact_item.rb +1 -1
  12. data/lib/openhab/core/items/dimmer_item.rb +2 -2
  13. data/lib/openhab/core/items/generic_item.rb +45 -224
  14. data/lib/openhab/core/items/group_item.rb +5 -3
  15. data/lib/openhab/core/items/image_item.rb +2 -2
  16. data/lib/openhab/core/items/item.rb +219 -0
  17. data/lib/openhab/core/items/metadata/hash.rb +1 -1
  18. data/lib/openhab/core/items/persistence.rb +4 -5
  19. data/lib/openhab/core/items/provider.rb +2 -2
  20. data/lib/openhab/core/items/proxy.rb +68 -7
  21. data/lib/openhab/core/items/registry.rb +6 -6
  22. data/lib/openhab/core/items/semantics/enumerable.rb +6 -6
  23. data/lib/openhab/core/items/semantics.rb +8 -7
  24. data/lib/openhab/core/items.rb +2 -1
  25. data/lib/openhab/core/provider.rb +14 -7
  26. data/lib/openhab/core/rules/registry.rb +2 -2
  27. data/lib/openhab/core/rules.rb +1 -1
  28. data/lib/openhab/core/script_handling.rb +6 -6
  29. data/lib/openhab/core/things/channel.rb +1 -1
  30. data/lib/openhab/core/things/channel_uid.rb +2 -2
  31. data/lib/openhab/core/things/item_channel_link.rb +2 -2
  32. data/lib/openhab/core/things/links/provider.rb +2 -2
  33. data/lib/openhab/core/things/registry.rb +1 -1
  34. data/lib/openhab/core/things/thing.rb +1 -1
  35. data/lib/openhab/core/types/date_time_type.rb +4 -4
  36. data/lib/openhab/core/types/hsb_type.rb +2 -2
  37. data/lib/openhab/core/types/quantity_type.rb +1 -1
  38. data/lib/openhab/core/types.rb +1 -1
  39. data/lib/openhab/core/uid.rb +1 -1
  40. data/lib/openhab/core/value_cache.rb +188 -0
  41. data/lib/openhab/core.rb +57 -15
  42. data/lib/openhab/core_ext/ruby/symbol.rb +7 -0
  43. data/lib/openhab/dsl/items/builder.rb +17 -10
  44. data/lib/openhab/dsl/items/ensure.rb +5 -5
  45. data/lib/openhab/dsl/items/timed_command.rb +4 -4
  46. data/lib/openhab/dsl/rules/automation_rule.rb +53 -39
  47. data/lib/openhab/dsl/rules/builder.rb +128 -79
  48. data/lib/openhab/dsl/rules/guard.rb +5 -5
  49. data/lib/openhab/dsl/rules/name_inference.rb +20 -1
  50. data/lib/openhab/dsl/rules/rule_triggers.rb +3 -3
  51. data/lib/openhab/dsl/rules/terse.rb +1 -0
  52. data/lib/openhab/dsl/rules/triggers/changed.rb +26 -23
  53. data/lib/openhab/dsl/rules/triggers/command.rb +6 -5
  54. data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +2 -2
  55. data/lib/openhab/dsl/rules/triggers/cron/cron.rb +2 -2
  56. data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +6 -6
  57. data/lib/openhab/dsl/rules/triggers/updated.rb +5 -5
  58. data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +11 -12
  59. data/lib/openhab/dsl/things/builder.rb +73 -14
  60. data/lib/openhab/dsl/version.rb +2 -2
  61. data/lib/openhab/dsl.rb +43 -17
  62. data/lib/openhab/log.rb +5 -5
  63. data/lib/openhab/rspec/configuration.rb +5 -5
  64. data/lib/openhab/rspec/example_group.rb +1 -1
  65. data/lib/openhab/rspec/helpers.rb +4 -4
  66. data/lib/openhab/rspec/hooks.rb +19 -1
  67. data/lib/openhab/rspec/karaf.rb +12 -19
  68. data/lib/openhab/rspec/suspend_rules.rb +2 -1
  69. data/lib/openhab/yard/base_helper.rb +46 -0
  70. data/lib/openhab/yard/markdown_directive.rb +125 -0
  71. data/lib/openhab/yard/markdown_helper.rb +99 -0
  72. metadata +10 -3
@@ -52,7 +52,7 @@ module OpenHAB
52
52
  module RSpec
53
53
  #
54
54
  # Provides helper methods for use in specs, to easily work with and adjust
55
- # the OpenHAB environment.
55
+ # the openHAB environment.
56
56
  #
57
57
  # These methods are automatically available in RSpec spec blocks, as well
58
58
  # as other per-spec hooks like `before` and `after`. You can also call them
@@ -175,7 +175,7 @@ module OpenHAB
175
175
  end
176
176
 
177
177
  #
178
- # Require all files configured to be autorequired with the jrubyscripting addon in OpenHAB.
178
+ # Require all files configured to be autorequired with the jrubyscripting addon in openHAB.
179
179
  #
180
180
  # This method is normally called by RSpec hooks.
181
181
  #
@@ -306,7 +306,7 @@ module OpenHAB
306
306
  end
307
307
 
308
308
  #
309
- # Install an OpenHAB addon
309
+ # Install an openHAB addon
310
310
  #
311
311
  # @param [String] addon_id The addon id, such as "binding-mqtt"
312
312
  # @param [true,false] wait Wait until OSGi has confirmed the bundle is installed and running before returning.
@@ -348,7 +348,7 @@ module OpenHAB
348
348
  end
349
349
  end
350
350
 
351
- # @return [String] The filename of the OpenHAB log.
351
+ # @return [String] The filename of the openHAB log.
352
352
  def log_file
353
353
  "#{java.lang.System.get_property("openhab.logdir", nil)}/openhab.log"
354
354
  end
@@ -3,7 +3,7 @@
3
3
  module OpenHAB
4
4
  #
5
5
  # This module contains helper methods, hooks, and infrastracture to
6
- # boot OpenHAB inside of JRuby, and run RSpec (or other Ruby processes)
6
+ # boot openHAB inside of JRuby, and run RSpec (or other Ruby processes)
7
7
  # in that context.
8
8
  #
9
9
  # @see file:testing.md Testing Your Rules
@@ -11,6 +11,14 @@ module OpenHAB
11
11
  module RSpec
12
12
  Object.include Helpers if defined?(IRB)
13
13
 
14
+ # @!visibility private
15
+ module Hooks
16
+ class << self
17
+ attr_accessor :cache_script_extension
18
+ end
19
+ self.cache_script_extension = nil
20
+ end
21
+
14
22
  Helpers.launch_karaf(
15
23
  include_bindings: Configuration.include_bindings,
16
24
  include_jsondb: Configuration.include_jsondb,
@@ -28,6 +36,15 @@ module OpenHAB
28
36
  Helpers.send(:set_up_autoupdates)
29
37
  Helpers.load_transforms
30
38
  Helpers.load_rules
39
+
40
+ if DSL.shared_cache
41
+ Hooks.cache_script_extension = OSGi.service(
42
+ "org.openhab.core.automation.module.script.ScriptExtensionProvider",
43
+ filter:
44
+ "(component.name=org.openhab.core.automation.module.script.rulesupport.internal.CacheScriptExtension)"
45
+ )
46
+ Hooks.cache_script_extension.class.field_reader :sharedCache
47
+ end
31
48
  end
32
49
 
33
50
  config.before do
@@ -79,6 +96,7 @@ module OpenHAB
79
96
  Timecop.return
80
97
  restore_autoupdate_items
81
98
  Mocks::PersistenceService.instance.reset
99
+ Hooks.cache_script_extension.sharedCache.clear if DSL.shared_cache
82
100
  end
83
101
  end
84
102
  end
@@ -20,6 +20,14 @@ module OpenHAB
20
20
  def get(type)
21
21
  @manager.get(type, "jruby")
22
22
  end
23
+
24
+ def default_presets
25
+ @manager.default_presets
26
+ end
27
+
28
+ def import_preset(preset)
29
+ @manager.find_preset(preset, "rspec")
30
+ end
23
31
  end
24
32
  private_constant :ScriptExtensionManagerWrapper
25
33
 
@@ -73,7 +81,7 @@ module OpenHAB
73
81
  service = org.apache.karaf.instance.core.internal.InstanceServiceImpl.new
74
82
  settings = org.apache.karaf.instance.core.InstanceSettings.new(0, 0, 0, path, nil, nil, nil)
75
83
  root_instance = service.instances.find(&:root?)
76
- raise ArgumentError "No root instance found to clone... has OpenHAB run yet?" unless root_instance
84
+ raise ArgumentError "No root instance found to clone... has openHAB run yet?" unless root_instance
77
85
 
78
86
  return if service.get_instance("rspec")
79
87
 
@@ -121,7 +129,7 @@ module OpenHAB
121
129
  launch_karaf
122
130
  at_exit do
123
131
  @main.destroy
124
- # OSGi/OpenHAB leave a ton of threads around. Kill ourselves ASAP
132
+ # OSGi/openHAB leave a ton of threads around. Kill ourselves ASAP
125
133
  code = if $!.nil? || ($!.is_a?(SystemExit) && $!.success?)
126
134
  0
127
135
  elsif $!.is_a?(SystemExit)
@@ -566,21 +574,6 @@ module OpenHAB
566
574
  wait_for_service("org.openhab.core.automation.module.script.internal.ScriptExtensionManager") do |sem|
567
575
  # since we're not created by the ScriptEngineManager, this never gets set; manually set it
568
576
  $se = $scriptExtension = ScriptExtensionManagerWrapper.new(sem)
569
- scope_values = sem.find_default_presets("rspec")
570
- scope_values = scope_values.entry_set.to_a
571
-
572
- scope_values.each do |entry|
573
- key = entry.key
574
- value = entry.value
575
- # convert Java classes to Ruby classes
576
- value = value.ruby_class if value.is_a?(java.lang.Class) # rubocop:disable Lint/UselessAssignment
577
- # variables are globals; constants go into the global namespace
578
- key = case key[0]
579
- when "a".."z" then "$#{key}"
580
- when "A".."Z" then "::#{key}"
581
- end
582
- eval("#{key} = value unless defined?(#{key})", nil, __FILE__, __LINE__) # rubocop:disable Security/Eval
583
- end
584
577
  end
585
578
  end
586
579
 
@@ -731,7 +724,7 @@ module OpenHAB
731
724
  sls = OSGi.service("org.openhab.core.service.StartLevelService")
732
725
 
733
726
  unless sls
734
- # try a different (hacky!) way to get it, since in OpenHAB 3.2.0 it's not exposed as a service
727
+ # try a different (hacky!) way to get it, since in openHAB 3.2.0 it's not exposed as a service
735
728
  scr = OSGi.service("org.osgi.service.component.runtime.ServiceComponentRuntime")
736
729
  scr.class.field_reader :componentRegistry
737
730
  cr = scr.componentRegistry
@@ -771,7 +764,7 @@ module OpenHAB
771
764
  File.write("#{oh_userdata}/etc/org.apache.karaf.features.xml", <<~XML)
772
765
  <?xml version="1.0" encoding="UTF-8"?>
773
766
  <featuresProcessing xmlns="http://karaf.apache.org/xmlns/features-processing/v1.0.0" xmlns:f="http://karaf.apache.org/xmlns/features/v1.6.0">
774
- <!-- From OpenHAB 3.2.0 -->
767
+ <!-- From openHAB 3.2.0 -->
775
768
  <bundleReplacements>
776
769
  <bundle originalUri="mvn:org.ops4j.pax.logging/pax-logging-api/[0,2.0.13)" replacement="mvn:org.ops4j.pax.logging/pax-logging-api/2.0.13" mode="maven" />
777
770
  <bundle originalUri="mvn:org.ops4j.pax.logging/pax-logging-log4j2/[0,2.0.13)" replacement="mvn:org.ops4j.pax.logging/pax-logging-log4j2/2.0.13" mode="maven" />
@@ -18,7 +18,8 @@ module OpenHAB
18
18
  logger.trace { "Execute called with mod (#{mod&.to_string}) and inputs (#{inputs.inspect})" }
19
19
  logger.trace { "Event details #{inputs["event"].inspect}" } if inputs&.key?("event")
20
20
  trigger_conditions(inputs).process(mod: mod, inputs: inputs) do
21
- process_queue(create_queue(inputs), mod, inputs)
21
+ event = extract_event(inputs)
22
+ process_queue(create_queue(event), mod, event)
22
23
  end
23
24
  rescue Exception => e
24
25
  raise if defined?(::RSpec) && ::RSpec.current_example.example_group.propagate_exceptions?
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module OpenHAB
6
+ module YARD
7
+ # @!visibility private
8
+ module BaseHelper
9
+ def preprocess(text)
10
+ html = Nokogiri::HTML5.fragment(text)
11
+
12
+ context = if ENV["ADDON"]
13
+ :addon
14
+ else
15
+ :yard
16
+ end
17
+
18
+ # process directives on which content is supposed to be included in this context
19
+ node = html.children.first
20
+ loop do
21
+ break unless node
22
+
23
+ next_node = node.next
24
+
25
+ if node.comment? && (directive = MarkdownDirective.new(node)).directive?
26
+ next_node = directive.process(context) || next_node
27
+ end
28
+ node = next_node
29
+ end
30
+
31
+ html.to_s
32
+ end
33
+
34
+ def link_object(obj, title = nil, *)
35
+ ::YARD::Handlers::JRuby::Base.infer_java_class(obj) if obj.is_a?(String)
36
+ obj = ::YARD::Registry.resolve(object, obj, true, true) if obj.is_a?(String)
37
+ if obj.is_a?(::YARD::CodeObjects::Java::Base) && (see = obj.docstring.tag(:see))
38
+ # link to the first see tag
39
+ return linkify(see.name, title&.to_s || see.text)
40
+ end
41
+
42
+ super
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module OpenHAB
6
+ module YARD
7
+ # @!visibility private
8
+ class MarkdownDirective
9
+ attr_reader :comment, :context
10
+
11
+ def initialize(comment)
12
+ @comment = comment
13
+ @lines = comment.text.split("\n")
14
+ directive_text = @lines.first.strip
15
+
16
+ @multiline = @lines.length > 1
17
+ @directive = false
18
+ return unless (match = directive_text.match(%r{^<(/)?(!)?([a-z]+)-only>$}))
19
+
20
+ @closing = match[1]
21
+ @context = match[3].to_sym
22
+ @inverted = match[2]
23
+
24
+ if closing? && multiline?
25
+ log.warn "In file `#{file}':#{line}: Multiline closing directives are not allowed (#{directive_text})."
26
+ return
27
+ end
28
+ @directive = true
29
+ end
30
+
31
+ def directive?
32
+ @directive
33
+ end
34
+
35
+ def multiline?
36
+ @multiline
37
+ end
38
+
39
+ def closing?
40
+ @closing
41
+ end
42
+
43
+ def inverted?
44
+ @inverted
45
+ end
46
+
47
+ def match?(context)
48
+ result = context == self.context
49
+ result = !result if inverted?
50
+ result
51
+ end
52
+
53
+ def closing_directive
54
+ return nil if multiline?
55
+
56
+ unless instance_variable_defined?(:@closing_directive)
57
+ next_node = @comment.next
58
+ loop do
59
+ return @closing_directive = nil unless next_node
60
+
61
+ if next_node.comment?
62
+ directive = MarkdownDirective.new(next_node)
63
+ if directive.directive? &&
64
+ directive.closing? &&
65
+ directive.context == context &&
66
+ directive.inverted? == inverted?
67
+ return @closing_directive = next_node
68
+ end
69
+ end
70
+
71
+ next_node = next_node.next
72
+ end
73
+ end
74
+ @closing_directive
75
+ end
76
+
77
+ def process(context)
78
+ return unless directive?
79
+ return if closing?
80
+
81
+ matched = match?(context)
82
+
83
+ # if it's a matched multiline, extract the contents and insert them directly,
84
+ # and remove the comment
85
+ if multiline?
86
+ result = comment.next
87
+ comment.before(Nokogiri::HTML5.fragment(@lines[1..].join("\n"))) if matched
88
+ comment.remove
89
+ return result
90
+ end
91
+
92
+ unless closing_directive
93
+ log.warn "In file `#{file}':#{line}: Unmatched directive <#{"!" if inverted?}#{context}-only>."
94
+ return
95
+ end
96
+
97
+ result = closing_directive.next
98
+
99
+ unless matched
100
+ # remove all nodes between the opening and closing directives
101
+ comment.next.remove while comment.next != closing_directive
102
+ end
103
+ # now remove the directives themselves
104
+ closing_directive.remove
105
+ comment.remove
106
+ result
107
+ end
108
+
109
+ def file
110
+ ((defined?(@file) && @file) ? @file.filename : object.file) || "(unknown)"
111
+ end
112
+
113
+ def line
114
+ return @line if instance_variable_defined?(@line)
115
+
116
+ @line = (if defined?(@file) && @file
117
+ 1
118
+ else
119
+ (object.docstring.line_range ? object.docstring.line_range.first : 1)
120
+ end) + (match ? $`.count("\n") : 0)
121
+ @line += comment.line - 1
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module OpenHAB
6
+ module YARD
7
+ # @!visibility private
8
+ module MarkdownHelper
9
+ # @group Linking Objects and URLs
10
+
11
+ def diskfile
12
+ preprocess(super)
13
+ end
14
+
15
+ # mostly copied from HTMLHelper
16
+ def resolve_links(text)
17
+ blockquotes = false
18
+ text.gsub(%r{(```)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
19
+ blockquote = $1
20
+ escape = $2
21
+ name = $3
22
+ title = $4
23
+ match = $&
24
+ if blockquote
25
+ blockquotes = !blockquotes
26
+ next str
27
+ end
28
+ next str if blockquotes
29
+
30
+ next(match[1..-1]) if escape
31
+
32
+ next(match) if name[0, 1] == '|'
33
+
34
+ if object.is_a?(String)
35
+ object
36
+ else
37
+ link = linkify(name, title)
38
+ if (link == name || link == title) && (name + ' ' + link !~ /\A<a\s.*>/)
39
+ match = /(.+)?(\{#{Regexp.quote name}(?:\s.*?)?\})(.+)?/.match(text)
40
+ file = (defined?(@file) && @file ? @file.filename : object.file) || '(unknown)'
41
+ line = (defined?(@file) && @file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
42
+ log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".") +
43
+ "\n\t" + (match[1] ? '...' : '') + match[2].delete("\n") + (match[3] ? '...' : '') if match
44
+ end
45
+
46
+ link
47
+ end
48
+ end
49
+ end
50
+
51
+ # mostly copied from HTMLHelper
52
+ def link_object(obj, title = nil, anchor = nil, relative = true)
53
+ return title if obj.nil?
54
+
55
+ obj = Registry.resolve(object, obj, true, true) if obj.is_a?(String)
56
+
57
+ was_const = false
58
+ # Re-link references to constants that are aliases to their target. But keep
59
+ # their current title.
60
+ while obj.is_a?(CodeObjects::ConstantObject) && obj.target
61
+ title ||= h(object.relative_path(obj)).to_s
62
+ was_const = true
63
+ obj = obj.target
64
+ end
65
+ return link_object(obj, title, anchor, relative) if was_const
66
+
67
+ title = if title
68
+ title.to_s
69
+ elsif object.is_a?(CodeObjects::Base)
70
+ # Check if we're linking to a class method in the current
71
+ # object. If we are, create a title in the format of
72
+ # "CurrentClass.method_name"
73
+ if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
74
+ h([object.name, obj.sep, obj.name].join)
75
+ elsif obj.title != obj.path
76
+ h(obj.title)
77
+ else
78
+ h(object.relative_path(obj))
79
+ end
80
+ else
81
+ h(obj.title)
82
+ end
83
+ return title unless serializer
84
+ return title if obj.is_a?(CodeObjects::Proxy)
85
+
86
+ link = url_for(obj, anchor, relative)
87
+ link ? link_url(link, title, title: h("#{obj.title} (#{obj.type})")) : title
88
+ rescue Parser::UndocumentableError
89
+ log.warn "The namespace of link #{obj.inspect} is a constant or invalid."
90
+ title || obj.to_s
91
+ end
92
+
93
+ def link_url(url, title = nil, _params = nil)
94
+ title ||= url
95
+ "[#{title}](#{url})"
96
+ end
97
+ end
98
+ end
99
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openhab-jrubyscripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.rc5
4
+ version: 5.0.0.rc6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-29 00:00:00.000000000 Z
11
+ date: 2022-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -327,6 +327,7 @@ extra_rdoc_files: []
327
327
  files:
328
328
  - lib/openhab/core.rb
329
329
  - lib/openhab/core/actions.rb
330
+ - lib/openhab/core/dependency_tracking.rb
330
331
  - lib/openhab/core/entity_lookup.rb
331
332
  - lib/openhab/core/events.rb
332
333
  - lib/openhab/core/events/abstract_event.rb
@@ -346,6 +347,7 @@ files:
346
347
  - lib/openhab/core/items/generic_item.rb
347
348
  - lib/openhab/core/items/group_item.rb
348
349
  - lib/openhab/core/items/image_item.rb
350
+ - lib/openhab/core/items/item.rb
349
351
  - lib/openhab/core/items/location_item.rb
350
352
  - lib/openhab/core/items/metadata.rb
351
353
  - lib/openhab/core/items/metadata/hash.rb
@@ -408,6 +410,7 @@ files:
408
410
  - lib/openhab/core/types/un_def_type.rb
409
411
  - lib/openhab/core/types/up_down_type.rb
410
412
  - lib/openhab/core/uid.rb
413
+ - lib/openhab/core/value_cache.rb
411
414
  - lib/openhab/core_ext.rb
412
415
  - lib/openhab/core_ext/between.rb
413
416
  - lib/openhab/core_ext/java/class.rb
@@ -429,6 +432,7 @@ files:
429
432
  - lib/openhab/core_ext/ruby/date_time.rb
430
433
  - lib/openhab/core_ext/ruby/numeric.rb
431
434
  - lib/openhab/core_ext/ruby/range.rb
435
+ - lib/openhab/core_ext/ruby/symbol.rb
432
436
  - lib/openhab/core_ext/ruby/time.rb
433
437
  - lib/openhab/dsl.rb
434
438
  - lib/openhab/dsl/events.rb
@@ -484,6 +488,7 @@ files:
484
488
  - lib/openhab/rspec/shell.rb
485
489
  - lib/openhab/rspec/suspend_rules.rb
486
490
  - lib/openhab/yard.rb
491
+ - lib/openhab/yard/base_helper.rb
487
492
  - lib/openhab/yard/cli/stats.rb
488
493
  - lib/openhab/yard/code_objects/group_object.rb
489
494
  - lib/openhab/yard/code_objects/java/base.rb
@@ -498,6 +503,8 @@ files:
498
503
  - lib/openhab/yard/handlers/jruby/java_import_handler.rb
499
504
  - lib/openhab/yard/handlers/jruby/mixin_handler.rb
500
505
  - lib/openhab/yard/html_helper.rb
506
+ - lib/openhab/yard/markdown_directive.rb
507
+ - lib/openhab/yard/markdown_helper.rb
501
508
  - lib/openhab/yard/tags/constant_directive.rb
502
509
  - lib/openhab/yard/tags/group_directive.rb
503
510
  - lib/openhab/yard/tags/library.rb
@@ -528,5 +535,5 @@ requirements: []
528
535
  rubygems_version: 3.3.7
529
536
  signing_key:
530
537
  specification_version: 4
531
- summary: JRuby Helper Libraries for OpenHAB Scripting
538
+ summary: JRuby Helper Libraries for openHAB Scripting
532
539
  test_files: []