protobuf 3.3.6 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +48 -0
  3. data/.rubocop_todo.yml +79 -0
  4. data/.travis.yml +12 -4
  5. data/Rakefile +14 -11
  6. data/bin/protoc-gen-ruby +0 -1
  7. data/bin/rpc_server +1 -0
  8. data/install-protobuf.sh +8 -0
  9. data/lib/protobuf.rb +30 -24
  10. data/lib/protobuf/cli.rb +35 -35
  11. data/lib/protobuf/code_generator.rb +11 -8
  12. data/lib/protobuf/decoder.rb +4 -5
  13. data/lib/protobuf/deprecation.rb +20 -0
  14. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
  15. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
  16. data/lib/protobuf/encoder.rb +9 -4
  17. data/lib/protobuf/enum.rb +38 -54
  18. data/lib/protobuf/field.rb +2 -2
  19. data/lib/protobuf/field/base_field.rb +28 -32
  20. data/lib/protobuf/field/bool_field.rb +4 -4
  21. data/lib/protobuf/field/bytes_field.rb +5 -4
  22. data/lib/protobuf/field/double_field.rb +0 -1
  23. data/lib/protobuf/field/enum_field.rb +4 -7
  24. data/lib/protobuf/field/field_array.rb +3 -4
  25. data/lib/protobuf/field/fixed32_field.rb +1 -1
  26. data/lib/protobuf/field/fixed64_field.rb +0 -1
  27. data/lib/protobuf/field/float_field.rb +0 -1
  28. data/lib/protobuf/field/int32_field.rb +0 -1
  29. data/lib/protobuf/field/int64_field.rb +0 -1
  30. data/lib/protobuf/field/integer_field.rb +0 -1
  31. data/lib/protobuf/field/message_field.rb +2 -3
  32. data/lib/protobuf/field/sfixed32_field.rb +0 -1
  33. data/lib/protobuf/field/sfixed64_field.rb +0 -1
  34. data/lib/protobuf/field/signed_integer_field.rb +0 -1
  35. data/lib/protobuf/field/sint32_field.rb +0 -1
  36. data/lib/protobuf/field/sint64_field.rb +0 -1
  37. data/lib/protobuf/field/string_field.rb +0 -1
  38. data/lib/protobuf/field/uint32_field.rb +0 -1
  39. data/lib/protobuf/field/uint64_field.rb +0 -1
  40. data/lib/protobuf/field/varint_field.rb +0 -1
  41. data/lib/protobuf/generators/base.rb +1 -2
  42. data/lib/protobuf/generators/enum_generator.rb +1 -2
  43. data/lib/protobuf/generators/extension_generator.rb +1 -2
  44. data/lib/protobuf/generators/field_generator.rb +4 -5
  45. data/lib/protobuf/generators/file_generator.rb +22 -27
  46. data/lib/protobuf/generators/group_generator.rb +15 -16
  47. data/lib/protobuf/generators/message_generator.rb +13 -14
  48. data/lib/protobuf/generators/printable.rb +9 -10
  49. data/lib/protobuf/generators/service_generator.rb +1 -2
  50. data/lib/protobuf/lifecycle.rb +20 -33
  51. data/lib/protobuf/logging.rb +4 -6
  52. data/lib/protobuf/message.rb +22 -16
  53. data/lib/protobuf/message/fields.rb +14 -17
  54. data/lib/protobuf/message/serialization.rb +6 -5
  55. data/lib/protobuf/rpc/buffer.rb +10 -12
  56. data/lib/protobuf/rpc/client.rb +12 -12
  57. data/lib/protobuf/rpc/connectors/base.rb +4 -3
  58. data/lib/protobuf/rpc/connectors/common.rb +15 -17
  59. data/lib/protobuf/rpc/connectors/socket.rb +2 -2
  60. data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
  61. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
  62. data/lib/protobuf/rpc/env.rb +12 -12
  63. data/lib/protobuf/rpc/error.rb +1 -1
  64. data/lib/protobuf/rpc/error/client_error.rb +4 -4
  65. data/lib/protobuf/rpc/error/server_error.rb +6 -6
  66. data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
  67. data/lib/protobuf/rpc/middleware/logger.rb +3 -3
  68. data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
  69. data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
  70. data/lib/protobuf/rpc/rpc.pb.rb +2 -0
  71. data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
  72. data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
  73. data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
  74. data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
  75. data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
  76. data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
  77. data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
  78. data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
  79. data/lib/protobuf/rpc/service.rb +15 -15
  80. data/lib/protobuf/rpc/service_directory.rb +7 -11
  81. data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
  82. data/lib/protobuf/rpc/service_filters.rb +27 -28
  83. data/lib/protobuf/rpc/stat.rb +4 -7
  84. data/lib/protobuf/socket.rb +0 -1
  85. data/lib/protobuf/tasks/compile.rake +2 -2
  86. data/lib/protobuf/version.rb +1 -1
  87. data/protobuf.gemspec +20 -4
  88. data/spec/benchmark/tasks.rb +49 -23
  89. data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
  90. data/spec/encoding/all_types_spec.rb +91 -77
  91. data/spec/encoding/extreme_values_spec.rb +0 -0
  92. data/spec/functional/socket_server_spec.rb +9 -10
  93. data/spec/functional/zmq_server_spec.rb +21 -19
  94. data/spec/lib/protobuf/cli_spec.rb +20 -20
  95. data/spec/lib/protobuf/code_generator_spec.rb +6 -6
  96. data/spec/lib/protobuf/enum_spec.rb +57 -31
  97. data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
  98. data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
  99. data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
  100. data/spec/lib/protobuf/field_spec.rb +3 -6
  101. data/spec/lib/protobuf/generators/base_spec.rb +6 -6
  102. data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
  103. data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
  104. data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
  105. data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
  106. data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
  107. data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
  108. data/spec/lib/protobuf/message_spec.rb +63 -35
  109. data/spec/lib/protobuf/optionable_spec.rb +3 -3
  110. data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
  111. data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
  112. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
  113. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
  114. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
  115. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
  116. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
  117. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
  118. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
  119. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
  120. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
  121. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
  122. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
  123. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
  124. data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
  125. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
  126. data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
  127. data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
  128. data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
  129. data/spec/lib/protobuf_spec.rb +9 -9
  130. data/spec/spec_helper.rb +7 -19
  131. data/spec/support/server.rb +29 -59
  132. data/spec/support/test/defaults.pb.rb +2 -0
  133. data/spec/support/test/enum.pb.rb +2 -0
  134. data/spec/support/test/extended.pb.rb +2 -0
  135. data/spec/support/test/google_unittest_import.pb.rb +2 -0
  136. data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
  137. data/spec/support/test/multi_field_extensions.pb.rb +2 -0
  138. data/spec/support/test/resource.pb.rb +2 -0
  139. data/spec/support/test/resource_service.rb +17 -20
  140. metadata +153 -112
  141. data/lib/protobuf/deprecator.rb +0 -42
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8975f51cd8e6d910cbe547b32bc5107fa4d197a5
4
+ data.tar.gz: 3f39633e344de3b196a11b8182e85884ddb678e1
5
+ SHA512:
6
+ metadata.gz: 8b7ca982042d842556d2f239cd0f5a70c33905efa33b1269baf8c29f6db2cafc64ee9efdc114dc9b702a07d25c13a8ded348552f94e259483f36f4ca4253e889
7
+ data.tar.gz: dc741258194bc09864a45ff2d6824544095f60c7658fefeb4e062d2ccdfb9684bd511254c351c0e8e8574d30f75877bff1a4c7ad1f4ab569d5baae0857ebceb8
@@ -0,0 +1,48 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Lint/EndAlignment:
4
+ AlignWith: variable
5
+
6
+ Lint/Loop:
7
+ Enabled: false
8
+
9
+ Style/CaseIndentation:
10
+ IndentWhenRelativeTo: end
11
+
12
+ Style/ClassAndModuleChildren:
13
+ Exclude:
14
+ - '**/*.pb.rb'
15
+
16
+ Style/EmptyLineBetweenDefs:
17
+ AllowAdjacentOneLineDefs: true
18
+
19
+ Style/EmptyLines:
20
+ Exclude:
21
+ - '**/*.pb.rb'
22
+
23
+ Style/FileName:
24
+ Exclude:
25
+ - '**/protoc-gen-ruby*'
26
+
27
+ Style/GuardClause:
28
+ MinBodyLength: 4
29
+
30
+ Style/HashSyntax:
31
+ EnforcedStyle: hash_rockets
32
+
33
+ Style/IndentHash:
34
+ EnforcedStyle: consistent
35
+
36
+ Style/Semicolon:
37
+ AllowAsExpressionSeparator: true
38
+
39
+ Style/TrailingBlankLines:
40
+ Exclude:
41
+ - '**/*.pb.rb'
42
+
43
+ Style/TrailingComma:
44
+ EnforcedStyleForMultiline: comma
45
+
46
+ Style/TrivialAccessors:
47
+ AllowDSLWriters: true
48
+ AllowPredicates: true
@@ -0,0 +1,79 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-11-24 09:44:26 -0800 using RuboCop version 0.27.1.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 28
9
+ Metrics/AbcSize:
10
+ Max: 59
11
+
12
+ # Offense count: 3
13
+ Metrics/BlockNesting:
14
+ Max: 5
15
+
16
+ # Offense count: 9
17
+ # Configuration parameters: CountComments.
18
+ Metrics/ClassLength:
19
+ Max: 233
20
+
21
+ # Offense count: 3
22
+ Metrics/CyclomaticComplexity:
23
+ Max: 11
24
+
25
+ # Offense count: 508
26
+ # Configuration parameters: AllowURI, URISchemes.
27
+ Metrics/LineLength:
28
+ Max: 196
29
+
30
+ # Offense count: 48
31
+ # Configuration parameters: CountComments.
32
+ Metrics/MethodLength:
33
+ Max: 45
34
+
35
+ # Offense count: 2
36
+ # Configuration parameters: CountKeywordArgs.
37
+ Metrics/ParameterLists:
38
+ Max: 6
39
+
40
+ # Offense count: 2
41
+ Metrics/PerceivedComplexity:
42
+ Max: 12
43
+
44
+ # Offense count: 216
45
+ Style/Documentation:
46
+ Enabled: false
47
+
48
+ # Offense count: 15
49
+ Style/DoubleNegation:
50
+ Enabled: false
51
+
52
+ # Offense count: 100
53
+ # Cop supports --auto-correct.
54
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
55
+ Style/EmptyLinesAroundClassBody:
56
+ Enabled: false
57
+
58
+ # Offense count: 66
59
+ # Cop supports --auto-correct.
60
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
61
+ Style/EmptyLinesAroundModuleBody:
62
+ Enabled: false
63
+
64
+ # Offense count: 53
65
+ # Cop supports --auto-correct.
66
+ Style/NumericLiterals:
67
+ MinDigits: 21
68
+
69
+ # Offense count: 464
70
+ # Cop supports --auto-correct.
71
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
72
+ Style/StringLiterals:
73
+ Enabled: false
74
+
75
+ # Offense count: 4
76
+ # Cop supports --auto-correct.
77
+ # Configuration parameters: WordRegex.
78
+ Style/WordArray:
79
+ MinSize: 2
@@ -1,9 +1,17 @@
1
+ before_install:
2
+ - sudo apt-get update -qq
3
+ - sudo apt-get install -y libzmq3-dev
4
+ - sudo ./install-protobuf.sh
1
5
  language: ruby
2
6
  rvm:
3
- - "1.9.3"
4
- - "2.0.0"
5
- - "2.1.1"
6
- script: NO_COMPILE_TEST_PROTOS=1 bundle exec rake spec/lib
7
+ - 1.9.3
8
+ - 2.0.0
9
+ - 2.1
10
+ - jruby
11
+ - rbx-2
12
+ matrix:
13
+ allow_failures:
14
+ - rvm: rbx-2
7
15
  notifications:
8
16
  webhooks:
9
17
  urls:
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- $: << ::File.expand_path('../', __FILE__)
2
- $: << ::File.expand_path('../spec', __FILE__)
1
+ $LOAD_PATH << ::File.expand_path('../', __FILE__)
2
+ $LOAD_PATH << ::File.expand_path('../spec', __FILE__)
3
3
 
4
4
  require 'fileutils'
5
5
  require 'rubygems'
@@ -8,31 +8,34 @@ require 'bundler/gem_tasks'
8
8
  require 'benchmark/tasks'
9
9
 
10
10
  require 'rspec/core/rake_task'
11
-
12
- desc 'Default: run specs.'
13
- task :default => :spec
11
+ require 'rubocop/rake_task'
14
12
 
15
13
  RSpec::Core::RakeTask.new(:spec)
14
+ RuboCop::RakeTask.new
15
+
16
+ task :default => ['compile:spec', 'compile:rpc', :spec, :rubocop]
16
17
 
17
18
  desc 'Run specs'
18
19
  namespace :compile do
19
20
 
20
21
  desc 'Compile spec protos in spec/supprt/ directory'
21
- task :spec do |task, args|
22
+ task :spec do
22
23
  proto_path = ::File.expand_path('../spec/support/', __FILE__)
23
- cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{proto_path} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
24
+ proto_files = Dir[File.join(proto_path, '**', '*.proto')]
25
+ cmd = %(protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{proto_path} -I #{proto_path} #{proto_files.join(' ')})
24
26
 
25
27
  puts cmd
26
- exec(cmd)
28
+ system(cmd)
27
29
  end
28
30
 
29
31
  desc 'Compile rpc protos in protos/ directory'
30
- task :rpc do |task, args|
32
+ task :rpc do
31
33
  proto_path = ::File.expand_path('../proto', __FILE__)
34
+ proto_files = Dir[File.join(proto_path, '**', '*.proto')]
32
35
  output_dir = ::File.expand_path('../tmp/rpc', __FILE__)
33
36
  ::FileUtils.mkdir_p(output_dir)
34
37
 
35
- cmd = %Q{protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{output_dir} -I #{proto_path} #{File.join(proto_path, '**', '*.proto')}}
38
+ cmd = %(protoc --plugin=./bin/protoc-gen-ruby --ruby_out=#{output_dir} -I #{proto_path} #{proto_files.join(' ')})
36
39
 
37
40
  puts cmd
38
41
  system(cmd)
@@ -41,7 +44,7 @@ namespace :compile do
41
44
  'tmp/rpc/dynamic_discovery.pb.rb' => 'lib/protobuf/rpc',
42
45
  'tmp/rpc/rpc.pb.rb' => 'lib/protobuf/rpc',
43
46
  'tmp/rpc/google/protobuf/descriptor.pb.rb' => 'lib/protobuf/descriptors/google/protobuf',
44
- 'tmp/rpc/google/protobuf/compiler/plugin.pb.rb' => 'lib/protobuf/descriptors/google/protobuf/compiler'
47
+ 'tmp/rpc/google/protobuf/compiler/plugin.pb.rb' => 'lib/protobuf/descriptors/google/protobuf/compiler',
45
48
  }
46
49
 
47
50
  files.each_pair do |source_file, destination_dir|
@@ -14,4 +14,3 @@ request_bytes = STDIN.read
14
14
  code_generator = ::Protobuf::CodeGenerator.new(request_bytes)
15
15
  response_bytes = code_generator.response_bytes
16
16
  STDOUT.print(response_bytes)
17
-
@@ -2,3 +2,4 @@
2
2
 
3
3
  require 'protobuf/cli'
4
4
  ::Protobuf::CLI.start(ARGV)
5
+ exit
@@ -0,0 +1,8 @@
1
+ set -ex
2
+
3
+ basename=protobuf-2.6.0
4
+ tarball=$basename.tar.bz2
5
+
6
+ wget https://protobuf.googlecode.com/svn/rc/$tarball
7
+ tar -xvf $tarball
8
+ cd $basename && ./configure --prefix=/usr && make && make install
@@ -5,32 +5,32 @@ require 'stringio'
5
5
 
6
6
  require 'active_support/core_ext/object/blank'
7
7
  require 'active_support/core_ext/object/try'
8
- require 'active_support/notifications'
9
8
  require 'active_support/inflector'
10
9
  require 'active_support/json'
10
+ require 'active_support/notifications'
11
+
12
+ require 'protobuf/deprecation'
11
13
 
12
14
  module Protobuf
13
15
 
14
16
  # See Protobuf#connector_type documentation.
15
- CONNECTORS = [ :socket, :zmq ].freeze
17
+ CONNECTORS = [:socket, :zmq].freeze
16
18
 
17
19
  # Default is Socket as it has no external dependencies.
18
20
  DEFAULT_CONNECTOR = :socket
19
21
 
20
22
  module_function
21
23
 
22
- # Client Host
23
- #
24
- # Default: `hostname` of the system
25
- #
26
- # The name or address of the host to use during client RPC calls.
27
- def self.client_host
28
- @_client_host ||= `hostname`.chomp
24
+ class << self
25
+ # Client Host
26
+ #
27
+ # Default: `hostname` of the system
28
+ #
29
+ # The name or address of the host to use during client RPC calls.
30
+ attr_accessor :client_host
29
31
  end
30
32
 
31
- def self.client_host=(host)
32
- @_client_host = host
33
- end
33
+ self.client_host = Socket.gethostname
34
34
 
35
35
  # Connector Type
36
36
  #
@@ -39,12 +39,12 @@ module Protobuf
39
39
  # Symbol value which denotes the type of connector to use
40
40
  # during client requests to an RPC server.
41
41
  def self.connector_type
42
- @_connector_type ||= DEFAULT_CONNECTOR
42
+ @connector_type ||= DEFAULT_CONNECTOR
43
43
  end
44
44
 
45
45
  def self.connector_type=(type)
46
- raise ArgumentError, 'Invalid connector type given' unless CONNECTORS.include?(type)
47
- @_connector_type = type
46
+ fail ArgumentError, 'Invalid connector type given' unless CONNECTORS.include?(type)
47
+ @connector_type = type
48
48
  end
49
49
 
50
50
  # GC Pause during server requests
@@ -56,12 +56,19 @@ module Protobuf
56
56
  # Once the request is completed, the GC is enabled again.
57
57
  # This optomization provides a huge boost in speed to rpc requests.
58
58
  def self.gc_pause_server_request?
59
- return @_gc_pause_server_request unless @_gc_pause_server_request.nil?
59
+ return @gc_pause_server_request unless @gc_pause_server_request.nil?
60
60
  self.gc_pause_server_request = false
61
61
  end
62
62
 
63
63
  def self.gc_pause_server_request=(value)
64
- @_gc_pause_server_request = !!value
64
+ @gc_pause_server_request = !!value
65
+ end
66
+
67
+ def self.deprecator
68
+ @deprecator ||= Deprecation.new('4.0', to_s).tap do |deprecation|
69
+ deprecation.silenced = ENV.key?('PB_IGNORE_DEPRECATIONS')
70
+ deprecation.behavior = :stderr
71
+ end
65
72
  end
66
73
 
67
74
  # Print Deprecation Warnings
@@ -75,12 +82,11 @@ module Protobuf
75
82
  #
76
83
  # The rpc_server option will override the ENV setting.
77
84
  def self.print_deprecation_warnings?
78
- return @_print_deprecation_warnings unless @_print_deprecation_warnings.nil?
79
- self.print_deprecation_warnings = ENV.key?('PB_IGNORE_DEPRECATIONS') ? false : true
85
+ !deprecator.silenced
80
86
  end
81
87
 
82
88
  def self.print_deprecation_warnings=(value)
83
- @_print_deprecation_warnings = !!value
89
+ deprecator.silenced = !value
84
90
  end
85
91
 
86
92
  # Permit unknown field on Message initialization
@@ -90,11 +96,11 @@ module Protobuf
90
96
  # Simple boolean to define whether we want to permit unknown fields
91
97
  # on Message intialization; otherwise a ::Protobuf::FieldNotDefinedError is thrown.
92
98
  def self.ignore_unknown_fields?
93
- !defined?(@_ignore_unknown_fields) || @_ignore_unknown_fields
99
+ !defined?(@ignore_unknown_fields) || @ignore_unknown_fields
94
100
  end
95
101
 
96
102
  def self.ignore_unknown_fields=(value)
97
- @_ignore_unknown_fields = !!value
103
+ @ignore_unknown_fields = !!value
98
104
  end
99
105
  end
100
106
 
@@ -102,9 +108,9 @@ unless ENV.key?('PB_NO_NETWORKING')
102
108
  require 'protobuf/rpc/client'
103
109
  require 'protobuf/rpc/service'
104
110
 
105
- env_connector_type = ENV.fetch('PB_CLIENT_TYPE') {
111
+ env_connector_type = ENV.fetch('PB_CLIENT_TYPE') do
106
112
  ::Protobuf::DEFAULT_CONNECTOR
107
- }.to_s.downcase.strip.to_sym
113
+ end.to_s.downcase.strip.to_sym
108
114
 
109
115
  if ::Protobuf::CONNECTORS.include?(env_connector_type)
110
116
  require "protobuf/#{env_connector_type}"
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/hash/keys'
2
+
1
3
  require 'thor'
2
4
  require 'protobuf/version'
3
5
  require 'protobuf/logging'
@@ -9,7 +11,11 @@ module Protobuf
9
11
  include ::Thor::Actions
10
12
  include ::Protobuf::Logging
11
13
 
12
- attr_accessor :runner, :mode
14
+ attr_accessor :runner, :mode, :exit_requested
15
+
16
+ no_commands do
17
+ alias_method :exit_requested?, :exit_requested
18
+ end
13
19
 
14
20
  default_task :start
15
21
 
@@ -100,33 +106,34 @@ module Protobuf
100
106
  # Re-write the $0 var to have a nice process name in ps.
101
107
  def configure_process_name(app_file)
102
108
  debug_say('Configuring process name')
103
- $0 = "rpc_server --#{@runner_mode} #{options.host}:#{options.port} #{app_file}"
109
+ $0 = "rpc_server --#{mode} #{options.host}:#{options.port} #{app_file}"
104
110
  end
105
111
 
106
112
  # Configure the mode of the server and the runner class.
107
113
  def configure_runner_mode
108
114
  debug_say('Configuring runner mode')
109
115
 
110
- if multi_mode?
116
+ self.mode = if multi_mode?
111
117
  say('WARNING: You have provided multiple mode options. Defaulting to socket mode.', :yellow)
112
- @runner_mode = :socket
118
+ :socket
113
119
  elsif options.zmq?
114
- @runner_mode = :zmq
115
- else
120
+ :zmq
121
+ else # rubocop:disable Style/ElseAlignment
122
+ # above: https://github.com/bbatsov/rubocop/pull/1470/files
116
123
  case server_type = ENV["PB_SERVER_TYPE"]
117
124
  when nil, /socket/i
118
- @runner_mode = :socket
125
+ :socket
119
126
  when /zmq/i
120
- @runner_mode = :zmq
127
+ :zmq
121
128
  else
122
129
  say "WARNING: You have provided incorrect option 'PB_SERVER_TYPE=#{server_type}'. Defaulting to socket mode.", :yellow
123
- @runner_mode = :socket
130
+ :socket
124
131
  end
125
132
  end
126
133
  end
127
134
 
128
135
  # Configure signal traps.
129
- # TODO add signal handling for hot-reloading the application.
136
+ # TODO: add signal handling for hot-reloading the application.
130
137
  def configure_traps
131
138
  debug_say('Configuring traps')
132
139
 
@@ -137,7 +144,7 @@ module Protobuf
137
144
  debug_say("Registering trap for exit signal #{signal}", :blue)
138
145
 
139
146
  trap(signal) do
140
- @exit_requested = true
147
+ self.exit_requested = true
141
148
  shutdown_server
142
149
  end
143
150
  end
@@ -145,15 +152,15 @@ module Protobuf
145
152
 
146
153
  # Create the runner for the configured mode
147
154
  def create_runner
148
- debug_say("Creating #{@runner_mode} runner")
149
- @runner = case @runner_mode
150
- when :zmq
151
- create_zmq_runner
152
- when :socket
153
- create_socket_runner
154
- else
155
- say_and_exit("Unknown runner mode: #{@runner_mode}")
156
- end
155
+ debug_say("Creating #{mode} runner")
156
+ self.runner = case mode
157
+ when :zmq
158
+ create_zmq_runner
159
+ when :socket
160
+ create_socket_runner
161
+ else
162
+ say_and_exit("Unknown runner mode: #{mode}")
163
+ end
157
164
  end
158
165
 
159
166
  # Say something if we're in debug mode.
@@ -161,10 +168,6 @@ module Protobuf
161
168
  say(message, color) if options.debug?
162
169
  end
163
170
 
164
- def exit_requested?
165
- !!@exit_requested
166
- end
167
-
168
171
  # Internal helper to determine if the modes are multi-set which is not valid.
169
172
  def multi_mode?
170
173
  options.zmq? && options.socket?
@@ -179,8 +182,7 @@ module Protobuf
179
182
  end
180
183
 
181
184
  def runner_options
182
- # Symbolize keys
183
- opt = options.inject({}) { |h, (k, v)| h[k.to_sym] = v; h }
185
+ opt = options.symbolize_keys
184
186
 
185
187
  opt[:workers_only] = (!!ENV['PB_WORKERS_ONLY']) || options.workers_only
186
188
 
@@ -206,18 +208,18 @@ module Protobuf
206
208
  def create_socket_runner
207
209
  require 'protobuf/socket'
208
210
 
209
- @runner = ::Protobuf::Rpc::SocketRunner.new(runner_options)
211
+ self.runner = ::Protobuf::Rpc::SocketRunner.new(runner_options)
210
212
  end
211
213
 
212
214
  def create_zmq_runner
213
215
  require 'protobuf/zmq'
214
216
 
215
- @runner = ::Protobuf::Rpc::ZmqRunner.new(runner_options)
217
+ self.runner = ::Protobuf::Rpc::ZmqRunner.new(runner_options)
216
218
  end
217
219
 
218
220
  def shutdown_server
219
221
  logger.info { 'RPC Server shutting down...' }
220
- @runner.try(:stop)
222
+ runner.stop
221
223
  ::Protobuf::Rpc::ServiceDirectory.instance.stop
222
224
  end
223
225
 
@@ -225,17 +227,15 @@ module Protobuf
225
227
  def start_server
226
228
  debug_say('Running server')
227
229
 
228
- @runner.run do
229
- logger.info {
230
- "pid #{::Process.pid} -- #{@runner_mode} RPC Server listening at #{options.host}:#{options.port}"
231
- }
230
+ runner.run do
231
+ logger.info do
232
+ "pid #{::Process.pid} -- #{mode} RPC Server listening at #{options.host}:#{options.port}"
233
+ end
232
234
 
233
235
  ::ActiveSupport::Notifications.instrument("after_server_bind")
234
236
  end
235
237
 
236
238
  logger.info { 'Shutdown complete' }
237
-
238
- exit 0
239
239
  end
240
240
  end
241
241
  end