|  | @@ -7,8 +7,51 @@ we recommend using protoc's Ruby generation support with .proto files. The
 | 
	
		
			
				|  |  |  build process in this directory only installs the extension; you need to
 | 
	
		
			
				|  |  |  install protoc as well to have Ruby code generation functionality.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -Installation
 | 
	
		
			
				|  |  | -------------
 | 
	
		
			
				|  |  | +Installation from Gem
 | 
	
		
			
				|  |  | +---------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +When we release a version of Protocol Buffers, we will upload a Gem to
 | 
	
		
			
				|  |  | +[RubyGems](https://www.rubygems.org/). To use this pre-packaged gem, simply
 | 
	
		
			
				|  |  | +install it as you would any other gem:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $ gem install [--prerelease] google-protobuf
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +The `--pre` flag is necessary if we have not yet made a non-alpha/beta release
 | 
	
		
			
				|  |  | +of the Ruby extension; it allows `gem` to consider these "pre-release"
 | 
	
		
			
				|  |  | +alpha/beta versions.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Once the gem is installed, you may or may not need `protoc`. If you write your
 | 
	
		
			
				|  |  | +message type descriptions directly in the Ruby DSL, you do not need it.
 | 
	
		
			
				|  |  | +However, if you wish to generate the Ruby DSL from a `.proto` file, you will
 | 
	
		
			
				|  |  | +also want to install Protocol Buffers itself, as described in this repository's
 | 
	
		
			
				|  |  | +main `README` file. The version of `protoc` included in the latest release
 | 
	
		
			
				|  |  | +supports the `--ruby_out` option to generate Ruby code.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +A simple example of using the Ruby extension follows. More extensive
 | 
	
		
			
				|  |  | +documentation may be found in the RubyDoc comments (`call-seq` tags) in the
 | 
	
		
			
				|  |  | +source, and we plan to release separate, more detailed, documentation at a
 | 
	
		
			
				|  |  | +later date.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    require 'google/protobuf'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # generated from my_proto_types.proto with protoc:
 | 
	
		
			
				|  |  | +    #  $ protoc --ruby_out=. my_proto_types.proto
 | 
	
		
			
				|  |  | +    require 'my_proto_types'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    mymessage = MyTestMessage.new(:field1 => 42, :field2 => ["a", "b", "c"])
 | 
	
		
			
				|  |  | +    mymessage.field1 = 43
 | 
	
		
			
				|  |  | +    mymessage.field2.push("d")
 | 
	
		
			
				|  |  | +    mymessage.field3 = SubMessage.new(:foo => 100)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    encoded_data = MyTestMessage.encode(mymessage)
 | 
	
		
			
				|  |  | +    decoded = MyTestMessage.decode(encoded_data)
 | 
	
		
			
				|  |  | +    assert decoded == mymessage
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    puts "JSON:"
 | 
	
		
			
				|  |  | +    puts MyTestMessage.encode_json(mymessage)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Installation from Source (Building Gem)
 | 
	
		
			
				|  |  | +---------------------------------------
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  To build this Ruby extension, you will need:
 | 
	
		
			
				|  |  |  
 |