kaze_client 0.2.0 → 0.2.1

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: ff98889c7d39f15fc54339f9751d5197b15d3c5ed8af54375382858cf76a431b
4
- data.tar.gz: 8484f58d8443003290a8a165c640c936705ffb4c2b7a51188fa9b8486d6e672c
3
+ metadata.gz: fd31be1e3cb6ccd738c9646f50ad6096961f4b77f893373f38481f747a2c5442
4
+ data.tar.gz: 7f2081157ac8778d108e4629524e228ad67aaeabb38ad977b7eb362476d0e996
5
5
  SHA512:
6
- metadata.gz: e0197299afa26f1a0a773f60e28f77c5d49b8a49930149f80e07cf7762311bdf7dd5c496df45e72c52d163b8e194ab57e7e94b97835449798db3f47f4a34e3bb
7
- data.tar.gz: 76488d384368b10038eb5e126c846c29f6bac94d318f899528b4c8d9b001e2c637d9775b882f40dfaa33d5e06884477e0801d3fb24eb8fbadb0e3f1b5423a2bb
6
+ metadata.gz: 96c9f307c9d54f2d446d82e10f1ed795223a2679c3dc60dcc7dcfd1f3609bf90b78042552e34560fe2ef292ea35ec2f93a8dc744f12ba05dac7c4a76316417f7
7
+ data.tar.gz: 5645d82b34831f41eacd354e69a573a7e566c488dd6686e9b552e704953319c4733715bbe34e13efd9007af1e75ad122b9e6c33d5b3c923d312b4d37b8d17fc0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [0.2.1] - 2022-06-17
2
+
3
+ - Add methods and utilities to get and set data in the response.
4
+
1
5
  ## [0.2.0] - 2022-06-01
2
6
 
3
7
  - Allow to set the authentication token on the client skipping login step.
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kaze_client (0.1.1p0)
4
+ kaze_client (0.2.0)
5
5
  httparty (~> 0.18, >= 0.18.1)
6
+ jsonpath (~> 1.1, >= 1.1.2)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -18,9 +19,12 @@ GEM
18
19
  io-console (0.5.11)
19
20
  irb (1.4.1)
20
21
  reline (>= 0.3.0)
22
+ jsonpath (1.1.2)
23
+ multi_json
21
24
  mime-types (3.4.1)
22
25
  mime-types-data (~> 3.2015)
23
26
  mime-types-data (3.2022.0105)
27
+ multi_json (1.15.0)
24
28
  multi_xml (0.6.0)
25
29
  parallel (1.22.1)
26
30
  parser (3.1.2.0)
data/kaze_client.gemspec CHANGED
@@ -32,5 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.require_paths = ['lib']
33
33
 
34
34
  spec.add_runtime_dependency 'httparty', '~> 0.18', '>= 0.18.1'
35
+ spec.add_runtime_dependency 'jsonpath', '~> 1.1', '>= 1.1.2'
35
36
  # spec.metadata['rubygems_mfa_required'] = 'true'
36
37
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KazeClient
4
+ # @author ciappa_m@modulotech.fr
5
+ # Utility methods to interact with JSON data
6
+ # @see KazeClient::Response
7
+ # @since 0.2.1
8
+ module JsonUtils
9
+ # Fetch nodes in given JSON
10
+ #
11
+ # @param json [KazeClient::Response,Hash,String] The JSON to analyze
12
+ # @param path [String] A JSONpath - https://goessner.net/articles/JsonPath/
13
+ # @return [Array] The nodes or data corresponding to the path
14
+ def self.fetch_nodes(json, path)
15
+ json = case json
16
+ when ::KazeClient::Response
17
+ json.parsed_response
18
+ when String
19
+ JSON.parse(json)
20
+ else
21
+ json
22
+ end
23
+
24
+ JsonPath.on(json, path)
25
+ end
26
+
27
+ # Fetch a node in given JSON
28
+ #
29
+ # @param json [KazeClient::Response,Hash,String] The JSON to analyze
30
+ # @param path [String] A JSONpath - https://goessner.net/articles/JsonPath/
31
+ # @return [Object,nil] The node or data corresponding to the path or nil
32
+ def self.fetch_node(json, path)
33
+ fetch_nodes(json, path).first
34
+ end
35
+ end
36
+ end
@@ -30,5 +30,48 @@ module KazeClient
30
30
  def respond_to_missing?(method_name, include_private = false)
31
31
  %i[original_response parsed_response].include?(method_name) || super
32
32
  end
33
+
34
+ # Find the child whose id is the given one in this response
35
+ #
36
+ # @param id [String] The id of the child to find
37
+ # @return [Hash,nil] The child or nil if not found
38
+ # @see KazeClient::JsonUtils.fetch_node
39
+ def fetch_child(id)
40
+ ::KazeClient::JsonUtils.fetch_node(self, %{$..children[?(@['id'] == '#{id}')]})
41
+ end
42
+
43
+ # Find the first child with the given id and return the given field
44
+ #
45
+ # @param id [String] The id of the child to find
46
+ # @param field [String] The name of the searched field
47
+ # @return [Object,nil] The value of the field or nil if not found
48
+ # @see #fetch_child
49
+ def fetch_data_from_child(id, field: 'data')
50
+ fetch_child(id)&.[](field)
51
+ end
52
+
53
+ # Find all the widget in this response.
54
+ # Technically, it fetch all the children whose type is +widget_*+
55
+ #
56
+ # @return [Array] The list of widgets
57
+ # @see KazeClient::JsonUtils.fetch_nodes
58
+ def fetch_widgets
59
+ ::KazeClient::JsonUtils.fetch_nodes(self, %{$..children[?(@['type'] =~ /^widget_/)]})
60
+ end
61
+
62
+ # Find the first child with the given id and update value of the given field
63
+ # Does nothing when +id+ was not found.
64
+ # Add a field when +field+ is not found.
65
+ #
66
+ # @param id [String] The id of the child to find
67
+ # @param value [Object] The value to set on the field
68
+ # @param field [String] The name of the searched field
69
+ # @return [KazeClient::Response] The response itself for chaining
70
+ # @see #fetch_child
71
+ def update_data_in_child(id, value, field: 'data')
72
+ fetch_child(id)&.[]=(field.to_s, value)
73
+
74
+ self
75
+ end
33
76
  end
34
77
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KazeClient
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
data/lib/kaze_client.rb CHANGED
@@ -4,13 +4,15 @@
4
4
  require 'activesupport/blank'
5
5
  require 'activesupport/camelize'
6
6
 
7
- # Require HTTParty
7
+ # Require third-part libraries
8
8
  require 'httparty'
9
+ require 'jsonpath'
9
10
 
10
11
  # Require the version number
11
12
  require_relative 'kaze_client/version'
12
13
 
13
14
  # Require the different parts of the gem
15
+ require_relative 'kaze_client/json_utils'
14
16
  require_relative 'kaze_client/errors'
15
17
  require_relative 'kaze_client/requests'
16
18
  require_relative 'kaze_client/response'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaze_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu Ciappara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-01 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.18.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: jsonpath
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.1'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.1.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.1'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.1.2
33
53
  description: |
34
54
  This is the official Ruby client library for Kaze (https://www.kaze.so/) API.
35
55
 
@@ -68,6 +88,7 @@ files:
68
88
  - lib/kaze_client/error/not_found.rb
69
89
  - lib/kaze_client/error/unauthorized.rb
70
90
  - lib/kaze_client/errors.rb
91
+ - lib/kaze_client/json_utils.rb
71
92
  - lib/kaze_client/request/request.rb
72
93
  - lib/kaze_client/request/requests/assign_performer_request.rb
73
94
  - lib/kaze_client/request/requests/create_job_request.rb