module Trailblazer::Developer::Client

Constants

Diagram

Public Class Methods

push(operation:, name:) click to toggle source

TODO: remove me!

# File lib/trailblazer/developer/client.rb, line 79
def self.push(operation:, name:)
  xml = Trailblazer::Diagram::BPMN.to_xml(operation["__activity__"], operation["__sequence__"].map(&:id))
  token = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpZCI6MywidXNlcm5hbWUiOiJhcG90b25pY2siLCJlbWFpbCI6Im5pY2tAdHJhaWxibGF6ZXIudG8ifQ." # rubocop:disable Metrics/LineLength
  conn = Faraday.new(url: "https://api.trb.to")
  response = conn.post do |req|
    req.url "/dev/v1/import"
    req.headers["Content-Type"] = "application/json"
    req.headers["Authorization"] = token
    require "base64"

    req.body = %({ "name": "#{name}", "xml":"#{Base64.strict_encode64(xml)}" })
  end

  puts response.status.inspect
end

Public Instance Methods

Diagram(id, body) click to toggle source
# File lib/trailblazer/developer/client.rb, line 18
def Diagram(id, body)
  Diagram.new(id, body).freeze
end
duplicate(id:, **options) click to toggle source
# File lib/trailblazer/developer/client.rb, line 44
def duplicate(id:, **options)
  token = retrieve_token(**options)

  response = request(body: nil, token: token, url: "/api/v1/diagrams/#{id}/duplicate", method: :get, **options)
  parse_response(response)
end
export_diagram(id:, query:, **options) click to toggle source
# File lib/trailblazer/developer/client.rb, line 37
    def export_diagram(id:, query:, **options)
      response = request(body: nil, url: "/api/v1/diagrams/#{id}/export#{query}", method: :get, **options)

#      parse_response(response)
      response.body
    end
import(id:, query:"", **options) click to toggle source
# File lib/trailblazer/developer/client.rb, line 22
def import(id:, query:"", **options)
  token = retrieve_token(**options)
  export_diagram(id: id, token: token, query: query, **options)
end
new_diagram(token:, **options) click to toggle source

DISCUSS: do we need that?

# File lib/trailblazer/developer/client.rb, line 52
def new_diagram(token:, **options)
  response = request(body: nil, url: "/api/v1/diagrams/new", method: :get, token: token, **options)

  # TODO: use Dry::Struct
  # TODO: handle unauthorized/errors
  parse_response(response)
end
parse_response(response) click to toggle source
# File lib/trailblazer/developer/client.rb, line 71
def parse_response(response)
  diagram = Diagram.new
  Diagram::Representer.new(diagram).from_json(response.body) # a parsed hash would be cooler?

  diagram
end
request(host:, url:, method:, token:, body:, **) click to toggle source
# File lib/trailblazer/developer/client.rb, line 60
def request(host:, url:, method:, token:, body:, **)
  conn = Faraday.new(url: host)

  conn.send(method) do |req|
    req.url url
    req.headers["Content-Type"] = "application/json"
    req.body = body
    req.headers["Authorization"] = token
  end
end
retrieve_token(email:, api_key:, url: "/signin", **options) click to toggle source
# File lib/trailblazer/developer/client.rb, line 27
def retrieve_token(email:, api_key:, url: "/signin", **options)
  body = JSON.generate({email: email, api_key: api_key})

  response = request(token: nil, method: :get, url: url, body: body, **options)
  return false unless response.status == 200

  # token = CGI::Cookie.parse(response.headers["set-cookie"])["token"][0]
  JSON.parse(response.body)["token"]
end