Thrift Ruby Software Library
    http://thrift.apache.org

== LICENSE:

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

== DESCRIPTION:

Thrift is a strongly-typed language-agnostic RPC system.
This library is the ruby implementation for both clients and servers.

== INSTALL:

  $ gem install thrift

== CAVEATS:

This library provides the client and server implementations of thrift.
It does <em>not</em> provide the compiler for the .thrift files. To compile
.thrift files into language-specific implementations, please download the full
thrift software package.

== USAGE:

This section should get written by someone with the time and inclination.
In the meantime, look at existing code, such as the benchmark or the tutorial
in the full thrift distribution.
