protip 0.11.1 → 0.11.2
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/lib/protip/resource.rb +12 -4
- data/test/unit/protip/resource_test.rb +98 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8ab7e84f6fd394d2b5cb52c67d1a5db5f245c36a
         | 
| 4 | 
            +
              data.tar.gz: 4726d4e87f0453b0c2bd0bc55c2ac52ff23c58e3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4721c4d9f10135735502dccfb105532d4b6b31a74dcda08b1298bb0cc9bec791897c90002997c826cf399fb3953018bfdab5f5e62710834ccf99a21d5a5c458f
         | 
| 7 | 
            +
              data.tar.gz: cde835698f8a9feb4eb3743b7c3bfdd5ab2bb0e42d0963cb0ebd1849aa96640d6f2169db6302901ca1a4e4e33c5385ce16ae2e86efb674672dbbb5ff1114aa28
         | 
    
        data/lib/protip/resource.rb
    CHANGED
    
    | @@ -178,13 +178,17 @@ module Protip | |
| 178 178 | 
             
                    if query
         | 
| 179 179 | 
             
                      if actions.include?(:show)
         | 
| 180 180 | 
             
                        define_singleton_method :find do |id, query_params = {}|
         | 
| 181 | 
            -
                           | 
| 181 | 
            +
                          wrapper = ::Protip::Wrapper.new(query.new, converter)
         | 
| 182 | 
            +
                          wrapper.assign_attributes query_params
         | 
| 183 | 
            +
                          SearchMethods.show(self, id, wrapper.message)
         | 
| 182 184 | 
             
                        end
         | 
| 183 185 | 
             
                      end
         | 
| 184 186 |  | 
| 185 187 | 
             
                      if actions.include?(:index)
         | 
| 186 188 | 
             
                        define_singleton_method :all do |query_params = {}|
         | 
| 187 | 
            -
                           | 
| 189 | 
            +
                          wrapper = ::Protip::Wrapper.new(query.new, converter)
         | 
| 190 | 
            +
                          wrapper.assign_attributes query_params
         | 
| 191 | 
            +
                          SearchMethods.index(self, wrapper.message)
         | 
| 188 192 | 
             
                        end
         | 
| 189 193 | 
             
                      end
         | 
| 190 194 | 
             
                    else
         | 
| @@ -209,7 +213,9 @@ module Protip | |
| 209 213 | 
             
                  def member(action:, method:, request: nil, response: nil)
         | 
| 210 214 | 
             
                    if request
         | 
| 211 215 | 
             
                      define_method action do |request_params = {}|
         | 
| 212 | 
            -
                         | 
| 216 | 
            +
                        wrapper = ::Protip::Wrapper.new(request.new, self.class.converter)
         | 
| 217 | 
            +
                        wrapper.assign_attributes request_params
         | 
| 218 | 
            +
                        ExtraMethods.member self, action, method, wrapper.message, response
         | 
| 213 219 | 
             
                      end
         | 
| 214 220 | 
             
                    else
         | 
| 215 221 | 
             
                      define_method action do
         | 
| @@ -221,7 +227,9 @@ module Protip | |
| 221 227 | 
             
                  def collection(action:, method:, request: nil, response: nil)
         | 
| 222 228 | 
             
                    if request
         | 
| 223 229 | 
             
                      define_singleton_method action do |request_params = {}|
         | 
| 224 | 
            -
                         | 
| 230 | 
            +
                        wrapper = ::Protip::Wrapper.new(request.new, converter)
         | 
| 231 | 
            +
                        wrapper.assign_attributes request_params
         | 
| 232 | 
            +
                        ExtraMethods.collection self, action, method, wrapper.message, response
         | 
| 225 233 | 
             
                      end
         | 
| 226 234 | 
             
                    else
         | 
| 227 235 | 
             
                      define_singleton_method action do
         | 
| @@ -21,6 +21,7 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 21 21 |  | 
| 22 22 | 
             
                    add_message 'resource_query' do
         | 
| 23 23 | 
             
                      optional :param, :string, 1
         | 
| 24 | 
            +
                      optional :nested_message, :message, 2, 'nested_message'
         | 
| 24 25 | 
             
                    end
         | 
| 25 26 |  | 
| 26 27 | 
             
                    # Give these things a different structure than resource_query_class,
         | 
| @@ -28,6 +29,7 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 28 29 | 
             
                    # type but still yielding correct results.
         | 
| 29 30 | 
             
                    add_message 'action_query' do
         | 
| 30 31 | 
             
                      optional :param, :string, 4
         | 
| 32 | 
            +
                      optional :nested_message, :message, 5, 'nested_message'
         | 
| 31 33 | 
             
                    end
         | 
| 32 34 | 
             
                    add_message 'action_response' do
         | 
| 33 35 | 
             
                      optional :response, :string, 3
         | 
| @@ -124,6 +126,73 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 124 126 | 
             
                  end
         | 
| 125 127 | 
             
                end
         | 
| 126 128 |  | 
| 129 | 
            +
                # index/find/member/collection actions should all convert more complex Ruby objects to submessages in their
         | 
| 130 | 
            +
                # queries
         | 
| 131 | 
            +
                def self.it_converts_query_parameters
         | 
| 132 | 
            +
                  before do
         | 
| 133 | 
            +
                    # Sanity check - the user should specify all these variables in "let" statements
         | 
| 134 | 
            +
                    # http_method, path, query_class, and response specify the expected call to the client
         | 
| 135 | 
            +
                    # nested_message_field specifies the field on the query class that may or may not be convertible, and should
         | 
| 136 | 
            +
                    #   refer to a submessage field of type nested_message_class
         | 
| 137 | 
            +
                    # invoke_method! should call the desired method, assuming that +parameters+ contains the query parameters to
         | 
| 138 | 
            +
                    #   pass in (e.g. `resource_class.all(parameters)` or `resource_class.find('id', parameters)`)
         | 
| 139 | 
            +
                    %i(
         | 
| 140 | 
            +
                      http_method
         | 
| 141 | 
            +
                      path
         | 
| 142 | 
            +
                      query_class
         | 
| 143 | 
            +
                      response
         | 
| 144 | 
            +
                      nested_message_field
         | 
| 145 | 
            +
                      invoke_method!
         | 
| 146 | 
            +
                    ).each do |name|
         | 
| 147 | 
            +
                      raise "Must define #{name} before invoking `it_converts_query_parameters`" unless respond_to?(name)
         | 
| 148 | 
            +
                    end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                    # All tests expect the same HTTP call
         | 
| 151 | 
            +
                    client.expects(:request)
         | 
| 152 | 
            +
                      .once
         | 
| 153 | 
            +
                      .with(method: http_method, path: path,
         | 
| 154 | 
            +
                        message: query_class.new(:"#{nested_message_field}" => nested_message_class.new(number: 43)),
         | 
| 155 | 
            +
                        response_type: (nil == response ? nil : response.class),
         | 
| 156 | 
            +
                      ).returns(response)
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
             | 
| 160 | 
            +
             | 
| 161 | 
            +
                  describe 'with a convertible message' do
         | 
| 162 | 
            +
                    before do
         | 
| 163 | 
            +
                      resource_class.converter.stubs(:convertible?).with(nested_message_class).returns(true)
         | 
| 164 | 
            +
                      resource_class.converter.stubs(:to_message).with(42, nested_message_class).returns(nested_message_class.new(number: 43))
         | 
| 165 | 
            +
                    end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                    let(:parameters) { {"#{nested_message_field}" => 42} }
         | 
| 168 | 
            +
                    it 'converts query parameters' do
         | 
| 169 | 
            +
                      invoke_method!
         | 
| 170 | 
            +
                    end
         | 
| 171 | 
            +
                  end
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                  describe 'with an inconvertible message' do
         | 
| 174 | 
            +
                    before do
         | 
| 175 | 
            +
                      resource_class.converter.stubs(:convertible?).with(nested_message_class).returns(false)
         | 
| 176 | 
            +
                      resource_class.converter.expects(:to_message).never
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                    describe 'with a hash' do
         | 
| 180 | 
            +
                      let(:parameters) { {"#{nested_message_field}" => {number: 43}} }
         | 
| 181 | 
            +
                      it 'allows a hash to be provided for the nested message' do
         | 
| 182 | 
            +
                        invoke_method!
         | 
| 183 | 
            +
                      end
         | 
| 184 | 
            +
                    end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                    describe 'with a submessage' do
         | 
| 187 | 
            +
                      let(:parameters) { {"#{nested_message_field}" => nested_message_class.new(number: 43)} }
         | 
| 188 | 
            +
                      it 'allows a submessage to be provided directly' do
         | 
| 189 | 
            +
                        invoke_method!
         | 
| 190 | 
            +
                      end
         | 
| 191 | 
            +
                    end
         | 
| 192 | 
            +
                  end
         | 
| 193 | 
            +
                end
         | 
| 194 | 
            +
             | 
| 195 | 
            +
             | 
| 127 196 | 
             
                describe '.all' do
         | 
| 128 197 | 
             
                  let :response do
         | 
| 129 198 | 
             
                    Protip::Messages::Array.new({
         | 
| @@ -213,6 +282,15 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 213 282 | 
             
                      .returns(response)
         | 
| 214 283 | 
             
                      resource_class.all
         | 
| 215 284 | 
             
                    end
         | 
| 285 | 
            +
             | 
| 286 | 
            +
                    describe '(convertibility)' do
         | 
| 287 | 
            +
                      let(:http_method) { Net::HTTP::Get }
         | 
| 288 | 
            +
                      let(:path) { 'base_path' }
         | 
| 289 | 
            +
                      let(:query_class) { resource_query_class }
         | 
| 290 | 
            +
                      let(:nested_message_field) { :nested_message }
         | 
| 291 | 
            +
                      let(:invoke_method!) { resource_class.all(parameters) }
         | 
| 292 | 
            +
                      it_converts_query_parameters
         | 
| 293 | 
            +
                    end
         | 
| 216 294 | 
             
                  end
         | 
| 217 295 | 
             
                end
         | 
| 218 296 |  | 
| @@ -288,6 +366,15 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 288 366 | 
             
                        .returns(response)
         | 
| 289 367 | 
             
                      resource_class.find 6
         | 
| 290 368 | 
             
                    end
         | 
| 369 | 
            +
             | 
| 370 | 
            +
                    describe '(convertibility)' do
         | 
| 371 | 
            +
                      let(:http_method) { Net::HTTP::Get }
         | 
| 372 | 
            +
                      let(:path) { 'base_path/5' }
         | 
| 373 | 
            +
                      let(:query_class) { resource_query_class }
         | 
| 374 | 
            +
                      let(:nested_message_field) { :nested_message }
         | 
| 375 | 
            +
                      let(:invoke_method!) { resource_class.find 5, parameters }
         | 
| 376 | 
            +
                      it_converts_query_parameters
         | 
| 377 | 
            +
                    end
         | 
| 291 378 | 
             
                  end
         | 
| 292 379 | 
             
                end
         | 
| 293 380 |  | 
| @@ -537,6 +624,8 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 537 624 | 
             
                      end
         | 
| 538 625 | 
             
                    end
         | 
| 539 626 |  | 
| 627 | 
            +
                    let(:response) { nil }
         | 
| 628 | 
            +
             | 
| 540 629 | 
             
                    it 'sends a request with a body to the expected endpoint' do
         | 
| 541 630 | 
             
                      client.expects(:request)
         | 
| 542 631 | 
             
                        .once
         | 
| @@ -554,6 +643,15 @@ module Protip::ResourceTest # Namespace for internal constants | |
| 554 643 | 
             
                        .returns(nil)
         | 
| 555 644 | 
             
                      target.action
         | 
| 556 645 | 
             
                    end
         | 
| 646 | 
            +
             | 
| 647 | 
            +
                    describe '(convertibility)' do
         | 
| 648 | 
            +
                      let(:http_method) { Net::HTTP::Post }
         | 
| 649 | 
            +
                      let(:path) { path }
         | 
| 650 | 
            +
                      let(:query_class) { action_query_class }
         | 
| 651 | 
            +
                      let(:nested_message_field) { :nested_message }
         | 
| 652 | 
            +
                      let(:invoke_method!) { target.action(parameters) }
         | 
| 653 | 
            +
                      it_converts_query_parameters
         | 
| 654 | 
            +
                    end
         | 
| 557 655 | 
             
                  end
         | 
| 558 656 |  | 
| 559 657 | 
             
                  describe 'with a response type' do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: protip
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.11. | 
| 4 | 
            +
              version: 0.11.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - AngelList
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-08- | 
| 11 | 
            +
            date: 2015-08-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activemodel
         |