openhab-jrubyscripting 5.0.0.rc1 → 5.0.0.rc2
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/entity_lookup.rb +1 -12
- data/lib/openhab/core/items/generic_item.rb +2 -2
- data/lib/openhab/core/items/metadata/hash.rb +64 -5
- data/lib/openhab/core/items/metadata/namespace_hash.rb +17 -19
- data/lib/openhab/core/items/metadata/provider.rb +48 -0
- data/lib/openhab/core/items/provider.rb +40 -0
- data/lib/openhab/core/items/proxy.rb +10 -0
- data/lib/openhab/core/items/registry.rb +16 -7
- data/lib/openhab/core/items/state_storage.rb +3 -3
- data/lib/openhab/core/profile_factory.rb +1 -1
- data/lib/openhab/core/provider.rb +216 -0
- data/lib/openhab/core/registry.rb +30 -0
- data/lib/openhab/core/script_handling.rb +50 -0
- data/lib/openhab/core/things/links/provider.rb +40 -0
- data/lib/openhab/core/things/provider.rb +25 -0
- data/lib/openhab/core/things/proxy.rb +10 -0
- data/lib/openhab/core/things/registry.rb +25 -2
- data/lib/openhab/core/timer.rb +12 -0
- data/lib/openhab/core/types/quantity_type.rb +5 -2
- data/lib/openhab/core.rb +3 -14
- data/lib/openhab/core_ext/java/class.rb +34 -0
- data/lib/openhab/core_ext/java/local_time.rb +2 -1
- data/lib/openhab/core_ext/java/month.rb +2 -1
- data/lib/openhab/dsl/items/builder.rb +30 -97
- data/lib/openhab/dsl/rules/builder.rb +27 -0
- data/lib/openhab/dsl/rules/triggers/changed.rb +7 -4
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +1 -1
- data/lib/openhab/dsl/rules/triggers/trigger.rb +1 -1
- data/lib/openhab/dsl/rules/triggers/updated.rb +7 -3
- data/lib/openhab/dsl/rules.rb +1 -1
- data/lib/openhab/dsl/script_handling.rb +0 -49
- data/lib/openhab/dsl/things/builder.rb +8 -31
- data/lib/openhab/dsl/thread_local.rb +1 -0
- data/lib/openhab/dsl/timer_manager.rb +13 -7
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/dsl.rb +132 -22
- data/lib/openhab/log.rb +1 -1
- data/lib/openhab/rspec/helpers.rb +8 -25
- data/lib/openhab/rspec/hooks.rb +15 -18
- data/lib/openhab/rspec/mocks/timer.rb +5 -0
- metadata +9 -3
- data/lib/openhab/rspec/mocks/metadata_provider.rb +0 -75
@@ -6,36 +6,6 @@ module OpenHAB
|
|
6
6
|
# Contains extensions to simplify working with {Core::Things::Thing Thing}s.
|
7
7
|
#
|
8
8
|
module Things
|
9
|
-
# Stores all things created in scripts, and notifies the ThingRegistry
|
10
|
-
# of their existence
|
11
|
-
# aa@!visibility private
|
12
|
-
class ThingProvider < org.openhab.core.common.registry.AbstractProvider
|
13
|
-
include org.openhab.core.thing.ThingProvider
|
14
|
-
include Singleton
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
super
|
18
|
-
|
19
|
-
@things = []
|
20
|
-
|
21
|
-
$things.add_provider(self)
|
22
|
-
ScriptHandling.script_unloaded { $things.remove_provider(self) }
|
23
|
-
end
|
24
|
-
|
25
|
-
# Add a thing to this provider
|
26
|
-
def add(thing)
|
27
|
-
thing = thing.build
|
28
|
-
@things << thing
|
29
|
-
notify_listeners_about_added_element(thing)
|
30
|
-
thing
|
31
|
-
end
|
32
|
-
|
33
|
-
# Get all items in this provider
|
34
|
-
def getAll # rubocop:disable Naming/MethodName required by java interface
|
35
|
-
@things
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
9
|
# A thing builder allows you to dynamically create OpenHAB thing at runtime.
|
40
10
|
# This can be useful either to create things as soon as the script loads,
|
41
11
|
# or even later based on a rule executing.
|
@@ -45,6 +15,13 @@ module OpenHAB
|
|
45
15
|
# thing "astro:sun:home", "Astro Sun Data", config: { "geolocation" => "0,0" }
|
46
16
|
# end
|
47
17
|
class Builder
|
18
|
+
# @return [org.openhab.core.things.ManagedThingProvider]
|
19
|
+
attr_reader :provider
|
20
|
+
|
21
|
+
def initialize(provider)
|
22
|
+
@provider = Core::Things::Provider.current(provider)
|
23
|
+
end
|
24
|
+
|
48
25
|
# Create a new Bridge
|
49
26
|
# @see BridgeBuilder#initialize
|
50
27
|
def bridge(*args, **kwargs, &block)
|
@@ -62,7 +39,7 @@ module OpenHAB
|
|
62
39
|
def build(klass, *args, **kwargs, &block)
|
63
40
|
builder = klass.new(*args, **kwargs)
|
64
41
|
builder.instance_eval(&block) if block
|
65
|
-
thing =
|
42
|
+
thing = provider.add(builder.build)
|
66
43
|
thing = Core::Things::Proxy.new(thing)
|
67
44
|
thing.enable(enabled: builder.enabled) unless builder.enabled.nil?
|
68
45
|
thing
|
@@ -11,7 +11,7 @@ module OpenHAB
|
|
11
11
|
class TimerManager
|
12
12
|
include Singleton
|
13
13
|
|
14
|
-
ScriptHandling.script_unloaded { instance.cancel_all }
|
14
|
+
Core::ScriptHandling.script_unloaded { instance.cancel_all }
|
15
15
|
|
16
16
|
# @!visibility private
|
17
17
|
def initialize
|
@@ -31,7 +31,10 @@ module OpenHAB
|
|
31
31
|
# timer when one doesn't already exist
|
32
32
|
next old_timer if !reschedule && old_timer
|
33
33
|
|
34
|
-
old_timer
|
34
|
+
if old_timer
|
35
|
+
old_timer.cancel!
|
36
|
+
@timers.remove(old_timer)
|
37
|
+
end
|
35
38
|
Core::Timer.new(duration, id: id, thread_locals: thread_locals, block: block)
|
36
39
|
end
|
37
40
|
end
|
@@ -55,7 +58,7 @@ module OpenHAB
|
|
55
58
|
@timers.remove(timer)
|
56
59
|
return unless timer.id
|
57
60
|
|
58
|
-
@timers_by_id.
|
61
|
+
@timers_by_id.remove(timer.id)
|
59
62
|
end
|
60
63
|
|
61
64
|
#
|
@@ -67,7 +70,9 @@ module OpenHAB
|
|
67
70
|
def cancel(id)
|
68
71
|
result = false
|
69
72
|
@timers_by_id.compute_if_present(id) do |_key, timer|
|
70
|
-
result = timer.cancel
|
73
|
+
result = timer.cancel!
|
74
|
+
@timers.remove(timer)
|
75
|
+
|
71
76
|
nil
|
72
77
|
end
|
73
78
|
result
|
@@ -127,7 +132,7 @@ module OpenHAB
|
|
127
132
|
def schedule(id)
|
128
133
|
@timers_by_id.compute(id) do |_key, timer|
|
129
134
|
new_timer = yield timer
|
130
|
-
raise ArgumentError, "Block must return a timer or nil" unless
|
135
|
+
raise ArgumentError, "Block must return a timer or nil" unless new_timer.is_a?(Core::Timer) || new_timer.nil?
|
131
136
|
|
132
137
|
if !new_timer.equal?(timer) && new_timer&.id
|
133
138
|
raise ArgumentError,
|
@@ -136,8 +141,9 @@ module OpenHAB
|
|
136
141
|
|
137
142
|
if timer&.cancelled?
|
138
143
|
new_timer = nil
|
139
|
-
elsif new_timer.nil? && !timer
|
140
|
-
timer
|
144
|
+
elsif new_timer.nil? && timer && !timer.cancelled?
|
145
|
+
timer.cancel!
|
146
|
+
@timers.remove(timer)
|
141
147
|
end
|
142
148
|
next unless new_timer
|
143
149
|
|
data/lib/openhab/dsl/version.rb
CHANGED
data/lib/openhab/dsl.rb
CHANGED
@@ -30,7 +30,7 @@ module OpenHAB
|
|
30
30
|
# include this before Core::Actions so that Core::Action's method_missing
|
31
31
|
# takes priority
|
32
32
|
include Core::EntityLookup
|
33
|
-
[Core::Actions, Rules::Terse
|
33
|
+
[Core::Actions, Core::ScriptHandling, Rules::Terse].each do |mod|
|
34
34
|
# make these available both as regular and class methods
|
35
35
|
include mod
|
36
36
|
singleton_class.include mod
|
@@ -84,14 +84,6 @@ module OpenHAB
|
|
84
84
|
builder.name(name)
|
85
85
|
logger.trace { builder.inspect }
|
86
86
|
builder.build(script)
|
87
|
-
rescue Exception => e
|
88
|
-
if (defined?(::RSpec::Expectations::ExpectationNotMetError) &&
|
89
|
-
e.is_a?(::RSpec::Expectations::ExpectationNotMetError)) ||
|
90
|
-
(defined?(::RSpec::Mocks::MockExpectationError) && e.is_a?(::RSpec::Mocks::MockExpectationError))
|
91
|
-
raise e
|
92
|
-
end
|
93
|
-
|
94
|
-
builder.send(:logger).log_exception(e)
|
95
87
|
end
|
96
88
|
end
|
97
89
|
|
@@ -115,17 +107,13 @@ module OpenHAB
|
|
115
107
|
|
116
108
|
builder = nil
|
117
109
|
ThreadLocal.thread_local(openhab_rule_type: "script", openhab_rule_uid: id) do
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
builder.build(script)
|
126
|
-
end
|
127
|
-
rescue Exception => e
|
128
|
-
builder.send(:logger).log_exception(e)
|
110
|
+
builder = Rules::Builder.new(block.binding)
|
111
|
+
builder.uid(id)
|
112
|
+
builder.tags(["Script"])
|
113
|
+
builder.name(name)
|
114
|
+
builder.script(&block)
|
115
|
+
logger.trace { builder.inspect }
|
116
|
+
builder.build(script)
|
129
117
|
end
|
130
118
|
end
|
131
119
|
|
@@ -614,7 +602,7 @@ module OpenHAB
|
|
614
602
|
# properly restored.
|
615
603
|
#
|
616
604
|
# {unit!} calls are cumulative - additional calls will not erase the effects
|
617
|
-
# previous calls unless they are for the same dimension.
|
605
|
+
# of previous calls unless they are for the same dimension.
|
618
606
|
#
|
619
607
|
# @return [Hash<javax.measure.Dimension=>javax.measure.Unit>]
|
620
608
|
# the prior unit configuration
|
@@ -657,6 +645,129 @@ module OpenHAB
|
|
657
645
|
old_units
|
658
646
|
end
|
659
647
|
|
648
|
+
#
|
649
|
+
# Sets the implicit provider(s) for operations inside the block.
|
650
|
+
#
|
651
|
+
# @param (see #provider!)
|
652
|
+
# @yield [] The block will be executed in the context of the specified unit(s).
|
653
|
+
# @return [Object] the result of the block
|
654
|
+
#
|
655
|
+
# @example
|
656
|
+
# provider(metadata: :persistent) do
|
657
|
+
# Switch1.metadata[:last_status_from_service] = status
|
658
|
+
# end
|
659
|
+
#
|
660
|
+
# provider!(metadata: { last_status_from_service: :persistent }, Switch2: :persistent)
|
661
|
+
# Switch1.metadata[:last_status_from_service] = status # this will persist in JSONDB
|
662
|
+
# Switch1.metadata[:homekit] = "Lightbulb" # this will be removed when the script is deleted
|
663
|
+
# Switch2.metadata[:homekit] = "Lightbulb" # this will persist in JSONDB
|
664
|
+
#
|
665
|
+
# @see provider!
|
666
|
+
# @see OpenHAB::Core::Provider.current Provider.current for how the current provider is calculated
|
667
|
+
#
|
668
|
+
def provider(*args, **kwargs)
|
669
|
+
raise ArgumentError, "You must give a block to set the provider for the duration of" unless block_given?
|
670
|
+
|
671
|
+
begin
|
672
|
+
old_providers = provider!(*args, **kwargs)
|
673
|
+
yield
|
674
|
+
ensure
|
675
|
+
Thread.current[:openhab_providers] = old_providers
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
679
|
+
#
|
680
|
+
# Permanently set the implicit provider(s) for this thread.
|
681
|
+
#
|
682
|
+
# @note This method is only intended for use at the top level of rule
|
683
|
+
# scripts. If it's used within library methods, or hap-hazardly within
|
684
|
+
# rules, things can get very confusing because the prior state won't be
|
685
|
+
# properly restored.
|
686
|
+
#
|
687
|
+
# {provider!} calls are cumulative - additional calls will not erase the effects
|
688
|
+
# of previous calls unless they are for the same provider type.
|
689
|
+
#
|
690
|
+
# @overload provider!(things: nil, items: nil, metadata: nil, links: nil, **metadata_items)
|
691
|
+
#
|
692
|
+
# @param [Core::Provider, org.openhab.core.registry.common.ManagedProvider, :persistent, :transient, Proc] providers
|
693
|
+
# An explicit provider to use. If it's a {Core::Provider}, the type will be inferred automatically.
|
694
|
+
# Otherwise it's applied to all types.
|
695
|
+
# @param [Hash] providers_by_type
|
696
|
+
# A list of providers by type. Type can be `:items`, `:metadata`, `:things`, `:links`,
|
697
|
+
# a {GenericItem} applying the provider to all metadata on that item, or a String or Symbol
|
698
|
+
# applying the provider to all metadata of that namespace.
|
699
|
+
#
|
700
|
+
# The provider can be a {org.openhab.core.common.registry.Provider Provider}, `:persistent`,
|
701
|
+
# `:transient`, or a Proc returning one of those types. When the Proc is called for metadata
|
702
|
+
# elements, the {Core::Items::Metadata::Hash} will be passed as an argument. Therefore it's
|
703
|
+
# recommended that you use a Proc, not a Lambda, for permissive argument matching.
|
704
|
+
#
|
705
|
+
# @return [void]
|
706
|
+
#
|
707
|
+
# @see provider
|
708
|
+
# @see OpenHAB::Core::Provider.current Provider.current for how the current provider is calculated
|
709
|
+
#
|
710
|
+
def provider!(*providers, **providers_by_type)
|
711
|
+
thread_providers = Thread.current[:openhab_providers] ||= {}
|
712
|
+
old_providers = thread_providers.dup
|
713
|
+
|
714
|
+
providers.each do |provider|
|
715
|
+
case provider
|
716
|
+
when Core::Provider
|
717
|
+
thread_providers[provider.class.type] = provider
|
718
|
+
when org.openhab.core.common.registry.ManagedProvider
|
719
|
+
type = provider.type
|
720
|
+
unless type
|
721
|
+
raise ArgumentError, "#{provider.inspect} is for objects which are not supported by openhab-jrubyscripting"
|
722
|
+
end
|
723
|
+
|
724
|
+
thread_providers[type] = provider
|
725
|
+
when Proc,
|
726
|
+
:transient,
|
727
|
+
:persistent
|
728
|
+
Core::Provider::KNOWN_TYPES.each do |known_type|
|
729
|
+
thread_providers[known_type] = provider
|
730
|
+
end
|
731
|
+
when Hash
|
732
|
+
# non-symbols can't be used as kwargs, so Item keys show up as a separate hash here
|
733
|
+
# just merge it in, and allow it to be handled below
|
734
|
+
providers_by_type.merge!(provider)
|
735
|
+
else
|
736
|
+
raise ArgumentError, "#{provider.inspect} is not a valid provider"
|
737
|
+
end
|
738
|
+
end
|
739
|
+
|
740
|
+
providers_by_type.each do |type, provider|
|
741
|
+
case provider
|
742
|
+
when Proc,
|
743
|
+
org.openhab.core.common.registry.ManagedProvider,
|
744
|
+
:transient,
|
745
|
+
:persistent,
|
746
|
+
nil
|
747
|
+
nil
|
748
|
+
else
|
749
|
+
raise ArgumentError, "#{provider.inspect} is not a valid provider"
|
750
|
+
end
|
751
|
+
|
752
|
+
case type
|
753
|
+
when :items, :metadata, :things, :links
|
754
|
+
if provider.is_a?(org.openhab.core.common.registry.ManagedProvider) && provider.type != type
|
755
|
+
raise ArgumentError, "#{provider.inspect} is not a provider for #{type}"
|
756
|
+
end
|
757
|
+
|
758
|
+
thread_providers[type] = provider
|
759
|
+
when Symbol, String
|
760
|
+
(thread_providers[:metadata_namespaces] ||= {})[type.to_s] = provider
|
761
|
+
when GenericItem
|
762
|
+
(thread_providers[:metadata_items] ||= {})[type.name] = provider
|
763
|
+
else
|
764
|
+
raise ArgumentError, "#{type.inspect} is not provider type"
|
765
|
+
end
|
766
|
+
end
|
767
|
+
|
768
|
+
old_providers
|
769
|
+
end
|
770
|
+
|
660
771
|
# @!visibility private
|
661
772
|
def try_parse_time_like(string)
|
662
773
|
return string unless string.is_a?(String)
|
@@ -675,7 +786,6 @@ module OpenHAB
|
|
675
786
|
end
|
676
787
|
|
677
788
|
OpenHAB::Core.wait_till_openhab_ready
|
678
|
-
OpenHAB::Core.add_rubylib_to_load_path
|
679
789
|
|
680
790
|
# import Items classes into global namespace
|
681
791
|
OpenHAB::Core::Items.import_into_global_namespace
|
data/lib/openhab/log.rb
CHANGED
@@ -264,7 +264,7 @@ module OpenHAB
|
|
264
264
|
def log_exception(exception)
|
265
265
|
exception = clean_backtrace(exception)
|
266
266
|
error do
|
267
|
-
"#{exception.message} (#{exception.class})\n#{
|
267
|
+
"#{exception.message} (#{exception.class})\n#{exception.backtrace&.join("\n")}"
|
268
268
|
end
|
269
269
|
end
|
270
270
|
|
@@ -208,7 +208,6 @@ module OpenHAB
|
|
208
208
|
require "openhab/dsl"
|
209
209
|
|
210
210
|
require_relative "mocks/persistence_service"
|
211
|
-
require_relative "mocks/metadata_provider"
|
212
211
|
require_relative "mocks/timer"
|
213
212
|
|
214
213
|
# override several DSL methods
|
@@ -400,34 +399,18 @@ module OpenHAB
|
|
400
399
|
# need to transfer autoupdate metadata from GenericMetadataProvider to ManagedMetadataProvider
|
401
400
|
# so that we can mutate it in the future
|
402
401
|
def set_up_autoupdates
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
402
|
+
registry = Core::Items::Metadata::Provider.registry
|
403
|
+
registry.class.field_reader :identifierToElement
|
404
|
+
|
405
|
+
autoupdate_provider = Core::Items::Metadata::Provider.send(:new)
|
406
|
+
registry.all.each do |metadata|
|
408
407
|
next unless metadata.uid.namespace == "autoupdate"
|
409
408
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
to_add.each do |m|
|
415
|
-
# we can't just update; we need to remove and add
|
416
|
-
# because this was a duplicate key, so the ManagedProvider
|
417
|
-
# knows about it, but the registry does not. So
|
418
|
-
# removing and adding gets it to notify the registry
|
419
|
-
# that it has it
|
420
|
-
mmp.remove(m.uid) if mmp.get(m.uid)
|
421
|
-
mmp.add(m)
|
409
|
+
# tweak the registry to allow us to overwrite this element
|
410
|
+
registry.identifierToElement.delete(metadata.uid)
|
411
|
+
autoupdate_provider.add(metadata)
|
422
412
|
end
|
423
413
|
end
|
424
|
-
|
425
|
-
def restore_autoupdate_items
|
426
|
-
return unless instance_variable_defined?(:@autoupdated_items)
|
427
|
-
|
428
|
-
@autoupdated_items&.each(&:commit)
|
429
|
-
@autoupdated_items = nil
|
430
|
-
end
|
431
414
|
end
|
432
415
|
|
433
416
|
if defined?(::RSpec)
|
data/lib/openhab/rspec/hooks.rb
CHANGED
@@ -41,28 +41,32 @@ module OpenHAB
|
|
41
41
|
@known_rules = Core.rule_registry.all.map(&:uid)
|
42
42
|
end
|
43
43
|
|
44
|
+
# Each spec gets temporary providers
|
45
|
+
[Core::Items::Provider,
|
46
|
+
Core::Items::Metadata::Provider,
|
47
|
+
Core::Things::Provider,
|
48
|
+
Core::Things::Links::Provider].each do |klass|
|
49
|
+
config.around do |example|
|
50
|
+
klass.new(&example)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
44
54
|
config.before do |example|
|
45
|
-
|
46
|
-
allow(DSL::Items::ItemProvider).to receive(:instance).and_return(@item_provider)
|
47
|
-
@thing_provider = DSL::Things::ThingProvider.send(:new)
|
48
|
-
allow(DSL::Things::ThingProvider).to receive(:instance).and_return(@thing_provider)
|
49
|
-
@item_channel_link_provider = DSL::Items::ItemChannelLinkProvider.send(:new)
|
50
|
-
allow(DSL::Items::ItemChannelLinkProvider).to receive(:instance).and_return(@item_channel_link_provider)
|
51
|
-
mr = Core::Items::Metadata::NamespaceHash.registry
|
52
|
-
@metadata_provider = Mocks::MetadataProvider.new(mr.managed_provider.get)
|
53
|
-
mr.add_provider(@metadata_provider)
|
54
|
-
mr.set_managed_provider(@metadata_provider)
|
55
|
+
# clear persisted thing status
|
55
56
|
tm = OSGi.service("org.openhab.core.thing.ThingManager")
|
56
57
|
tm.class.field_reader :storage
|
57
58
|
tm.storage.keys.each { |k| tm.storage.remove(k) } # rubocop:disable Style/HashEachMethods not a hash
|
58
|
-
|
59
|
+
|
59
60
|
profile_factory = Core::ProfileFactory.send(:new)
|
60
61
|
@profile_factory_registration = OSGi.register_service(profile_factory)
|
61
62
|
allow(Core::ProfileFactory).to receive(:instance).and_return(profile_factory)
|
63
|
+
|
62
64
|
stub_const("OpenHAB::Core::Timer", Mocks::Timer) if self.class.mock_timers?
|
65
|
+
|
63
66
|
log_line = "rspec #{example.location} # #{example.full_description}"
|
64
67
|
logger.info(log_line)
|
65
68
|
Logger.events.info(log_line)
|
69
|
+
@log_index = File.size(log_file)
|
66
70
|
end
|
67
71
|
|
68
72
|
config.after do
|
@@ -70,21 +74,14 @@ module OpenHAB
|
|
70
74
|
(Core.rule_registry.all.map(&:uid) - @known_rules).each do |uid|
|
71
75
|
remove_rule(uid) if defined?(remove_rule)
|
72
76
|
end
|
73
|
-
$ir.remove_provider(@item_provider)
|
74
77
|
Core::Items::Proxy.reset_cache
|
75
|
-
$things.remove_provider(@thing_provider)
|
76
78
|
Core::Things::Proxy.reset_cache
|
77
|
-
registry = OSGi.service("org.openhab.core.thing.link.ItemChannelLinkRegistry")
|
78
|
-
registry.remove_provider(@item_channel_link_provider)
|
79
|
-
Core::Items::Metadata::NamespaceHash.registry.remove_provider(@metadata_provider)
|
80
|
-
@metadata_provider.restore_parent
|
81
79
|
@profile_factory_registration.unregister
|
82
80
|
timers.cancel_all
|
83
81
|
# timers and rules have already been canceled, so we can safely just
|
84
82
|
# wipe this
|
85
83
|
DSL::Items::TimedCommand.timed_commands.clear
|
86
84
|
Timecop.return
|
87
|
-
restore_autoupdate_items
|
88
85
|
Mocks::PersistenceService.instance.reset
|
89
86
|
end
|
90
87
|
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.
|
4
|
+
version: 5.0.0.rc2
|
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-
|
11
|
+
date: 2022-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -336,10 +336,12 @@ files:
|
|
336
336
|
- lib/openhab/core/items/metadata.rb
|
337
337
|
- lib/openhab/core/items/metadata/hash.rb
|
338
338
|
- lib/openhab/core/items/metadata/namespace_hash.rb
|
339
|
+
- lib/openhab/core/items/metadata/provider.rb
|
339
340
|
- lib/openhab/core/items/number_item.rb
|
340
341
|
- lib/openhab/core/items/numeric_item.rb
|
341
342
|
- lib/openhab/core/items/persistence.rb
|
342
343
|
- lib/openhab/core/items/player_item.rb
|
344
|
+
- lib/openhab/core/items/provider.rb
|
343
345
|
- lib/openhab/core/items/proxy.rb
|
344
346
|
- lib/openhab/core/items/registry.rb
|
345
347
|
- lib/openhab/core/items/rollershutter_item.rb
|
@@ -350,12 +352,16 @@ files:
|
|
350
352
|
- lib/openhab/core/items/switch_item.rb
|
351
353
|
- lib/openhab/core/lazy_array.rb
|
352
354
|
- lib/openhab/core/profile_factory.rb
|
355
|
+
- lib/openhab/core/provider.rb
|
356
|
+
- lib/openhab/core/registry.rb
|
353
357
|
- lib/openhab/core/script_handling.rb
|
354
358
|
- lib/openhab/core/things.rb
|
355
359
|
- lib/openhab/core/things/channel.rb
|
356
360
|
- lib/openhab/core/things/channel_uid.rb
|
357
361
|
- lib/openhab/core/things/item_channel_link.rb
|
362
|
+
- lib/openhab/core/things/links/provider.rb
|
358
363
|
- lib/openhab/core/things/profile_callback.rb
|
364
|
+
- lib/openhab/core/things/provider.rb
|
359
365
|
- lib/openhab/core/things/proxy.rb
|
360
366
|
- lib/openhab/core/things/registry.rb
|
361
367
|
- lib/openhab/core/things/thing.rb
|
@@ -384,6 +390,7 @@ files:
|
|
384
390
|
- lib/openhab/core/types/up_down_type.rb
|
385
391
|
- lib/openhab/core/uid.rb
|
386
392
|
- lib/openhab/core_ext.rb
|
393
|
+
- lib/openhab/core_ext/java/class.rb
|
387
394
|
- lib/openhab/core_ext/java/duration.rb
|
388
395
|
- lib/openhab/core_ext/java/local_date.rb
|
389
396
|
- lib/openhab/core_ext/java/local_time.rb
|
@@ -444,7 +451,6 @@ files:
|
|
444
451
|
- lib/openhab/rspec/mocks/bundle_install_support.rb
|
445
452
|
- lib/openhab/rspec/mocks/bundle_resolver.rb
|
446
453
|
- lib/openhab/rspec/mocks/event_admin.rb
|
447
|
-
- lib/openhab/rspec/mocks/metadata_provider.rb
|
448
454
|
- lib/openhab/rspec/mocks/persistence_service.rb
|
449
455
|
- lib/openhab/rspec/mocks/safe_caller.rb
|
450
456
|
- lib/openhab/rspec/mocks/synchronous_executor.rb
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module OpenHAB
|
4
|
-
module RSpec
|
5
|
-
module Mocks
|
6
|
-
class MetadataProvider
|
7
|
-
org.openhab.core.common.registry.Identifiable
|
8
|
-
include org.openhab.core.items.ManagedMetadataProvider
|
9
|
-
|
10
|
-
def initialize(parent)
|
11
|
-
@metadata = {}
|
12
|
-
@listeners = []
|
13
|
-
@parent = parent
|
14
|
-
@removed_from_parent = []
|
15
|
-
end
|
16
|
-
|
17
|
-
def addProviderChangeListener(listener) # rubocop:disable Naming/MethodName required by java interface
|
18
|
-
@listeners << listener
|
19
|
-
end
|
20
|
-
|
21
|
-
def removeProviderChangeListener(listener) # rubocop:disable Naming/MethodName required by java interface
|
22
|
-
old = @listeners.delete(listener)
|
23
|
-
return unless old
|
24
|
-
|
25
|
-
@listeners.each { |l| l.removed(self, old) }
|
26
|
-
end
|
27
|
-
|
28
|
-
def add(metadata)
|
29
|
-
@metadata[metadata.uid] = metadata
|
30
|
-
@listeners.each { |l| l.added(self, metadata) }
|
31
|
-
end
|
32
|
-
|
33
|
-
def update(metadata)
|
34
|
-
old_element = @metadata[metadata.uid]
|
35
|
-
raise ArgumentError if old_element.nil?
|
36
|
-
|
37
|
-
@metadata[metadata.uid] = metadata
|
38
|
-
@listeners.each { |l| l.updated(self, old_element, metadata) }
|
39
|
-
metadata
|
40
|
-
end
|
41
|
-
|
42
|
-
def remove(key)
|
43
|
-
m = @parent.remove(key)
|
44
|
-
@removed_from_parent << m if m
|
45
|
-
m = @metadata.delete(key)
|
46
|
-
@listeners.each { |l| l.removed(self, m) } if m
|
47
|
-
m
|
48
|
-
end
|
49
|
-
|
50
|
-
def restore_parent
|
51
|
-
@removed_from_parent.each do |m|
|
52
|
-
@parent.add(m)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def get(key)
|
57
|
-
@metadata[key]
|
58
|
-
end
|
59
|
-
|
60
|
-
def getAll # rubocop:disable Naming/MethodName required by java interface
|
61
|
-
@metadata.values
|
62
|
-
end
|
63
|
-
|
64
|
-
def removeItemMetadata(item_name) # rubocop:disable Naming/MethodName required by java interface
|
65
|
-
@metadata.delete_if do |k, v|
|
66
|
-
next unless k.item_name == item_name
|
67
|
-
|
68
|
-
@listeners.each { |l| l.removed(self, v) }
|
69
|
-
true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|