Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Fixed
- Pagination limit on `cb list`, `cb network list`, `cb team list` and
`cb team_member list`.

## [3.6.1] - 2024-11-05
### Added
Expand Down
1 change: 1 addition & 0 deletions src/client/client.cr
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ require "json"
require "log"
require "promise"
require "../ext/stdlib_ext"
require "./pagination"

module CB
class Client
Expand Down
23 changes: 21 additions & 2 deletions src/client/cluster.cr
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,28 @@ module CB
result
end

struct ClusterListResponse
include JSON::Serializable
pagination_properties
property clusters : Array(CB::Model::Cluster) = [] of CB::Model::Cluster
end

def get_clusters(team_id)
resp = get "clusters?order_field=name&team_id=#{team_id}&limit=200"
Array(CB::Model::Cluster).from_json resp.body, root: "clusters"
clusters : Array(CB::Model::Cluster) = [] of CB::Model::Cluster
query_params = Hash(String, String | Array(String)).new.tap do |params|
params["team_id"] = team_id.to_s
params["order_field"] = "name"
end

loop do
resp = get "clusters?#{HTTP::Params.encode(query_params)}"
data = ClusterListResponse.from_json resp.body
clusters.concat(data.clusters)
break unless data.has_more
query_params["cursor"] = data.next_cursor.to_s
end

clusters
end

# Retrieve the cluster by id or by name.
Expand Down
28 changes: 21 additions & 7 deletions src/client/network.cr
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,31 @@ module CB
CB::Model::Network.from_json resp.body
end

struct NetworkListResponse
include JSON::Serializable
pagination_properties
property networks : Array(CB::Model::Network)
end

# Get all networks for a team.
#
# https://crunchybridgeapi.docs.apiary.io/#reference/0/networks/list-networks
def get_networks(team : Identifier?)
resp = if team
team_id = team.eid? ? team.to_s : get_team_by_name(team).id
get "networks?team_id=#{team_id}"
else
get "networks"
end
Array(CB::Model::Network).from_json resp.body, root: "networks"
networks = [] of CB::Model::Network
query_params = Hash(String, String | Array(String)).new.tap do |params|
params["order_field"] = "id"
params["team_id"] = team.eid? ? team.to_s : get_team_by_name(team).id if team
end

loop do
resp = get "networks?#{HTTP::Params.encode(query_params)}"
data = NetworkListResponse.from_json resp.body
networks.concat(data.networks)
break unless data.has_more
query_params["cursor"] = data.next_cursor.to_s
end

networks
end

def get_networks(teams : Array(CB::Model::Team))
Expand Down
4 changes: 4 additions & 0 deletions src/client/pagination.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
macro pagination_properties
property has_more : Bool = false
property next_cursor : String? = nil
end
22 changes: 20 additions & 2 deletions src/client/team.cr
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,30 @@ module CB
CB::Model::Team.from_json resp.body
end

struct TeamListResponse
include JSON::Serializable
pagination_properties
property teams : Array(CB::Model::Team)
end

# List available teams.
#
# https://crunchybridgeapi.docs.apiary.io/#reference/0/teams/list-teams
def get_teams
resp = get "teams?order_field=name"
Array(CB::Model::Team).from_json resp.body, root: "teams"
teams = [] of CB::Model::Team
query_params = Hash(String, String | Array(String)).new.tap do |params|
params["order_field"] = "name"
end

loop do
resp = get "teams?#{HTTP::Params.encode(query_params)}"
data = TeamListResponse.from_json resp.body
teams.concat(data.teams)
break unless data.has_more
query_params["cursor"] = data.next_cursor.to_s
end

teams
end

# Update a team.
Expand Down
22 changes: 20 additions & 2 deletions src/client/team_member.cr
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,30 @@ module CB
CB::Model::TeamMember.from_json resp.body
end

struct TeamMemberListResponse
include JSON::Serializable
pagination_properties
property team_members : Array(CB::Model::TeamMember)
end

# List the memebers of a team.
#
# https://crunchybridgeapi.docs.apiary.io/#reference/0/teamsteamidmembers/list-team-members
def list_team_members(team_id)
resp = get "teams/#{team_id}/members"
Array(CB::Model::TeamMember).from_json resp.body, root: "team_members"
team_members = [] of CB::Model::TeamMember
query_params = Hash(String, String | Array(String)).new.tap do |params|
params["order_field"] = "email"
end

loop do
resp = get "teams/#{team_id}/members?#{HTTP::Params.encode(query_params)}"
data = TeamMemberListResponse.from_json resp.body
team_members.concat(data.team_members)
break unless data.has_more
query_params["cursor"] = data.next_cursor.to_s
end

team_members
end

# Retrieve details about a team member.
Expand Down
2 changes: 1 addition & 1 deletion src/ui/spinner.cr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module CB

def initialize(@text : String = "", @io : IO = IO::Memory.new)
@chars = ["|", "/", "-", "\\"].map { |c| "#{c.colorize.blue}" }
@delay = 0.2
@delay = 200.milliseconds
@running = false

# Control Sequence to allow overwriting the line so that the spinner can
Expand Down
Loading