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.
171 172 173 |
# File 'lib/async/service/environment.rb', line 171 def initialize @cache = {} end |
Class Method Details
.wrap(environment) ⇒ Object
Create an evaluator wrapper for an environment.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/async/service/environment.rb', line 140 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.
202 203 204 205 206 |
# File 'lib/async/service/environment.rb', line 202 def [](key) if self.key?(key) self.__send__(key) end end |
#inspect ⇒ Object
Inspect representation of the evaluator.
177 178 179 |
# File 'lib/async/service/environment.rb', line 177 def inspect "#<#{Evaluator} #{self.keys}>" end |
#key?(key) ⇒ Boolean
Check if a key is available.
211 212 213 |
# File 'lib/async/service/environment.rb', line 211 def key?(key) self.keys.include?(key) end |
#to_h ⇒ Object
Convert the evaluator to a hash.
183 184 185 186 187 188 189 190 |
# File 'lib/async/service/environment.rb', line 183 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.
195 196 197 |
# File 'lib/async/service/environment.rb', line 195 def to_json(...) self.to_h.to_json(...) end |