gruf 2.0.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +8 -0
 - data/README.md +6 -1
 - data/lib/gruf/controllers/request.rb +17 -0
 - data/lib/gruf/interceptors/registry.rb +30 -5
 - data/lib/gruf/server.rb +56 -2
 - data/lib/gruf/version.rb +1 -1
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0c2a05e3aed4e246d1e0de691d1b9ee25fe33efd
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: a829923c5dd79579525e2034e6b3dabc995f1b20
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ada2953033d6ca5850c35f5f63a59e86489d1c55bd909e72c73d155c7348f32bffc3168531bcc00f548c06f3f75ea480616b5a20370fb3f3708c12d3f5cb5b9e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 317a912622dc017fc6568bb66aeace92a620175f2cb6e99047f320777b4b9b7f805ef1ce39039650d6b0074a105b0da460c354b5a22f33a6c9eb2cf97bb13e02
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -2,6 +2,14 @@ Changelog for the gruf gem. This includes internal history before the gem was ma 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ### Pending release
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            ### 2.1.0
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            - Add ability to list, clear, insert before, insert after, and remove to a server's interceptor
         
     | 
| 
      
 8 
     | 
    
         
            +
            registry
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Ensure interceptors and services cannot be adjusted on the server after it starts to 
         
     | 
| 
      
 10 
     | 
    
         
            +
            prevent threading issues
         
     | 
| 
      
 11 
     | 
    
         
            +
            - [#36], [#37] Adds `response_class`, `request_class`, and `service` accessors to controller request
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       5 
13 
     | 
    
         
             
            ### 2.0.3
         
     | 
| 
       6 
14 
     | 
    
         | 
| 
       7 
15 
     | 
    
         
             
            - Fix regression [#35] where gruf was not able to be loaded outside of a Rails application
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -17,7 +17,7 @@ up fast and efficiently at scale. Some of its features include: 
     | 
|
| 
       17 
17 
     | 
    
         
             
              still preserving gRPC BadStatus codes
         
     | 
| 
       18 
18 
     | 
    
         
             
            * Server and client execution timings in responses
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
            gruf currently has active support for gRPC 1.4.x-1. 
     | 
| 
      
 20 
     | 
    
         
            +
            gruf currently has active support for gRPC 1.4.x-1.8.x. gruf is compatible and tested with Ruby 2.2,
         
     | 
| 
       21 
21 
     | 
    
         
             
            2.3, and 2.4. gruf is also not [Rails](https://github.com/rails/rails)-specific, and can be used in any 
         
     | 
| 
       22 
22 
     | 
    
         
             
            Ruby framework (such as [Grape](https://github.com/ruby-grape/grape), for instance).
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
         @@ -239,6 +239,10 @@ Gruf.configure do |c| 
     | 
|
| 
       239 
239 
     | 
    
         
             
            end
         
     | 
| 
       240 
240 
     | 
    
         
             
            ```
         
     | 
| 
       241 
241 
     | 
    
         | 
| 
      
 242 
     | 
    
         
            +
            By default, the ActiveRecord Connection Reset interceptor and Output Metadata Timing interceptor
         
     | 
| 
      
 243 
     | 
    
         
            +
            are loaded into gruf unless explicitly told not to via the `use_default_interceptors` configuration
         
     | 
| 
      
 244 
     | 
    
         
            +
            parameter.
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
       242 
246 
     | 
    
         
             
            ## Instrumentation
         
     | 
| 
       243 
247 
     | 
    
         | 
| 
       244 
248 
     | 
    
         
             
            gruf comes out of the box with a couple of instrumentation interceptors packed in: 
         
     | 
| 
         @@ -323,6 +327,7 @@ view and clone that shows how to integrate Gruf into an existing Rails applicati 
     | 
|
| 
       323 
327 
     | 
    
         
             
            ### Gruf 3.0
         
     | 
| 
       324 
328 
     | 
    
         | 
| 
       325 
329 
     | 
    
         
             
            * Utilize the new core Ruby interceptors in gRPC 1.7
         
     | 
| 
      
 330 
     | 
    
         
            +
            * Support client interceptors
         
     | 
| 
       326 
331 
     | 
    
         
             
            * Change configuration to an injectable object to ensure thread safety on chained server/client interactions
         
     | 
| 
       327 
332 
     | 
    
         
             
            * Move all references to `Gruf.` configuration into injectable parameters
         
     | 
| 
       328 
333 
     | 
    
         
             
            * Redo server configuration to be fully injectable
         
     | 
| 
         @@ -27,6 +27,8 @@ module Gruf 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  attr_reader :method_key
         
     | 
| 
       28 
28 
     | 
    
         
             
                  # @var [Gruf::Controllers::Request::Type] type
         
     | 
| 
       29 
29 
     | 
    
         
             
                  attr_reader :type
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # @var [Class] service
         
     | 
| 
      
 31 
     | 
    
         
            +
                  attr_reader :service
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         
             
                  delegate :metadata, to: :active_call
         
     | 
| 
       32 
34 
     | 
    
         
             
                  delegate :messages, :client_streamer?, :server_streamer?, :bidi_streamer?, :request_response?, to: :type
         
     | 
| 
         @@ -54,6 +56,7 @@ module Gruf 
     | 
|
| 
       54 
56 
     | 
    
         
             
                    @service = service
         
     | 
| 
       55 
57 
     | 
    
         
             
                    @active_call = active_call
         
     | 
| 
       56 
58 
     | 
    
         
             
                    @message = message
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @rpc_desc = rpc_desc
         
     | 
| 
       57 
60 
     | 
    
         
             
                    @type = Type.new(rpc_desc)
         
     | 
| 
       58 
61 
     | 
    
         
             
                  end
         
     | 
| 
       59 
62 
     | 
    
         | 
| 
         @@ -67,6 +70,20 @@ module Gruf 
     | 
|
| 
       67 
70 
     | 
    
         
             
                    @service.name.underscore.tr('/', '.').gsub('.service', '')
         
     | 
| 
       68 
71 
     | 
    
         
             
                  end
         
     | 
| 
       69 
72 
     | 
    
         | 
| 
      
 73 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 74 
     | 
    
         
            +
                  # @return [Class]
         
     | 
| 
      
 75 
     | 
    
         
            +
                  #
         
     | 
| 
      
 76 
     | 
    
         
            +
                  def response_class
         
     | 
| 
      
 77 
     | 
    
         
            +
                    @rpc_desc.output
         
     | 
| 
      
 78 
     | 
    
         
            +
                  end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # @return [Class]
         
     | 
| 
      
 82 
     | 
    
         
            +
                  #
         
     | 
| 
      
 83 
     | 
    
         
            +
                  def request_class
         
     | 
| 
      
 84 
     | 
    
         
            +
                    @rpc_desc.input
         
     | 
| 
      
 85 
     | 
    
         
            +
                  end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       70 
87 
     | 
    
         
             
                  ##
         
     | 
| 
       71 
88 
     | 
    
         
             
                  # Parse the method signature into a service.method name format
         
     | 
| 
       72 
89 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -28,7 +28,7 @@ module Gruf 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  ##
         
     | 
| 
       29 
29 
     | 
    
         
             
                  # Add an interceptor to the registry
         
     | 
| 
       30 
30 
     | 
    
         
             
                  #
         
     | 
| 
       31 
     | 
    
         
            -
                  # @param [ 
     | 
| 
      
 31 
     | 
    
         
            +
                  # @param [Class] interceptor_class The class of the interceptor to add
         
     | 
| 
       32 
32 
     | 
    
         
             
                  # @param [Hash] options A hash of options to pass into the interceptor during initialization
         
     | 
| 
       33 
33 
     | 
    
         
             
                  #
         
     | 
| 
       34 
34 
     | 
    
         
             
                  def use(interceptor_class, options = {})
         
     | 
| 
         @@ -40,12 +40,25 @@ module Gruf 
     | 
|
| 
       40 
40 
     | 
    
         
             
                    end
         
     | 
| 
       41 
41 
     | 
    
         
             
                  end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
      
 43 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # Remove an interceptor from the registry
         
     | 
| 
      
 45 
     | 
    
         
            +
                  #
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # @param [Class] interceptor_class The interceptor class to remove
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # @raise [InterceptorNotFoundError] if the interceptor is not found
         
     | 
| 
      
 48 
     | 
    
         
            +
                  #
         
     | 
| 
      
 49 
     | 
    
         
            +
                  def remove(interceptor_class)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    pos = @registry.find_index { |opts| opts.fetch(:klass, '') == interceptor_class }
         
     | 
| 
      
 51 
     | 
    
         
            +
                    raise InterceptorNotFoundError if pos.nil?
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @registry.delete_at(pos)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
       43 
55 
     | 
    
         
             
                  ##
         
     | 
| 
       44 
56 
     | 
    
         
             
                  # Insert an interceptor before another specified interceptor
         
     | 
| 
       45 
57 
     | 
    
         
             
                  #
         
     | 
| 
       46 
     | 
    
         
            -
                  # @param [ 
     | 
| 
       47 
     | 
    
         
            -
                  # @param [ 
     | 
| 
      
 58 
     | 
    
         
            +
                  # @param [Class] before_class The interceptor to insert before
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # @param [Class] interceptor_class The class of the interceptor to add
         
     | 
| 
       48 
60 
     | 
    
         
             
                  # @param [Hash] options A hash of options to pass into the interceptor during initialization
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # @raise [InterceptorNotFoundError] if the before interceptor is not found
         
     | 
| 
       49 
62 
     | 
    
         
             
                  #
         
     | 
| 
       50 
63 
     | 
    
         
             
                  def insert_before(before_class, interceptor_class, options = {})
         
     | 
| 
       51 
64 
     | 
    
         
             
                    interceptors_mutex do
         
     | 
| 
         @@ -62,9 +75,10 @@ module Gruf 
     | 
|
| 
       62 
75 
     | 
    
         
             
                  ##
         
     | 
| 
       63 
76 
     | 
    
         
             
                  # Insert an interceptor after another specified interceptor
         
     | 
| 
       64 
77 
     | 
    
         
             
                  #
         
     | 
| 
       65 
     | 
    
         
            -
                  # @param [ 
     | 
| 
       66 
     | 
    
         
            -
                  # @param [ 
     | 
| 
      
 78 
     | 
    
         
            +
                  # @param [Class] after_class The interceptor to insert after
         
     | 
| 
      
 79 
     | 
    
         
            +
                  # @param [Class] interceptor_class The class of the interceptor to add
         
     | 
| 
       67 
80 
     | 
    
         
             
                  # @param [Hash] options A hash of options to pass into the interceptor during initialization
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # @raise [InterceptorNotFoundError] if the after interceptor is not found
         
     | 
| 
       68 
82 
     | 
    
         
             
                  #
         
     | 
| 
       69 
83 
     | 
    
         
             
                  def insert_after(after_class, interceptor_class, options = {})
         
     | 
| 
       70 
84 
     | 
    
         
             
                    interceptors_mutex do
         
     | 
| 
         @@ -78,6 +92,17 @@ module Gruf 
     | 
|
| 
       78 
92 
     | 
    
         
             
                    end
         
     | 
| 
       79 
93 
     | 
    
         
             
                  end
         
     | 
| 
       80 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                  ##
         
     | 
| 
      
 96 
     | 
    
         
            +
                  # Return a list of the interceptor classes in the registry in their execution order
         
     | 
| 
      
 97 
     | 
    
         
            +
                  #
         
     | 
| 
      
 98 
     | 
    
         
            +
                  # @return [Array<Class>]
         
     | 
| 
      
 99 
     | 
    
         
            +
                  #
         
     | 
| 
      
 100 
     | 
    
         
            +
                  def list
         
     | 
| 
      
 101 
     | 
    
         
            +
                    interceptors_mutex do
         
     | 
| 
      
 102 
     | 
    
         
            +
                      @registry.map { |h| h[:klass] }
         
     | 
| 
      
 103 
     | 
    
         
            +
                    end
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       81 
106 
     | 
    
         
             
                  ##
         
     | 
| 
       82 
107 
     | 
    
         
             
                  # Load and return all interceptors for the given request
         
     | 
| 
       83 
108 
     | 
    
         
             
                  #
         
     | 
    
        data/lib/gruf/server.rb
    CHANGED
    
    | 
         @@ -19,6 +19,8 @@ module Gruf 
     | 
|
| 
       19 
19 
     | 
    
         
             
              # based on configuration values.
         
     | 
| 
       20 
20 
     | 
    
         
             
              #
         
     | 
| 
       21 
21 
     | 
    
         
             
              class Server
         
     | 
| 
      
 22 
     | 
    
         
            +
                class ServerAlreadyStartedError < StandardError; end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       22 
24 
     | 
    
         
             
                include Gruf::Loggable
         
     | 
| 
       23 
25 
     | 
    
         | 
| 
       24 
26 
     | 
    
         
             
                # @return [Integer] The port the server is bound to
         
     | 
| 
         @@ -36,6 +38,7 @@ module Gruf 
     | 
|
| 
       36 
38 
     | 
    
         
             
                  @interceptors = options.fetch(:interceptor_registry, Gruf.interceptors)
         
     | 
| 
       37 
39 
     | 
    
         
             
                  @interceptors = Gruf::Interceptors::Registry.new unless @interceptors.is_a?(Gruf::Interceptors::Registry)
         
     | 
| 
       38 
40 
     | 
    
         
             
                  @services = []
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @started = false
         
     | 
| 
       39 
42 
     | 
    
         
             
                  setup!
         
     | 
| 
       40 
43 
     | 
    
         
             
                end
         
     | 
| 
       41 
44 
     | 
    
         | 
| 
         @@ -58,9 +61,11 @@ module Gruf 
     | 
|
| 
       58 
61 
     | 
    
         
             
                # rubocop:disable Lint/ShadowedException
         
     | 
| 
       59 
62 
     | 
    
         
             
                def start!
         
     | 
| 
       60 
63 
     | 
    
         
             
                  logger.info { 'Booting gRPC Server...' }
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @started = true
         
     | 
| 
       61 
65 
     | 
    
         
             
                  server.run_till_terminated
         
     | 
| 
       62 
66 
     | 
    
         
             
                rescue Interrupt, SignalException, SystemExit
         
     | 
| 
       63 
67 
     | 
    
         
             
                  logger.info { 'Shutting down gRPC server...' }
         
     | 
| 
      
 68 
     | 
    
         
            +
                  @started = false
         
     | 
| 
       64 
69 
     | 
    
         
             
                  server.stop
         
     | 
| 
       65 
70 
     | 
    
         
             
                end
         
     | 
| 
       66 
71 
     | 
    
         
             
                # :nocov:
         
     | 
| 
         @@ -68,21 +73,70 @@ module Gruf 
     | 
|
| 
       68 
73 
     | 
    
         | 
| 
       69 
74 
     | 
    
         
             
                ##
         
     | 
| 
       70 
75 
     | 
    
         
             
                # @param [Class] klass
         
     | 
| 
      
 76 
     | 
    
         
            +
                # @raise [ServerAlreadyStartedError] if the server is already started
         
     | 
| 
       71 
77 
     | 
    
         
             
                #
         
     | 
| 
       72 
78 
     | 
    
         
             
                def add_service(klass)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
       73 
80 
     | 
    
         
             
                  @services << klass unless @services.include?(klass)
         
     | 
| 
       74 
81 
     | 
    
         
             
                end
         
     | 
| 
       75 
82 
     | 
    
         | 
| 
       76 
83 
     | 
    
         
             
                ##
         
     | 
| 
       77 
84 
     | 
    
         
             
                # Add an interceptor to the server
         
     | 
| 
       78 
85 
     | 
    
         
             
                #
         
     | 
| 
       79 
     | 
    
         
            -
                # @param [ 
     | 
| 
       80 
     | 
    
         
            -
                # @param [Hash]
         
     | 
| 
      
 86 
     | 
    
         
            +
                # @param [Class] klass The Interceptor to add to the registry
         
     | 
| 
      
 87 
     | 
    
         
            +
                # @param [Hash] opts A hash of options for the interceptor
         
     | 
| 
      
 88 
     | 
    
         
            +
                # @raise [ServerAlreadyStartedError] if the server is already started
         
     | 
| 
       81 
89 
     | 
    
         
             
                #
         
     | 
| 
       82 
90 
     | 
    
         
             
                def add_interceptor(klass, opts = {})
         
     | 
| 
      
 91 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
       83 
92 
     | 
    
         
             
                  @interceptors.use(klass, opts)
         
     | 
| 
       84 
93 
     | 
    
         
             
                end
         
     | 
| 
       85 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                ##
         
     | 
| 
      
 96 
     | 
    
         
            +
                # @param [Class] before_class The interceptor that you want to add the new interceptor before
         
     | 
| 
      
 97 
     | 
    
         
            +
                # @param [Class] interceptor_class The Interceptor to add to the registry
         
     | 
| 
      
 98 
     | 
    
         
            +
                # @param [Hash] options A hash of options for the interceptor
         
     | 
| 
      
 99 
     | 
    
         
            +
                #
         
     | 
| 
      
 100 
     | 
    
         
            +
                def insert_interceptor_before(before_class, interceptor_class, options = {})
         
     | 
| 
      
 101 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
      
 102 
     | 
    
         
            +
                  @interceptors.insert_before(before_class, interceptor_class, options)
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                ##
         
     | 
| 
      
 106 
     | 
    
         
            +
                # @param [Class] after_class The interceptor that you want to add the new interceptor after
         
     | 
| 
      
 107 
     | 
    
         
            +
                # @param [Class] interceptor_class The Interceptor to add to the registry
         
     | 
| 
      
 108 
     | 
    
         
            +
                # @param [Hash] options A hash of options for the interceptor
         
     | 
| 
      
 109 
     | 
    
         
            +
                #
         
     | 
| 
      
 110 
     | 
    
         
            +
                def insert_interceptor_after(after_class, interceptor_class, options = {})
         
     | 
| 
      
 111 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
      
 112 
     | 
    
         
            +
                  @interceptors.insert_after(after_class, interceptor_class, options)
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                ##
         
     | 
| 
      
 116 
     | 
    
         
            +
                # Return the current list of added interceptor classes
         
     | 
| 
      
 117 
     | 
    
         
            +
                #
         
     | 
| 
      
 118 
     | 
    
         
            +
                # @return [Array<Class>]
         
     | 
| 
      
 119 
     | 
    
         
            +
                #
         
     | 
| 
      
 120 
     | 
    
         
            +
                def list_interceptors
         
     | 
| 
      
 121 
     | 
    
         
            +
                  @interceptors.list
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                ##
         
     | 
| 
      
 125 
     | 
    
         
            +
                # Remove an interceptor from the server
         
     | 
| 
      
 126 
     | 
    
         
            +
                #
         
     | 
| 
      
 127 
     | 
    
         
            +
                def remove_interceptor(klass)
         
     | 
| 
      
 128 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
      
 129 
     | 
    
         
            +
                  @interceptors.remove(klass)
         
     | 
| 
      
 130 
     | 
    
         
            +
                end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                ##
         
     | 
| 
      
 133 
     | 
    
         
            +
                # Clear the interceptor registry of interceptors
         
     | 
| 
      
 134 
     | 
    
         
            +
                #
         
     | 
| 
      
 135 
     | 
    
         
            +
                def clear_interceptors
         
     | 
| 
      
 136 
     | 
    
         
            +
                  raise ServerAlreadyStartedError if @started
         
     | 
| 
      
 137 
     | 
    
         
            +
                  @interceptors.clear
         
     | 
| 
      
 138 
     | 
    
         
            +
                end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
       86 
140 
     | 
    
         
             
                private
         
     | 
| 
       87 
141 
     | 
    
         | 
| 
       88 
142 
     | 
    
         
             
                ##
         
     | 
    
        data/lib/gruf/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: gruf
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Shaun McCormick
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-12- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-12-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       158 
158 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       159 
159 
     | 
    
         
             
            requirements: []
         
     | 
| 
       160 
160 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       161 
     | 
    
         
            -
            rubygems_version: 2.6. 
     | 
| 
      
 161 
     | 
    
         
            +
            rubygems_version: 2.6.12
         
     | 
| 
       162 
162 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       163 
163 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       164 
164 
     | 
    
         
             
            summary: gRPC Ruby Framework
         
     |