purple-client 0.1.7.2 → 0.1.7.3
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 +52 -0
- data/lib/purple/client/version.rb +7 -0
- data/lib/purple/client.rb +2 -1
- data/lib/purple/path.rb +3 -0
- data/lib/purple/responses/body.rb +3 -0
- data/lib/purple/responses/object.rb +1 -0
- data/lib/purple/version.rb +1 -1
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08cd363a5b6e96500dde9beaa81ac46fdb282d6e6225d8ca19d4ba917c0b6f4f'
|
4
|
+
data.tar.gz: 3eb93db2b0b359bc7b455ce6282bcc02d1d50991fbd8578a0527388b785fd9e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2653930ab7bcb2855c8ff142d401ffb8b1c676f0ca579f66fb7a780f8cb45760afff1f7f60fbabe7573091c4a877e6e5ea4d8d31d26c9dafd41a8c4d2b953095
|
7
|
+
data.tar.gz: f2aacc6f3e1d6ca9b6661c5ad08be55f29b12061e1b037d30aca40ef7bb397ebb2b6ef88e6df772e66abf8bb7b61d6247d7d1980b35009d9f759d3bbd48504b5
|
data/README.md
CHANGED
@@ -174,6 +174,58 @@ class AccountsClient < Purple::Client
|
|
174
174
|
end
|
175
175
|
```
|
176
176
|
|
177
|
+
### Optional fields
|
178
|
+
|
179
|
+
Sometimes an API response omits certain keys. You can mark those fields as
|
180
|
+
optional in the body definition so their absence doesn't raise validation errors.
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
class CalendarClient < Purple::Client
|
184
|
+
domain 'https://api.example.com'
|
185
|
+
|
186
|
+
path :schedule do
|
187
|
+
response :ok do
|
188
|
+
body(
|
189
|
+
day: { type: Integer, optional: true },
|
190
|
+
)
|
191
|
+
end
|
192
|
+
root_method :schedule
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# The `day` attribute may be missing in the response
|
197
|
+
CalendarClient.schedule
|
198
|
+
```
|
199
|
+
|
200
|
+
### Array responses
|
201
|
+
|
202
|
+
When an endpoint returns an array of objects, you can use `:array_of` to
|
203
|
+
describe the structure of each element in the array.
|
204
|
+
|
205
|
+
```ruby
|
206
|
+
class MerchantsClient < Purple::Client
|
207
|
+
domain 'https://api.example.com'
|
208
|
+
|
209
|
+
path :merchants do
|
210
|
+
response :ok do
|
211
|
+
structure = {
|
212
|
+
id: Integer,
|
213
|
+
name: String,
|
214
|
+
address: String,
|
215
|
+
work_time: String,
|
216
|
+
accepts_qr: { type: String, optional: true }
|
217
|
+
}
|
218
|
+
|
219
|
+
body(:array_of, **structure)
|
220
|
+
end
|
221
|
+
root_method :merchants
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
# Each array element will be validated against the structure
|
226
|
+
MerchantsClient.merchants
|
227
|
+
```
|
228
|
+
|
177
229
|
## Development
|
178
230
|
|
179
231
|
After checking out the repo, run `bin/setup` to install dependencies. Then run
|
data/lib/purple/client.rb
CHANGED
data/lib/purple/path.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'purple/responses'
|
4
4
|
require 'purple/responses/object'
|
5
|
+
require "active_support/core_ext/string/inflections"
|
5
6
|
|
6
7
|
class Purple::Responses::Body
|
7
8
|
extend Dry::Initializer[undefined: false]
|
@@ -75,6 +76,8 @@ class Purple::Responses::Body
|
|
75
76
|
|
76
77
|
check_type!(object, key, value[:type])
|
77
78
|
else
|
79
|
+
next if object[key].nil?
|
80
|
+
|
78
81
|
check_structure!(object[key], substructure[key])
|
79
82
|
end
|
80
83
|
elsif value.is_a?(Array)
|
data/lib/purple/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: purple-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.7.
|
4
|
+
version: 0.1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-initializer
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: Build API wrappers faster
|
28
56
|
email:
|
29
57
|
- kalashnikovisme@gmail.com
|
@@ -40,6 +68,7 @@ files:
|
|
40
68
|
- Rakefile
|
41
69
|
- lib/purple/boolean.rb
|
42
70
|
- lib/purple/client.rb
|
71
|
+
- lib/purple/client/version.rb
|
43
72
|
- lib/purple/path.rb
|
44
73
|
- lib/purple/request.rb
|
45
74
|
- lib/purple/requests/authorization.rb
|