Module: ActiveProject::Adapters::Jira::Projects

Included in:
ActiveProject::Adapters::JiraAdapter
Defined in:
lib/active_project/adapters/jira/projects.rb

Instance Method Summary collapse

Instance Method Details

#create_project(attributes) ⇒ ActiveProject::Resources::Project

Creates a new project in Jira.

Parameters:

  • attributes (Hash)

    Project attributes. Required: :key, :name, :project_type_key, :lead_account_id. Optional: :description, :assignee_type.

Returns:



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/active_project/adapters/jira/projects.rb', line 60

def create_project(attributes)
  required_keys = i[key name project_type_key ]
  missing_keys = required_keys.reject { |k| attributes.key?(k) && !attributes[k].to_s.empty? }
  unless missing_keys.empty?
    raise ArgumentError, "Missing required attributes for Jira project creation: #{missing_keys.join(', ')}"
  end

  path = "/rest/api/3/project"
  payload = {
    key: attributes[:key],
    name: attributes[:name],
    projectTypeKey: attributes[:project_type_key],
    leadAccountId: attributes[:lead_account_id],
    description: attributes[:description],
    assigneeType: attributes[:assignee_type]
  }.compact

  project_data = make_request(:post, path, payload.to_json)

  Resources::Project.new(self,
                         id: project_data["id"]&.to_i,
                         key: project_data["key"],
                         name: project_data["name"],
                         adapter_source: :jira,
                         raw_data: project_data)
end

#delete_project(project_id_or_key) ⇒ Boolean

Deletes a project in Jira. WARNING: This is a permanent deletion and requires admin permissions.

Parameters:

  • project_id_or_key (String, Integer)

    The ID or key of the project to delete.

Returns:

  • (Boolean)

    true if deletion was successful (API returns 204).

Raises:



94
95
96
97
98
# File 'lib/active_project/adapters/jira/projects.rb', line 94

def delete_project(project_id_or_key)
  path = "/rest/api/3/project/#{project_id_or_key}"
  make_request(:delete, path)
  true
end

#find_project(id_or_key) ⇒ ActiveProject::Resources::Project

Finds a specific project by its ID or key.

Parameters:

  • id_or_key (String, Integer)

    The ID or key of the project.

Returns:



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/active_project/adapters/jira/projects.rb', line 43

def find_project(id_or_key)
  path = "/rest/api/3/project/#{id_or_key}"
  project_data = make_request(:get, path)

  Resources::Project.new(self,
                         id: project_data["id"].to_i,
                         key: project_data["key"],
                         name: project_data["name"],
                         adapter_source: :jira,
                         raw_data: project_data)
end

#list_projectsArray<ActiveProject::Resources::Project>

Lists projects accessible by the configured credentials using the V3 endpoint. Handles pagination automatically.

Returns:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/active_project/adapters/jira/projects.rb', line 10

def list_projects
  start_at = 0
  max_results = 50
  all_projects = []

  loop do
    path = "/rest/api/3/project/search?startAt=#{start_at}&maxResults=#{max_results}"
    response_data = make_request(:get, path)

    projects_data = response_data["values"] || []
    break if projects_data.empty?

    projects_data.each do |project_data|
      all_projects << Resources::Project.new(self,
                                             id: project_data["id"],
                                             key: project_data["key"],
                                             name: project_data["name"],
                                             adapter_source: :jira,
                                             raw_data: project_data)
    end

    is_last = response_data["isLast"]
    break if is_last || projects_data.size < max_results

    start_at += projects_data.size
  end

  all_projects
end