https://github.com/cocoahero/proto_plugin
Easily build protobuf compiler plugins in Ruby.
https://github.com/cocoahero/proto_plugin
gem protobuf protoc ruby
Last synced: 5 months ago
JSON representation
Easily build protobuf compiler plugins in Ruby.
- Host: GitHub
- URL: https://github.com/cocoahero/proto_plugin
- Owner: cocoahero
- License: mit
- Created: 2024-09-01T00:40:34.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-02-27T03:16:20.000Z (over 1 year ago)
- Last Synced: 2026-01-13T22:32:28.471Z (6 months ago)
- Topics: gem, protobuf, protoc, ruby
- Language: Ruby
- Homepage: https://cocoahero.github.io/proto_plugin/
- Size: 72.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
Awesome Lists containing this project
README
# ProtoPlugin
[](https://github.com/cocoahero/proto_plugin/actions/workflows/lint.yml)
[](https://github.com/cocoahero/proto_plugin/actions/workflows/test.yml)
[](https://badge.fury.io/rb/proto_plugin)
## Installation
```bash
gem install proto_plugin
```
## Getting Started
Creating a `protoc` plugin is as simple as creating a new executable script.
The name of the file must follow the format `protoc-gen-[plugin-name]`. As an example, the below file could be named `protoc-gen-mycoolplugin`.
```ruby
#! /usr/bin/env ruby
require "proto_plugin"
class MyCoolPlugin < ProtoPlugin::Base
def run
request.file_to_generate.each do |f|
name = File.basename(f.name, ".proto")
add_file(name: "#{name}.txt", content: <<~TXT)
This file was generated from #{name}.proto!
TXT
end
end
end
MyCoolPlugin.run!
```
> [!TIP]
> For more details on the available API, see the docs: https://cocoahero.github.io/proto_plugin
### Usage
To invoke the plugin, first make sure you have `protoc` [installed](https://github.com/protocolbuffers/protobuf#protobuf-compiler-installation). Then in a terminal, run:
```bash
protoc --plugin=path/to/protoc-gen-mycoolplugin --mycoolplugin_out=. input.proto
```
If the executable script is in your `$PATH`, for example installed via a gem, you can omit the `--plugin` argument.
```bash
protoc --mycoolplugin_out=. input.proto
```
See [`exe/protoc-gen-proto-plugin-demo`](./exe/protoc-gen-proto-plugin-demo) in this repo as another example of a plugin. Since it should be in your `$PATH` (you did install this gem right?) you can invoke it with:
```bash
protoc --proto-plugin-demo_out=. input.proto
```
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/rake` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/cocoahero/proto_plugin.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).