rspec-openhab-scripting 0.0.2-java → 0.0.5-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb06cd0d4f2eb7710a678cf6b080ae636d81ef9faa4012a755ed8b73117a158a
4
- data.tar.gz: 3ed1a44e4cc9802054e6697807e75adafa75e6069647f917b809e20cbdb2e92a
3
+ metadata.gz: 66ee3ecec1c902dcf931cb3e51a7cacdb4df1e3b0798fa973aabf0147787c72f
4
+ data.tar.gz: da69d9608f4242545a4e01b0ae22e0133b6a1868b518ad1a95dd5d67bcd94785
5
5
  SHA512:
6
- metadata.gz: 4ee95923dc2c84ca4253112fcb0d6b351cb14d3a1879dcbcdd5e67dfcf095fdfdd0ab8f3c9d4b617fe2db13393a727f2687194531436c9572857066fcc57a62d
7
- data.tar.gz: 05245aa976b20f462002b87c9451b16c9aa1609f145981f259ee1637270e82a9ca295a55fcb15c6bc66a295664e313e0ffb5b280f193e624fc411ccf3138be2d
6
+ metadata.gz: 5160b3281ea2f567fd040f49cb0acf5b6c1b56ae050711ae049868ec645dc8a38799434c8c51c3c2a2fb806da98b5261b9c1e54119d3fd2c0d2888680cc2b762
7
+ data.tar.gz: c0ca81a870b864c45ba50d281fa9584421b36d64c48b86048765b32d6d0ab5aa64c92a49a4ddfcc6fa21d9b085b7e5a5baa63c95fcde295b090dd5967996d823
@@ -15,14 +15,21 @@ module OpenHAB
15
15
  end
16
16
 
17
17
  def version
18
- body = @faraday.get.body
19
- version = body.dig("runtimeInfo", "version")
20
- version = "#{version}-SNAPSHOT" if body.dig("runtimeInfo", "buildString")&.start_with?("Build #")
18
+ version = root_data.dig("runtimeInfo", "version")
19
+ version = "#{version}-SNAPSHOT" if root_data.dig("runtimeInfo", "buildString")&.start_with?("Build #")
21
20
  version
22
21
  end
23
22
 
23
+ def locale
24
+ root_data["locale"]
25
+ end
26
+
27
+ def measurement_system
28
+ root_data["measurementSystem"]
29
+ end
30
+
24
31
  def items
25
- @faraday.get("items").body
32
+ @faraday.get("items", metadata: ".*").body
26
33
  end
27
34
 
28
35
  def item(name)
@@ -30,5 +37,11 @@ module OpenHAB
30
37
  rescue Faraday::ResourceNotFound
31
38
  nil
32
39
  end
40
+
41
+ private
42
+
43
+ def root_data
44
+ @root_data ||= @faraday.get.body
45
+ end
33
46
  end
34
47
  end
@@ -15,10 +15,37 @@ module OpenHAB
15
15
  levels.each { |level| const_set(level, ch.qos.logback.classic.Level.const_get(level)) }
16
16
 
17
17
  extend Forwardable
18
- delegate %i[level level=] => :@sl4fj_logger
18
+ delegate %i[level] => :@sl4fj_logger
19
+
20
+ def level=(level)
21
+ if level.is_a?(String) || level.is_a?(Symbol)
22
+ level = ch.qos.logback.classic.Level.const_get(level.to_s.upcase, false)
23
+ end
24
+ @sl4fj_logger.level = level
25
+ end
26
+ end
27
+ end
28
+
29
+ module Log
30
+ class << self
31
+ def root
32
+ logger(org.slf4j.Logger::ROOT_LOGGER_NAME)
33
+ end
34
+
35
+ def events
36
+ logger("openhab.event")
37
+ end
38
+
39
+ def logger(object)
40
+ logger_name = case object
41
+ when String then object
42
+ else logger_name(object)
43
+ end
44
+ @loggers[logger_name] ||= Core::Logger.new(logger_name)
45
+ end
19
46
  end
20
47
  end
21
48
  end
22
49
 
23
- root_logger = org.slf4j.LoggerFactory.get_logger(org.slf4j.Logger::ROOT_LOGGER_NAME)
24
- root_logger.level = OpenHAB::Core::Logger::INFO
50
+ OpenHAB::Log.root.level = :info
51
+ OpenHAB::Log.events.level = :warn
@@ -34,8 +34,11 @@ module OpenHAB
34
34
  class BundleContext
35
35
  include org.osgi.framework.BundleContext
36
36
 
37
+ attr_reader :bundles
38
+
37
39
  def initialize(event_manager)
38
40
  @event_manager = event_manager
41
+ @bundles = []
39
42
  end
40
43
 
41
44
  def register_service(klass, service, _properties)
@@ -46,6 +49,10 @@ module OpenHAB
46
49
 
47
50
  @event_manager.add_event_subscriber(service)
48
51
  end
52
+
53
+ def get_service_reference(klass); end
54
+ def get_service(klass); end
55
+ def add_bundle_listener(listener); end
49
56
  end
50
57
 
51
58
  # don't depend on org.openhab.core.test
@@ -100,6 +107,17 @@ module OpenHAB
100
107
  end
101
108
  end
102
109
 
110
+ class ComponentContext
111
+ include org.osgi.service.component.ComponentContext
112
+
113
+ attr_reader :properties, :bundle_context
114
+
115
+ def initialize(bundle_context)
116
+ @properties = java.util.Hashtable.new
117
+ @bundle_context = bundle_context
118
+ end
119
+ end
120
+
103
121
  # subclass to expose private fields
104
122
  class EventManager < org.openhab.core.internal.events.OSGiEventManager
105
123
  field_reader :typedEventFactories, :typedEventSubscribers
@@ -108,6 +126,8 @@ module OpenHAB
108
126
  @imported = false
109
127
 
110
128
  class << self
129
+ attr_accessor :api
130
+
111
131
  def import_presets
112
132
  return if @imported
113
133
 
@@ -127,14 +147,23 @@ module OpenHAB
127
147
  at_exit { eh.close }
128
148
  ea = EventAdmin.new(eh)
129
149
  ep = org.openhab.core.internal.events.OSGiEventPublisher.new(ea)
150
+ bc = BundleContext.new(em)
151
+ cc = ComponentContext.new(bc)
152
+ cc.properties["measurementSystem"] = api.measurement_system if api
130
153
 
131
154
  # the registries!
155
+ ss = VolatileStorageService.new
132
156
  mr = org.openhab.core.internal.items.MetadataRegistryImpl.new
133
157
  OpenHAB::Core::OSGI.register_service("org.openhab.core.items.MetadataRegistry", mr)
158
+ mr.managed_provider = mmp = org.openhab.core.internal.items.ManagedMetadataProviderImpl.new(ss)
159
+ mr.add_provider(mmp)
134
160
  ir = org.openhab.core.internal.items.ItemRegistryImpl.new(mr)
135
- ss = VolatileStorageService.new
136
161
  ir.managed_provider = mip = org.openhab.core.items.ManagedItemProvider.new(ss, nil)
137
162
  ir.add_provider(mip)
163
+ ir.event_publisher = ep
164
+ up = org.openhab.core.internal.i18n.I18nProviderImpl.new(cc)
165
+ ir.unit_provider = up
166
+ ir.item_state_converter = org.openhab.core.internal.items.ItemStateConverterImpl.new(up)
138
167
  tr = org.openhab.core.thing.internal.ThingRegistryImpl.new
139
168
  mtr = org.openhab.core.automation.internal.type.ModuleTypeRegistryImpl.new
140
169
  rr = org.openhab.core.automation.internal.RuleRegistryImpl.new
@@ -203,7 +232,6 @@ module OpenHAB
203
232
  em.add_event_factory(ief)
204
233
 
205
234
  # set up the rules engine part 2
206
- bc = BundleContext.new(em)
207
235
  k = org.openhab.core.automation.internal.module.factory.CoreModuleHandlerFactory
208
236
  # depending on OH version, this class is set up differently
209
237
  cmhf = begin
@@ -221,7 +249,12 @@ module OpenHAB
221
249
  re.add_module_handler_factory(cmhf)
222
250
  re.add_module_handler_factory(scmhf)
223
251
  re.add_module_handler_factory(spmhf)
224
- re.onReadyMarkerAdded(nil)
252
+ re.on_ready_marker_added(nil)
253
+
254
+ # enable event logging
255
+ el = org.openhab.core.io.monitor.internal.EventLogger.new(rs)
256
+ em.add_event_subscriber(el)
257
+ el.on_ready_marker_added(nil)
225
258
  end
226
259
  end
227
260
  end
@@ -15,11 +15,8 @@ module OpenHAB
15
15
  Timers.timer_manager.add(self)
16
16
  end
17
17
 
18
- def reschedule(duration = nil)
19
- duration ||= @duration
20
-
18
+ def reschedule(_duration = nil)
21
19
  Timers.timer_manager.add(self)
22
- reschedule(OpenHAB::DSL.to_zdt(duration))
23
20
  end
24
21
 
25
22
  #
@@ -34,6 +31,10 @@ module OpenHAB
34
31
  def terminated?; end
35
32
  alias_method :has_terminated, :terminated?
36
33
 
34
+ def is_active # rubocop:disable Naming/PredicateName
35
+ false
36
+ end
37
+
37
38
  private
38
39
 
39
40
  def timer_block
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Style/GlobalVars
4
+ module RSpec
5
+ module OpenHAB
6
+ module Items
7
+ class << self
8
+ def populate_items_from_api(api)
9
+ all_items = api.items
10
+
11
+ gfh = org.openhab.core.internal.items.GroupFunctionHelper.new
12
+
13
+ all_items.each do |item_json|
14
+ type, _dimension = item_json["type"].split(":")
15
+ if type == "Group"
16
+ if item_json["groupType"]
17
+ type, _dimension = item_json["groupType"].split(":")
18
+ klass = ::OpenHAB::DSL::Items.const_get(:"#{type}Item")
19
+ base_item = klass.new(item_json["name"])
20
+ end
21
+ if item_json["function"]
22
+ dto = org.openhab.core.items.dto.GroupFunctionDTO.new
23
+ dto.name = item_json.dig("function", "name")
24
+ dto.params = item_json.dig("function", "params")
25
+ function = gfh.create_group_function(dto, base_item)
26
+ end
27
+ item = GroupItem.new(item_json["name"], base_item, function)
28
+ else
29
+ klass = ::OpenHAB::DSL::Items.const_get(:"#{type}Item")
30
+ item = klass.new(item_json["name"])
31
+ end
32
+
33
+ item.label = item_json["label"]
34
+ item_json["tags"].each do |tag|
35
+ item.add_tag(tag)
36
+ end
37
+ item_json["metadata"]&.each do |key, config|
38
+ item.meta[key] = config["value"], config["config"]
39
+ end
40
+
41
+ $ir.add(item)
42
+ end
43
+ all_items.each do |item_json| # rubocop:disable Style/CombinableLoops
44
+ item_json["groupNames"].each do |group_name|
45
+ next unless (group = $ir.get(group_name))
46
+
47
+ group.add_member($ir.get(item_json["name"]))
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ def autoupdate_all_items
54
+ @autoupdated_items ||= {}
55
+ $ir.for_each do |_provider, item|
56
+ @autoupdated_items[item] = item.meta.delete("autoupdate") if item.meta.key?("autoupdate")
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def restore_autoupdate_items
63
+ return unless instance_variable_defined?(:@autoupdated_items)
64
+
65
+ @autoupdated_items.each do |(item, meta)|
66
+ item.meta["autoupdate"] = meta
67
+ end
68
+ end
69
+
70
+ ::RSpec.configure do |config|
71
+ config.include(self)
72
+ config.after do
73
+ restore_autoupdate_items
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ # rubocop:enable Style/GlobalVars
@@ -1,9 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.configure do |config|
4
+ org.openhab.core.items.GenericItem.field_reader :eventPublisher
5
+
6
+ # rubocop:disable Style/GlobalVars
4
7
  config.before(:each) do
5
- $ir.for_each do |_provider, item| # rubocop:disable Style/GlobalVars
8
+ ep = $ir.eventPublisher
9
+
10
+ # stash event publishers to avoid triggering any rules
11
+ $ir.for_each do |_provider, item|
12
+ item.event_publisher = nil
13
+ end
14
+
15
+ $ir.for_each do |_provider, item| # rubocop:disable Style/CombinableLoops
6
16
  item.state = NULL # don't use update, to avoid triggering any rules
7
17
  end
18
+ ensure
19
+ $ir.for_each do |_provider, item|
20
+ item.event_publisher = ep
21
+ end
8
22
  end
23
+ # rubocop:enable Style/GlobalVars
9
24
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenHAB
5
- VERSION = "0.0.2"
5
+ VERSION = "0.0.5"
6
6
  end
7
7
  end
@@ -5,12 +5,11 @@ module RSpec
5
5
  module Wait
6
6
  def wait_for_rules
7
7
  loop do
8
- break if java.lang.Thread.all_stack_traces.keys.all? do |t|
9
- !t.name.match?(/^OH-rule-/) ||
10
- [java.lang.Thread::State::WAITING, java.lang.Thread::State::TIMED_WAITING].include?(t.state)
11
- end
12
-
13
8
  sleep(0.1)
9
+ break if java.lang.Thread.all_stack_traces.keys.all? do |t|
10
+ !t.name.match?(/^OH-rule-/) ||
11
+ [java.lang.Thread::State::WAITING, java.lang.Thread::State::TIMED_WAITING].include?(t.state)
12
+ end
14
13
  end
15
14
  end
16
15
  end
@@ -38,6 +38,7 @@ maven_require do
38
38
  require "jar org.openhab.core.bundles, org.openhab.core.automation, #{openhab_version}"
39
39
  require "jar org.openhab.core.bundles, org.openhab.core.automation.module.script, #{openhab_version}"
40
40
  require "jar org.openhab.core.bundles, org.openhab.core.automation.module.script.rulesupport, #{openhab_version}"
41
+ require "jar org.openhab.core.bundles, org.openhab.core.io.monitor, #{openhab_version}"
41
42
  require "jar org.openhab.core.bundles, org.openhab.core.model.core, #{openhab_version}"
42
43
  require "jar org.openhab.core.bundles, org.openhab.core.model.script, #{openhab_version}"
43
44
  require "jar org.openhab.core.bundles, org.openhab.core.semantics, #{openhab_version}"
@@ -58,6 +59,7 @@ end
58
59
  require "openhab/log/logger"
59
60
  require "rspec/openhab/core/logger"
60
61
  require "openhab/dsl/imports"
62
+ OpenHAB::DSL::Imports.api = api
61
63
  OpenHAB::DSL::Imports.import_presets
62
64
 
63
65
  require "openhab"
@@ -68,46 +70,14 @@ require "rspec/openhab/core/cron_scheduler"
68
70
  OpenHAB::DSL.send(:remove_const, :Timer)
69
71
  require_relative "rspec/openhab/dsl/timers/timer"
70
72
 
71
- # rubocop:disable Style/GlobalVars
72
-
73
73
  # RSpec additions
74
74
  require "rspec/openhab/dsl/rules/rspec"
75
75
  require "rspec/openhab/state"
76
76
  require "rspec/openhab/trigger"
77
77
  require "rspec/openhab/wait"
78
+ require "rspec/openhab/items"
78
79
 
79
- # populate item registry
80
- all_items = api.items
81
- all_items.each do |item_json|
82
- type, _dimension = item_json["type"].split(":")
83
- if type == "Group"
84
- if item_json["groupType"]
85
- type, _dimension = item_json["groupType"].split(":")
86
- klass = OpenHAB::DSL::Items.const_get(:"#{type}Item")
87
- base_item = klass.new(item_json["name"])
88
- end
89
- # TODO: create group function
90
- item = GroupItem.new(item_json["name"], base_item)
91
- else
92
- klass = OpenHAB::DSL::Items.const_get(:"#{type}Item")
93
- item = klass.new(item_json["name"])
94
- end
95
-
96
- item.label = item_json["label"]
97
- item_json["tags"].each do |tag|
98
- item.add_tag(tag)
99
- end
100
- $ir.add(item)
101
- end
102
- all_items.each do |item_json| # rubocop:disable Style/CombinableLoops
103
- item_json["groupNames"].each do |group_name|
104
- next unless (group = $ir.get(group_name))
105
-
106
- group.add_member($ir.get(item_json["name"]))
107
- end
108
- end
109
-
110
- # rubocop:enable Style/GlobalVars
80
+ RSpec::OpenHAB::Items.populate_items_from_api(api)
111
81
 
112
82
  # load rules files
113
83
  OPENHAB_AUTOMATION_PATH = "#{org.openhab.core.OpenHAB.config_folder}/automation/jsr223/ruby/personal"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-openhab-scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
5
5
  platform: java
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-30 00:00:00.000000000 Z
11
+ date: 2022-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4.42'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.11'
75
+ name: rspec-core
76
+ prerelease: false
77
+ type: :runtime
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.11'
69
83
  - !ruby/object:Gem::Dependency
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
@@ -169,6 +183,7 @@ files:
169
183
  - lib/rspec/openhab/dsl/imports.rb
170
184
  - lib/rspec/openhab/dsl/rules/rspec.rb
171
185
  - lib/rspec/openhab/dsl/timers/timer.rb
186
+ - lib/rspec/openhab/items.rb
172
187
  - lib/rspec/openhab/state.rb
173
188
  - lib/rspec/openhab/trigger.rb
174
189
  - lib/rspec/openhab/version.rb