|  | @@ -4,48 +4,44 @@ gRPC Ruby
 | 
	
		
			
				|  |  |  A Ruby implementation of gRPC.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Status
 | 
	
		
			
				|  |  | --------
 | 
	
		
			
				|  |  | +------
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Alpha : Ready for early adopters
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -INSTALLATION PREREQUISITES
 | 
	
		
			
				|  |  | ---------------------------
 | 
	
		
			
				|  |  | +PREREQUISITES
 | 
	
		
			
				|  |  | +-------------
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -This requires Ruby 2.1, as the RPC API surface uses keyword args.
 | 
	
		
			
				|  |  | +- Ruby 2.x. The gRPC API uses keyword args.
 | 
	
		
			
				|  |  | +- [homebrew][] on Mac OS X, [linuxbrew][] on Linux.  These simplify the installation of the gRPC C core.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -QUICK - INSTALL
 | 
	
		
			
				|  |  | +INSTALLATION
 | 
	
		
			
				|  |  |  ---------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -- Clone this repository.
 | 
	
		
			
				|  |  | -- Follow the instructions in [INSTALL](../../INSTALL) to install the gRPC C core.
 | 
	
		
			
				|  |  | -- If you don't have Ruby 2.1 installed, switch to the more detailed instructions below
 | 
	
		
			
				|  |  | -- Use bundler to install
 | 
	
		
			
				|  |  | +On Mac OS X, install [homebrew][]. On Linux, install [linuxbrew][].
 | 
	
		
			
				|  |  | +Run the following command to install gRPC Ruby.
 | 
	
		
			
				|  |  |  ```sh
 | 
	
		
			
				|  |  | -$ # from this directory
 | 
	
		
			
				|  |  | -$ gem install bundler && bundle install
 | 
	
		
			
				|  |  | +$ curl -fsSL https://goo.gl/getgrpc | bash -s ruby
 | 
	
		
			
				|  |  |  ```
 | 
	
		
			
				|  |  | +This will download and run the [gRPC install script][], then install the latest version of gRPC Ruby gem.  It also installs Protocol Buffers compiler (_protoc_) and the gRPC _protoc_ plugin for ruby.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Installing from source
 | 
	
		
			
				|  |  | -----------------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +BUILD FROM SOURCE
 | 
	
		
			
				|  |  | +---------------------
 | 
	
		
			
				|  |  | +- Clone this repository
 | 
	
		
			
				|  |  |  - Build the gRPC C core
 | 
	
		
			
				|  |  | -E.g, from the root of the gRPC [git repo](https://github.com/google/grpc)
 | 
	
		
			
				|  |  | +E.g, from the root of the gRPC [Git repository](https://github.com/google/grpc)
 | 
	
		
			
				|  |  |  ```sh
 | 
	
		
			
				|  |  |  $ cd ../..
 | 
	
		
			
				|  |  |  $ make && sudo make install
 | 
	
		
			
				|  |  |  ```
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -- Install Ruby 2.1. Consider doing this with [RVM](http://rvm.io), it's a nice way of controlling
 | 
	
		
			
				|  |  | +- Install Ruby 2.x. Consider doing this with [RVM](http://rvm.io), it's a nice way of controlling
 | 
	
		
			
				|  |  |    the exact ruby version that's used.
 | 
	
		
			
				|  |  |  ```sh
 | 
	
		
			
				|  |  |  $ command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
 | 
	
		
			
				|  |  | -$ \curl -sSL https://get.rvm.io | bash -s stable --ruby=ruby-2.1
 | 
	
		
			
				|  |  | +$ \curl -sSL https://get.rvm.io | bash -s stable --ruby=ruby-2
 | 
	
		
			
				|  |  |  $
 | 
	
		
			
				|  |  |  $ # follow the instructions to ensure that your're using the latest stable version of Ruby
 | 
	
		
			
				|  |  |  $ # and that the rvm command is installed
 | 
	
		
			
				|  |  |  ```
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  - Make sure your run `source $HOME/.rvm/scripts/rvm` as instructed to complete the set up of RVM
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  - Install [bundler](http://bundler.io/)
 | 
	
	
		
			
				|  | @@ -53,30 +49,36 @@ $ # and that the rvm command is installed
 | 
	
		
			
				|  |  |  $ gem install bundler
 | 
	
		
			
				|  |  |  ```
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -- Finally, install the gRPC gem locally.
 | 
	
		
			
				|  |  | +- Finally,  build and install the gRPC gem locally.
 | 
	
		
			
				|  |  |  ```sh
 | 
	
		
			
				|  |  |  $ # from this directory
 | 
	
		
			
				|  |  |  $ bundle install  # creates the ruby bundle, including building the grpc extension
 | 
	
		
			
				|  |  |  $ rake  # runs the unit tests, see rake -T for other options
 | 
	
		
			
				|  |  |  ```
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +DOCUMENTATION
 | 
	
		
			
				|  |  | +-------------
 | 
	
		
			
				|  |  | +- rubydoc for the gRPC gem is available online at [rubydoc][].
 | 
	
		
			
				|  |  | +- the gRPC Ruby reference documentation is available online at [grpc.io][]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  CONTENTS
 | 
	
		
			
				|  |  |  --------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -Directory structure is the layout for [ruby extensions](http://guides.rubygems.org/gems-with-extensions/)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -- ext:
 | 
	
		
			
				|  |  | -  the gRPC ruby extension
 | 
	
		
			
				|  |  | -- lib:
 | 
	
		
			
				|  |  | -  the entrypoint gRPC ruby library to be used in a 'require' statement
 | 
	
		
			
				|  |  | -- spec:
 | 
	
		
			
				|  |  | -  Rspec unittest
 | 
	
		
			
				|  |  | -- bin:
 | 
	
		
			
				|  |  | -  example gRPC clients and servers, e.g,
 | 
	
		
			
				|  |  | -```ruby
 | 
	
		
			
				|  |  | -stub = Math::Math::Stub.new('my.test.math.server.com:8080')
 | 
	
		
			
				|  |  | -req = Math::DivArgs.new(dividend: 7, divisor: 3)
 | 
	
		
			
				|  |  | -logger.info("div(7/3): req=#{req.inspect}")
 | 
	
		
			
				|  |  | -resp = stub.div(req)
 | 
	
		
			
				|  |  | -logger.info("Answer: #{resp.inspect}")
 | 
	
		
			
				|  |  | -```
 | 
	
		
			
				|  |  | +Directory structure is the layout for [ruby extensions][]
 | 
	
		
			
				|  |  | +- ext: the gRPC ruby extension
 | 
	
		
			
				|  |  | +- lib: the entrypoint gRPC ruby library to be used in a 'require' statement
 | 
	
		
			
				|  |  | +- spec: Rspec unittests
 | 
	
		
			
				|  |  | +- bin: example gRPC clients and servers, e.g,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  ```ruby
 | 
	
		
			
				|  |  | +  stub = Math::Math::Stub.new('my.test.math.server.com:8080')
 | 
	
		
			
				|  |  | +  req = Math::DivArgs.new(dividend: 7, divisor: 3)
 | 
	
		
			
				|  |  | +  GRPC.logger.info("div(7/3): req=#{req.inspect}")
 | 
	
		
			
				|  |  | +  resp = stub.div(req)
 | 
	
		
			
				|  |  | +  GRPC.logger.info("Answer: #{resp.inspect}")
 | 
	
		
			
				|  |  | +  ```
 | 
	
		
			
				|  |  | +[homebrew]:http://brew.sh
 | 
	
		
			
				|  |  | +[linuxbrew]:https://github.com/Homebrew/linuxbrew#installation
 | 
	
		
			
				|  |  | +[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install
 | 
	
		
			
				|  |  | +[ruby extensions]:http://guides.rubygems.org/gems-with-extensions/
 | 
	
		
			
				|  |  | +[rubydoc]: http://www.rubydoc.info/gems/grpc
 | 
	
		
			
				|  |  | +[grpc.io]: http://www.grpc.io/docs/installation/ruby.html
 |