wrappi 0.2.5 → 0.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdf93a36321552af49d6edd7b1e613f36d8294098e3702a3182adfca15dc664d
4
- data.tar.gz: 5c3ebb3d3507c5fc11ed7404a1f631fadc6a401c22828cffd0573b09c1f694ad
3
+ metadata.gz: 61be13fabeb0542feedb58078fe1308cf42286994dcafa91a7fccdf0de08200c
4
+ data.tar.gz: e0e8fe4b69ad694edc0ec1a0c2bb3f3a512f0415c8ceab94c7ed82065b721b37
5
5
  SHA512:
6
- metadata.gz: 42e98a0e070fa90e2eff25dcf2731630a8e1f9583f4a7a834ce56f71e78044ee22af1c1d9fbd4df7ed1a9de99337108b7257b36eb7a0714c8662e85d80970e17
7
- data.tar.gz: 13190e49c3a13054c473e7e2e345f26ba5602b35a679d0a70831c8359ca75fddfd3a31372266f89afb03e5ca7e9f76e9d95d3dbe4e8965baf932d1298012fec1
6
+ metadata.gz: 44cf1ab2fb72aadbddc0a191c1fccb6d3dee981189f28b08722947ae6295969dd05711f090524519ef832af938eec569d358649a1859a294e286fa1922096f27
7
+ data.tar.gz: 70ad84300904ab70b2758f306e925462f439b23d743b82fe2fc085dedaef06a2081541abb0c3aca8f0f7a19145fe818808c99257ae0b9d391d4f127ce31bad98
data/README.md CHANGED
@@ -30,8 +30,10 @@ Or install it yourself as:
30
30
 
31
31
  __Github example:__
32
32
 
33
+ You can test this examples running `bin/console`
34
+
33
35
  ```ruby
34
- module GithubAPI
36
+ module GithubCLI
35
37
  class Client < Wrappi::Client
36
38
  setup do |config|
37
39
  config.domain = 'https://api.github.com'
@@ -51,13 +53,92 @@ end
51
53
  ```
52
54
 
53
55
  ```ruby
54
- user = GithubAPI::User.new(username: 'arturictus')
56
+ user = GithubCLI::User.new(username: 'arturictus')
55
57
  user.success? # => true
56
58
  user.error? # => false
57
59
  user.status_code # => 200
58
60
  user.body # => {"login"=>"arturictus", "id"=>1930175, ...}
59
61
  ```
60
62
 
63
+ ### #success?
64
+
65
+ The next behaviours are using `#success?` method. You can override by redefining your own success?
66
+
67
+ The current `#success?` is defined like this:
68
+
69
+ _wrappi/response.rb_
70
+ ```ruby
71
+ def success?
72
+ @success ||= request.code < 300 && request.code >= 200
73
+ end
74
+ ```
75
+
76
+ Overrride your own in Endpoint
77
+ ```ruby
78
+ def success?
79
+ response.status == 201
80
+ end
81
+ ```
82
+
83
+ ##### #on_success | #on_error
84
+
85
+ ```ruby
86
+ GithubCLI::User.new(username: 'arturictus')
87
+ .on_success do |inst|
88
+ inst.status_code # => 200
89
+ inst.body # => {"login"=>"arturictus", "id"=>1930175, ...}
90
+ # do something useful
91
+ end.on_error do |inst|
92
+ puts "Error retrieving use"
93
+ end
94
+ ```
95
+
96
+ ##### ::body
97
+ If you just need to retrieve the body and handle the error response on your side
98
+
99
+ ```ruby
100
+ GithubCLI::User.body(username: 'arturictus') # => {"login"=>"arturictus", "id"=>1930175, ...}
101
+ ```
102
+ ```ruby
103
+ GithubCLI::User.body(username: 'sdfsdfasdjfojaspdjfpsajdpfoijsapdofijsadf')
104
+ # => {"message"=>"Not Found", "documentation_url"=>"https://developer.github.com/v3/users/#get-a-single-user"}
105
+ ```
106
+
107
+ ##### ::call
108
+
109
+ returns `false` if unsuccessful and instance if successful
110
+
111
+ ```ruby
112
+ if req = GithubCLI::User.call(username: 'arturictus')
113
+ req.body # => {"login"=>"arturictus", "id"=>1930175, ...}
114
+ else
115
+ # Handle error
116
+ end
117
+ ```
118
+ ##### ::call!
119
+
120
+ Raises error if unsuccessful, returns instance if successful
121
+
122
+ ```ruby
123
+ begin
124
+ req = GithubCLI::User.call!(username: 'arturictus')
125
+ req.body # => {"login"=>"arturictus", "id"=>1930175, ...}
126
+ rescue => Wrappi::UnsuccessfulResponse
127
+ # Handle error or not
128
+ end
129
+ ```
130
+
131
+ The error:
132
+
133
+ ```ruby
134
+ GithubCLI::User.call!(username: 'sdfsdfasdjfojaspdjfpsajdpfoijsapdofijsadf')
135
+ # Wrappi::UnsuccessfulResponse ()
136
+ # raw_body: {"message":"Not Found","documentation_url":"https://developer.github.com/v3/users/#get-a-single-user"}
137
+ # code: 404
138
+ # uri: https://api.github.com/users/sdfsdfasdjfojaspdjfpsajdpfoijsapdofijsadf
139
+ # success: false
140
+ ```
141
+
61
142
  #### Async
62
143
  Wrappi comes with a background Job out of the box. If you are in a Rails app the `#async`
63
144
  method will queue a new job (`< ActiveJob::Base`) that will make the request and trigger the async callback
@@ -8,6 +8,20 @@ module Wrappi
8
8
  class TimeoutError < StandardError; end
9
9
  class NotAuthorizedAccessError < StandardError; end
10
10
  class JsonParseError < StandardError; end
11
+ class UnsuccessfulResponse < StandardError
12
+ def initialize(endpoint)
13
+ @endpoint = endpoint
14
+ @output = StringIO.new.tap { |s| s.puts "" }
15
+ super(_message)
16
+ end
17
+
18
+ def _message
19
+ @endpoint.response.to_h.each do |k, v|
20
+ @output.puts " #{k}: #{v}"
21
+ end
22
+ @output.string
23
+ end
24
+ end
11
25
  end
12
26
 
13
27
  require 'wrappi/async_job'
@@ -19,6 +19,7 @@ module Wrappi
19
19
  basic_auth: proc { client.basic_auth }
20
20
  }
21
21
  )
22
+
22
23
  attr_reader :input_params, :options
23
24
  def initialize(input_params = {}, options = {})
24
25
  @input_params = input_params
@@ -29,10 +30,37 @@ module Wrappi
29
30
  new(*args).call
30
31
  end
31
32
 
33
+ def self.call!(*args)
34
+ new(*args).call!
35
+ end
36
+
37
+ def self.body(*args)
38
+ new(*args).body
39
+ end
40
+
41
+ def on_success(&block)
42
+ block.call(self) if success?
43
+ self
44
+ end
45
+
46
+ def on_error(&block)
47
+ block.call(self) unless success?
48
+ self
49
+ end
50
+
51
+ def call
52
+ return false unless success?
53
+ self
54
+ end
55
+
56
+ def call!
57
+ raise UnsuccessfulResponse.new(self) unless success?
58
+ self
59
+ end
60
+
32
61
  def response
33
62
  @response ||= Executer.call(self)
34
63
  end
35
- alias_method :call, :response
36
64
 
37
65
  def body; response.body end
38
66
  def success?; response.success? end
@@ -1,3 +1,3 @@
1
1
  module Wrappi
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wrappi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Pañach
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-12 00:00:00.000000000 Z
11
+ date: 2019-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler