laddro-career 0.1.0
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 +7 -0
- data/lib/laddro/client.rb +153 -0
- data/lib/laddro/error.rb +23 -0
- data/lib/laddro.rb +8 -0
- metadata +48 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c3223cb1c47a28a841c9a997bd8e87f6a25fd09a05603b272f99d95429b8708f
|
|
4
|
+
data.tar.gz: bea19fa64c7a69566b4deee620a4dd96ea53ac7401e6d1d9b2bff55daeebb942
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: c577e3d08890b6fbaff28578099e68218e0509ab4ee7263cdd9210ed2be52993c10c699e0808c897a6c1dc5c14dcf76754e06b85ff6600ba5780443312e51841
|
|
7
|
+
data.tar.gz: 016b868020aafe548b43460a3ceb680f183808aaefa81dcd76c2ba25a72853f2d6815389ced644bdbf69c06335490d0db8263b614d70bb34a7dc7bb6980660ea
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
require "net/http"
|
|
2
|
+
require "json"
|
|
3
|
+
require "uri"
|
|
4
|
+
|
|
5
|
+
module Laddro
|
|
6
|
+
class Client
|
|
7
|
+
attr_reader :base_url
|
|
8
|
+
|
|
9
|
+
def initialize(api_key = nil, base_url: "https://api.laddro.com")
|
|
10
|
+
@api_key = api_key
|
|
11
|
+
@base_url = base_url.chomp("/")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def list_templates
|
|
15
|
+
get("/v1/templates")["templates"]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def get_template(template_id)
|
|
19
|
+
get("/v1/templates/#{template_id}")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def list_fonts
|
|
23
|
+
get("/v1/fonts")["fonts"]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def list_languages
|
|
27
|
+
get("/v1/languages")["languages"]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def list_models
|
|
31
|
+
get("/v1/models")["models"]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def list_resumes(limit: 20, offset: 0)
|
|
35
|
+
get("/v1/resumes?limit=#{limit}&offset=#{offset}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def get_resume(resume_id)
|
|
39
|
+
get("/v1/resumes/#{resume_id}")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def render_resume(resume_id, options)
|
|
43
|
+
put_binary("/v1/resumes/#{resume_id}/render", options)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def tailor(request)
|
|
47
|
+
post_binary("/v1/tailor", request)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def export_pdf(request)
|
|
51
|
+
post_binary("/v1/export", request)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def list_cover_letters(limit: 20, offset: 0)
|
|
55
|
+
get("/v1/cover-letters?limit=#{limit}&offset=#{offset}")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def get_cover_letter(id)
|
|
59
|
+
get("/v1/cover-letters/#{id}")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def create_cover_letter(request)
|
|
63
|
+
post("/v1/cover-letters", request)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def generate_cover_letter(request)
|
|
67
|
+
post_binary("/v1/cover-letters/generate", request)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def render_cover_letter(id, options)
|
|
71
|
+
put_binary("/v1/cover-letters/#{id}/render", options)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def get_settings
|
|
75
|
+
get("/v1/settings")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def update_ai_settings(request)
|
|
79
|
+
put("/v1/settings/model", request)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def delete_ai_settings
|
|
83
|
+
delete("/v1/settings/model")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def get(path)
|
|
89
|
+
request(:get, path)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def post(path, body)
|
|
93
|
+
request(:post, path, body)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def put(path, body)
|
|
97
|
+
request(:put, path, body)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def delete(path)
|
|
101
|
+
request(:delete, path)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def post_binary(path, body)
|
|
105
|
+
request_binary(:post, path, body)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def put_binary(path, body)
|
|
109
|
+
request_binary(:put, path, body)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def request(method, path, body = nil)
|
|
113
|
+
response = execute(method, path, body)
|
|
114
|
+
handle_error(response) unless response.is_a?(Net::HTTPSuccess)
|
|
115
|
+
JSON.parse(response.body)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def request_binary(method, path, body = nil)
|
|
119
|
+
response = execute(method, path, body)
|
|
120
|
+
handle_error(response) unless response.is_a?(Net::HTTPSuccess)
|
|
121
|
+
response.body
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def execute(method, path, body)
|
|
125
|
+
uri = URI("#{@base_url}#{path}")
|
|
126
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
127
|
+
http.use_ssl = uri.scheme == "https"
|
|
128
|
+
http.read_timeout = 120
|
|
129
|
+
|
|
130
|
+
req = case method
|
|
131
|
+
when :get then Net::HTTP::Get.new(uri)
|
|
132
|
+
when :post then Net::HTTP::Post.new(uri)
|
|
133
|
+
when :put then Net::HTTP::Put.new(uri)
|
|
134
|
+
when :delete then Net::HTTP::Delete.new(uri)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
req["x-api-key"] = @api_key if @api_key
|
|
138
|
+
if body
|
|
139
|
+
req["Content-Type"] = "application/json"
|
|
140
|
+
req.body = body.is_a?(String) ? body : JSON.generate(body)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
http.request(req)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def handle_error(response)
|
|
147
|
+
body = JSON.parse(response.body) rescue {}
|
|
148
|
+
message = body["error"] || response.message
|
|
149
|
+
code = body["code"]
|
|
150
|
+
raise APIError.new(message, response.code.to_i, code)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
data/lib/laddro/error.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Laddro
|
|
2
|
+
class APIError < StandardError
|
|
3
|
+
attr_reader :status, :code
|
|
4
|
+
|
|
5
|
+
def initialize(message, status, code = nil)
|
|
6
|
+
super(message)
|
|
7
|
+
@status = status
|
|
8
|
+
@code = code
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def auth_error?
|
|
12
|
+
status == 401
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def usage_limit_error?
|
|
16
|
+
status == 402
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def not_found?
|
|
20
|
+
status == 404
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/laddro.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: laddro-career
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Laddro
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-05-10 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Tailor resumes, generate cover letters, and export PDFs via the Laddro
|
|
14
|
+
Career API
|
|
15
|
+
email: support@laddro.com
|
|
16
|
+
executables: []
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- lib/laddro.rb
|
|
21
|
+
- lib/laddro/client.rb
|
|
22
|
+
- lib/laddro/error.rb
|
|
23
|
+
homepage: https://docs.laddro.com
|
|
24
|
+
licenses:
|
|
25
|
+
- MIT
|
|
26
|
+
metadata:
|
|
27
|
+
source_code_uri: https://github.com/laddro-app/laddro-career-sdk-ruby
|
|
28
|
+
homepage_uri: https://docs.laddro.com
|
|
29
|
+
post_install_message:
|
|
30
|
+
rdoc_options: []
|
|
31
|
+
require_paths:
|
|
32
|
+
- lib
|
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
34
|
+
requirements:
|
|
35
|
+
- - ">="
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '3.1'
|
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
|
+
requirements:
|
|
40
|
+
- - ">="
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '0'
|
|
43
|
+
requirements: []
|
|
44
|
+
rubygems_version: 3.0.3.1
|
|
45
|
+
signing_key:
|
|
46
|
+
specification_version: 4
|
|
47
|
+
summary: Ruby SDK for the Laddro Career API
|
|
48
|
+
test_files: []
|