Sha256: 19a593fbbfd2f872baeb682ccc1df8e762903ef57d9387b0bf6c94484dd7bc2f

Contents?: true

Size: 1.6 KB

Versions: 3

Compression:

Stored size: 1.6 KB

Contents

module ASIR
  # !SLIDE
  # Code More
  #
  # Help encode/decode and resolve receiver class.
  module CodeMore
    include ObjectResolving # resolve_object()
    include CodeBlock # encode_block!, decode_block!

    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

    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

    # Returns "Module.selector" if receiver is Module.
    # Returns "Class#selector" if receiver is an instance.
    def description
      case
      when ::String === @receiver_class
        "#{@receiver_class}.#{@selector}"
      when ::Module === @receiver
        "#{@receiver}.#{@selector}"
      else
        "#{@receiver_class}\#\#{@selector}"
      end
    end

    # Mixin for Result.
    module Result
      def encode_more!
        @message = @message.encode_more! if @message
        self
      end

      def decode_more!
        @message = @message.decode_more! if @message
        self
      end
    end
  end
  # !SLIDE END
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
asir-1.0.7 lib/asir/code_more.rb
asir-1.0.6 lib/asir/code_more.rb
asir-1.0.5 lib/asir/code_more.rb