Module: ASIR::CodeMore

Includes:
CodeBlock, ObjectResolving
Included in:
Message
Defined in:
lib/asir/code_more.rb

Overview

!SLIDE Code More

Help encode/decode and resolve receiver class.

Defined Under Namespace

Modules: Result

Instance Method Summary collapse

Methods included from CodeBlock

block_cache, block_to_code, code_to_block, #decode_block!, #encode_block!

Methods included from ObjectResolving

#resolve_object

Instance Method Details

#decode_more!Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/asir/code_more.rb', line 23

def decode_more!
  decode_block!
  if ::String === @receiver_class
    @receiver_class = resolve_object(@receiver_class)
    @receiver = resolve_object(@receiver) if ::Module === @receiver_class
    unless @receiver_class === @receiver
      raise Error, "receiver #{@receiver.class.name} is not a #{@receiver_class}" 
    end
  end
  self
end

#descriptionObject

Returns “Module.selector” if receiver is Module. Returns “Class#selector” if receiver is an instance.



37
38
39
40
41
42
43
44
45
46
# File 'lib/asir/code_more.rb', line 37

def description
  case
  when ::String === @receiver_class
    "#{@receiver_class}.#{@selector}"
  when ::Module === @receiver
    "#{@receiver}.#{@selector}"
  else
    "#{@receiver_class}\#\#{@selector}"
  end
end

#encode_more!Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/asir/code_more.rb', line 10

def encode_more!
  obj = encode_block! # may self.dup
  unless ::String === @receiver_class
    obj ||= self.dup # dont dup twice.
    obj.receiver = @receiver.name if ::Module === @receiver
    obj.receiver_class = @receiver_class.name
    if resp = obj.result and resp.message == self
      resp.message = obj
    end
  end
  obj || self
end