From a615e604fbb51376363a54339f6faf4c92f753f3 Mon Sep 17 00:00:00 2001 From: Vitalii Budnik Date: Fri, 6 Oct 2023 05:06:50 +0300 Subject: [PATCH] [spaceship] allow to specify fetched fields (#21528) --- .../lib/spaceship/connect_api/api_client.rb | 3 ++- .../spaceship/connect_api/models/bundle_id.rb | 8 +++---- .../connect_api/models/certificate.rb | 4 ++-- .../spaceship/connect_api/models/device.rb | 4 ++-- .../spaceship/connect_api/models/profile.rb | 4 ++-- .../connect_api/provisioning/provisioning.rb | 22 ++++++++++++------- spaceship/spec/connect_api/api_client_spec.rb | 13 +++++++++-- 7 files changed, 37 insertions(+), 21 deletions(-) diff --git a/spaceship/lib/spaceship/connect_api/api_client.rb b/spaceship/lib/spaceship/connect_api/api_client.rb index fc6c78bd176..4076c1501eb 100644 --- a/spaceship/lib/spaceship/connect_api/api_client.rb +++ b/spaceship/lib/spaceship/connect_api/api_client.rb @@ -87,13 +87,14 @@ def web_session? return @token.nil? end - def build_params(filter: nil, includes: nil, limit: nil, sort: nil, cursor: nil) + def build_params(filter: nil, includes: nil, fields: nil, limit: nil, sort: nil, cursor: nil) params = {} filter = filter.delete_if { |k, v| v.nil? } if filter params[:filter] = filter if filter && !filter.empty? params[:include] = includes if includes + params[:fields] = fields if fields params[:limit] = limit if limit params[:sort] = sort if sort params[:cursor] = cursor if cursor diff --git a/spaceship/lib/spaceship/connect_api/models/bundle_id.rb b/spaceship/lib/spaceship/connect_api/models/bundle_id.rb index 39a91567991..ea9f61a5aaa 100644 --- a/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +++ b/spaceship/lib/spaceship/connect_api/models/bundle_id.rb @@ -39,15 +39,15 @@ def supports_catalyst? # API # - def self.all(client: nil, filter: {}, includes: nil, limit: nil, sort: nil) + def self.all(client: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) client ||= Spaceship::ConnectAPI - resps = client.get_bundle_ids(filter: filter, includes: includes).all_pages + resps = client.get_bundle_ids(filter: filter, includes: includes, fields: fields, limit: nil, sort: nil).all_pages return resps.flat_map(&:to_models) end - def self.find(identifier, includes: nil, client: nil) + def self.find(identifier, includes: nil, fields: nil, client: nil) client ||= Spaceship::ConnectAPI - return all(client: client, filter: { identifier: identifier }, includes: includes).find do |app| + return all(client: client, filter: { identifier: identifier }, includes: includes, fields: fields).find do |app| app.identifier == identifier end end diff --git a/spaceship/lib/spaceship/connect_api/models/certificate.rb b/spaceship/lib/spaceship/connect_api/models/certificate.rb index 1e23b5fd73e..2545f6c2340 100644 --- a/spaceship/lib/spaceship/connect_api/models/certificate.rb +++ b/spaceship/lib/spaceship/connect_api/models/certificate.rb @@ -79,9 +79,9 @@ def self.create_certificate_signing_request # API # - def self.all(client: nil, filter: {}, includes: nil, limit: nil, sort: nil) + def self.all(client: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) client ||= Spaceship::ConnectAPI - resps = client.get_certificates(filter: filter, includes: includes).all_pages + resps = client.get_certificates(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort).all_pages return resps.flat_map(&:to_models) end diff --git a/spaceship/lib/spaceship/connect_api/models/device.rb b/spaceship/lib/spaceship/connect_api/models/device.rb index cdc26e7884f..8f2eadaaf90 100644 --- a/spaceship/lib/spaceship/connect_api/models/device.rb +++ b/spaceship/lib/spaceship/connect_api/models/device.rb @@ -51,9 +51,9 @@ def enabled? # API # - def self.all(client: nil, filter: {}, includes: nil, limit: nil, sort: nil) + def self.all(client: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) client ||= Spaceship::ConnectAPI - resps = client.get_devices(filter: filter, includes: includes).all_pages + resps = client.get_devices(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort).all_pages return resps.flat_map(&:to_models) end diff --git a/spaceship/lib/spaceship/connect_api/models/profile.rb b/spaceship/lib/spaceship/connect_api/models/profile.rb index e5acd2321ae..0b299dd328a 100644 --- a/spaceship/lib/spaceship/connect_api/models/profile.rb +++ b/spaceship/lib/spaceship/connect_api/models/profile.rb @@ -69,9 +69,9 @@ def valid? # API # - def self.all(client: nil, filter: {}, includes: nil, limit: nil, sort: nil) + def self.all(client: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) client ||= Spaceship::ConnectAPI - resps = client.get_profiles(filter: filter, includes: includes).all_pages + resps = client.get_profiles(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort).all_pages return resps.flat_map(&:to_models) end diff --git a/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb b/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb index c3d53f68f9e..e548c14efe4 100644 --- a/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +++ b/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb @@ -17,8 +17,8 @@ def provisioning_request_client # bundleIds # - def get_bundle_ids(filter: {}, includes: nil, limit: nil, sort: nil) - params = provisioning_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort) + def get_bundle_ids(filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) + params = provisioning_request_client.build_params(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort) provisioning_request_client.get("bundleIds", params) end @@ -129,8 +129,8 @@ def delete_bundle_id_capability(bundle_id_capability_id:) # certificates # - def get_certificates(profile_id: nil, filter: {}, includes: nil, limit: nil, sort: nil) - params = provisioning_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort) + def get_certificates(profile_id: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) + params = provisioning_request_client.build_params(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort) if profile_id.nil? provisioning_request_client.get("certificates", params) else @@ -164,8 +164,8 @@ def delete_certificate(certificate_id: nil) # devices # - def get_devices(profile_id: nil, filter: {}, includes: nil, limit: nil, sort: nil) - params = provisioning_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort) + def get_devices(profile_id: nil, filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) + params = provisioning_request_client.build_params(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort) if profile_id.nil? provisioning_request_client.get("devices", params) else @@ -213,8 +213,8 @@ def patch_device(id: nil, status: nil, new_name: nil) # profiles # - def get_profiles(filter: {}, includes: nil, limit: nil, sort: nil) - params = provisioning_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort) + def get_profiles(filter: {}, includes: nil, fields: nil, limit: nil, sort: nil) + params = provisioning_request_client.build_params(filter: filter, includes: includes, fields: fields, limit: limit, sort: sort) provisioning_request_client.get("profiles", params) end @@ -253,6 +253,12 @@ def post_profiles(bundle_id_id: nil, certificates: nil, devices: nil, attributes provisioning_request_client.post("profiles", body) end + def get_profile_bundle_id(profile_id: nil) + raise "Profile id is nil" if profile_id.nil? + + provisioning_request_client.get("profiles/#{profile_id}/bundleId") + end + def delete_profile(profile_id: nil) raise "Profile id is nil" if profile_id.nil? diff --git a/spaceship/spec/connect_api/api_client_spec.rb b/spaceship/spec/connect_api/api_client_spec.rb index 4af07418914..f3d09869e3a 100644 --- a/spaceship/spec/connect_api/api_client_spec.rb +++ b/spaceship/spec/connect_api/api_client_spec.rb @@ -13,6 +13,7 @@ let(:one_filter) { { build: "123" } } let(:two_filters) { { build: "123", app: "321" } } let(:includes) { "model.attribute" } + let(:fields) { { a: 'aField', b: 'bField1,bField2' } } let(:limit) { "30" } let(:sort) { "asc" } @@ -47,6 +48,13 @@ }) end + it 'builds params with fields' do + params = client.build_params(fields: fields) + expect(params).to eq({ + fields: fields + }) + end + it 'builds params with limit' do params = client.build_params(limit: limit) expect(params).to eq({ @@ -61,11 +69,12 @@ }) end - it 'builds params with one filter, includes, limit, and sort' do - params = client.build_params(filter: one_filter, includes: includes, limit: limit, sort: sort) + it 'builds params with one filter, includes, fields, limit, and sort' do + params = client.build_params(filter: one_filter, includes: includes, fields: fields, limit: limit, sort: sort) expect(params).to eq({ filter: one_filter, include: includes, + fields: fields, limit: limit, sort: sort })