Skip to main content

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")
© 2026 Adaline LLC