Gleam Library for the Rocksky API

simplify client constructor

Changed files
+26 -20
src
rocksky
client
test
+1 -2
src/rocksky.gleam
··· 1 - import gleam/option.{None} 2 1 import rocksky/client/base 3 2 import rocksky/resources/tracks.{get_track} 4 3 5 4 pub fn main() { 6 - let client = base.new(None, None) 5 + let client = base.new() 7 6 8 7 get_track( 9 8 tracks.new(client),
+12 -5
src/rocksky/client/base.gleam
··· 3 3 import gleam/http/request.{type Request} 4 4 import gleam/http/response.{type Response} 5 5 import gleam/httpc 6 - import gleam/option.{type Option} 6 + import gleam/option.{type Option, None} 7 7 import gleam/string 8 8 import rocksky/errors.{type ApiError} 9 9 ··· 13 13 Client( 14 14 base_url: String, 15 15 access_token: Option(String), 16 + api_key: Option(String), 16 17 timeout_ms: Option(Int), 17 18 http_client: fn(Request(String)) -> 18 19 Result(Response(String), httpc.HttpError), 19 20 ) 20 21 } 21 22 22 - pub fn new(access_token: Option(String), timeout_ms: Option(Int)) -> Client { 23 + pub fn new() -> Client { 24 + let http_client = fn(req) { httpc.send(req) } 25 + Client(base_url, None, None, None, http_client) 26 + } 27 + 28 + pub fn from_url(base_url: String) -> Client { 23 29 let http_client = fn(req) { httpc.send(req) } 24 - Client(base_url, access_token:, timeout_ms:, http_client:) 30 + Client(base_url, None, None, None, http_client) 25 31 } 26 32 27 - pub fn from_url( 33 + pub fn from_opts( 28 34 base_url: String, 29 35 access_token: Option(String), 36 + api_key: Option(String), 30 37 timeout_ms: Option(Int), 31 38 ) -> Client { 32 39 let http_client = fn(req) { httpc.send(req) } 33 - Client(base_url:, access_token:, timeout_ms:, http_client:) 40 + Client(base_url:, access_token:, api_key:, timeout_ms:, http_client:) 34 41 } 35 42 36 43 pub fn get(
+13 -13
test/rocksky_test.gleam
··· 20 20 } 21 21 22 22 pub fn get_user_test() { 23 - let client = base.from_url(base_url, None, None) 23 + let client = base.from_url(base_url) 24 24 25 25 users.new(client) 26 26 |> users.get_user("tsiry-sandratraina.comm") ··· 46 46 } 47 47 48 48 pub fn get_albums_test() { 49 - let client = base.from_url(base_url, None, None) 49 + let client = base.from_url(base_url) 50 50 51 51 albums.new(client) 52 52 |> albums.get_albums(Some("tsiry-sandratraina.com"), pagination.Default) ··· 72 72 } 73 73 74 74 pub fn get_albums_pagination_test() { 75 - let client = base.from_url(base_url, None, None) 75 + let client = base.from_url(base_url) 76 76 77 77 albums.new(client) 78 78 |> albums.get_albums( ··· 83 83 } 84 84 85 85 pub fn get_artists_test() { 86 - let client = base.from_url(base_url, None, None) 86 + let client = base.from_url(base_url) 87 87 88 88 artists.new(client) 89 89 |> artists.get_artists(Some("tsiry-sandratraina.com"), pagination.Default) ··· 109 109 } 110 110 111 111 pub fn get_artists_pagination_test() { 112 - let client = base.from_url(base_url, None, None) 112 + let client = base.from_url(base_url) 113 113 114 114 artists.new(client) 115 115 |> artists.get_artists( ··· 120 120 } 121 121 122 122 pub fn get_tracks_test() { 123 - let client = base.from_url(base_url, None, None) 123 + let client = base.from_url(base_url) 124 124 125 125 tracks.new(client) 126 126 |> tracks.get_tracks(Some("tsiry-sandratraina.com"), pagination.Default) ··· 146 146 } 147 147 148 148 pub fn get_tracks_pagination_test() { 149 - let client = base.from_url(base_url, None, None) 149 + let client = base.from_url(base_url) 150 150 151 151 tracks.new(client) 152 152 |> tracks.get_tracks( ··· 157 157 } 158 158 159 159 pub fn get_scrobbles_test() { 160 - let client = base.from_url(base_url, None, None) 160 + let client = base.from_url(base_url) 161 161 162 162 scrobbles.new(client) 163 163 |> scrobbles.get_scrobbles(Some("tsiry-sandratraina.com"), pagination.Default) ··· 183 183 } 184 184 185 185 pub fn get_scrobbles_pagination_test() { 186 - let client = base.from_url(base_url, None, None) 186 + let client = base.from_url(base_url) 187 187 188 188 scrobbles.new(client) 189 189 |> scrobbles.get_scrobbles( ··· 194 194 } 195 195 196 196 pub fn search_test() { 197 - let client = base.from_url(base_url, None, None) 197 + let client = base.from_url(base_url) 198 198 199 199 resource.new(client, "/search") 200 200 |> resource.search("daft punk") ··· 202 202 } 203 203 204 204 pub fn get_album_test() { 205 - let client = base.from_url(base_url, None, None) 205 + let client = base.from_url(base_url) 206 206 207 207 albums.new(client) 208 208 |> albums.get_album( ··· 218 218 } 219 219 220 220 pub fn get_artist_test() { 221 - let client = base.from_url(base_url, None, None) 221 + let client = base.from_url(base_url) 222 222 223 223 artists.new(client) 224 224 |> artists.get_artist( ··· 234 234 } 235 235 236 236 pub fn get_track_test() { 237 - let client = base.from_url(base_url, None, None) 237 + let client = base.from_url(base_url) 238 238 239 239 tracks.new(client) 240 240 |> tracks.get_track(