grpc-rest 0.1.10 → 0.1.12
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 +3 -0
- data/Gemfile.lock +1 -1
- data/lib/grpc_rest/version.rb +1 -1
- data/lib/grpc_rest.rb +18 -3
- data/protoc-gen-rails/testdata/test_service.proto +2 -0
- data/spec/grpc_rest_spec.rb +19 -1
- data/spec/test_service_pb.rb +2 -25
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8bfe3edbd1ceece344b2dff703ce619a0d829e40cec4022fe4676fe61ab77940
         | 
| 4 | 
            +
              data.tar.gz: a86fd6b8b0fd11479510e3db9296431d4f36490ec2ad1037ce2a1e80fcac2578
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c08004595c9f8db0c3e7f6a0f9b15c35fa91f83229ed2741a303633fd174a6f1dba521ba73fb989a17ea901fd5c46177f842449845fd5493c45182bcc232bde4
         | 
| 7 | 
            +
              data.tar.gz: 4010b037a9bd33eb3b5b80896dbc73449f4adb2fccc51771ecec9d0bea1017365181eb9c4e23e87763c8c62cbf15a43da9e5bf2c0b2ef8ae5e6f4f6da870d1ec
         | 
    
        data/CHANGELOG
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/grpc_rest/version.rb
    CHANGED
    
    
    
        data/lib/grpc_rest.rb
    CHANGED
    
    | @@ -36,13 +36,22 @@ module GrpcRest | |
| 36 36 | 
             
                  proto.public_send(:"#{tokens.last}=", value) if proto.respond_to?(:"#{tokens.last}=")
         | 
| 37 37 | 
             
                end
         | 
| 38 38 |  | 
| 39 | 
            -
                def  | 
| 39 | 
            +
                def map_proto_type(proto, params)
         | 
| 40 40 | 
             
                  proto.to_a.each do |descriptor|
         | 
| 41 41 | 
             
                    field = descriptor.name
         | 
| 42 42 | 
             
                    val = params[field]
         | 
| 43 43 | 
             
                    next if val.nil?
         | 
| 44 44 | 
             
                    next if descriptor.subtype.is_a?(Google::Protobuf::EnumDescriptor)
         | 
| 45 45 |  | 
| 46 | 
            +
                    case descriptor.type
         | 
| 47 | 
            +
                    when *%i(int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64)
         | 
| 48 | 
            +
                      params[field] = val.to_i
         | 
| 49 | 
            +
                    when *%i(float double)
         | 
| 50 | 
            +
                      params[field] = val.to_f
         | 
| 51 | 
            +
                    when :bool
         | 
| 52 | 
            +
                      params[field] = !!val
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
             | 
| 46 55 | 
             
                    case descriptor.subtype&.name
         | 
| 47 56 | 
             
                    when 'google.protobuf.Struct'
         | 
| 48 57 | 
             
                      params[field] = Google::Protobuf::Struct.from_hash(val)
         | 
| @@ -57,13 +66,19 @@ module GrpcRest | |
| 57 66 | 
             
                    when 'google.protobuf.ListValue'
         | 
| 58 67 | 
             
                      params[field] = Google::Protobuf::ListValue.from_a(val)
         | 
| 59 68 | 
             
                    else
         | 
| 60 | 
            -
                       | 
| 69 | 
            +
                      if params[field].is_a?(Array)
         | 
| 70 | 
            +
                        params[field].each do |item|
         | 
| 71 | 
            +
                          map_proto_type(descriptor.subtype, item)
         | 
| 72 | 
            +
                        end
         | 
| 73 | 
            +
                      else
         | 
| 74 | 
            +
                        map_proto_type(descriptor.subtype, params[field])
         | 
| 75 | 
            +
                      end
         | 
| 61 76 | 
             
                    end
         | 
| 62 77 | 
             
                  end
         | 
| 63 78 | 
             
                end
         | 
| 64 79 |  | 
| 65 80 | 
             
                def init_request(request_class, params)
         | 
| 66 | 
            -
                   | 
| 81 | 
            +
                  map_proto_type(request_class.descriptor, params)
         | 
| 67 82 | 
             
                  request_class.new(params)
         | 
| 68 83 | 
             
                end
         | 
| 69 84 |  | 
    
        data/spec/grpc_rest_spec.rb
    CHANGED
    
    | @@ -66,6 +66,7 @@ RSpec.describe MyServiceController, type: :request do | |
| 66 66 | 
             
                it 'should be successful' do
         | 
| 67 67 | 
             
                  params = {
         | 
| 68 68 | 
             
                    test_id: 'abc',
         | 
| 69 | 
            +
                    some_int: "65",
         | 
| 69 70 | 
             
                    foobar: 'xyz',
         | 
| 70 71 | 
             
                    repeated_string: ['W', 'T', 'F'],
         | 
| 71 72 | 
             
                    sub_record: {
         | 
| @@ -95,7 +96,7 @@ RSpec.describe MyServiceController, type: :request do | |
| 95 96 | 
             
                  expect(response).to be_successful
         | 
| 96 97 | 
             
                  expect(response.parsed_body).to eq({
         | 
| 97 98 | 
             
                                                       'some_int' => 4,
         | 
| 98 | 
            -
                                                       'full_response' => %({"testId":"abc","foobar":"xyz","repeatedString":["W","T","F"],"subRecord":{"subId":"id1","anotherId":"id2"},"secondRecord":{"subId":"id3","anotherId":"id4"},"structField":{"bool_key":true,"str_key":"val","nil_key":null,"list_key":[{"inner_key":"inner_val"}],"int_key":123},"timestampField":"2024-04-03T01:02:03Z","listValue":["F","Y","I"],"bareValue":45})
         | 
| 99 | 
            +
                                                       'full_response' => %({"testId":"abc","foobar":"xyz","repeatedString":["W","T","F"],"subRecord":{"subId":"id1","anotherId":"id2"},"secondRecord":{"subId":"id3","anotherId":"id4"},"structField":{"bool_key":true,"str_key":"val","nil_key":null,"list_key":[{"inner_key":"inner_val"}],"int_key":123},"timestampField":"2024-04-03T01:02:03Z","listValue":["F","Y","I"],"bareValue":45,\"someInt\":65})
         | 
| 99 100 | 
             
                                                     })
         | 
| 100 101 | 
             
                end
         | 
| 101 102 | 
             
              end
         | 
| @@ -114,4 +115,21 @@ RSpec.describe MyServiceController, type: :request do | |
| 114 115 | 
             
                end
         | 
| 115 116 | 
             
              end
         | 
| 116 117 |  | 
| 118 | 
            +
              describe 'array of sub-records' do
         | 
| 119 | 
            +
                it 'should be successful' do
         | 
| 120 | 
            +
                  params = {
         | 
| 121 | 
            +
                    sub_records: [{
         | 
| 122 | 
            +
                      sub_id: 'id1',
         | 
| 123 | 
            +
                      another_id: 'id2'
         | 
| 124 | 
            +
                    }]
         | 
| 125 | 
            +
                  }
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  post '/test4', params:, as: :json
         | 
| 128 | 
            +
                  expect(response).to be_successful
         | 
| 129 | 
            +
                  expect(response.parsed_body).to eq({
         | 
| 130 | 
            +
                                                       'some_int' => 4,
         | 
| 131 | 
            +
                                                       'full_response' => %({"subRecords":[{"subId":"id1","anotherId":"id2"}]})
         | 
| 132 | 
            +
                                                     })
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
              end
         | 
| 117 135 | 
             
            end
         | 
    
        data/spec/test_service_pb.rb
    CHANGED
    
    | @@ -9,33 +9,10 @@ require 'google/protobuf/struct_pb' | |
| 9 9 | 
             
            require 'google/protobuf/timestamp_pb'
         | 
| 10 10 |  | 
| 11 11 |  | 
| 12 | 
            -
            descriptor_data = "\n\x12test_service.proto\x12\x08testdata\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\ | 
| 12 | 
            +
            descriptor_data = "\n\x12test_service.proto\x12\x08testdata\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x98\x03\n\x0bTestRequest\x12\x0f\n\x07test_id\x18\x01 \x01(\t\x12\x0e\n\x06\x66oobar\x18\x02 \x01(\t\x12\x17\n\x0frepeated_string\x18\x03 \x03(\t\x12\'\n\nsub_record\x18\x04 \x01(\x0b\x32\x13.testdata.SubRecord\x12*\n\rsecond_record\x18\x05 \x01(\x0b\x32\x13.testdata.SubRecord\x12-\n\x0cstruct_field\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x33\n\x0ftimestamp_field\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nlist_value\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.ListValue\x12*\n\nbare_value\x18\t \x01(\x0b\x32\x16.google.protobuf.Value\x12(\n\x0bsub_records\x18\n \x03(\x0b\x32\x13.testdata.SubRecord\x12\x10\n\x08some_int\x18\x0b \x01(\x05\"/\n\tSubRecord\x12\x0e\n\x06sub_id\x18\x01 \x01(\t\x12\x12\n\nanother_id\x18\x02 \x01(\t\"7\n\x0cTestResponse\x12\x10\n\x08some_int\x18\x01 \x01(\x05\x12\x15\n\rfull_response\x18\x02 \x01(\t2\xdf\x02\n\tMyService\x12T\n\x04Test\x12\x15.testdata.TestRequest\x1a\x16.testdata.TestResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/test/{foobar=blah/*}\x12U\n\x05Test2\x12\x15.testdata.TestRequest\x1a\x16.testdata.TestResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x06/test2:\rsecond_record\x12Z\n\x05Test3\x12\x15.testdata.TestRequest\x1a\x16.testdata.TestResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x1a/test3/{sub_record.sub_id}\x12I\n\x05Test4\x12\x15.testdata.TestRequest\x1a\x16.testdata.TestResponse\"\x11\x82\xd3\xe4\x93\x02\x0b\"\x06/test4:\x01*b\x06proto3"
         | 
| 13 13 |  | 
| 14 14 | 
             
            pool = Google::Protobuf::DescriptorPool.generated_pool
         | 
| 15 | 
            -
             | 
| 16 | 
            -
            begin
         | 
| 17 | 
            -
              pool.add_serialized_file(descriptor_data)
         | 
| 18 | 
            -
            rescue TypeError
         | 
| 19 | 
            -
              # Compatibility code: will be removed in the next major version.
         | 
| 20 | 
            -
              require 'google/protobuf/descriptor_pb'
         | 
| 21 | 
            -
              parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
         | 
| 22 | 
            -
              parsed.clear_dependency
         | 
| 23 | 
            -
              serialized = parsed.class.encode(parsed)
         | 
| 24 | 
            -
              file = pool.add_serialized_file(serialized)
         | 
| 25 | 
            -
              warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
         | 
| 26 | 
            -
              imports = [
         | 
| 27 | 
            -
                ["google.protobuf.Struct", "google/protobuf/struct.proto"],
         | 
| 28 | 
            -
                ["google.protobuf.Timestamp", "google/protobuf/timestamp.proto"],
         | 
| 29 | 
            -
              ]
         | 
| 30 | 
            -
              imports.each do |type_name, expected_filename|
         | 
| 31 | 
            -
                import_file = pool.lookup(type_name).file_descriptor
         | 
| 32 | 
            -
                if import_file.name != expected_filename
         | 
| 33 | 
            -
                  warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
         | 
| 34 | 
            -
                end
         | 
| 35 | 
            -
              end
         | 
| 36 | 
            -
              warn "Each proto file must use a consistent fully-qualified name."
         | 
| 37 | 
            -
              warn "This will become an error in the next major version."
         | 
| 38 | 
            -
            end
         | 
| 15 | 
            +
            pool.add_serialized_file(descriptor_data)
         | 
| 39 16 |  | 
| 40 17 | 
             
            module Testdata
         | 
| 41 18 | 
             
              TestRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("testdata.TestRequest").msgclass
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: grpc-rest
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.12
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Daniel Orner
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-05- | 
| 11 | 
            +
            date: 2024-05-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: grpc
         |