Module: ASIR::CodeBlock
- Included in:
- CodeMore
- Defined in:
- lib/asir/code_block.rb
Overview
!SLIDE Code Block
Encode/decode Message#block.
Class Method Summary collapse
-
.block_cache ⇒ Object
Returns a block_cache Hash.
-
.block_to_code(block) ⇒ Object
Uses ruby2ruby, if loaded.
-
.code_to_block(code) ⇒ Object
Calls eval.
Instance Method Summary collapse
- #decode_block! ⇒ Object
-
#encode_block! ⇒ Object
Most coders cannot serialize Procs.
Class Method Details
.block_cache ⇒ Object
Returns a block_cache Hash. Flushed every 1000 accesses.
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/asir/code_block.rb', line 29 def self.block_cache cache = Thread.current[:'ASIR::CodeBlock.block_cache'] ||= { } count = Thread.current[:'ASIR::CodeBlock.block_cache_count'] ||= 0 count += 1 if count >= 1000 cache.clear count = 0 end Thread.current[:'ASIR::CodeBlock.block_cache_count'] = count cache end |
.block_to_code(block) ⇒ Object
Uses ruby2ruby, if loaded.
42 43 44 45 46 |
# File 'lib/asir/code_block.rb', line 42 def self.block_to_code block (block_cache[block.object_id] ||= [ block.respond_to?(:to_ruby) && block.to_ruby, block ]). first end |
.code_to_block(code) ⇒ Object
Calls eval. May be unsafe.
50 51 52 53 54 |
# File 'lib/asir/code_block.rb', line 50 def self.code_to_block code (block_cache[code.dup.freeze] ||= [ eval(@block_code), code ]). first end |
Instance Method Details
#decode_block! ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/asir/code_block.rb', line 19 def decode_block! if ::String === @block_code @block ||= CodeBlock.code_to_block(@block_code) @block_code = nil end self end |
#encode_block! ⇒ Object
Most coders cannot serialize Procs. But we can attempt to serialize a String representing a Proc.
9 10 11 12 13 14 15 16 17 |
# File 'lib/asir/code_block.rb', line 9 def encode_block! obj = nil if @block && ! ::String === @block_code obj ||= self.dup obj.block_code = CodeBlock.block_to_code(obj.block) obj.block = nil end obj end |