Sha256: fa2f3d38fe4c05948d320b6fda20a7ee5f8288dde3f2c84dcb45932a382afba1

Contents?: true

Size: 1.28 KB

Versions: 19

Compression:

Stored size: 1.28 KB

Contents

require 'set'
require 'uri'
require 'yaml'

module Einhorn
  class Client
    # Keep this in this file so client can be loaded entirely
    # standalone by user code.
    module Transport

      ParseError = defined?(Psych::SyntaxError) ? Psych::SyntaxError : ArgumentError

      def self.send_message(socket, message)
        line = serialize_message(message)
        socket.write(line)
      end

      def self.receive_message(socket)
        line = socket.readline
        deserialize_message(line)
      end

      def self.serialize_message(message)
        serialized = YAML.dump(message)
        escaped = URI.escape(serialized, "%\n")
        escaped + "\n"
      end

      def self.deserialize_message(line)
        serialized = URI.unescape(line)
        YAML.load(serialized)
      end
    end

    def self.for_path(path_to_socket)
      socket = UNIXSocket.open(path_to_socket)
      self.new(socket)
    end

    def self.for_fd(fileno)
      socket = UNIXSocket.for_fd(fileno)
      self.new(socket)
    end

    def initialize(socket)
      @socket = socket
    end

    def send_command(command_hash)
      Transport.send_message(@socket, command_hash)
    end

    def receive_message
      Transport.receive_message(@socket)
    end

    def close
      @socket.close
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
einhorn-0.7.4 lib/einhorn/client.rb
einhorn-0.7.3 lib/einhorn/client.rb
einhorn-0.7.2 lib/einhorn/client.rb
einhorn-0.7.1 lib/einhorn/client.rb
einhorn-0.7.0 lib/einhorn/client.rb
einhorn-0.6.5 lib/einhorn/client.rb
einhorn-0.6.4 lib/einhorn/client.rb
einhorn-0.6.3 lib/einhorn/client.rb
einhorn-0.6.2 lib/einhorn/client.rb
einhorn-0.6.1 lib/einhorn/client.rb
einhorn-0.6.0 lib/einhorn/client.rb
einhorn-0.5.7 lib/einhorn/client.rb
einhorn-0.5.6 lib/einhorn/client.rb
einhorn-0.5.5 lib/einhorn/client.rb
einhorn-0.5.4 lib/einhorn/client.rb
einhorn-0.5.3 lib/einhorn/client.rb
einhorn-0.5.2 lib/einhorn/client.rb
einhorn-0.5.1 lib/einhorn/client.rb
einhorn-0.5.0 lib/einhorn/client.rb