openhab-jrubyscripting 5.0.0.rc11 → 5.0.0.rc.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/actions/exec.rb +41 -41
  3. data/lib/openhab/core/actions/transformation.rb +3 -3
  4. data/lib/openhab/core/actions.rb +1 -1
  5. data/lib/openhab/core/events/item_command_event.rb +31 -31
  6. data/lib/openhab/core/events/item_state_changed_event.rb +41 -18
  7. data/lib/openhab/core/events/item_state_event.rb +46 -18
  8. data/lib/openhab/core/items/date_time_item.rb +3 -2
  9. data/lib/openhab/core/items/generic_item.rb +119 -1
  10. data/lib/openhab/core/items/item.rb +63 -9
  11. data/lib/openhab/core/items/metadata/hash.rb +1 -1
  12. data/lib/openhab/core/items/metadata/namespace_hash.rb +10 -2
  13. data/lib/openhab/core/items/metadata/provider.rb +2 -2
  14. data/lib/openhab/core/items/persistence.rb +48 -4
  15. data/lib/openhab/core/items/provider.rb +4 -0
  16. data/lib/openhab/core/items/registry.rb +10 -1
  17. data/lib/openhab/core/items/semantics/enumerable.rb +29 -6
  18. data/lib/openhab/core/items/state_storage.rb +2 -2
  19. data/lib/openhab/core/items.rb +6 -13
  20. data/lib/openhab/core/provider.rb +2 -2
  21. data/lib/openhab/core/proxy.rb +5 -0
  22. data/lib/openhab/core/registry.rb +12 -2
  23. data/lib/openhab/core/rules/provider.rb +0 -15
  24. data/lib/openhab/core/rules.rb +1 -1
  25. data/lib/openhab/core/script_handling.rb +8 -8
  26. data/lib/openhab/core/things/links/provider.rb +38 -0
  27. data/lib/openhab/core/things/provider.rb +4 -0
  28. data/lib/openhab/core/things/registry.rb +4 -0
  29. data/lib/openhab/core/timer.rb +3 -19
  30. data/lib/openhab/core/types/date_time_type.rb +1 -1
  31. data/lib/openhab/core/types/decimal_type.rb +4 -9
  32. data/lib/openhab/core/types/hsb_type.rb +2 -2
  33. data/lib/openhab/core/types/quantity_type.rb +4 -9
  34. data/lib/openhab/core/types/string_type.rb +1 -1
  35. data/lib/openhab/core/types/type.rb +8 -28
  36. data/lib/openhab/core/types.rb +16 -3
  37. data/lib/openhab/core.rb +3 -3
  38. data/lib/openhab/core_ext/java/duration.rb +2 -0
  39. data/lib/openhab/core_ext/java/local_date.rb +15 -7
  40. data/lib/openhab/core_ext/java/local_time.rb +13 -3
  41. data/lib/openhab/core_ext/java/month.rb +1 -1
  42. data/lib/openhab/core_ext/java/month_day.rb +13 -3
  43. data/lib/openhab/core_ext/java/period.rb +1 -1
  44. data/lib/openhab/core_ext/java/temporal_amount.rb +1 -1
  45. data/lib/openhab/core_ext/java/time.rb +5 -1
  46. data/lib/openhab/core_ext/java/zoned_date_time.rb +15 -2
  47. data/lib/openhab/core_ext/ruby/date.rb +2 -2
  48. data/lib/openhab/core_ext/ruby/{class.rb → module.rb} +3 -3
  49. data/lib/openhab/core_ext/ruby/numeric.rb +6 -1
  50. data/lib/openhab/dsl/items/builder.rb +25 -12
  51. data/lib/openhab/dsl/items/ensure.rb +8 -6
  52. data/lib/openhab/dsl/rules/automation_rule.rb +2 -23
  53. data/lib/openhab/dsl/rules/builder.rb +47 -2
  54. data/lib/openhab/dsl/rules/terse.rb +15 -13
  55. data/lib/openhab/dsl/timer_manager.rb +1 -1
  56. data/lib/openhab/dsl/version.rb +1 -1
  57. data/lib/openhab/dsl.rb +38 -11
  58. data/lib/openhab/osgi.rb +1 -3
  59. data/lib/openhab/rspec/helpers.rb +3 -5
  60. data/lib/openhab/rspec/hooks.rb +1 -0
  61. data/lib/openhab/rspec/mocks/timer.rb +33 -0
  62. data/lib/openhab/rspec.rb +9 -0
  63. metadata +23 -9
@@ -20,27 +20,29 @@ module OpenHAB
20
20
  class << self
21
21
  # @!visibility private
22
22
  # @!macro def_terse_rule
23
- # @!method $1(*args, name :nil, id: nil, **kwargs, &block)
23
+ # @!method $1(*args, name :nil, id: nil, on_load: false, **kwargs, &block)
24
24
  # Create a new rule with a $1 trigger.
25
25
  # @param name [String] The name for the rule.
26
26
  # @param id [String] The ID for the rule.
27
+ # @param on_load [true, false] If the rule should _also_ trigger immediately when the script loads.
27
28
  # @yield The execution block for the rule.
28
29
  # @return [void]
29
30
  # @see BuilderDSL#$1
30
31
  def def_terse_rule(trigger)
31
32
  class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
32
- def #{trigger}(*args, name: nil, id: nil, **kwargs, &block) # def changed(*args, name: nil, id: nil, **kwargs, &block)
33
- raise ArgumentError, "Block is required" unless block # raise ArgumentError, "Block is required" unless block
34
- #
35
- id ||= NameInference.infer_rule_id_from_block(block) # id ||= NameInference.infer_rule_id_from_block(block)
36
- script = block.source rescue nil # script = block.source rescue nil
37
- caller_binding = block.binding # caller_binding = block.binding
38
- rule name, id: id, script: script, binding: caller_binding do # rule name, id: id, script: script, binding: caller_binding do
39
- #{trigger}(*args, **kwargs) # changed(*args, **kwargs)
40
- run(&block) # run(&block)
41
- end # end
42
- end # end
43
- module_function #{trigger.inspect} # module_function :changed
33
+ def #{trigger}(*args, name: nil, id: nil, on_load: false, **kwargs, &block) # def changed(*args, name: nil, id: nil, on_load: false, **kwargs, &block)
34
+ raise ArgumentError, "Block is required" unless block # raise ArgumentError, "Block is required" unless block
35
+ #
36
+ id ||= NameInference.infer_rule_id_from_block(block) # id ||= NameInference.infer_rule_id_from_block(block)
37
+ script = block.source rescue nil # script = block.source rescue nil
38
+ caller_binding = block.binding # caller_binding = block.binding
39
+ rule name, id: id, script: script, binding: caller_binding do # rule name, id: id, script: script, binding: caller_binding do
40
+ self.on_load if on_load # self.on_load if on_load
41
+ #{trigger}(*args, **kwargs) # changed(*args, **kwargs)
42
+ run(&block) # run(&block)
43
+ end # end
44
+ end # end
45
+ module_function #{trigger.inspect} # module_function :changed
44
46
  RUBY
45
47
  end
46
48
  end
@@ -11,7 +11,7 @@ module OpenHAB
11
11
  class TimerManager
12
12
  include Singleton
13
13
 
14
- Core::ScriptHandling.script_unloaded { instance.cancel_all }
14
+ Core::ScriptHandling.script_unloaded(priority: 40) { instance.cancel_all }
15
15
 
16
16
  # @!visibility private
17
17
  def initialize
@@ -4,6 +4,6 @@ module OpenHAB
4
4
  module DSL
5
5
  # Version of openHAB helper libraries
6
6
  # @return [String]
7
- VERSION = "5.0.0.rc11"
7
+ VERSION = "5.0.0.rc.13"
8
8
  end
9
9
  end
data/lib/openhab/dsl.rb CHANGED
@@ -30,6 +30,12 @@ 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
+ #
34
+ # @!parse
35
+ # include Core::Actions
36
+ # include Core::ScriptHandling
37
+ # include Rules::Terse
38
+ #
33
39
  [Core::Actions, Core::ScriptHandling, Rules::Terse].each do |mod|
34
40
  # make these available both as regular and class methods
35
41
  include mod
@@ -152,8 +158,6 @@ module OpenHAB
152
158
  #
153
159
  # @see Core::ValueCache ValueCache
154
160
  #
155
- # @since openHAB 3.4.0
156
- #
157
161
  def shared_cache
158
162
  $sharedCache
159
163
  end
@@ -475,6 +479,11 @@ module OpenHAB
475
479
  debounce(for: duration, id: id, &block)
476
480
  end
477
481
 
482
+ # (see Core::Actions::Transformation.transform)
483
+ def transform(type, function, value)
484
+ Transformation.transform(type, function, value)
485
+ end
486
+
478
487
  #
479
488
  # Limit how often the given block executes to the specified interval.
480
489
  #
@@ -523,9 +532,6 @@ module OpenHAB
523
532
  # end # the states will be restored here
524
533
  #
525
534
  def store_states(*items)
526
- items = items.flatten.map do |item|
527
- item.respond_to?(:__getobj__) ? item.__getobj__ : item
528
- end
529
535
  states = Core::Items::StateStorage.from_items(*items)
530
536
  if block_given?
531
537
  yield
@@ -604,18 +610,39 @@ module OpenHAB
604
610
  # Item1.average_since(12.hours)
605
611
  # end
606
612
  #
607
- # @see OpenHAB::Core::Items::Persistence
608
- #
609
- # @param [Object] service service either as a String or a Symbol
613
+ # @param [Object] service Persistence service either as a String or a Symbol
610
614
  # @yield [] Block executed in context of the supplied persistence service
611
615
  # @return [Object] The return value from the block.
612
616
  #
617
+ # @see persistence!
618
+ # @see OpenHAB::Core::Items::Persistence
619
+ #
613
620
  def persistence(service)
614
- old = Thread.current[:openhab_persistence_service]
615
- Thread.current[:openhab_persistence_service] = service
621
+ old = persistence!(service)
616
622
  yield
617
623
  ensure
618
- Thread.current[:openhab_persistence_service] = old
624
+ persistence!(old)
625
+ end
626
+
627
+ #
628
+ # Permanently sets the default persistence service for the current thread
629
+ #
630
+ # @note This method is only intended for use at the top level of rule
631
+ # scripts. If it's used within library methods, or hap-hazardly within
632
+ # rules, things can get very confusing because the prior state won't be
633
+ # properly restored.
634
+ #
635
+ # @param [Object] service Persistence service either as a String or a Symbol. When nil, use
636
+ # the system's default persistence service.
637
+ # @return [Object,nil] The previous persistence service settings, or nil when using the system's default.
638
+ #
639
+ # @see persistence
640
+ # @see OpenHAB::Core::Items::Persistence
641
+ #
642
+ def persistence!(service = nil)
643
+ old = Thread.current[:openhab_persistence_service]
644
+ Thread.current[:openhab_persistence_service] = service
645
+ old
619
646
  end
620
647
 
621
648
  #
data/lib/openhab/osgi.rb CHANGED
@@ -52,10 +52,8 @@ module OpenHAB
52
52
  )
53
53
  end
54
54
 
55
- private
56
-
57
55
  # @!attribute [r] bundle_context
58
- # @return [org.osgi.framework.BundleContext] OSGi bundle context
56
+ # @return [org.osgi.framework.BundleContext] OSGi bundle context for ScriptExtension Class
59
57
  def bundle_context
60
58
  @bundle_context ||= bundle.bundle_context
61
59
  end
@@ -12,9 +12,6 @@ module OpenHAB
12
12
  # @example Corresponds to `transform/compass.script`
13
13
  # OpenHAB::Transform.compass("30", param: "7")
14
14
  #
15
- # @example Corresponds to `transform/ruby/compass.script`
16
- # OpenHAB::Transform::Ruby.compass("59 °")
17
-
18
15
  module Transform
19
16
  class << self
20
17
  # @!visibility private
@@ -265,12 +262,13 @@ module OpenHAB
265
262
  # @return [void]
266
263
  #
267
264
  def load_rules
268
- automation_path = "#{org.openhab.core.OpenHAB.config_folder}/automation/ruby"
265
+ automation_paths = Array(::RSpec.configuration.openhab_automation_search_paths)
266
+
269
267
  lib_dirs = rubylib_dirs.map { |d| File.join(d, "") }
270
268
  lib_dirs << File.join(gem_home, "")
271
269
 
272
270
  SuspendRules.suspend_rules do
273
- files = Dir["#{automation_path}/**/*.rb"]
271
+ files = automation_paths.map { |p| Dir["#{p}/**/*.rb"] }.flatten
274
272
  files.reject! do |f|
275
273
  lib_dirs.any? { |l| f.start_with?(l) }
276
274
  end
@@ -100,6 +100,7 @@ module OpenHAB
100
100
  restore_autoupdate_items
101
101
  Mocks::PersistenceService.instance.reset
102
102
  Hooks.cache_script_extension.sharedCache.clear if DSL.shared_cache
103
+ DSL.persistence!(nil)
103
104
  end
104
105
  end
105
106
  end
@@ -17,6 +17,39 @@ module OpenHAB
17
17
  end
18
18
  ZonedDateTime.singleton_class.prepend(MockedZonedDateTime)
19
19
 
20
+ # @!visibility private
21
+ module MockedLocalDate
22
+ def now
23
+ mocked_time_stack_item = Timecop.top_stack_item
24
+ return super unless mocked_time_stack_item
25
+
26
+ mocked_time_stack_item.time.to_zoned_date_time.to_local_date
27
+ end
28
+ end
29
+ LocalDate.singleton_class.prepend(MockedLocalDate)
30
+
31
+ # @!visibility private
32
+ module MockedLocalTime
33
+ def now
34
+ mocked_time_stack_item = Timecop.top_stack_item
35
+ return super unless mocked_time_stack_item
36
+
37
+ mocked_time_stack_item.time.to_zoned_date_time.to_local_time
38
+ end
39
+ end
40
+ LocalTime.singleton_class.prepend(MockedLocalTime)
41
+
42
+ # @!visibility private
43
+ module MockedMonthDay
44
+ def now
45
+ mocked_time_stack_item = Timecop.top_stack_item
46
+ return super unless mocked_time_stack_item
47
+
48
+ mocked_time_stack_item.time.to_zoned_date_time.to_month_day
49
+ end
50
+ end
51
+ MonthDay.singleton_class.prepend(MockedMonthDay)
52
+
20
53
  # extend Timecop to support Java time classes
21
54
  # @!visibility private
22
55
  module TimeCopStackItem
data/lib/openhab/rspec.rb CHANGED
@@ -15,3 +15,12 @@ require_relative "rspec/configuration"
15
15
  require_relative "rspec/helpers"
16
16
  require_relative "rspec/karaf"
17
17
  require_relative "rspec/hooks"
18
+
19
+ return unless defined?(RSpec)
20
+
21
+ RSpec.configure do |c|
22
+ c.add_setting :openhab_automation_search_paths, default: [
23
+ "#{org.openhab.core.OpenHAB.config_folder}/automation/ruby",
24
+ "#{org.openhab.core.OpenHAB.config_folder}/automation/jsr223"
25
+ ]
26
+ 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.rc11
4
+ version: 5.0.0.rc.13
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-12-25 00:00:00.000000000 Z
11
+ date: 2023-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: gem-release
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.2'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: guard-rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -453,9 +467,9 @@ files:
453
467
  - lib/openhab/core_ext/java/unit.rb
454
468
  - lib/openhab/core_ext/java/zoned_date_time.rb
455
469
  - lib/openhab/core_ext/ruby/array.rb
456
- - lib/openhab/core_ext/ruby/class.rb
457
470
  - lib/openhab/core_ext/ruby/date.rb
458
471
  - lib/openhab/core_ext/ruby/date_time.rb
472
+ - lib/openhab/core_ext/ruby/module.rb
459
473
  - lib/openhab/core_ext/ruby/numeric.rb
460
474
  - lib/openhab/core_ext/ruby/range.rb
461
475
  - lib/openhab/core_ext/ruby/symbol.rb
@@ -537,14 +551,14 @@ files:
537
551
  - lib/openhab/yard/tags/constant_directive.rb
538
552
  - lib/openhab/yard/tags/group_directive.rb
539
553
  - lib/openhab/yard/tags/library.rb
540
- homepage: https://ccutrer.github.io/openhab-jrubyscripting/
554
+ homepage: https://openhab.github.io/openhab-jruby/
541
555
  licenses:
542
556
  - EPL-2.0
543
557
  metadata:
544
- homepage_uri: https://ccutrer.github.io/openhab-jrubyscripting/
545
- source_code_uri: https://github.com/ccutrer/openhab-jrubyscripting
546
- documentation_uri: https://ccutrer.github.io/openhab-jrubyscripting/
547
- changelog_uri: https://ccutrer.github.io/openhab-jrubyscripting/file.CHANGELOG.html
558
+ homepage_uri: https://openhab.github.io/openhab-jruby/
559
+ source_code_uri: https://github.com/openhab/openhab-jruby
560
+ documentation_uri: https://openhab.github.io/openhab-jruby/
561
+ changelog_uri: https://openhab.github.io/openhab-jruby/file.CHANGELOG.html
548
562
  rubygems_mfa_required: 'true'
549
563
  post_install_message:
550
564
  rdoc_options: []
@@ -561,7 +575,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
561
575
  - !ruby/object:Gem::Version
562
576
  version: 1.3.1
563
577
  requirements: []
564
- rubygems_version: 3.3.7
578
+ rubygems_version: 3.3.26
565
579
  signing_key:
566
580
  specification_version: 4
567
581
  summary: JRuby Helper Libraries for openHAB Scripting