protoc-gen-twirp_ruby 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 61fb4daca3b43bb74a7dd7d55604ee44120f94fd414a8e800aec9c75796b1bcd
4
- data.tar.gz: ff8f5d616e451c35df3f3d5439386c8d2f61b1f80df12c396f8b3ff6a77be88d
3
+ metadata.gz: dae48985eff8d4e3133f64234bf45aa141297f9b8f5e0d516f6ff6c7f9e88d11
4
+ data.tar.gz: 8feef99527f54ccae5a134e69a5d8f175afa638666fd7664b468ad65a8162347
5
5
  SHA512:
6
- metadata.gz: 54051cb2108ebf06765b8dd80477b10486bae2db1b79db945ea7e3b10238560d6c0bf84c768799e70c9b22c62bd3976017426d2f8a0d6097088af98b2885bc28
7
- data.tar.gz: 1766042ae8e9d6012bd99f9829c630ccf99b67173920bca4ee763b7888e676557f1e196516b88516d127f0015121db2bfeac1da12943c1bbbf4cc9a471a67b3a
6
+ metadata.gz: 7b20a7052a82e3fe2ea18bc7d524fb340e0ea275f6330243ded7d987acef6e26c596e069df7288fe76ec48091cc0eefcd18c16430ff4513748d2af2a73eb2273
7
+ data.tar.gz: 199c42f3b6f8a3952f8f3c6f9d4be6bfbba3944d9349efefb748afd6e00491fa4cb13a3ac19b54f0049b28167e8f975d217b382ceaa88d0d959a3d98f3b55bba
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
1
8
  ## [Unreleased]
2
9
 
10
+ - No notable changes since last release
11
+
12
+ ## [1.2.0] - 2024-05-29
13
+
14
+ - Streamline gem release with rake task - [#41](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/41)
15
+ - Make `skip-empty` the default behavior; remove recognizing the option flag - [#40](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/40)
16
+ - Update GitHub action to run specs on all supported Ruby versions - [#37](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/37)
17
+
3
18
  ## [1.1.1] - 2024-05-22
4
19
 
5
20
  - Remove unnecessary `racc` runtime dependency - [#33](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/33)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![Gem Version](https://img.shields.io/gem/v/protoc-gen-twirp_ruby.svg)](https://rubygems.org/gems/protoc-gen-twirp_ruby)
2
- [![Build](https://github.com/collectiveidea/protoc-gen-twirp_ruby/actions/workflows/main.yml/badge.svg)](https://github.com/collectiveidea/protoc-gen-twirp_ruby/actions/workflows/main.yml)
2
+ [![Specs](https://github.com/collectiveidea/protoc-gen-twirp_ruby/actions/workflows/rspec.yml/badge.svg)](https://github.com/collectiveidea/protoc-gen-twirp_ruby/actions/workflows/rspec.yml)
3
3
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/standardrb/standard)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/a0020a73103eedbe760c/test_coverage)](https://codeclimate.com/github/collectiveidea/protoc-gen-twirp_ruby/test_coverage)
4
5
 
5
6
  # protoc-gen-twirp_ruby - A `protoc` plugin for Twirp-Ruby.
6
7
 
@@ -52,18 +53,16 @@ protoc --proto_path=. --ruby_out=. --twirp_ruby_out=. ./path/to/service.proto
52
53
 
53
54
  You can configure the code generation. Pass options by specifying `--twirp_ruby_opt=<option>` on the `protoc` command line.
54
55
 
55
- * `skip-empty`: Avoid generating a `_twirp.rb` for a `.proto` with no service definitions. By default, a `_twirp.rb`
56
- file is generated for every proto file listed on the command line, even if the file is empty scaffolding.
57
- * `generate=<service|client|both>`: Customize generated output to include generated services, clients, or both.
58
- * `generate=service` - only generate `::Twirp::Service` subclass(es).
59
- * `generate=client` - only generate `::Twirp::Client` subclass(es).
60
- * `generate=both` - generate both services and clients. This is the default option to preserve
61
- backwards compatibility.
56
+ * `generate=<service|client|both>`: Customize generated output to include generated services, clients, or both. Optional,
57
+ defaults to both to preserve backwards compatibility.
58
+ * `generate=service` - only generate `::Twirp::Service`s.
59
+ * `generate=client` - only generate `::Twirp::Client`s.
60
+ * `generate=both` - default; generate both services and clients.
62
61
 
63
- Example (with two options):
62
+ Example :
64
63
 
65
64
  ```bash
66
- protoc --proto_path=. --ruby_out=. --twirp_ruby_out=. --twirp_ruby_opt=generate=client --twirp_ruby_opt=skip-empty ./path/to/service.proto
65
+ protoc --proto_path=. --ruby_out=. --twirp_ruby_out=. --twirp_ruby_opt=generate=client ./path/to/service.proto
67
66
  ```
68
67
 
69
68
  ## Migrating from the Go module
@@ -83,20 +82,20 @@ that might affect migration include:
83
82
  * Generated output code is in [standardrb style](https://github.com/standardrb/standard).
84
83
  * Generated service and client class names are improved for well-named protobuf services. See [#6](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/6).
85
84
  * Supports `ruby_package` in `.proto` files
86
- * Supports various protoc command line [configuration options](https://github.com/collectiveidea/protoc-gen-twirp_ruby?tab=readme-ov-file#options).
87
-
85
+ * Supports protoc command line [configuration options](#options).
88
86
 
89
87
  ## Development
90
88
 
91
89
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
92
90
 
93
- For continued development purposes, we can route `protoc` to the local repo code for the plugin and generate against the example via:
91
+ To experiment with development changes, route `protoc` to the local plugin when generating code
92
+ via the `--plugin=protoc-gen-twirp_ruby=./exe/protoc-gen-twirp_ruby` option. For example:
94
93
 
95
94
  ```bash
96
95
  protoc --plugin=protoc-gen-twirp_ruby=./exe/protoc-gen-twirp_ruby --ruby_out=. --twirp_ruby_out=. ./example/hello_world.proto
97
96
  ```
98
97
 
99
- The local code for the gem can also be installed via `bundle exec rake install` to omit the `--plugin=protoc-gen-twirp_ruby=` option from `protoc`:
98
+ Alternatively, install the local gem before invoking `protoc`:
100
99
 
101
100
  ```bash
102
101
  bundle exec rake install
@@ -105,20 +104,16 @@ protoc --ruby_out=. --twirp_ruby_out=. ./example/hello_world.proto
105
104
 
106
105
  ## Releasing
107
106
 
107
+ Install the [GitHub CLI](https://cli.github.com): `brew install gh` or [follow the instructions](https://github.com/cli/cli#installation).
108
+
108
109
  To release a new version:
109
110
 
110
- * Submit a PR with the following changes (see [#30](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/30)):
111
+ * Submit a PR with the following changes (see e.g. [#30](https://github.com/collectiveidea/protoc-gen-twirp_ruby/pull/30)):
111
112
  * Update the version number in `version.rb`
112
113
  * Update the CHANGELOG.md
113
- * Create a section for the new version and move the unreleased version there
114
- * Re-generate the example:
115
- * `protoc --plugin=protoc-gen-twirp_ruby=./exe/protoc-gen-twirp_ruby --ruby_out=. --twirp_ruby_out=. ./example/hello_world.proto`
116
- * Once merged, run the release task from main. Note that we prepend `gem_push=no` to avoid
117
- pushing to RubyGems directly; our GitHub publish action will do this for us.
118
- * `gem_push=no bundle exec rake release`
119
- * Create a GitHub release:
120
- * `gh release create v<version>`
121
- * Edit the release notes to link to the notes in the CHANGELOG.md for the version
114
+ * Create a section for the new version and move the unreleased version there
115
+ * Re-generate the example: `bundle exec rake example`
116
+ * Once merged and `main` is up-to-date, run `bundle exec rake release`.
122
117
 
123
118
  ## Contributing
124
119
 
@@ -10,9 +10,7 @@ module Twirp
10
10
  class CodeGenerator
11
11
  # @param proto_file [Google::Protobuf::FileDescriptorProto]
12
12
  # @param relative_ruby_protobuf [String] e.g. "example_rb.pb"
13
- # @param options [Hash{Symbol => Boolean, Symbol}]
14
- # * :skip_empty [Boolean] indicating whether generation should skip creating a twirp file
15
- # for proto files that contain no services.
13
+ # @param options [Hash{Symbol => Symbol}]
16
14
  # * :generate [Symbol] one of: :service, :client, or :both.
17
15
  def initialize(proto_file, relative_ruby_protobuf, options)
18
16
  @proto_file = proto_file
@@ -42,10 +40,6 @@ module Twirp
42
40
  indent_level += 1
43
41
  end
44
42
 
45
- unless @proto_file.has_service?
46
- output << line("# No services found; To skip generating this file, specify `--twirp_ruby_opt=skip-empty`.", indent_level)
47
- end
48
-
49
43
  @proto_file.service.each_with_index do |service, index| # service: <Google::Protobuf::ServiceDescriptorProto>
50
44
  # Add newline between definitions when multiple are generated
51
45
  output << "\n" if index > 0
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ # Converts the string to an acceptable URL anchor.
5
+ #
6
+ # Thw rules for GitHub markdown links are:
7
+ # - force lowercase
8
+ # - strip punctuation
9
+ # - replace spaces with dashes
10
+ # @return [String] the string converted to an acceptable URL anchor
11
+ def to_anchor
12
+ downcase.gsub(/[^a-z0-9_ -]/, "").tr(" ", "-")
13
+ end
14
+ end
@@ -25,7 +25,7 @@ module Twirp
25
25
 
26
26
  request.proto_file.each do |proto_file| # proto_file: <Google::Protobuf::FileDescriptorProto>
27
27
  next unless request.file_to_generate.include?(proto_file.name)
28
- next if options[:skip_empty] && !proto_file.has_service?
28
+ next unless proto_file.has_service? # do not generate when no services defined
29
29
 
30
30
  file = Google::Protobuf::Compiler::CodeGeneratorResponse::File.new
31
31
  file.name = proto_file.twirp_output_filename
@@ -39,19 +39,19 @@ module Twirp
39
39
 
40
40
  private
41
41
 
42
- # @param params [String] the parameters from protoc command line in comma-separated stringified
43
- # array format, e.g. "some-flag,key1=value1".
42
+ # @param params [String] the parameters from `protoc` command line in comma-separated stringified
43
+ # array format, e.g. "some-flag,key1=value1". For repeated command line options, `protoc` will
44
+ # add the option multiple times, e.g. "some-flag,key1=value1,key1=twice,key2=value2".
44
45
  #
45
- # The only valid parameter is currently the optional "skip-empty" flag.
46
- # @return [Hash{Symbol => Boolean, Symbol}]
47
- # * :skip_empty [Boolean] indicating whether generation should skip creating a twirp file
48
- # for proto files that contain no services. Default false.
46
+ # The only valid parameter is currently the optional "generate" parameter.
47
+ #
48
+ # @return Hash{Symbol => Symbol} the extracted options, a Hash that contains:
49
49
  # * :generate [Symbol] one of: :service, :client, or :both. Default :both.
50
+ #
50
51
  # @raise [ArgumentError] when a required parameter is missing, a parameter value is invalid, or
51
52
  # an unrecognized parameter is present on the command line
52
53
  def extract_options(params)
53
54
  opts = {
54
- skip_empty: false,
55
55
  generate: :both
56
56
  }
57
57
 
@@ -60,12 +60,7 @@ module Twirp
60
60
  # In the event value contains an =, we want to leave that intact.
61
61
  # Limit the split to just separate the key out.
62
62
  key, value = param.split("=", 2)
63
- if key == "skip-empty"
64
- unless value.nil? || value.empty?
65
- raise ArgumentError, "Unexpected value passed to skip-empty flag: #{value}"
66
- end
67
- opts[:skip_empty] = true
68
- elsif key == "generate"
63
+ if key == "generate"
69
64
  if value.nil? || value.empty?
70
65
  raise ArgumentError, "Unexpected missing value for generate option. Please supply one of: service, client, both."
71
66
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Twirp
4
4
  module ProtocPlugin
5
- VERSION = "1.1.1"
5
+ VERSION = "1.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protoc-gen-twirp_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darron Schall
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2024-05-22 00:00:00.000000000 Z
13
+ date: 2024-05-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: google-protobuf
@@ -68,6 +68,20 @@ dependencies:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: simplecov
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
71
85
  - !ruby/object:Gem::Dependency
72
86
  name: standard
73
87
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +117,7 @@ files:
103
117
  - lib/twirp/protoc_plugin/core_ext/string/camel_case.rb
104
118
  - lib/twirp/protoc_plugin/core_ext/string/capitalize_first.rb
105
119
  - lib/twirp/protoc_plugin/core_ext/string/snake_case.rb
120
+ - lib/twirp/protoc_plugin/core_ext/string/to_anchor.rb
106
121
  - lib/twirp/protoc_plugin/descriptor_ext/file_descriptor_proto_ext.rb
107
122
  - lib/twirp/protoc_plugin/descriptor_ext/service_descriptor_proto_ext.rb
108
123
  - lib/twirp/protoc_plugin/process.rb