diff --git a/.gitignore b/.gitignore index a97c182a..ec2a65ce 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /tmp/ *.gem .env +.Idea/ diff --git a/lib/merge_ruby_client.rb b/lib/merge_ruby_client.rb index 88a3cc09..71847f09 100644 --- a/lib/merge_ruby_client.rb +++ b/lib/merge_ruby_client.rb @@ -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 @@ -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 diff --git a/lib/merge_ruby_client/integrations/account_token/client.rb b/lib/merge_ruby_client/integrations/account_token/client.rb new file mode 100644 index 00000000..d3e33acb --- /dev/null +++ b/lib/merge_ruby_client/integrations/account_token/client.rb @@ -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 diff --git a/lib/merge_ruby_client/integrations/client.rb b/lib/merge_ruby_client/integrations/client.rb index 55d8ea89..dde99921 100644 --- a/lib/merge_ruby_client/integrations/client.rb +++ b/lib/merge_ruby_client/integrations/client.rb @@ -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] 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] 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 diff --git a/lib/merge_ruby_client/integrations/link_token/client.rb b/lib/merge_ruby_client/integrations/link_token/client.rb new file mode 100644 index 00000000..44f50965 --- /dev/null +++ b/lib/merge_ruby_client/integrations/link_token/client.rb @@ -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] 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] 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 diff --git a/lib/merge_ruby_client/integrations/provider/client.rb b/lib/merge_ruby_client/integrations/provider/client.rb new file mode 100644 index 00000000..9fc24a8d --- /dev/null +++ b/lib/merge_ruby_client/integrations/provider/client.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require_relative "../../../requests" +require_relative "../types/provider" + +# client = Merge::Basics::IntegrationClient::Client.new(request_client: request_client) +# integrations = client.list + +module Merge + module Integrations + class ProviderClient + # @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] 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::Integrations::Provider.from_json(json_object: integration.to_json) + end + end + end + + class AsyncProviderClient + # @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] 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::Integrations::Provider.from_json(json_object: integration.to_json) + end + end + end + end + end +end + diff --git a/lib/merge_ruby_client/integrations/types/account_integration.rb b/lib/merge_ruby_client/integrations/types/account_integration.rb new file mode 100644 index 00000000..29d0da6d --- /dev/null +++ b/lib/merge_ruby_client/integrations/types/account_integration.rb @@ -0,0 +1,158 @@ +# frozen_string_literal: true + +require_relative "categories_enum" +require "ostruct" +require "json" + +module Merge + module Integrations + class AccountIntegration + # @return [String] Company name. + attr_reader :name + # @return [String] Optional. This shortened name appears in places with limited space, usually in + # conjunction with the platform's logo (e.g., Merge Link menu).

Example: + # Workforce Now (in lieu of ADP Workforce Now), SuccessFactors (in lieu of SAP + # SuccessFactors) + attr_reader :abbreviated_name + # @return [Array] Category or categories this integration belongs to. Multiple categories should + # be comma separated, i.e. [ats, integrations]. + attr_reader :categories + # @return [String] Company logo in rectangular shape. + attr_reader :image + # @return [String] Company logo in square shape. + attr_reader :square_image + # @return [String] The color of this integration used for buttons and text throughout the app and + # landing pages. Choose a darker, saturated color. + attr_reader :color + # @return [String] + attr_reader :slug + # @return [Hash{String => Object}] Mapping of API endpoints to documentation urls for support. Example: {'GET': + # [['/common-model-scopes', + # ng/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', + # ocs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], + # 'POST': []} + attr_reader :api_endpoints_to_documentation_urls + # @return [String] Setup guide URL for third party webhook creation. Exposed in Merge Docs. + attr_reader :webhook_setup_guide_url + # @return [Hash{String => Object}] Category or categories this integration is in beta status for. + attr_reader :category_beta_status + # @return [OpenStruct] Additional properties unmapped to the current class definition + attr_reader :additional_properties + # @return [Object] + attr_reader :_field_set + protected :_field_set + + OMIT = Object.new + + # @param name [String] Company name. + # @param abbreviated_name [String] Optional. This shortened name appears in places with limited space, usually in + # conjunction with the platform's logo (e.g., Merge Link menu).

Example: + # Workforce Now (in lieu of ADP Workforce Now), SuccessFactors (in lieu of SAP + # SuccessFactors) + # @param categories [Array] Category or categories this integration belongs to. Multiple categories should + # be comma separated, i.e. [ats, integrations]. + # @param image [String] Company logo in rectangular shape. + # @param square_image [String] Company logo in square shape. + # @param color [String] The color of this integration used for buttons and text throughout the app and + # landing pages. Choose a darker, saturated color. + # @param slug [String] + # @param api_endpoints_to_documentation_urls [Hash{String => Object}] Mapping of API endpoints to documentation urls for support. Example: {'GET': + # [['/common-model-scopes', + # ng/common-model-scopes/#common_model_scopes_retrieve'],['/common-model-actions', + # ocs.merge.dev/accounting/common-model-actions/#common_model_actions_retrieve']], + # 'POST': []} + # @param webhook_setup_guide_url [String] Setup guide URL for third party webhook creation. Exposed in Merge Docs. + # @param category_beta_status [Hash{String => Object}] Category or categories this integration is in beta status for. + # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition + # @return [Merge::Integrations::AccountIntegration] + def initialize(name:, abbreviated_name: OMIT, categories: OMIT, image: OMIT, square_image: OMIT, color: OMIT, + slug: OMIT, api_endpoints_to_documentation_urls: OMIT, webhook_setup_guide_url: OMIT, category_beta_status: OMIT, additional_properties: nil) + @name = name + @abbreviated_name = abbreviated_name if abbreviated_name != OMIT + @categories = categories if categories != OMIT + @image = image if image != OMIT + @square_image = square_image if square_image != OMIT + @color = color if color != OMIT + @slug = slug if slug != OMIT + if api_endpoints_to_documentation_urls != OMIT + @api_endpoints_to_documentation_urls = api_endpoints_to_documentation_urls + end + @webhook_setup_guide_url = webhook_setup_guide_url if webhook_setup_guide_url != OMIT + @category_beta_status = category_beta_status if category_beta_status != OMIT + @additional_properties = additional_properties + @_field_set = { + "name": name, + "abbreviated_name": abbreviated_name, + "categories": categories, + "image": image, + "square_image": square_image, + "color": color, + "slug": slug, + "api_endpoints_to_documentation_urls": api_endpoints_to_documentation_urls, + "webhook_setup_guide_url": webhook_setup_guide_url, + "category_beta_status": category_beta_status + }.reject do |_k, v| + v == OMIT + end + end + + # Deserialize a JSON object to an instance of AccountIntegration + # + # @param json_object [String] + # @return [Merge::Integrations::AccountIntegration] + def self.from_json(json_object:) + struct = JSON.parse(json_object, object_class: OpenStruct) + parsed_json = JSON.parse(json_object) + name = parsed_json["name"] + abbreviated_name = parsed_json["abbreviated_name"] + categories = parsed_json["categories"] + image = parsed_json["image"] + square_image = parsed_json["square_image"] + color = parsed_json["color"] + slug = parsed_json["slug"] + api_endpoints_to_documentation_urls = parsed_json["api_endpoints_to_documentation_urls"] + webhook_setup_guide_url = parsed_json["webhook_setup_guide_url"] + category_beta_status = parsed_json["category_beta_status"] + new( + name: name, + abbreviated_name: abbreviated_name, + categories: categories, + image: image, + square_image: square_image, + color: color, + slug: slug, + api_endpoints_to_documentation_urls: api_endpoints_to_documentation_urls, + webhook_setup_guide_url: webhook_setup_guide_url, + category_beta_status: category_beta_status, + additional_properties: struct + ) + end + + # Serialize an instance of AccountIntegration to a JSON object + # + # @return [String] + def to_json(*_args) + @_field_set&.to_json + end + + # Leveraged for Union-type generation, validate_raw attempts to parse the given + # hash and check each fields type against the current object's property + # definitions. + # + # @param obj [Object] + # @return [Void] + def self.validate_raw(obj:) + obj.name.is_a?(String) != false || raise("Passed value for field obj.name is not the expected type, validation failed.") + obj.abbreviated_name&.is_a?(String) != false || raise("Passed value for field obj.abbreviated_name is not the expected type, validation failed.") + obj.categories&.is_a?(Array) != false || raise("Passed value for field obj.categories is not the expected type, validation failed.") + obj.image&.is_a?(String) != false || raise("Passed value for field obj.image is not the expected type, validation failed.") + obj.square_image&.is_a?(String) != false || raise("Passed value for field obj.square_image is not the expected type, validation failed.") + obj.color&.is_a?(String) != false || raise("Passed value for field obj.color is not the expected type, validation failed.") + obj.slug&.is_a?(String) != false || raise("Passed value for field obj.slug is not the expected type, validation failed.") + obj.api_endpoints_to_documentation_urls&.is_a?(Hash) != false || raise("Passed value for field obj.api_endpoints_to_documentation_urls is not the expected type, validation failed.") + obj.webhook_setup_guide_url&.is_a?(String) != false || raise("Passed value for field obj.webhook_setup_guide_url is not the expected type, validation failed.") + obj.category_beta_status&.is_a?(Hash) != false || raise("Passed value for field obj.category_beta_status is not the expected type, validation failed.") + end + end + end +end diff --git a/lib/merge_ruby_client/integrations/types/account_token.rb b/lib/merge_ruby_client/integrations/types/account_token.rb new file mode 100644 index 00000000..bf8e4f54 --- /dev/null +++ b/lib/merge_ruby_client/integrations/types/account_token.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require_relative "account_integration" +require "ostruct" +require "json" + +module Merge + module Integrations + class AccountToken + # @return [String] + attr_reader :account_token + # @return [Merge::Integrations::AccountIntegration] + attr_reader :integration + # @return [String] + attr_reader :id + # @return [OpenStruct] Additional properties unmapped to the current class definition + attr_reader :additional_properties + # @return [Object] + attr_reader :_field_set + protected :_field_set + + OMIT = Object.new + + # @param account_token [String] + # @param integration [Merge::Integrations::AccountIntegration] + # @param id [String] + # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition + # @return [Merge::Integrations::AccountToken] + def initialize(account_token:, integration:, id:, additional_properties: nil) + @account_token = account_token + @integration = integration + @id = id + @additional_properties = additional_properties + @_field_set = { "account_token": account_token, "integration": integration, "id": id } + end + + # Deserialize a JSON object to an instance of AccountToken + # + # @param json_object [String] + # @return [Merge::Integrations::AccountToken] + def self.from_json(json_object:) + struct = JSON.parse(json_object, object_class: OpenStruct) + parsed_json = JSON.parse(json_object) + account_token = parsed_json["account_token"] + if parsed_json["integration"].nil? + integration = nil + else + integration = parsed_json["integration"].to_json + integration = Merge::Integrations::AccountIntegration.from_json(json_object: integration) + end + id = parsed_json["id"] + new( + account_token: account_token, + integration: integration, + id: id, + additional_properties: struct + ) + end + + # Serialize an instance of AccountToken to a JSON object + # + # @return [String] + def to_json(*_args) + @_field_set&.to_json + end + + # Leveraged for Union-type generation, validate_raw attempts to parse the given + # hash and check each fields type against the current object's property + # definitions. + # + # @param obj [Object] + # @return [Void] + def self.validate_raw(obj:) + obj.account_token.is_a?(String) != false || raise("Passed value for field obj.account_token is not the expected type, validation failed.") + Merge::Integrations::AccountIntegration.validate_raw(obj: obj.integration) + obj.id.is_a?(String) != false || raise("Passed value for field obj.id is not the expected type, validation failed.") + end + end + end +end diff --git a/lib/merge_ruby_client/integrations/types/categories_enum.rb b/lib/merge_ruby_client/integrations/types/categories_enum.rb new file mode 100644 index 00000000..cb1c4569 --- /dev/null +++ b/lib/merge_ruby_client/integrations/types/categories_enum.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Merge + module Integrations + # * `hris` - hris + # * `ats` - ats + # * `accounting` - accounting + # * `ticketing` - ticketing + # * `crm` - crm + # * `mktg` - mktg + # * `filestorage` - filestorage + # * `integrations` - integrations + class CategoriesEnum + HRIS = "hris" + ATS = "ats" + ACCOUNTING = "accounting" + TICKETING = "ticketing" + CRM = "crm" + MKTG = "mktg" + FILESTORAGE = "filestorage" + INTEGRATIONS = "integrations" + end + end +end diff --git a/lib/merge_ruby_client/integrations/types/integration.rb b/lib/merge_ruby_client/integrations/types/integration.rb deleted file mode 100644 index 89a473b8..00000000 --- a/lib/merge_ruby_client/integrations/types/integration.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -require "date" -require "ostruct" -require "json" - -module Merge - class Integration - # @return [String] - attr_reader :name - # @return [String] - attr_reader :slug - # @return [String] - attr_reader :image - # @return [String] - attr_reader :square_image - # @return [String] - attr_reader :color - # @return [Array] - attr_reader :categories - # @return [Array] - attr_reader :enabled_categories - # @return [OpenStruct] Additional properties unmapped to the current class definition - attr_reader :additional_properties - # @return [Object] - attr_reader :_field_set - protected :_field_set - - OMIT = Object.new - - # @param name [String] - # @param slug [String] - # @param image [String] - # @param square_image [String] - # @param color [String] - # @param categories [Array] - # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition - # @return [Merge::Basics::Integration] - def initialize(name: OMIT, slug: OMIT, image: OMIT, square_image: OMIT, color: OMIT, categories: OMIT, enabled_categories: OMIT, additional_properties: nil) - @name = name if name != OMIT - @slug = slug if slug != OMIT - @image = image if image != OMIT - @square_image = square_image if square_image != OMIT - @color = color if color != OMIT - @categories = categories if categories != OMIT - @enabled_categories = enabled_categories if enabled_categories != OMIT - @additional_properties = additional_properties - @_field_set = { - "name": name, - "slug": slug, - "image": image, - "square_image": square_image, - "color": color, - "categories": categories, - "enabled_categories": enabled_categories - }.reject do |_k, v| - v == OMIT - end - end - - # Deserialize a JSON object to an instance of Integration - # - # @param json_object [String] - # @return [Merge::Basics::Integration] - def self.from_json(json_object:) - struct = JSON.parse(json_object, object_class: OpenStruct) - parsed_json = JSON.parse(json_object) - name = parsed_json["name"] - slug = parsed_json["slug"] - image = parsed_json["image"] - square_image = parsed_json["square_image"] - color = parsed_json["color"] - categories = parsed_json["categories"] - enabled_categories = parsed_json["enabled_categories"] - additional_properties = struct.to_h.reject { |k, _| %w[name slug image square_image color categories].include?(k) } - new( - name: name, - slug: slug, - image: image, - square_image: square_image, - color: color, - categories: categories, - enabled_categories: enabled_categories, - additional_properties: OpenStruct.new(additional_properties) - ) - end - - # Serialize an instance of Integration to a JSON object - # - # @return [String] - def to_json(*_args) - @_field_set&.to_json - end - - # Leveraged for Union-type generation, validate_raw attempts to parse the given - # hash and check each fields type against the current object's property - # definitions. - # - # @param obj [Object] - # @return [Void] - def self.validate_raw(obj:) - # TODO: Implement validation - end - end -end diff --git a/lib/merge_ruby_client/integrations/types/link_token.rb b/lib/merge_ruby_client/integrations/types/link_token.rb new file mode 100644 index 00000000..1ced4122 --- /dev/null +++ b/lib/merge_ruby_client/integrations/types/link_token.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require "ostruct" +require "json" + +module Merge + module Integrations + class LinkToken + # @return [String] + attr_reader :link_token + # @return [String] + attr_reader :integration_name + # @return [String] + attr_reader :magic_link_url + # @return [OpenStruct] Additional properties unmapped to the current class definition + attr_reader :additional_properties + # @return [Object] + attr_reader :_field_set + protected :_field_set + + OMIT = Object.new + + # @param link_token [String] + # @param integration_name [String] + # @param magic_link_url [String] + # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition + # @return [Merge::Integrations::LinkToken] + def initialize(link_token:, integration_name: OMIT, magic_link_url: OMIT, additional_properties: nil) + @link_token = link_token + @integration_name = integration_name if integration_name != OMIT + @magic_link_url = magic_link_url if magic_link_url != OMIT + @additional_properties = additional_properties + @_field_set = { + "link_token": link_token, + "integration_name": integration_name, + "magic_link_url": magic_link_url + }.reject do |_k, v| + v == OMIT + end + end + + # Deserialize a JSON object to an instance of LinkToken + # + # @param json_object [String] + # @return [Merge::Integrations::LinkToken] + def self.from_json(json_object:) + struct = JSON.parse(json_object, object_class: OpenStruct) + parsed_json = JSON.parse(json_object) + link_token = parsed_json["link_token"] + integration_name = parsed_json["integration_name"] + magic_link_url = parsed_json["magic_link_url"] + new( + link_token: link_token, + integration_name: integration_name, + magic_link_url: magic_link_url, + additional_properties: struct + ) + end + + # Serialize an instance of LinkToken to a JSON object + # + # @return [String] + def to_json(*_args) + @_field_set&.to_json + end + + # Leveraged for Union-type generation, validate_raw attempts to parse the given + # hash and check each fields type against the current object's property + # definitions. + # + # @param obj [Object] + # @return [Void] + def self.validate_raw(obj:) + obj.link_token.is_a?(String) != false || raise("Passed value for field obj.link_token is not the expected type, validation failed.") + obj.integration_name&.is_a?(String) != false || raise("Passed value for field obj.integration_name is not the expected type, validation failed.") + obj.magic_link_url&.is_a?(String) != false || raise("Passed value for field obj.magic_link_url is not the expected type, validation failed.") + end + end + end +end diff --git a/lib/merge_ruby_client/integrations/types/provider.rb b/lib/merge_ruby_client/integrations/types/provider.rb new file mode 100644 index 00000000..7f896985 --- /dev/null +++ b/lib/merge_ruby_client/integrations/types/provider.rb @@ -0,0 +1,107 @@ +# frozen_string_literal: true + +require "date" +require "ostruct" +require "json" + +module Merge + module Integrations + class Provider + # @return [String] + attr_reader :name + # @return [String] + attr_reader :slug + # @return [String] + attr_reader :image + # @return [String] + attr_reader :square_image + # @return [String] + attr_reader :color + # @return [Array] + attr_reader :categories + # @return [Array] + attr_reader :enabled_categories + # @return [OpenStruct] Additional properties unmapped to the current class definition + attr_reader :additional_properties + # @return [Object] + attr_reader :_field_set + protected :_field_set + + OMIT = Object.new + + # @param name [String] + # @param slug [String] + # @param image [String] + # @param square_image [String] + # @param color [String] + # @param categories [Array] + # @param additional_properties [OpenStruct] Additional properties unmapped to the current class definition + # @return [Merge::Basics::Integration] + def initialize(name: OMIT, slug: OMIT, image: OMIT, square_image: OMIT, color: OMIT, categories: OMIT, enabled_categories: OMIT, additional_properties: nil) + @name = name if name != OMIT + @slug = slug if slug != OMIT + @image = image if image != OMIT + @square_image = square_image if square_image != OMIT + @color = color if color != OMIT + @categories = categories if categories != OMIT + @enabled_categories = enabled_categories if enabled_categories != OMIT + @additional_properties = additional_properties + @_field_set = { + "name": name, + "slug": slug, + "image": image, + "square_image": square_image, + "color": color, + "categories": categories, + "enabled_categories": enabled_categories + }.reject do |_k, v| + v == OMIT + end + end + + # Deserialize a JSON object to an instance of Integration + # + # @param json_object [String] + # @return [Merge::Basics::Integration] + def self.from_json(json_object:) + struct = JSON.parse(json_object, object_class: OpenStruct) + parsed_json = JSON.parse(json_object) + name = parsed_json["name"] + slug = parsed_json["slug"] + image = parsed_json["image"] + square_image = parsed_json["square_image"] + color = parsed_json["color"] + categories = parsed_json["categories"] + enabled_categories = parsed_json["enabled_categories"] + additional_properties = struct.to_h.reject { |k, _| %w[name slug image square_image color categories].include?(k) } + new( + name: name, + slug: slug, + image: image, + square_image: square_image, + color: color, + categories: categories, + enabled_categories: enabled_categories, + additional_properties: OpenStruct.new(additional_properties) + ) + end + + # Serialize an instance of Integration to a JSON object + # + # @return [String] + def to_json(*_args) + @_field_set&.to_json + end + + # Leveraged for Union-type generation, validate_raw attempts to parse the given + # hash and check each fields type against the current object's property + # definitions. + # + # @param obj [Object] + # @return [Void] + def self.validate_raw(obj:) + # TODO: Implement validation + end + end + end +end diff --git a/lib/types_export.rb b/lib/types_export.rb index 5d434c1b..f832994e 100644 --- a/lib/types_export.rb +++ b/lib/types_export.rb @@ -1297,4 +1297,8 @@ require_relative "merge_ruby_client/accounting/types/vendor_credit_response" require_relative "merge_ruby_client/accounting/types/warning_validation_problem" require_relative "merge_ruby_client/accounting/types/webhook_receiver" -require_relative "merge_ruby_client/integrations/types/integration" +require_relative "merge_ruby_client/integrations/types/account_integration" +require_relative "merge_ruby_client/integrations/types/account_token" +require_relative "merge_ruby_client/integrations/types/categories_enum" +require_relative "merge_ruby_client/integrations/types/link_token" +require_relative "merge_ruby_client/integrations/types/provider"