From bf1a19cfab64a0033c5acf1e081933d3e56e4396 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Mon, 17 Aug 2026 11:59:24 +1200 Subject: [PATCH] Remove deprecated Methods module --- lib/protocol/grpc.rb | 1 - lib/protocol/grpc/methods.rb | 81 --------------------------- releases.md | 4 ++ test/protocol/grpc/methods.rb | 101 ---------------------------------- 4 files changed, 4 insertions(+), 183 deletions(-) delete mode 100644 lib/protocol/grpc/methods.rb delete mode 100644 test/protocol/grpc/methods.rb diff --git a/lib/protocol/grpc.rb b/lib/protocol/grpc.rb index f99e238..94ccd9c 100644 --- a/lib/protocol/grpc.rb +++ b/lib/protocol/grpc.rb @@ -10,7 +10,6 @@ require_relative "grpc/route" require_relative "grpc/header" require_relative "grpc/metadata" -require_relative "grpc/methods" require_relative "grpc/call" require_relative "grpc/body/readable" require_relative "grpc/body/writable" diff --git a/lib/protocol/grpc/methods.rb b/lib/protocol/grpc/methods.rb deleted file mode 100644 index ed697bb..0000000 --- a/lib/protocol/grpc/methods.rb +++ /dev/null @@ -1,81 +0,0 @@ -# frozen_string_literal: true - -# Released under the MIT License. -# Copyright, 2025-2026, by Samuel Williams. - -require_relative "metadata" -require_relative "route" - -module Protocol - module GRPC - # Provides utility methods for building and parsing gRPC-compatible HTTP requests. - module Methods - # Build gRPC path from service and method. - # @parameter service [String] e.g., "my_service.Greeter" - # @parameter method [String] e.g., "SayHello" - # @returns [String] e.g., "/my_service.Greeter/SayHello" - # @deprecated Use {Route.build} instead. - def self.build_path(service, method) - Kernel.warn("`Protocol::GRPC::Methods.build_path` is deprecated; use `Protocol::GRPC::Route.build` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - Route.build(service, method) - end - - # Parse service and method from gRPC path. - # @parameter path [String] e.g., "/my_service.Greeter/SayHello" - # @returns [Array(String | String)] [service, method] - # @deprecated Use {Route.parse} instead. - def self.parse_path(path) - Kernel.warn("`Protocol::GRPC::Methods.parse_path` is deprecated; use `Protocol::GRPC::Route.parse` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - Route.parse(path) - end - - # Build gRPC request headers. - # @parameter metadata [Hash] Custom metadata key-value pairs - # @parameter timeout [Numeric | Nil] Optional timeout in seconds - # @parameter content_type [String] Content type (default: "application/grpc+proto") - # @returns [Protocol::HTTP::Headers] - # @deprecated Use {Metadata.build} instead. - def self.build_headers(metadata: {}, timeout: nil, content_type: "application/grpc+proto") - Kernel.warn("`Protocol::GRPC::Methods.build_headers` is deprecated; use `Protocol::GRPC::Metadata.build` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - Metadata.build(metadata: metadata, timeout: timeout, content_type: content_type) - end - - # Extract metadata from gRPC headers. - # @parameter headers [Protocol::HTTP::Headers] - # @returns [Hash] Metadata key-value pairs - # @deprecated Use {Metadata.extract} instead. - def self.extract_metadata(headers) - Kernel.warn("`Protocol::GRPC::Methods.extract_metadata` is deprecated; use `Protocol::GRPC::Metadata.extract` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - Metadata.extract(headers) - end - - # Format timeout for grpc-timeout header. - # @parameter timeout [Numeric] Timeout in seconds - # @returns [String] e.g., "1000m" for 1 second - # @deprecated Use {Protocol::GRPC::Header::Timeout.format} instead. - def self.format_timeout(timeout) - Kernel.warn("`Protocol::GRPC::Methods.format_timeout` is deprecated; use `Protocol::GRPC::Header::Timeout.format` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - Header::Timeout.format(timeout) - end - - # Parse grpc-timeout header value. - # @parameter value [String] e.g., "1000m" - # @returns [Numeric | Nil] Timeout in seconds, or `Nil` if value is invalid - # @deprecated Use {Protocol::GRPC::Header::Timeout#to_seconds} instead. - def self.parse_timeout(value) - Kernel.warn("`Protocol::GRPC::Methods.parse_timeout` is deprecated; use `Protocol::GRPC::Header::Timeout#to_seconds` instead.", uplevel: 1, category: :deprecated) if $VERBOSE - - return nil unless value - - Header::Timeout.parse(value).to_seconds - rescue ArgumentError - return nil - end - end - end -end diff --git a/releases.md b/releases.md index 1d02372..1a786b0 100644 --- a/releases.md +++ b/releases.md @@ -1,5 +1,9 @@ # Releases +## Unreleased + + - **Breaking**: Removed the deprecated `Protocol::GRPC::Methods` module. Use `Protocol::GRPC::Route`, `Protocol::GRPC::Metadata`, and `Protocol::GRPC::Header::Timeout` instead. + ## v0.13.0 - Added `Protocol::GRPC::Route` for building and parsing gRPC request paths. diff --git a/test/protocol/grpc/methods.rb b/test/protocol/grpc/methods.rb deleted file mode 100644 index 2e18e9a..0000000 --- a/test/protocol/grpc/methods.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -# Released under the MIT License. -# Copyright, 2025-2026, by Samuel Williams. - -require "protocol/grpc/methods" -require "protocol/http" - -describe Protocol::GRPC::Methods do - with ".build_path" do - it "builds gRPC path from service and method" do - path = subject.build_path("my_service.Greeter", "SayHello") - expect(path).to be == "/my_service.Greeter/SayHello" - end - end - - with ".parse_path" do - it "parses service and method from gRPC path" do - service, method = subject.parse_path("/my_service.Greeter/SayHello") - expect(service).to be == "my_service.Greeter" - expect(method).to be == "SayHello" - end - end - - with ".build_headers" do - it "delegates to Metadata.build" do - headers = subject.build_headers(metadata: { "authorization" => "Bearer token123" }) - - expect(headers["authorization"].to_s).to be == "Bearer token123" - end - end - - with ".extract_metadata" do - it "delegates to Metadata.extract" do - headers = Protocol::HTTP::Headers.new([["authorization", "Bearer token123"]]) - metadata = subject.extract_metadata(headers) - - expect(metadata["authorization"]).to be == "Bearer token123" - end - end - - with ".format_timeout" do - it "formats seconds" do - expect(subject.format_timeout(5)).to be == "5S" - end - - it "formats minutes" do - expect(subject.format_timeout(120)).to be == "2M" - end - - it "formats hours" do - expect(subject.format_timeout(7200)).to be == "2H" - end - - it "formats milliseconds" do - expect(subject.format_timeout(0.5)).to be == "500m" - end - - it "formats microseconds" do - expect(subject.format_timeout(0.0005)).to be == "500u" - end - - it "formats nanoseconds" do - expect(subject.format_timeout(0.0000005)).to be == "500n" - end - end - - with ".parse_timeout" do - it "parses seconds" do - expect(subject.parse_timeout("5S")).to be == 5 - end - - it "parses minutes" do - expect(subject.parse_timeout("2M")).to be == 120 - end - - it "parses hours" do - expect(subject.parse_timeout("2H")).to be == 7200 - end - - it "parses milliseconds" do - expect(subject.parse_timeout("500m")).to be == 0.5 - end - - it "parses microseconds" do - expect(subject.parse_timeout("500u")).to be == 0.0005 - end - - it "parses nanoseconds" do - expect(subject.parse_timeout("500n")).to be == 0.0000005 - end - - it "returns nil for invalid format" do - expect(subject.parse_timeout("invalid")).to be_nil - end - - it "returns nil for nil input" do - expect(subject.parse_timeout(nil)).to be_nil - end - end -end