Class: Async::Service::Environment::Evaluator
- Inherits:
-
Object
- Object
- Async::Service::Environment::Evaluator
- Defined in:
- lib/async/service/environment.rb
Overview
An evaluator is lazy read-only view of an environment. It memoizes all method calls.
Class Method Summary collapse
-
.wrap(environment) ⇒ Object
Create an evaluator wrapper for an environment.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Get value for a given key.
-
#initialize ⇒ Evaluator
constructor
Initialize a new evaluator.
-
#inspect ⇒ Object
Inspect representation of the evaluator.
-
#key?(key) ⇒ Boolean
Check if a key is available.
-
#to_h ⇒ Object
Convert the evaluator to a hash.
-
#to_json ⇒ Object
Convert the evaluator to JSON.
Constructor Details
#initialize ⇒ Evaluator
Initialize a new evaluator.
179 180 181 |
# File 'lib/async/service/environment.rb', line 179 def initialize @cache = {} end |
Class Method Details
.wrap(environment) ⇒ Object
Create an evaluator wrapper for an environment.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/async/service/environment.rb', line 148 def self.wrap(environment) evaluator = ::Class.new(self) facet = ::Module.new environment.included(facet) evaluator.include(facet) keys = [] # Memoize all instance methods: facet.instance_methods.each do |name| instance_method = facet.instance_method(name) # Only memoize methods with no arguments: if instance_method.arity == 0 keys << name evaluator.define_method(name) do @cache[name] ||= super() end end end # This lists all zero-argument methods: evaluator.define_method(:keys) {keys} return evaluator.new end |
Instance Method Details
#[](key) ⇒ Object
Get value for a given key.
210 211 212 213 214 |
# File 'lib/async/service/environment.rb', line 210 def [](key) if self.key?(key) self.__send__(key) end end |
#inspect ⇒ Object
Inspect representation of the evaluator.
185 186 187 |
# File 'lib/async/service/environment.rb', line 185 def inspect "#<#{Evaluator} #{self.keys}>" end |
#key?(key) ⇒ Boolean
Check if a key is available.
219 220 221 |
# File 'lib/async/service/environment.rb', line 219 def key?(key) self.keys.include?(key) end |
#to_h ⇒ Object
Convert the evaluator to a hash.
191 192 193 194 195 196 197 198 |
# File 'lib/async/service/environment.rb', line 191 def to_h # Ensure all keys are evaluated: self.keys.each do |name| self.__send__(name) end return @cache end |
#to_json ⇒ Object
Convert the evaluator to JSON.
203 204 205 |
# File 'lib/async/service/environment.rb', line 203 def to_json(...) self.to_h.to_json(...) end |