json_client 0.0.1 → 0.0.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/.travis.yml +7 -1
 - data/README.md +53 -3
 - data/json_client.gemspec +2 -0
 - data/lib/json_client/base.rb +80 -0
 - data/lib/json_client/base_requests/create.rb +22 -0
 - data/lib/json_client/base_requests/destroy.rb +13 -0
 - data/lib/json_client/base_requests/index.rb +11 -0
 - data/lib/json_client/base_requests/request.rb +12 -0
 - data/lib/json_client/base_requests/show.rb +11 -0
 - data/lib/json_client/base_requests/update.rb +22 -0
 - data/lib/json_client/{abstract_responses → base_responses}/create.rb +1 -1
 - data/lib/json_client/{abstract_responses → base_responses}/destroy.rb +1 -1
 - data/lib/json_client/{abstract_responses → base_responses}/index.rb +1 -1
 - data/lib/json_client/{abstract_responses → base_responses}/response.rb +1 -1
 - data/lib/json_client/{abstract_responses → base_responses}/show.rb +1 -1
 - data/lib/json_client/{abstract_responses → base_responses}/update.rb +1 -1
 - data/lib/json_client/requests.rb +29 -0
 - data/lib/json_client/responses.rb +29 -0
 - data/lib/json_client/version.rb +1 -1
 - data/lib/json_client.rb +2 -2
 - data/spec/json_client/base_requests/request_spec.rb +14 -0
 - data/spec/json_client/base_responses/response_spec.rb +49 -0
 - data/spec/json_client/base_spec.rb +109 -0
 - data/spec/json_client/pather_spec.rb +51 -0
 - data/spec/json_client/requests_spec.rb +43 -0
 - data/spec/json_client/responses_spec.rb +43 -0
 - data/spec/json_client_spec.rb +19 -13
 - data/spec/spec_helper.rb +3 -0
 - metadata +57 -9
 - data/lib/json_client/abstract_client.rb +0 -111
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e7cb4bba261119f65721f26b628f479a38e75f51
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 22b36d3aed2ef8d04dc893b687fc2e41cb4d9267
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 6bf62b6375988b27e103251979fa0127b6a08882b9d46c57726f32ce088c0323dfa5264dc375a9ff9fa7de213c1f1cf8b684085603cfd6c7f2d4db59ecbb504d
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: a860985b6ffdbf33c15fb8cfd94928aa85712ccbe099b3686f2cbf300f1575be21d8a6d78e4b93cb20be792a729cffb0fc41f774e950b0827e34e946cf0f4291
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,6 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # JsonClient
         
     | 
| 
      
 2 
     | 
    
         
            +
            [](https://travis-ci.org/johnmcconnell/json_client)
         
     | 
| 
      
 4 
     | 
    
         
            +
            [](https://coveralls.io/r/johnmcconnell/json_client?branch=master)
         
     | 
| 
       2 
6 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            A simple crud json client so that I don't need to do this for
         
     | 
| 
      
 8 
     | 
    
         
            +
            all my web services
         
     | 
| 
       4 
9 
     | 
    
         | 
| 
       5 
10 
     | 
    
         
             
            ## Installation
         
     | 
| 
       6 
11 
     | 
    
         | 
| 
         @@ -20,11 +25,56 @@ Or install it yourself as: 
     | 
|
| 
       20 
25 
     | 
    
         | 
| 
       21 
26 
     | 
    
         
             
            ## Usage
         
     | 
| 
       22 
27 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
            I've avoided using a DSL in favor of good engineering principals. I am
         
     | 
| 
      
 29 
     | 
    
         
            +
            hoping the DSL will come after.
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            ```
         
     | 
| 
      
 33 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            class Client < JsonClient::Base
         
     | 
| 
      
 36 
     | 
    
         
            +
              def initialize(config)
         
     | 
| 
      
 37 
     | 
    
         
            +
                super
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def pather
         
     | 
| 
      
 41 
     | 
    
         
            +
                @pather ||=
         
     | 
| 
      
 42 
     | 
    
         
            +
                  JsonClient::Pather.new(
         
     | 
| 
      
 43 
     | 
    
         
            +
                    'https://example.host.com',
         
     | 
| 
      
 44 
     | 
    
         
            +
                    'api/v1',
         
     | 
| 
      
 45 
     | 
    
         
            +
                    'objects'
         
     | 
| 
      
 46 
     | 
    
         
            +
                  )
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            config = {
         
     | 
| 
      
 51 
     | 
    
         
            +
              api_key: 'api_key',
         
     | 
| 
      
 52 
     | 
    
         
            +
              api_password: 'api_password'
         
     | 
| 
      
 53 
     | 
    
         
            +
            }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            client = Client.new(config)
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            # GET https://example.host.com/api/v1/objects?api_key=api_key&api_password=api_password
         
     | 
| 
      
 59 
     | 
    
         
            +
            client.index.json
         
     | 
| 
      
 60 
     | 
    
         
            +
             => { 'server_json' : 'is_parsed_here' }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            # GET https://my.host.com/api/v1/objects/2?api_key=api_key&api_password=api_password
         
     | 
| 
      
 65 
     | 
    
         
            +
            client.show(2).json # fetches from
         
     | 
| 
      
 66 
     | 
    
         
            +
             => { 'object_json' : 'is_parsed_here' }
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            ## Best Guide
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            Is [this
         
     | 
| 
      
 72 
     | 
    
         
            +
            test](https://github.com/johnmcconnell/json_client/blob/master/spec/json_client/base_spec.rb).
         
     | 
| 
      
 73 
     | 
    
         
            +
            Sorry non rspec people
         
     | 
| 
       24 
74 
     | 
    
         | 
| 
       25 
75 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       26 
76 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            1. Fork it ( https://github.com/ 
     | 
| 
      
 77 
     | 
    
         
            +
            1. Fork it ( https://github.com/johnmcconnell/json_client/fork )
         
     | 
| 
       28 
78 
     | 
    
         
             
            2. Create your feature branch (`git checkout -b my-new-feature`)
         
     | 
| 
       29 
79 
     | 
    
         
             
            3. Commit your changes (`git commit -am 'Add some feature'`)
         
     | 
| 
       30 
80 
     | 
    
         
             
            4. Push to the branch (`git push origin my-new-feature`)
         
     | 
    
        data/json_client.gemspec
    CHANGED
    
    | 
         @@ -20,6 +20,8 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
              spec.add_dependency 'rest-client', '~> 1.7.2'
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
              spec.add_development_dependency "simplecov", "~> 0.8.0"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_development_dependency "coveralls", "~> 0.7.0"
         
     | 
| 
       23 
25 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
       24 
26 
     | 
    
         
             
              spec.add_development_dependency "rspec"
         
     | 
| 
       25 
27 
     | 
    
         
             
              spec.add_development_dependency "rspec-collection_matchers"
         
     | 
| 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rest_client'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'json_client/responses'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client/requests'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module JsonClient
         
     | 
| 
      
 6 
     | 
    
         
            +
              class Base
         
     | 
| 
      
 7 
     | 
    
         
            +
                attr_reader :api_key, :api_password, :pather
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(pather, config)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @api_key = config[:api_key]
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @api_password = config[:api_password]
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @pather = pather
         
     | 
| 
      
 13 
     | 
    
         
            +
                  validate_variables
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def index
         
     | 
| 
      
 17 
     | 
    
         
            +
                  response = requestors.index.new.fetch(request_path, auth_params)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  responders.index.new(response.body, response.code)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def show(id)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  response = requestors.show.new.fetch(request_path(id), auth_params)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  responders.show.new(response.body, response.code)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def create(model)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  response = requestors.create.new.fetch(
         
     | 
| 
      
 28 
     | 
    
         
            +
                    request_path, auth_params, model
         
     | 
| 
      
 29 
     | 
    
         
            +
                  )
         
     | 
| 
      
 30 
     | 
    
         
            +
                  responders.create.new(response.body, response.code)
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def update(id, model)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  response = requestors.update.new.fetch(
         
     | 
| 
      
 35 
     | 
    
         
            +
                    request_path(id), auth_params, model
         
     | 
| 
      
 36 
     | 
    
         
            +
                  )
         
     | 
| 
      
 37 
     | 
    
         
            +
                  responders.update.new(response.body, response.code)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def destroy(id)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  response = requestors.destroy.new.fetch(
         
     | 
| 
      
 42 
     | 
    
         
            +
                    request_path(id), auth_params
         
     | 
| 
      
 43 
     | 
    
         
            +
                  )
         
     | 
| 
      
 44 
     | 
    
         
            +
                  responders.destroy.new(response.body, response.code)
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                protected
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def requestors
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @requestors ||= Requests.new
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def responders
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @responders ||= Responses.new
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def update_params(model)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  model.to_json
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                def request_path(id = nil)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  pather.path(id)
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def auth_params
         
     | 
| 
      
 66 
     | 
    
         
            +
                  {
         
     | 
| 
      
 67 
     | 
    
         
            +
                    api_key: api_key,
         
     | 
| 
      
 68 
     | 
    
         
            +
                    api_password: api_password
         
     | 
| 
      
 69 
     | 
    
         
            +
                  }
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                private
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                def validate_variables
         
     | 
| 
      
 75 
     | 
    
         
            +
                  fail 'api_key must be set' if api_key.nil?
         
     | 
| 
      
 76 
     | 
    
         
            +
                  fail 'api_password must be set' if api_password.nil?
         
     | 
| 
      
 77 
     | 
    
         
            +
                  fail 'pather must be set' if pather.nil?
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'request'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module JsonClient
         
     | 
| 
      
 4 
     | 
    
         
            +
              module BaseRequests
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Create < Request
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def fetch(url, auth_params, model)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    client.post(
         
     | 
| 
      
 8 
     | 
    
         
            +
                      url,
         
     | 
| 
      
 9 
     | 
    
         
            +
                      auth_params.merge(create_params(model)).to_json,
         
     | 
| 
      
 10 
     | 
    
         
            +
                      content_type: :json,
         
     | 
| 
      
 11 
     | 
    
         
            +
                      accept: :json
         
     | 
| 
      
 12 
     | 
    
         
            +
                    )
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  private
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def create_params(model)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    model.to_h
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'request'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module JsonClient
         
     | 
| 
      
 4 
     | 
    
         
            +
              module BaseRequests
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Update < Request
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def fetch(url, auth_params, model)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    client.put(
         
     | 
| 
      
 8 
     | 
    
         
            +
                      url,
         
     | 
| 
      
 9 
     | 
    
         
            +
                      auth_params.merge(update_params(model)).to_json,
         
     | 
| 
      
 10 
     | 
    
         
            +
                      content_type: :json,
         
     | 
| 
      
 11 
     | 
    
         
            +
                      accept: :json
         
     | 
| 
      
 12 
     | 
    
         
            +
                    )
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  protected
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def update_params(model)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    model.to_h
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'base_requests/index'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'base_requests/show'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'base_requests/create'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'base_requests/update'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'base_requests/destroy'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module JsonClient
         
     | 
| 
      
 8 
     | 
    
         
            +
              class Requests
         
     | 
| 
      
 9 
     | 
    
         
            +
                def index
         
     | 
| 
      
 10 
     | 
    
         
            +
                  BaseRequests::Index
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def show
         
     | 
| 
      
 14 
     | 
    
         
            +
                  BaseRequests::Show
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def create
         
     | 
| 
      
 18 
     | 
    
         
            +
                  BaseRequests::Create
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def update
         
     | 
| 
      
 22 
     | 
    
         
            +
                  BaseRequests::Update
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def destroy
         
     | 
| 
      
 26 
     | 
    
         
            +
                  BaseRequests::Destroy
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative 'base_responses/index'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'base_responses/show'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative 'base_responses/create'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'base_responses/update'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'base_responses/destroy'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module JsonClient
         
     | 
| 
      
 8 
     | 
    
         
            +
              class Responses
         
     | 
| 
      
 9 
     | 
    
         
            +
                def index
         
     | 
| 
      
 10 
     | 
    
         
            +
                  BaseResponses::Index
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def show
         
     | 
| 
      
 14 
     | 
    
         
            +
                  BaseResponses::Show
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def create
         
     | 
| 
      
 18 
     | 
    
         
            +
                  BaseResponses::Create
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def update
         
     | 
| 
      
 22 
     | 
    
         
            +
                  BaseResponses::Update
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def destroy
         
     | 
| 
      
 26 
     | 
    
         
            +
                  BaseResponses::Destroy
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/json_client/version.rb
    CHANGED
    
    
    
        data/lib/json_client.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 9 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            describe JsonClient::BaseRequests::Request do
         
     | 
| 
      
 13 
     | 
    
         
            +
              pending '# TODO'
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 9 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            describe JsonClient::BaseResponses::Response do
         
     | 
| 
      
 13 
     | 
    
         
            +
              let(:code) do
         
     | 
| 
      
 14 
     | 
    
         
            +
                200
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              let(:body) do
         
     | 
| 
      
 18 
     | 
    
         
            +
                %q<{ "hello" : "world" }>
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              let(:json) do
         
     | 
| 
      
 22 
     | 
    
         
            +
                JSON.parse(body)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              subject do
         
     | 
| 
      
 26 
     | 
    
         
            +
                described_class.new(
         
     | 
| 
      
 27 
     | 
    
         
            +
                  body,
         
     | 
| 
      
 28 
     | 
    
         
            +
                  code
         
     | 
| 
      
 29 
     | 
    
         
            +
                )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe '#json' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                it 'returns the parsed json from the body' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  expect(subject.json).to eq json
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              describe '#body' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                it 'returns the body' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  expect(subject.body).to eq body
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              describe '#code' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                it 'returns the response code' do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  expect(subject.code).to eq code
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,109 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 7 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            describe JsonClient::Base do
         
     | 
| 
      
 12 
     | 
    
         
            +
              let(:config) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                {
         
     | 
| 
      
 14 
     | 
    
         
            +
                  api_key: '124ecd49-07fd-4553-a5cd-0178b7fa8b3f',
         
     | 
| 
      
 15 
     | 
    
         
            +
                  api_password: 'IIoclO7kmQqJ1wixWrAuOA',
         
     | 
| 
      
 16 
     | 
    
         
            +
                  host: 'http://account-authenticator.herokuapp.com'
         
     | 
| 
      
 17 
     | 
    
         
            +
                }
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              let(:pather) do
         
     | 
| 
      
 21 
     | 
    
         
            +
                JsonClient::Pather.new(
         
     | 
| 
      
 22 
     | 
    
         
            +
                  config[:host],
         
     | 
| 
      
 23 
     | 
    
         
            +
                  'api/v1',
         
     | 
| 
      
 24 
     | 
    
         
            +
                  'accounts'
         
     | 
| 
      
 25 
     | 
    
         
            +
                )
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              let(:account) do
         
     | 
| 
      
 29 
     | 
    
         
            +
                { username: 'new_username', password: 'new_password' }
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              let(:new_account) do
         
     | 
| 
      
 33 
     | 
    
         
            +
                { username: 'new_username_1', password: 'new_password_1' }
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              let(:destroy_account) do
         
     | 
| 
      
 37 
     | 
    
         
            +
                { username: 'new_username_2', password: 'new_password_2' }
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              let(:updated_account) do
         
     | 
| 
      
 41 
     | 
    
         
            +
                { username: 'updated_username', password: 'updated_password' }
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              subject do
         
     | 
| 
      
 45 
     | 
    
         
            +
                described_class.new(
         
     | 
| 
      
 46 
     | 
    
         
            +
                  pather,
         
     | 
| 
      
 47 
     | 
    
         
            +
                  config
         
     | 
| 
      
 48 
     | 
    
         
            +
                )
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              describe '#all' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                it 'fetches all the accounts' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  VCR.use_cassette('all_success') do
         
     | 
| 
      
 54 
     | 
    
         
            +
                    response = subject.index.json
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                    expect(response['accounts']).not_to be nil
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              describe '#create' do
         
     | 
| 
      
 62 
     | 
    
         
            +
                it 'creates an account' do
         
     | 
| 
      
 63 
     | 
    
         
            +
                  VCR.use_cassette('create_success') do
         
     | 
| 
      
 64 
     | 
    
         
            +
                    response = subject.create(account).json
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    expect(response['username']).to eq 'new_username'
         
     | 
| 
      
 67 
     | 
    
         
            +
                    expect(response['id']).not_to be nil
         
     | 
| 
      
 68 
     | 
    
         
            +
                    expect(response['created_at']).not_to be nil
         
     | 
| 
      
 69 
     | 
    
         
            +
                    expect(response['updated_at']).not_to be nil
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
              describe '#show' do
         
     | 
| 
      
 75 
     | 
    
         
            +
                it 'fetches the account' do
         
     | 
| 
      
 76 
     | 
    
         
            +
                  VCR.use_cassette('show_success') do
         
     | 
| 
      
 77 
     | 
    
         
            +
                    response = subject.show(6).json
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                    expect(response['username']).to eq 'new_username'
         
     | 
| 
      
 80 
     | 
    
         
            +
                    expect(response['id']).to be 6
         
     | 
| 
      
 81 
     | 
    
         
            +
                    expect(response['created_at']).to eq '2015-01-04T20:36:28.339Z'
         
     | 
| 
      
 82 
     | 
    
         
            +
                    expect(response['updated_at']).to eq '2015-01-04T20:36:28.339Z'
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              describe '#update' do
         
     | 
| 
      
 88 
     | 
    
         
            +
                it 'updates the account' do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  VCR.use_cassette('update_success') do
         
     | 
| 
      
 90 
     | 
    
         
            +
                    id = subject.create(new_account).json['id']
         
     | 
| 
      
 91 
     | 
    
         
            +
                    response = subject.update(id, updated_account).json
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                    expect(response['username']).to eq updated_account[:username]
         
     | 
| 
      
 94 
     | 
    
         
            +
                    expect(response['id']).to eq id
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              describe '#destroy' do
         
     | 
| 
      
 100 
     | 
    
         
            +
                it 'destroys the account' do
         
     | 
| 
      
 101 
     | 
    
         
            +
                  VCR.use_cassette('destroy_success') do
         
     | 
| 
      
 102 
     | 
    
         
            +
                    id = subject.create(destroy_account).json['id']
         
     | 
| 
      
 103 
     | 
    
         
            +
                    response = subject.destroy(id).json
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                    expect(response['id']).to eq id
         
     | 
| 
      
 106 
     | 
    
         
            +
                  end
         
     | 
| 
      
 107 
     | 
    
         
            +
                end
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
      
 109 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 7 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            describe JsonClient::Pather do
         
     | 
| 
      
 12 
     | 
    
         
            +
              let(:host) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                'https://www.example.com'
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              let(:relative_path) do
         
     | 
| 
      
 17 
     | 
    
         
            +
                'api/v1'
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              let(:model_name) do
         
     | 
| 
      
 21 
     | 
    
         
            +
                'models'
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              let(:example_show_path) do
         
     | 
| 
      
 25 
     | 
    
         
            +
                'https://www.example.com/api/v1/models/1'
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              let(:example_index_path) do
         
     | 
| 
      
 29 
     | 
    
         
            +
                'https://www.example.com/api/v1/models'
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              subject do
         
     | 
| 
      
 33 
     | 
    
         
            +
                described_class.new(
         
     | 
| 
      
 34 
     | 
    
         
            +
                  host, relative_path, model_name
         
     | 
| 
      
 35 
     | 
    
         
            +
                )
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              describe '#path' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                context 'with id not given' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  it 'creates the full path with id at the end' do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    expect(subject.path).to eq example_index_path
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                context 'with id given' do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  it 'creates the full path with id at the end' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                    expect(subject.path(1)).to eq example_show_path
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 7 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            describe JsonClient::Requests do
         
     | 
| 
      
 12 
     | 
    
         
            +
              subject { described_class.new }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              describe '#index' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                it 'returns a index request class' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  expect(subject.index).to be JsonClient::BaseRequests::Index
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              describe '#show' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                it 'returns a show request class' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(subject.show).to be JsonClient::BaseRequests::Show
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              describe '#create' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                it 'returns a create request class' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  expect(subject.create).to be JsonClient::BaseRequests::Create
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe '#update' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                it 'returns an update request class' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  expect(subject.update).to be JsonClient::BaseRequests::Update
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              describe '#destroy' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                it 'returns a destroy request class' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  expect(subject.destroy).to be JsonClient::BaseRequests::Destroy
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rspec/collection_matchers'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json_client'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'vcr'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            VCR.configure do |c|
         
     | 
| 
      
 7 
     | 
    
         
            +
              c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
         
     | 
| 
      
 8 
     | 
    
         
            +
              c.hook_into :webmock
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            describe JsonClient::Responses do
         
     | 
| 
      
 12 
     | 
    
         
            +
              subject { described_class.new }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              describe '#index' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                it 'returns a index response class' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  expect(subject.index).to be JsonClient::BaseResponses::Index
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              describe '#show' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                it 'returns a show response class' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(subject.show).to be JsonClient::BaseResponses::Show
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              describe '#create' do
         
     | 
| 
      
 27 
     | 
    
         
            +
                it 'returns a create response class' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  expect(subject.create).to be JsonClient::BaseResponses::Create
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe '#update' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                it 'returns an update response class' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                  expect(subject.update).to be JsonClient::BaseResponses::Update
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              describe '#destroy' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                it 'returns a destroy response class' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  expect(subject.destroy).to be JsonClient::BaseResponses::Destroy
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/json_client_spec.rb
    CHANGED
    
    | 
         @@ -17,19 +17,25 @@ describe JsonClient do 
     | 
|
| 
       17 
17 
     | 
    
         
             
                }
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
               
     | 
| 
       21 
     | 
    
         
            -
                 
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                   
     | 
| 
       31 
     | 
    
         
            -
                   
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
              let(:pather) do
         
     | 
| 
      
 21 
     | 
    
         
            +
                JsonClient::Pather.new(
         
     | 
| 
      
 22 
     | 
    
         
            +
                  config[:host],
         
     | 
| 
      
 23 
     | 
    
         
            +
                  'etc',
         
     | 
| 
      
 24 
     | 
    
         
            +
                  'end'
         
     | 
| 
      
 25 
     | 
    
         
            +
                )
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              subject do
         
     | 
| 
      
 29 
     | 
    
         
            +
                described_class.new(
         
     | 
| 
      
 30 
     | 
    
         
            +
                  pather,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  config
         
     | 
| 
      
 32 
     | 
    
         
            +
                )
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              describe '::new' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                it 'creates a new base client' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  expect(subject.api_key).to eq config[:api_key]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  expect(subject.api_password).to eq config[:api_password]
         
     | 
| 
       33 
39 
     | 
    
         
             
                end
         
     | 
| 
       34 
40 
     | 
    
         
             
              end
         
     | 
| 
       35 
41 
     | 
    
         
             
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: json_client
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - johnmcconnell
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-01- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-01-07 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rest-client
         
     | 
| 
         @@ -24,6 +24,34 @@ dependencies: 
     | 
|
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: 1.7.2
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: simplecov
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 0.8.0
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 0.8.0
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: coveralls
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 0.7.0
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 0.7.0
         
     | 
| 
       27 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
56 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -109,14 +137,22 @@ files: 
     | 
|
| 
       109 
137 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       110 
138 
     | 
    
         
             
            - json_client.gemspec
         
     | 
| 
       111 
139 
     | 
    
         
             
            - lib/json_client.rb
         
     | 
| 
       112 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       113 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       114 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       115 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       116 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       117 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
       118 
     | 
    
         
            -
            - lib/json_client/ 
     | 
| 
      
 140 
     | 
    
         
            +
            - lib/json_client/base.rb
         
     | 
| 
      
 141 
     | 
    
         
            +
            - lib/json_client/base_requests/create.rb
         
     | 
| 
      
 142 
     | 
    
         
            +
            - lib/json_client/base_requests/destroy.rb
         
     | 
| 
      
 143 
     | 
    
         
            +
            - lib/json_client/base_requests/index.rb
         
     | 
| 
      
 144 
     | 
    
         
            +
            - lib/json_client/base_requests/request.rb
         
     | 
| 
      
 145 
     | 
    
         
            +
            - lib/json_client/base_requests/show.rb
         
     | 
| 
      
 146 
     | 
    
         
            +
            - lib/json_client/base_requests/update.rb
         
     | 
| 
      
 147 
     | 
    
         
            +
            - lib/json_client/base_responses/create.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            - lib/json_client/base_responses/destroy.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - lib/json_client/base_responses/index.rb
         
     | 
| 
      
 150 
     | 
    
         
            +
            - lib/json_client/base_responses/response.rb
         
     | 
| 
      
 151 
     | 
    
         
            +
            - lib/json_client/base_responses/show.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - lib/json_client/base_responses/update.rb
         
     | 
| 
       119 
153 
     | 
    
         
             
            - lib/json_client/pather.rb
         
     | 
| 
      
 154 
     | 
    
         
            +
            - lib/json_client/requests.rb
         
     | 
| 
      
 155 
     | 
    
         
            +
            - lib/json_client/responses.rb
         
     | 
| 
       120 
156 
     | 
    
         
             
            - lib/json_client/version.rb
         
     | 
| 
       121 
157 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/all_success.yml
         
     | 
| 
       122 
158 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/authenticate_success.yml
         
     | 
| 
         @@ -124,6 +160,12 @@ files: 
     | 
|
| 
       124 
160 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/destroy_success.yml
         
     | 
| 
       125 
161 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/show_success.yml
         
     | 
| 
       126 
162 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/update_success.yml
         
     | 
| 
      
 163 
     | 
    
         
            +
            - spec/json_client/base_requests/request_spec.rb
         
     | 
| 
      
 164 
     | 
    
         
            +
            - spec/json_client/base_responses/response_spec.rb
         
     | 
| 
      
 165 
     | 
    
         
            +
            - spec/json_client/base_spec.rb
         
     | 
| 
      
 166 
     | 
    
         
            +
            - spec/json_client/pather_spec.rb
         
     | 
| 
      
 167 
     | 
    
         
            +
            - spec/json_client/requests_spec.rb
         
     | 
| 
      
 168 
     | 
    
         
            +
            - spec/json_client/responses_spec.rb
         
     | 
| 
       127 
169 
     | 
    
         
             
            - spec/json_client_spec.rb
         
     | 
| 
       128 
170 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       129 
171 
     | 
    
         
             
            homepage: ''
         
     | 
| 
         @@ -157,5 +199,11 @@ test_files: 
     | 
|
| 
       157 
199 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/destroy_success.yml
         
     | 
| 
       158 
200 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/show_success.yml
         
     | 
| 
       159 
201 
     | 
    
         
             
            - spec/fixtures/vcr_cassettes/update_success.yml
         
     | 
| 
      
 202 
     | 
    
         
            +
            - spec/json_client/base_requests/request_spec.rb
         
     | 
| 
      
 203 
     | 
    
         
            +
            - spec/json_client/base_responses/response_spec.rb
         
     | 
| 
      
 204 
     | 
    
         
            +
            - spec/json_client/base_spec.rb
         
     | 
| 
      
 205 
     | 
    
         
            +
            - spec/json_client/pather_spec.rb
         
     | 
| 
      
 206 
     | 
    
         
            +
            - spec/json_client/requests_spec.rb
         
     | 
| 
      
 207 
     | 
    
         
            +
            - spec/json_client/responses_spec.rb
         
     | 
| 
       160 
208 
     | 
    
         
             
            - spec/json_client_spec.rb
         
     | 
| 
       161 
209 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
         @@ -1,111 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'rest_client'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require_relative 'abstract_responses/index'
         
     | 
| 
       4 
     | 
    
         
            -
            require_relative 'abstract_responses/show'
         
     | 
| 
       5 
     | 
    
         
            -
            require_relative 'abstract_responses/create'
         
     | 
| 
       6 
     | 
    
         
            -
            require_relative 'abstract_responses/update'
         
     | 
| 
       7 
     | 
    
         
            -
            require_relative 'abstract_responses/destroy'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            module JsonClient
         
     | 
| 
       10 
     | 
    
         
            -
              class AbstractClient
         
     | 
| 
       11 
     | 
    
         
            -
                attr_reader :api_key, :api_password, :pather
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                def initialize(pather, config)
         
     | 
| 
       14 
     | 
    
         
            -
                  @api_key = config[:api_key]
         
     | 
| 
       15 
     | 
    
         
            -
                  @api_password = config[:api_password]
         
     | 
| 
       16 
     | 
    
         
            -
                  @pather = pather
         
     | 
| 
       17 
     | 
    
         
            -
                  validate_variables
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                def index
         
     | 
| 
       21 
     | 
    
         
            -
                  uri = request_path
         
     | 
| 
       22 
     | 
    
         
            -
                  response = RestClient.get uri, params: auth_params
         
     | 
| 
       23 
     | 
    
         
            -
                  index_response_factory.new(response.body, response.code)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                def show(id)
         
     | 
| 
       27 
     | 
    
         
            -
                  uri = request_path(id)
         
     | 
| 
       28 
     | 
    
         
            -
                  response = RestClient.get uri, params: auth_params
         
     | 
| 
       29 
     | 
    
         
            -
                  show_response_factory.new(response.body, response.code)
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                def create(model)
         
     | 
| 
       33 
     | 
    
         
            -
                  uri = request_path
         
     | 
| 
       34 
     | 
    
         
            -
                  response = RestClient.post(
         
     | 
| 
       35 
     | 
    
         
            -
                    uri,
         
     | 
| 
       36 
     | 
    
         
            -
                    auth_params.merge(create_params(model)).to_json,
         
     | 
| 
       37 
     | 
    
         
            -
                    content_type: :json,
         
     | 
| 
       38 
     | 
    
         
            -
                    accept: :json
         
     | 
| 
       39 
     | 
    
         
            -
                  )
         
     | 
| 
       40 
     | 
    
         
            -
                  create_response_factory.new(response.body, response.code)
         
     | 
| 
       41 
     | 
    
         
            -
                end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                def update(id, model)
         
     | 
| 
       44 
     | 
    
         
            -
                  uri = request_path(id)
         
     | 
| 
       45 
     | 
    
         
            -
                  response = RestClient.put(
         
     | 
| 
       46 
     | 
    
         
            -
                    uri,
         
     | 
| 
       47 
     | 
    
         
            -
                    auth_params.merge(update_params(model)).to_json,
         
     | 
| 
       48 
     | 
    
         
            -
                    content_type: :json,
         
     | 
| 
       49 
     | 
    
         
            -
                    accept: :json
         
     | 
| 
       50 
     | 
    
         
            -
                  )
         
     | 
| 
       51 
     | 
    
         
            -
                  update_response_factory.new(response.body, response.code)
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                def destroy(id)
         
     | 
| 
       55 
     | 
    
         
            -
                  uri = request_path(id)
         
     | 
| 
       56 
     | 
    
         
            -
                  response = RestClient.delete(
         
     | 
| 
       57 
     | 
    
         
            -
                    uri, params: auth_params
         
     | 
| 
       58 
     | 
    
         
            -
                  )
         
     | 
| 
       59 
     | 
    
         
            -
                  destroy_response_factory.new(response.body, response.code)
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                protected
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                def index_response_factory
         
     | 
| 
       65 
     | 
    
         
            -
                  AbstractResponses::Index
         
     | 
| 
       66 
     | 
    
         
            -
                end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                def show_response_factory
         
     | 
| 
       69 
     | 
    
         
            -
                  AbstractResponses::Show
         
     | 
| 
       70 
     | 
    
         
            -
                end
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                def create_response_factory
         
     | 
| 
       73 
     | 
    
         
            -
                  AbstractResponses::Create
         
     | 
| 
       74 
     | 
    
         
            -
                end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                def update_response_factory
         
     | 
| 
       77 
     | 
    
         
            -
                  AbstractResponses::Update
         
     | 
| 
       78 
     | 
    
         
            -
                end
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                def destroy_response_factory
         
     | 
| 
       81 
     | 
    
         
            -
                  AbstractResponses::Destroy
         
     | 
| 
       82 
     | 
    
         
            -
                end
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                def create_params(model)
         
     | 
| 
       85 
     | 
    
         
            -
                  model.to_json
         
     | 
| 
       86 
     | 
    
         
            -
                end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                def update_params(model)
         
     | 
| 
       89 
     | 
    
         
            -
                  model.to_json
         
     | 
| 
       90 
     | 
    
         
            -
                end
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
                def request_path(id = nil)
         
     | 
| 
       93 
     | 
    
         
            -
                  pather.path(id)
         
     | 
| 
       94 
     | 
    
         
            -
                end
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
                def auth_params
         
     | 
| 
       97 
     | 
    
         
            -
                  {
         
     | 
| 
       98 
     | 
    
         
            -
                    api_key: api_key,
         
     | 
| 
       99 
     | 
    
         
            -
                    api_password: api_password
         
     | 
| 
       100 
     | 
    
         
            -
                  }
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                private
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                def validate_variables
         
     | 
| 
       106 
     | 
    
         
            -
                  fail 'api_key must be set' if api_key.nil?
         
     | 
| 
       107 
     | 
    
         
            -
                  fail 'api_password must be set' if api_key.nil?
         
     | 
| 
       108 
     | 
    
         
            -
                  fail 'pather must be set' if api_key.nil?
         
     | 
| 
       109 
     | 
    
         
            -
                end
         
     | 
| 
       110 
     | 
    
         
            -
              end
         
     | 
| 
       111 
     | 
    
         
            -
            end
         
     |