Skip to content
Closed
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 @@ -11,3 +11,4 @@
*.DS_Store
.vscode
.idea
.claude
1 change: 1 addition & 0 deletions lib/mailtrap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
require_relative 'mailtrap/contact_fields_api'
require_relative 'mailtrap/contact_imports_api'
require_relative 'mailtrap/suppressions_api'
require_relative 'mailtrap/projects_api'

module Mailtrap
# @!macro api_errors
Expand Down
1 change: 0 additions & 1 deletion lib/mailtrap/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ def initialize( # rubocop:disable Metrics/ParameterLists
validate_args!(api_key, api_port, bulk, sandbox, inbox_id)

api_host ||= select_api_host(bulk:, sandbox:)

@api_key = api_key
@api_host = api_host
@general_api_host = general_api_host
Expand Down
24 changes: 24 additions & 0 deletions lib/mailtrap/project.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# frozen_string_literal: true

module Mailtrap
# Data Transfer Object for Project
# @see https://api-docs.mailtrap.io/docs/mailtrap-api-docs/ee252e413d78a-create-project
# @attr_reader id [Integer] The project ID
# @attr_reader name [String] The project name
# @attr_reader share_links [Hash] Admin and viewer share links
# @attr_reader inboxes [Array] Array of inboxes
# @attr_reader permissions [Hash] List of permissions
Project = Struct.new(
:id,
:name,
:share_links,
:inboxes,
:permissions,
keyword_init: true
) do
# @return [Hash] The project attributes as a hash
def to_h
super.compact
end
end
end
67 changes: 67 additions & 0 deletions lib/mailtrap/projects_api.rb

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There will be Inboxes API. It will define Inbox model. Project should return not the list of hashes but the list of inboxes.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok I will check
as for tests - they are passing for me locally
I don't have access to test results here (I see them all as "waiting") so please advise what I would need to do to get them pass - I guess it might be some sort of setup issue

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# frozen_string_literal: true

require_relative 'base_api'
require_relative 'project'

module Mailtrap
class ProjectsAPI
include BaseAPI

self.supported_options = %i[name]

self.response_class = Project

# Lists all projects for the account
# @return [Array<Project>] Array of projects
# @!macro api_errors
def list
base_list
end

# Retrieves a specific project
# @param project_id [Integer] The project ID
# @return [Project] Project object
# @!macro api_errors
def get(project_id)
base_get(project_id)
end

# Creates a new project
# @param [Hash] options The parameters to create
# @option options [String] :name The project name
# @return [Project] Created project object
# @!macro api_errors
# @raise [ArgumentError] If invalid options are provided
def create(options)
base_create(options)
end

# Updates an existing project
# @param project_id [Integer] The project ID
# @param [Hash] options The parameters to update
# @return [Project] Updated project object
# @!macro api_errors
# @raise [ArgumentError] If invalid options are provided
def update(project_id, options)
base_update(project_id, options)
end

# Deletes a project
# @param project_id [Integer] The project ID
# @return nil
# @!macro api_errors
def delete(project_id)
base_delete(project_id)
end

private

def base_path
"/api/accounts/#{account_id}/projects"
end

def wrap_request(options)
{ project: options }
end
end
end

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading