Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
/tmp/
*.gem
.env
.Idea/
4 changes: 2 additions & 2 deletions lib/merge_ruby_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def initialize(api_key:, base_url: nil, environment: Merge::Environment::PRODUCT
@filestorage = Merge::Filestorage::Client.new(request_client: @request_client)
@ticketing = Merge::Ticketing::Client.new(request_client: @request_client)
@accounting = Merge::Accounting::Client.new(request_client: @request_client)
@integrations = Merge::IntegrationClient.new(request_client: @request_client)
@integrations = Merge::Integrations::Client.new(request_client: @request_client)
end
end

Expand Down Expand Up @@ -94,7 +94,7 @@ def initialize(api_key:, base_url: nil, environment: Merge::Environment::PRODUCT
@filestorage = Merge::Filestorage::AsyncClient.new(request_client: @async_request_client)
@ticketing = Merge::Ticketing::AsyncClient.new(request_client: @async_request_client)
@accounting = Merge::Accounting::AsyncClient.new(request_client: @async_request_client)
@integrations = Merge::IntegrationClient.new(request_client: @async_request_client)
@integrations = Merge::Integrations::AsyncClient.new(request_client: @async_request_client)
end
end
end
100 changes: 100 additions & 0 deletions lib/merge_ruby_client/integrations/account_token/client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# frozen_string_literal: true

require_relative "../../../requests"
require_relative "../types/account_token"
require "async"

module Merge
module Integrations
class AccountTokenClient
# @return [Merge::RequestClient]
attr_reader :request_client

# @param request_client [Merge::RequestClient]
# @return [Merge::Integrations::AccountTokenClient]
def initialize(request_client:)
@request_client = request_client
end

# Returns the account token for the end user with the provided public token.
#
# @param public_token [String]
# @param request_options [Merge::RequestOptions]
# @return [Merge::Integrations::AccountToken]
# @example
# api = Merge::Client.new(
# base_url: "https://api.example.com",
# environment: Merge::Environment::PRODUCTION,
# api_key: "YOUR_AUTH_TOKEN"
# )
# api.integrations.account_token.retrieve(public_token: "public_token")
def retrieve(public_token:, request_options: nil)
response = @request_client.conn.get do |req|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact
unless request_options.nil? || request_options&.additional_query_parameters.nil?
req.params = { **(request_options&.additional_query_parameters || {}) }.compact
end
unless request_options.nil? || request_options&.additional_body_parameters.nil?
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
end
req.url "#{@request_client.get_url(request_options: request_options)}/integrations/account-token/#{public_token}"
end

Merge::Integrations::AccountToken.from_json(json_object: response.body)
end
end

class AsyncAccountTokenClient
# @return [Merge::AsyncRequestClient]
attr_reader :request_client

# @param request_client [Merge::AsyncRequestClient]
# @return [Merge::Integrations::AsyncAccountTokenClient]
def initialize(request_client:)
@request_client = request_client
end

# Returns the account token for the end user with the provided public token.
#
# @param public_token [String]
# @param request_options [Merge::RequestOptions]
# @return [Merge::Integrations::AccountToken]
# @example
# api = Merge::Client.new(
# base_url: "https://api.example.com",
# environment: Merge::Environment::PRODUCTION,
# api_key: "YOUR_AUTH_TOKEN"
# )
# api.integrations.account_token.retrieve(public_token: "public_token")
def retrieve(public_token:, request_options: nil)
Async do
response = @request_client.conn.get do |req|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact
unless request_options.nil? || request_options&.additional_query_parameters.nil?
req.params = { **(request_options&.additional_query_parameters || {}) }.compact
end
unless request_options.nil? || request_options&.additional_body_parameters.nil?
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
end
req.url "#{@request_client.get_url(request_options: request_options)}/integrations/account-token/#{public_token}"
end
Merge::Integrations::AccountToken.from_json(json_object: response.body)
end
end
end
end
end
103 changes: 32 additions & 71 deletions lib/merge_ruby_client/integrations/client.rb
Original file line number Diff line number Diff line change
@@ -1,82 +1,43 @@
# frozen_string_literal: true

require_relative "../../requests"
require_relative "types/integration"

# client = Merge::Basics::IntegrationClient::Client.new(request_client: request_client)
# integrations = client.list
require_relative "provider/client"
require_relative "link_token/client"
require_relative "account_token/client"

module Merge
class IntegrationClient
# @param request_client [Merge::RequestClient]
# @return [Merge::Basics::IntegrationClient::Client]
def initialize(request_client:)
@request_client = request_client
end

# Returns a list of all integrations available in Merge
#
# @param request_options [Merge::RequestOptions]
# @return [Array<Merge::Basics::IntegrationClient>] List of integrations with their metadata
def list(request_options: nil)
response = @request_client.conn.get do |req|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact
unless request_options.nil? || request_options&.additional_query_parameters.nil?
req.params = { **(request_options&.additional_query_parameters || {}) }.compact
end
unless request_options.nil? || request_options&.additional_body_parameters.nil?
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
end
req.url "#{@request_client.get_url(request_options: request_options)}/organizations/integrations"
end

JSON.parse(response.body)["results"].map do |integration|
Merge::Integration.from_json(json_object: integration.to_json)
module Integrations
class Client
# @return [Merge::Integrations::ProviderClient]
attr_reader :provider
# @return [Merge::Integrations::LinkTokenClient]
attr_reader :link_token
# @return [Merge::Integrations::AccountTokenClient]
attr_reader :account_token

# @param request_client [Merge::RequestClient]
# @return [Merge::Integrations::Client]
def initialize(request_client:)
@provider = Merge::Integrations::ProviderClient.new(request_client: request_client)
@link_token = Merge::Integrations::LinkTokenClient.new(request_client: request_client)
@account_token = Merge::Integrations::AccountTokenClient.new(request_client: request_client)
end
end
end

class AsyncIntegrationClient
# @param request_client [Merge::AsyncRequestClient]
# @return [Merge::Basics::IntegrationClient::AsyncClient]
def initialize(request_client:)
@request_client = request_client
end

# Returns a list of all integrations available in Merge
#
# @param request_options [Merge::RequestOptions]
# @return [Array<Merge::Basics::Integration>] List of integrations with their metadata
def list(request_options: nil)
Async do
response = @request_client.conn.get do |req|
req.options.timeout = request_options.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact
unless request_options.nil? || request_options&.additional_query_parameters.nil?
req.params = { **(request_options&.additional_query_parameters || {}) }.compact
end
unless request_options.nil? || request_options&.additional_body_parameters.nil?
req.body = { **(request_options&.additional_body_parameters || {}) }.compact
end
req.url "#{@request_client.get_url(request_options: request_options)}/organizations/integrations"
end

JSON.parse(response.body)["results"].map do |integration|
Merge::Basics::Integration.from_json(json_object: integration.to_json)
end
class AsyncClient
# @return [Merge::Integrations::AsyncProviderClient]
attr_reader :provider
# @return [Merge::Integrations::AsyncLinkTokenClient]
attr_reader :link_token
# @return [Merge::Integrations::AsyncAccountTokenClient]
attr_reader :account_token

# @param request_client [Merge::RequestClient]
# @return [Merge::Integrations::Client]
def initialize(request_client:)
@provider = Merge::Integrations::AsyncProviderClient.new(request_client: request_client)
@link_token = Merge::Integrations::AsyncLinkTokenClient.new(request_client: request_client)
@account_token = Merge::Integrations::AsyncAccountTokenClient.new(request_client: request_client)
end
end
end
Expand Down
107 changes: 107 additions & 0 deletions lib/merge_ruby_client/integrations/link_token/client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# frozen_string_literal: true

require_relative "../../../requests"
require_relative "../types/link_token"

module Merge
module Integrations
class LinkTokenClient
# @return [Merge::RequestClient]
attr_reader :request_client

# @param request_client [Merge::RequestClient]
# @return [Merge::Integrations::LinkTokenClient]
def initialize(request_client:)
@request_client = request_client
end

# Creates a link token to be used when linking a new end user.
#
# @param end_user_email_address [String] Your end user's email address.
# @param end_user_organization_name [String] Your end user's organization name.
# @param end_user_origin_id [String] A unique identifier for your end user.
# @param categories [Array<String>] The integration categories to show in Merge Link.
# @param integration [String, nil] The slug of a specific pre-selected integration.
# @param link_expiry_mins [Integer, nil] The number of minutes the token is valid.
# @param should_create_magic_link_url [Boolean, nil] Whether to generate a Magic Link URL.
# @param request_options [Merge::RequestOptions, nil]
# @return [Merge::Integrations::LinkToken]
def create(end_user_email_address:, end_user_organization_name:, end_user_origin_id:, categories:,
integration: nil, link_expiry_mins: nil, should_create_magic_link_url: nil, request_options: nil)
response = @request_client.conn.post do |req|
req.options.timeout = request_options&.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options&.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options&.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact

req.body = {
end_user_email_address: end_user_email_address,
end_user_organization_name: end_user_organization_name,
end_user_origin_id: end_user_origin_id,
categories: categories,
integration: integration,
link_expiry_mins: link_expiry_mins,
should_create_magic_link_url: should_create_magic_link_url,
}.compact
req.url "#{@request_client.get_url(request_options: request_options)}/integrations/create-link-token"
end

Merge::Integrations::LinkToken.from_json(json_object: response.body)
end
end

class AsyncLinkTokenClient
# @return [Merge::RequestClient]
attr_reader :request_client

# @param request_client [Merge::RequestClient]
# @return [Merge::Integrations::LinkTokenClient]
def initialize(request_client:)
@request_client = request_client
end

# Creates a link token to be used when linking a new end user.
#
# @param end_user_email_address [String] Your end user's email address.
# @param end_user_organization_name [String] Your end user's organization name.
# @param end_user_origin_id [String] A unique identifier for your end user.
# @param categories [Array<String>] The integration categories to show in Merge Link.
# @param integration [String, nil] The slug of a specific pre-selected integration.
# @param link_expiry_mins [Integer, nil] The number of minutes the token is valid.
# @param should_create_magic_link_url [Boolean, nil] Whether to generate a Magic Link URL.
# @param request_options [Merge::RequestOptions, nil]
# @return [Merge::Integrations::LinkToken]
def create(end_user_email_address:, end_user_organization_name:, end_user_origin_id:, categories:,
integration: nil, link_expiry_mins: nil, should_create_magic_link_url: nil, request_options: nil)
response = @request_client.conn.post do |req|
req.options.timeout = request_options&.timeout_in_seconds unless request_options&.timeout_in_seconds.nil?
req.headers["Authorization"] = request_options&.api_key unless request_options&.api_key.nil?
req.headers["X-Account-Token"] = request_options&.account_token unless request_options&.account_token.nil?
req.headers = {
**(req.headers || {}),
**@request_client.get_headers,
**(request_options&.additional_headers || {})
}.compact

req.body = {
end_user_email_address: end_user_email_address,
end_user_organization_name: end_user_organization_name,
end_user_origin_id: end_user_origin_id,
categories: categories,
integration: integration,
link_expiry_mins: link_expiry_mins,
should_create_magic_link_url: should_create_magic_link_url,
}.compact

req.url "#{@request_client.get_url(request_options: request_options)}/integrations/create-link-token"
end

Merge::Integrations::LinkToken.from_json(json_object: response.body)
end
end
end
end
Loading