Ruby Examples for adaline.ink
Ruby code examples for the Adaline platform API using the standard library.
All examples use Ruby's built-in net/http and json. No gems required.
Setup
require "net/http"
require "json"
require "uri"
BASE_URL = "https://api.adaline.ink"
@access_token = nil
def api_request(method, path, body = nil)
uri = URI("#{BASE_URL}#{path}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = case method
when :get then Net::HTTP::Get.new(uri)
when :post then Net::HTTP::Post.new(uri)
when :patch then Net::HTTP::Patch.new(uri)
when :delete then Net::HTTP::Delete.new(uri)
end
request["Authorization"] = "Bearer #{@access_token}" if @access_token
if body
request["Content-Type"] = "application/json"
request.body = body.to_json
end
response = http.request(request)
return nil if response.code == "204"
JSON.parse(response.body)
end
Authentication
def login(email, password)
result = api_request(:post, "/api/v1/auth/login", {
email: email, password: password
})
@access_token = result["access_token"]
result
end
login("you@example.com", "your-password")
Upload a Document
def upload_document(org_id, file_path)
uri = URI("#{BASE_URL}/api/v1/documents/upload?org_id=#{org_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{@access_token}"
form_data = [["file", File.open(file_path)]]
request.set_form(form_data, "multipart/form-data")
response = http.request(request)
JSON.parse(response.body)
end
doc = upload_document("your-org-id", "syllabus.pdf")
puts "Uploaded: #{doc['id']} (#{doc['doc_type']})"
List Documents
def list_documents(org_id)
api_request(:get, "/api/v1/documents/?org_id=#{org_id}")
end
data = list_documents("your-org-id")
data["items"].each do |doc|
tags = (doc["tags"] || []).map { |t| t["name"] }.join(", ")
puts " #{doc['filename']} (#{doc['doc_type']}) - #{doc['uploaded_by_name'] || 'Unknown'}"
puts " Tags: #{tags}" unless tags.empty?
end
Run Compliance Check
def run_compliance(document_id)
api_request(:post, "/api/v1/compliance/test", { document_id: document_id })
end
report = run_compliance(doc["id"])
puts "Score: #{report['overall_score']}% (Grade #{report['grade']})"
report["checks"].reject { |c| c["passed"] }.each do |check|
puts " [#{check['severity']}] #{check['details']}"
end
Start Conversion
def start_conversion(document_id)
api_request(:post, "/api/v1/conversions/", { document_id: document_id })
end
def get_conversion(job_id)
api_request(:get, "/api/v1/conversions/#{job_id}")
end
job = start_conversion(doc["id"])
loop do
status = get_conversion(job["job_id"])
puts "Status: #{status['status']}"
status["steps"]&.each do |step|
ms = step["duration_ms"] ? " (#{step['duration_ms']}ms)" : ""
puts " #{step['step_name']}: #{step['status']}#{ms}"
end
break if %w[completed failed error].include?(status["status"])
sleep 2
end
Tags
def create_tag(org_id, name, color = nil)
body = { name: name, org_id: org_id }
body[:color] = color if color
api_request(:post, "/api/v1/tags", body)
end
def tag_document(tag_id, doc_id)
api_request(:post, "/api/v1/tags/#{tag_id}/documents/#{doc_id}")
end
tag = create_tag("your-org-id", "reviewed", "green")
tag_document(tag["id"], doc["id"])
Share Document
def share_with_user(doc_id, email, permission = "view")
api_request(:post, "/api/v1/documents/#{doc_id}/shares", {
user_email: email, permission: permission
})
end
def create_public_link(doc_id)
api_request(:post, "/api/v1/documents/#{doc_id}/public-share", {})
end
public_link = create_public_link(doc["id"])
puts "Public URL: #{public_link['url']}"
Batch Upload and Score
def batch_upload_and_score(org_id, directory)
Dir.glob(File.join(directory, "*.{pdf,docx,pptx}")).each do |file_path|
puts "Processing #{File.basename(file_path)}..."
begin
doc = upload_document(org_id, file_path)
report = run_compliance(doc["id"])
puts " Score: #{report['overall_score']}% (#{report['grade']})"
rescue => e
puts " Error: #{e.message}"
end
end
end
batch_upload_and_score("your-org-id", "./documents")