purple-client 0.1.3 → 0.1.4

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: 0f4ca49f00bb4d5ec1c6e85735ba6234a59aba7d82f783f4344bbe903018ae65
4
- data.tar.gz: b6d6a4f48c2a07196bbc89514fd163eee65ddf61b7d84aca83f57e4b1512224b
3
+ metadata.gz: 426284067d37937cf20cc78132fc5286f4d691ae66cb25177f01c7219e844667
4
+ data.tar.gz: e08e9819a221659f94b9bbb54b41aa59a23ee1bc7fb2b8ca829e5a8039173325
5
5
  SHA512:
6
- metadata.gz: e3964e69833c7f37ac6c95c8461d8b8ac3815891ed681d1414a4bd8b908078f11be980c5dfef100fe7f98a65eb8ace3a5ab4c171f37c61c8b7c8508b5d56abbe
7
- data.tar.gz: 2013f80e686a5c702f8b81f0e4497b333ef59560b8072dee468ef95c5f19b587a4eaf14dc3efcfa4f88f794539dec3fc1bb8360938237152e2461afb0973b142
6
+ metadata.gz: 0eb4508617a8198b6dd0cddfef087aabe63b65c4a8825bfe759caf379aa2a3adbb0b7705181363a937d2fa818b7d77458da4dcd244ba0da03ce2a0184d6df2cd
7
+ data.tar.gz: 22df3ed5def051f3a9fb372143a19e830276cd70a18756940ce1ec807b732273353788128c818fe5d3c303081b09d0904d9afd8bac281151e620d1a1e1ef4154
data/README.md CHANGED
@@ -100,6 +100,36 @@ end
100
100
  PostsClient.user_posts(user_id: 7)
101
101
  ```
102
102
 
103
+ ### Callbacks with additional arguments
104
+
105
+ ```ruby
106
+ class EventsClient < Purple::Client
107
+ domain 'https://api.example.com'
108
+
109
+ additional_callback_arguments :resource
110
+
111
+ callback do |url, params, headers, response, resource|
112
+ StoreEvent.call(url:, params:, headers:, response:, resource:)
113
+ end
114
+
115
+ path :events do
116
+ response :ok do
117
+ body :default
118
+ end
119
+ root_method :events
120
+ end
121
+ end
122
+
123
+ resource = SomeModel.find(1)
124
+ EventsClient.events(resource:)
125
+ ```
126
+
127
+ `additional_callback_arguments` lets you specify parameter names that will be
128
+ extracted from the call and passed to your callback. In the example above the
129
+ `resource` keyword argument is removed from the request parameters, but is
130
+ available inside the callback so you can associate the stored event with a
131
+ record of your choice.
132
+
103
133
  ## Development
104
134
 
105
135
  After checking out the repo, run `bin/setup` to install dependencies. Then run
data/lib/purple/client.rb CHANGED
@@ -69,9 +69,13 @@ module Purple
69
69
  kw_args[current_path.name] = value
70
70
  end
71
71
 
72
+ callback_arguments = additional_callback_arguments.map do |arg|
73
+ kw_args.delete(arg)
74
+ end
75
+
72
76
  params = current_path.request.params.call(**kw_args) if current_path.request.params.is_a?(Proc)
73
77
 
74
- current_path.execute(params, kw_args, &block)
78
+ current_path.execute(params, kw_args, *callback_arguments, &block)
75
79
  end
76
80
  end
77
81
 
@@ -112,6 +116,14 @@ module Purple
112
116
  super
113
117
  end
114
118
  end
119
+
120
+ def additional_callback_arguments(*array)
121
+ if array.empty?
122
+ @additional_callback_arguments || []
123
+ else
124
+ @additional_callback_arguments = array
125
+ end
126
+ end
115
127
  end
116
128
  end
117
129
  end
data/lib/purple/path.rb CHANGED
@@ -32,13 +32,21 @@ module Purple
32
32
  child.with(*args)
33
33
  end
34
34
 
35
- child.children.any? ? child : child.execute(*args)
35
+ if child.children.any?
36
+ child
37
+ else
38
+ callback_arguments = additional_callback_arguments.map do |arg|
39
+ kw_args.delete(arg)
40
+ end
41
+
42
+ child.execute(*args, *callback_arguments)
43
+ end
36
44
  else
37
45
  super
38
46
  end
39
47
  end
40
48
 
41
- def execute(params = {}, args = {})
49
+ def execute(params = {}, args = {}, *callback_arguments)
42
50
  headers = {
43
51
  'Accept' => 'application/json',
44
52
  'Content-Type' => 'application/json'
@@ -81,7 +89,7 @@ module Purple
81
89
  {}
82
90
  end
83
91
 
84
- client.callback&.call(url, params, headers, JSON.parse(response.body))
92
+ client.callback&.call(url, params, headers, JSON.parse(response.body), *callback_arguments)
85
93
 
86
94
  if block_given?
87
95
  yield(resp_structure.status, object)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Purple
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
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.3
4
+ version: 0.1.4
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-06-18 00:00:00.000000000 Z
11
+ date: 2025-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-initializer