artirix_data_models 0.8.3 → 0.9.0
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/README.md +17 -0
- data/lib/artirix_data_models/gateways/data_gateway.rb +110 -16
- data/lib/artirix_data_models/version.rb +1 -1
- 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: 713d558fd789e3af896c2621897a347ec1493f34
         | 
| 4 | 
            +
              data.tar.gz: 95f5c0b37d134fb771f28442000849a9b605011c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 549184151747d15673c69d9798adce02d61f8afe80d850c34f33d4f14755105a0b51ce7f03bfd771c8ea3b9ea14ea4c4dd8f9022f42b18051711d90f1d02331a
         | 
| 7 | 
            +
              data.tar.gz: eb5c9f12149a61af0db1218ca221da1a8816be668194e429511b4210abd4e1446967476f95534010870b477a6e176f8b1d7608502fc601ebea7d30b40c238e03
         | 
    
        data/README.md
    CHANGED
    
    | @@ -250,6 +250,23 @@ end | |
| 250 250 |  | 
| 251 251 | 
             
            ## Changes
         | 
| 252 252 |  | 
| 253 | 
            +
            ### 0.9.0
         | 
| 254 | 
            +
             | 
| 255 | 
            +
            - Fake Responses now can be a callable object (if it responds to `call` it will invoke it)
         | 
| 256 | 
            +
            - refactor in `ArtirixDataModels::DataGateway` to add more info into the exceptions
         | 
| 257 | 
            +
            - `ArtirixDataModels::DataGateway::Error` and subclasses have now `path`, `method`, `response_status`, `response_body` (when applicable) and also `json_response_body` method which will try to parse `response_body` as if it were json (nil if it is not present or if it is not a valid json)
         | 
| 258 | 
            +
            - `ArtirixDataModels::DataGateway::Error` subclasses now for specific response status: 
         | 
| 259 | 
            +
            -- `NotFound`
         | 
| 260 | 
            +
            -- `NotAcceptable` 
         | 
| 261 | 
            +
            -- `UnprocessableEntity`
         | 
| 262 | 
            +
            -- `Unauthorized`
         | 
| 263 | 
            +
            -- `Forbidden`
         | 
| 264 | 
            +
            -- `RequestTimeout`
         | 
| 265 | 
            +
            -- `TooManyRequests`
         | 
| 266 | 
            +
            -- `ServerError`
         | 
| 267 | 
            +
             | 
| 268 | 
            +
            note: `ParseError` will not have the `response_status`
         | 
| 269 | 
            +
             | 
| 253 270 | 
             
            ### 0.8.3
         | 
| 254 271 |  | 
| 255 272 | 
             
            - `DataGateway` refactor, plus adding `put` and `delete` support.
         | 
| @@ -24,13 +24,17 @@ class ArtirixDataModels::DataGateway | |
| 24 24 |  | 
| 25 25 | 
             
              def call(method, path, json_body: true, response_adaptor: nil, body: nil, fake: false, fake_response: nil, cache_adaptor: nil, **_ignored_options)
         | 
| 26 26 | 
             
                if fake
         | 
| 27 | 
            -
                   | 
| 27 | 
            +
                  result = fake_response.respond_to?(:call) ? fake_response.call : fake_response
         | 
| 28 28 | 
             
                elsif cache_adaptor.present?
         | 
| 29 | 
            -
                   | 
| 29 | 
            +
                  result = cache_adaptor.call { perform(method, path, body, json_body) }
         | 
| 30 30 | 
             
                else
         | 
| 31 | 
            -
                   | 
| 31 | 
            +
                  result = perform(method, path, body, json_body)
         | 
| 32 32 | 
             
                end
         | 
| 33 | 
            -
             | 
| 33 | 
            +
             | 
| 34 | 
            +
                parse_response result:           result,
         | 
| 35 | 
            +
                               response_adaptor: response_adaptor,
         | 
| 36 | 
            +
                               method:           method,
         | 
| 37 | 
            +
                               path:             path
         | 
| 34 38 | 
             
              end
         | 
| 35 39 |  | 
| 36 40 | 
             
              private
         | 
| @@ -70,17 +74,14 @@ class ArtirixDataModels::DataGateway | |
| 70 74 | 
             
                  end
         | 
| 71 75 | 
             
                end
         | 
| 72 76 | 
             
              rescue Faraday::ConnectionFailed => e
         | 
| 73 | 
            -
                raise ConnectionError, "method: #{method}, path: #{path}, error: #{e}"
         | 
| 77 | 
            +
                raise ConnectionError.new(path: path, method: method), "method: #{method}, path: #{path}, error: #{e}"
         | 
| 74 78 | 
             
              end
         | 
| 75 79 |  | 
| 76 80 | 
             
              def treat_response(response, method, path)
         | 
| 77 | 
            -
                if response.success?
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                 | 
| 80 | 
            -
             | 
| 81 | 
            -
                else
         | 
| 82 | 
            -
                  raise GatewayError, "method: #{method}, path: #{path}, status: #{response.status}, body: #{response.body}"
         | 
| 83 | 
            -
                end
         | 
| 81 | 
            +
                return response.body if response.success?
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                klass = exception_for_status(response.status)
         | 
| 84 | 
            +
                raise klass.new(path: path, method: method, response_body: response.body, response_status: response.status)
         | 
| 84 85 | 
             
              end
         | 
| 85 86 |  | 
| 86 87 | 
             
              def body_to_json(body)
         | 
| @@ -92,7 +93,7 @@ class ArtirixDataModels::DataGateway | |
| 92 93 | 
             
                end
         | 
| 93 94 | 
             
              end
         | 
| 94 95 |  | 
| 95 | 
            -
              def parse_response(result | 
| 96 | 
            +
              def parse_response(result:, response_adaptor:, path:, method:)
         | 
| 96 97 | 
             
                if result.present?
         | 
| 97 98 | 
             
                  parsed_response = Oj.load result, symbol_keys: true
         | 
| 98 99 | 
             
                else
         | 
| @@ -106,7 +107,30 @@ class ArtirixDataModels::DataGateway | |
| 106 107 | 
             
                end
         | 
| 107 108 |  | 
| 108 109 | 
             
              rescue Oj::ParseError => e
         | 
| 109 | 
            -
                raise ParseError,  | 
| 110 | 
            +
                raise ParseError.new(path: path, method: method, response_body: result), e.message
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              def exception_for_status(response_status)
         | 
| 114 | 
            +
                case response_status.to_i
         | 
| 115 | 
            +
                when 404
         | 
| 116 | 
            +
                  NotFound
         | 
| 117 | 
            +
                when 406
         | 
| 118 | 
            +
                  NotAcceptable
         | 
| 119 | 
            +
                when 422
         | 
| 120 | 
            +
                  UnprocessableEntity
         | 
| 121 | 
            +
                when 401
         | 
| 122 | 
            +
                  Unauthorized
         | 
| 123 | 
            +
                when 403
         | 
| 124 | 
            +
                  Forbidden
         | 
| 125 | 
            +
                when 408
         | 
| 126 | 
            +
                  RequestTimeout
         | 
| 127 | 
            +
                when 429
         | 
| 128 | 
            +
                  TooManyRequests
         | 
| 129 | 
            +
                when 500
         | 
| 130 | 
            +
                  ServerError
         | 
| 131 | 
            +
                else
         | 
| 132 | 
            +
                  GatewayError
         | 
| 133 | 
            +
                end
         | 
| 110 134 | 
             
              end
         | 
| 111 135 |  | 
| 112 136 | 
             
              module DefaultConnectionLoader
         | 
| @@ -143,9 +167,38 @@ class ArtirixDataModels::DataGateway | |
| 143 167 | 
             
              end
         | 
| 144 168 |  | 
| 145 169 | 
             
              class Error < StandardError
         | 
| 146 | 
            -
             | 
| 170 | 
            +
                attr_reader :path, :method, :response_status, :response_body
         | 
| 147 171 |  | 
| 148 | 
            -
             | 
| 172 | 
            +
                def initialize(path: nil, method: nil, response_status: nil, response_body: nil)
         | 
| 173 | 
            +
                  @path            = path
         | 
| 174 | 
            +
                  @method          = method
         | 
| 175 | 
            +
                  @response_status = response_status
         | 
| 176 | 
            +
                  @response_body   = response_body
         | 
| 177 | 
            +
                end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                def json_response_body
         | 
| 180 | 
            +
                  return nil unless response_body.present?
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  Oj.load response_body, symbol_keys: true
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                rescue Oj::Error # in case it's not json
         | 
| 185 | 
            +
                  nil
         | 
| 186 | 
            +
                end
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                def to_s
         | 
| 189 | 
            +
                  msg = super
         | 
| 190 | 
            +
                  msg = nil if msg == self.class.to_s
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                  parts = {
         | 
| 193 | 
            +
                    path:            path,
         | 
| 194 | 
            +
                    method:          method,
         | 
| 195 | 
            +
                    response_status: response_status,
         | 
| 196 | 
            +
                    response_body:   response_body,
         | 
| 197 | 
            +
                    message:         msg,
         | 
| 198 | 
            +
                  }.select { |_, v| v.present? }.map { |k, v| "#{k}: #{v.inspect}" }
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                  "#{self.class}: #{parts.join ', '}"
         | 
| 201 | 
            +
                end
         | 
| 149 202 | 
             
              end
         | 
| 150 203 |  | 
| 151 204 | 
             
              class ParseError < Error
         | 
| @@ -154,6 +207,47 @@ class ArtirixDataModels::DataGateway | |
| 154 207 | 
             
              class GatewayError < Error
         | 
| 155 208 | 
             
              end
         | 
| 156 209 |  | 
| 210 | 
            +
              ###########################################
         | 
| 211 | 
            +
              # SPECIAL, not subclasses of GatewayError #
         | 
| 212 | 
            +
              ###########################################
         | 
| 213 | 
            +
             | 
| 214 | 
            +
              # 404
         | 
| 215 | 
            +
              class NotFound < Error
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              # 406
         | 
| 219 | 
            +
              class NotAcceptable < Error
         | 
| 220 | 
            +
              end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              # 422
         | 
| 223 | 
            +
              class UnprocessableEntity < Error
         | 
| 224 | 
            +
              end
         | 
| 225 | 
            +
             | 
| 226 | 
            +
              ##############################
         | 
| 227 | 
            +
              # subclasses of GatewayError #
         | 
| 228 | 
            +
              ##############################
         | 
| 229 | 
            +
             | 
| 230 | 
            +
              # 401
         | 
| 231 | 
            +
              class Unauthorized < GatewayError
         | 
| 232 | 
            +
              end
         | 
| 233 | 
            +
             | 
| 234 | 
            +
              # 403
         | 
| 235 | 
            +
              class Forbidden < GatewayError
         | 
| 236 | 
            +
              end
         | 
| 237 | 
            +
             | 
| 238 | 
            +
              # 408
         | 
| 239 | 
            +
              class RequestTimeout < GatewayError
         | 
| 240 | 
            +
              end
         | 
| 241 | 
            +
             | 
| 242 | 
            +
              # 429
         | 
| 243 | 
            +
              class TooManyRequests < GatewayError
         | 
| 244 | 
            +
              end
         | 
| 245 | 
            +
             | 
| 246 | 
            +
              # 500
         | 
| 247 | 
            +
              class ServerError < GatewayError
         | 
| 248 | 
            +
              end
         | 
| 249 | 
            +
             | 
| 250 | 
            +
              # generic error
         | 
| 157 251 | 
             
              class ConnectionError < GatewayError
         | 
| 158 252 | 
             
              end
         | 
| 159 253 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: artirix_data_models
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.9.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eduardo Turiño
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-01- | 
| 11 | 
            +
            date: 2016-01-29 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         |