Class: OpenHAB::DSL::Rules::Builder
- Inherits:
-
Object
- Object
- OpenHAB::DSL::Rules::Builder
- Includes:
- Core::EntityLookup, Terse
- Defined in:
- lib/openhab/dsl/rules/builder.rb
Overview
A rules builder allows you to create openHAB rules.
Note that all methods on this module are also availabe directly on OpenHAB::DSL.
Instance Attribute Summary collapse
Instance Method Summary collapse
-
#initialize(provider) ⇒ Builder
constructor
A new instance of Builder.
-
#rule(name = nil, id: nil, script: nil, binding: nil) {|rule| ... } ⇒ Core::Rules::Rule?
Create a new rule.
-
#scene(name = nil, id: nil, script: nil) { ... } ⇒ Core::Rules::Rule
Create a new scene.
-
#script(name = nil, id: nil, script: nil) { ... } ⇒ Core::Rules::Rule
Create a new script.
Methods included from Core::EntityLookup
Methods included from Terse
#changed, #channel, #channel_linked, #channel_unlinked, #cron, #every, #item_added, #item_removed, #item_updated, #on_start, #received_command, #thing_added, #thing_removed, #thing_updated, #updated
Constructor Details
#initialize(provider) ⇒ Builder
Returns a new instance of Builder.
33 34 35 |
# File 'lib/openhab/dsl/rules/builder.rb', line 33 def initialize(provider) @provider = Core::Rules::Provider.current(provider) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class OpenHAB::Core::EntityLookup
Instance Attribute Details
#provider ⇒ org.openhab.core.automation.RuleProvider (readonly)
31 32 33 |
# File 'lib/openhab/dsl/rules/builder.rb', line 31 def provider @provider end |
Instance Method Details
#rule(name = nil, id: nil, script: nil, binding: nil) {|rule| ... } ⇒ Core::Rules::Rule?
Create a new rule
The rule must have at least one trigger and one execution block. To create a "script" without any triggers, use #script.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/openhab/dsl/rules/builder.rb', line 61 def rule(name = nil, id: nil, script: nil, binding: nil, &block) raise ArgumentError, "Block is required" unless block id ||= NameInference.infer_rule_id_from_block(block) script ||= block.source rescue nil # rubocop:disable Style/RescueModifier builder = nil ThreadLocal.thread_local(openhab_rule_type: "rule", openhab_rule_uid: id) do builder = BuilderDSL.new(binding || block.binding) builder.uid(id) builder.instance_exec(builder, &block) builder.guard = Guard.new(run_context: builder.caller, only_if: builder.only_if, not_if: builder.not_if) name ||= NameInference.infer_rule_name(builder) name ||= id builder.name(name) logger.trace { builder.inspect } builder.build(provider, script) end end |
#scene(name = nil, id: nil, script: nil) { ... } ⇒ Core::Rules::Rule
Create a new scene
A scene is a rule with no triggers. It can be called by various other actions, such as the Run Rules action.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/openhab/dsl/rules/builder.rb', line 127 def scene(name = nil, id: nil, script: nil, &block) raise ArgumentError, "Block is required" unless block id ||= NameInference.infer_rule_id_from_block(block) name ||= id script ||= block.source rescue nil # rubocop:disable Style/RescueModifier builder = nil ThreadLocal.thread_local(openhab_rule_type: "script", openhab_rule_uid: id) do builder = BuilderDSL.new(block.binding) builder.uid(id) builder.tags("Scene") builder.name(name) builder.script(&block) logger.trace { builder.inspect } builder.build(provider, script) end end |
#script(name = nil, id: nil, script: nil) { ... } ⇒ Core::Rules::Rule
Create a new script
A script is a rule with no triggers. It can be called by various other actions, such as the Run Rules action.
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/openhab/dsl/rules/builder.rb', line 97 def script(name = nil, id: nil, script: nil, &block) raise ArgumentError, "Block is required" unless block id ||= NameInference.infer_rule_id_from_block(block) name ||= id script ||= block.source rescue nil # rubocop:disable Style/RescueModifier builder = nil ThreadLocal.thread_local(openhab_rule_type: "script", openhab_rule_uid: id) do builder = BuilderDSL.new(block.binding) builder.uid(id) builder.tags("Script") builder.name(name) builder.script(&block) logger.trace { builder.inspect } builder.build(provider, script) end end |