Module: Kernel
- Defined in:
- lib/story_teller/kernel.rb
Overview
The Kernel module
Defined Under Namespace
Classes: Cache
Constant Summary collapse
- Index =
Cache.new({}, {})
- NamespaceDelimiterPattern =
%r{::}.freeze
- JavaPattern =
%r{java}.freeze
- DefineNewRand =
%(alias :original_rand :rand def rand(ignore=0) %<n>s end ).freeze
- ResetOriginalRand =
%(alias :rand :original_rand remove_method :original_rand ).freeze
Instance Method Summary collapse
-
#attempt_twice(&_block) ⇒ Object
rubocop: disable Metrics/MethodLength.
- #Attribute(attribute) ⇒ Object
- #child(obj = nil) ⇒ Object
- #children(obj = nil, prop = :@children) ⇒ Object
- #class_loader ⇒ Object
-
#collect_garbage ⇒ Object
rubocop: disable Metrics/AbcSize.
- #Constant(property, value) ⇒ Object
- #Default(property, value) ⇒ Object
- #destroy(obj = nil) ⇒ Object
- #find_class(class_name) ⇒ Object
- #find_module(module_name) ⇒ Object
-
#get_constant(constant_name, target = Object) ⇒ Object
rubocop: disable Metrics/MethodLength.
- #give(obj = nil, *attributes) ⇒ Object
- #import_global(symbol) ⇒ Object
- #Include(inclusion) ⇒ Object
- #indent(stack_depth = [0, caller(2).length - 9].max) ⇒ Object
- #java? ⇒ Boolean
- #jump(symbol) ⇒ Object
- #kneel(obj) ⇒ Object
- #label(symbol, &_block) ⇒ Object
- #Link(link) ⇒ Object
- #load_service ⇒ Object
- #memory_usage ⇒ Object
- #metaclass(obj) ⇒ Object
-
#move(obj, new_parent) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity.
- #object_space ⇒ Object
- #override(replacement, method_name) ⇒ Object
-
#parent(obj = nil, prop = :@parent, &block) ⇒ Object
rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity.
- #parent_selector(obj, &block) ⇒ Object
- #Property(property_or_modifier, modifier = nil, value = nil) ⇒ Object
- #recline(obj) ⇒ Object
- #reload_feature(feature) ⇒ Object
- #reset_constant(constant, value, target = Object) ⇒ Object
-
#reset_runtime ⇒ Object
rubocop: disable Metrics/AbcSize.
- #return_after(*args, &block) ⇒ Object
- #setrandom(n) ⇒ Object
-
#sibling(obj = nil) ⇒ Object
rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity.
- #silence_warnings(&_block) ⇒ Object
- #sit(obj) ⇒ Object
-
#stand(obj) ⇒ Object
rubocop: enable Metrics/AbcSize rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity.
- #take(obj = nil, *attributes) ⇒ Object
- #toggle_constant(constant, target = ::Object) ⇒ Object
Instance Method Details
#attempt_twice(&_block) ⇒ Object
rubocop: disable Metrics/MethodLength
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/story_teller/kernel.rb', line 134 def attempt_twice(&_block) tries ||= 2 return yield rescue StandardError => e tries -= 1 if tries > 0 log.warn e. retry else log.error e return nil end end |
#Attribute(attribute) ⇒ Object
38 39 40 |
# File 'lib/story_teller/kernel.rb', line 38 def Attribute(attribute) StoryTeller::Library::Directives.Attribute(attribute) end |
#child(obj = nil) ⇒ Object
298 299 300 301 302 303 |
# File 'lib/story_teller/kernel.rb', line 298 def child(obj = nil) return nil if obj.nil? return nil unless obj.respond_to?(:child) obj.refresh if obj.respond_to?(:refresh) obj.child.refresh end |
#children(obj = nil, prop = :@children) ⇒ Object
337 338 339 340 341 342 343 344 345 346 |
# File 'lib/story_teller/kernel.rb', line 337 def children(obj = nil, prop = :@children) return 0 if obj.nil? obj.refresh if obj.respond_to?(:refresh) if defined? db return db.run('SELECT count(id) from "object" where parent_id = ' + obj.id) unless sysobj? end return obj.instance_variable_get(prop).length if obj.instance_variable_defined?(prop) return unless obj.respond_to?(:children) obj.children.length end |
#class_loader ⇒ Object
178 179 180 |
# File 'lib/story_teller/kernel.rb', line 178 def class_loader JRuby.runtime.jruby_class_loader end |
#collect_garbage ⇒ Object
rubocop: disable Metrics/AbcSize
207 208 209 210 211 212 213 214 215 216 |
# File 'lib/story_teller/kernel.rb', line 207 def collect_garbage java.lang.System.gc() sleep 0.1 java.lang.System.runFinalization() sleep 0.1 rescue java.lang.Throwable => e log.error "Unexpected java error invoking garbage collection: #{e}", e rescue StandardError => e log.error "Unexpected error invoking garbage collection: #{e}", e end |
#Constant(property, value) ⇒ Object
50 51 52 |
# File 'lib/story_teller/kernel.rb', line 50 def Constant(property, value) StoryTeller::Library::Directives.Constant(property, value) end |
#Default(property, value) ⇒ Object
46 47 48 |
# File 'lib/story_teller/kernel.rb', line 46 def Default(property, value) StoryTeller::Library::Directives.Default(property, value) end |
#destroy(obj = nil) ⇒ Object
348 349 350 351 352 353 354 |
# File 'lib/story_teller/kernel.rb', line 348 def destroy(obj = nil) return if obj.nil? return unless obj.respond_to?(:has?) return if obj.has? :prized return unless obj.respond_to?(:destroy) obj.destroy end |
#find_class(class_name) ⇒ Object
126 127 128 129 130 |
# File 'lib/story_teller/kernel.rb', line 126 def find_class(class_name) klass = Index.classes[class_name] klass ||= get_constant(class_name) Index.classes[class_name] = klass end |
#find_module(module_name) ⇒ Object
114 115 116 117 118 119 120 121 122 123 |
# File 'lib/story_teller/kernel.rb', line 114 def find_module(module_name) module_name = "::#{module_name}" unless NamespaceDelimiterPattern.match?(module_name) mod = Index.modules[module_name] # TODO: Test # return mod if mod.is_a?(Module) mod ||= get_constant(module_name) return nil if mod.is_a?(Class) Index.modules[module_name] = mod end |
#get_constant(constant_name, target = Object) ⇒ Object
rubocop: disable Metrics/MethodLength
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/story_teller/kernel.rb', line 94 def get_constant(constant_name, target = Object) constant = nil begin constant = target.const_get(constant_name) rescue NameError => e log.error "Undefined constant #{constant_name}: #{e}", e rescue SyntaxError => e log.error "Unexpected syntax error getting constant #{constant_name}", e rescue StandardError => e log.error "Unexpected error getting constant #{constant_name}", e end constant end |
#give(obj = nil, *attributes) ⇒ Object
356 357 358 359 360 |
# File 'lib/story_teller/kernel.rb', line 356 def give(obj = nil, *attributes) return if obj.nil? return unless obj.respond_to?(:tag) obj.tag(*attributes) end |
#import_global(symbol) ⇒ Object
58 59 60 |
# File 'lib/story_teller/kernel.rb', line 58 def import_global(symbol) StoryTeller::Library::Directives.import_global(symbol) end |
#Include(inclusion) ⇒ Object
33 34 35 36 |
# File 'lib/story_teller/kernel.rb', line 33 def Include(inclusion) StoryTeller::Engine.main_object = self if inclusion == "Parser" StoryTeller::Library::Directives.Include(inclusion) end |
#indent(stack_depth = [0, caller(2).length - 9].max) ⇒ Object
150 151 152 |
# File 'lib/story_teller/kernel.rb', line 150 def indent(stack_depth = [0, caller(2).length - 9].max) ' ' * stack_depth end |
#java? ⇒ Boolean
194 195 196 |
# File 'lib/story_teller/kernel.rb', line 194 def java? JavaPattern.match?(RUBY_PLATFORM) end |
#jump(symbol) ⇒ Object
272 273 274 |
# File 'lib/story_teller/kernel.rb', line 272 def jump(symbol) throw symbol end |
#kneel(obj) ⇒ Object
399 400 401 402 403 |
# File 'lib/story_teller/kernel.rb', line 399 def kneel(obj) give obj, :kneeling unless obj.has? :kneeling take obj, :sitting take obj, :prone end |
#label(symbol, &_block) ⇒ Object
262 263 264 265 266 267 268 269 |
# File 'lib/story_teller/kernel.rb', line 262 def label(symbol, &_block) loop do catch symbol do yield break end end end |
#Link(link) ⇒ Object
54 55 56 |
# File 'lib/story_teller/kernel.rb', line 54 def Link(link) StoryTeller::Library::Directives.Link(link) end |
#load_service ⇒ Object
183 184 185 |
# File 'lib/story_teller/kernel.rb', line 183 def load_service JRuby.runtime.load_service end |
#memory_usage ⇒ Object
199 200 201 202 203 |
# File 'lib/story_teller/kernel.rb', line 199 def memory_usage total_memory = java.lang.Runtime.getRuntime().totalMemory() free_memory = java.lang.Runtime.getRuntime().freeMemory() total_memory - free_memory end |
#metaclass(obj) ⇒ Object
236 237 238 |
# File 'lib/story_teller/kernel.rb', line 236 def (obj) obj.class. end |
#move(obj, new_parent) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity
371 372 373 374 375 376 377 378 379 380 381 382 |
# File 'lib/story_teller/kernel.rb', line 371 def move(obj, new_parent) return if obj.nil? return unless new_parent.respond_to?(:<<) return unless new_parent.respond_to?(:in?) new_parent.safe_refresh if new_parent.respond_to?(:safe_refresh) obj.safe_refresh if obj.respond_to?(:safe_refresh) raise CycleError if new_parent.in? obj obj.remove if obj.respond_to?(:remove) new_parent << obj obj.safe_refresh if obj.respond_to?(:safe_refresh) new_parent.safe_refresh if new_parent.respond_to?(:safe_refresh) end |
#object_space ⇒ Object
188 189 190 |
# File 'lib/story_teller/kernel.rb', line 188 def object_space JRuby.runtime.object_space end |
#override(replacement, method_name) ⇒ Object
277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/story_teller/kernel.rb', line 277 def override(replacement, method_name) new_method = nil begin old_method = self.instance_method(method_name) remove_method(method_name) if old_method.arity > 0 new_method = define_method(replacement.to_s, old_method) rescue NameError => e log.error "Error overriding method #{method_name}: #{e}", e end new_method end |
#parent(obj = nil, prop = :@parent, &block) ⇒ Object
rubocop: disable Metrics/CyclomaticComplexity rubocop: disable Metrics/PerceivedComplexity
316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/story_teller/kernel.rb', line 316 def parent(obj = nil, prop = :@parent, &block) return nil if obj.nil? obj.refresh if obj.respond_to?(:refresh) obj_parent = nil obj_parent = select_parent(obj, &block) if block_given? obj_parent ||= obj.instance_variable_get(prop) if obj.instance_variable_defined?(prop) obj_parent ||= obj.parent if obj.respond_to?(:parent) return nil if obj_parent.nil? obj_parent.refresh if obj_parent.respond_to?(:refresh) obj_parent end |
#parent_selector(obj, &block) ⇒ Object
305 306 307 308 309 310 311 312 |
# File 'lib/story_teller/kernel.rb', line 305 def parent_selector(obj, &block) return nil if obj.nil? loop do obj = obj.parent break if block.call(obj) end obj end |
#Property(property_or_modifier, modifier = nil, value = nil) ⇒ Object
42 43 44 |
# File 'lib/story_teller/kernel.rb', line 42 def Property(property_or_modifier, modifier = nil, value = nil) StoryTeller::Library::Directives.Property(property_or_modifier, modifier, value) end |
#recline(obj) ⇒ Object
405 406 407 408 409 |
# File 'lib/story_teller/kernel.rb', line 405 def recline(obj) give obj, :prone unless obj.has? :prone take obj, :sitting take obj, :kneeling end |
#reload_feature(feature) ⇒ Object
166 167 168 169 170 171 172 173 174 175 |
# File 'lib/story_teller/kernel.rb', line 166 def reload_feature(feature) silence_warnings do # Remove a loaded feature: load_service.remove_internal_loaded_feature(feature) # Supposedly, purge old compiled script code: reset_runtime # Reload the feature: load_service.load(feature, true) end end |
#reset_constant(constant, value, target = Object) ⇒ Object
68 69 70 71 72 73 74 75 76 |
# File 'lib/story_teller/kernel.rb', line 68 def reset_constant(constant, value, target = Object) return if constant.nil? silence_warnings do target.instance_eval { const_set(constant.to_sym, value) } end rescue StandardError => e log.error "Unexpected error resetting constant #{constant}", e nil end |
#reset_runtime ⇒ Object
rubocop: disable Metrics/AbcSize
156 157 158 159 160 161 162 |
# File 'lib/story_teller/kernel.rb', line 156 def reset_runtime org.jruby.Ruby.new_instance().use_as_global_runtime() engine = javax.script.ScriptEngineManager.new().get_engine_by_name('jruby') # rubocop: disable Style/RedundantInterpolation log.warn "#{(engine.methods - Object.instance_methods).uniq.sort.inspect}" # rubocop: enable Style/RedundantInterpolation end |
#return_after(*args, &block) ⇒ Object
62 63 64 65 |
# File 'lib/story_teller/kernel.rb', line 62 def return_after(*args, &block) block.call args.first end |
#setrandom(n) ⇒ Object
250 251 252 253 254 255 256 257 258 259 |
# File 'lib/story_teller/kernel.rb', line 250 def setrandom(n) puts "--------------------" # TODO: Remove puts "Before setrandom Kernel.respond_to?(:original_rand) #{Kernel.respond_to?(:original_rand)}" # TODO: Remove code = ResetOriginalRand if Kernel.respond_to?(:original_rand) code ||= format(DefineNewRand, n: n) log.debug "code:\n#{code}" # TODO: Remove Kernel.module_eval(code) ensure puts "After setrandom Kernel.respond_to?(:original_rand) #{Kernel.respond_to?(:original_rand)}" end |
#sibling(obj = nil) ⇒ Object
rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity
330 331 332 333 334 335 |
# File 'lib/story_teller/kernel.rb', line 330 def sibling(obj = nil) return nil if obj.nil? return nil unless obj.respond_to?(:sibling) obj.refresh if obj.respond_to?(:refresh) obj.sibling.refresh end |
#silence_warnings(&_block) ⇒ Object
290 291 292 293 294 295 296 |
# File 'lib/story_teller/kernel.rb', line 290 def silence_warnings(&_block) old_verbose = $VERBOSE $VERBOSE = nil yield ensure $VERBOSE = old_verbose end |
#sit(obj) ⇒ Object
393 394 395 396 397 |
# File 'lib/story_teller/kernel.rb', line 393 def sit(obj) give obj, :sitting unless obj.has? :sitting take obj, :kneeling take obj, :prone end |
#stand(obj) ⇒ Object
rubocop: enable Metrics/AbcSize rubocop: enable Metrics/CyclomaticComplexity rubocop: enable Metrics/PerceivedComplexity
387 388 389 390 391 |
# File 'lib/story_teller/kernel.rb', line 387 def stand(obj) take obj, :sitting take obj, :kneeling take obj, :prone end |
#take(obj = nil, *attributes) ⇒ Object
362 363 364 365 366 |
# File 'lib/story_teller/kernel.rb', line 362 def take(obj = nil, *attributes) return if obj.nil? return unless obj.respond_to?(:untag) obj.untag(*attributes) end |
#toggle_constant(constant, target = ::Object) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/story_teller/kernel.rb', line 79 def toggle_constant(constant, target = ::Object) silence_warnings do if target.const_defined?(constant) target.instance_eval { remove_const(constant) } else target.instance_eval { const_set(constant, true) } end end rescue StandardError => e log.error "Unexpected error toggling constant #{constant}", e nil end |