Module: ActiveProject::Adapters::Jira::Projects
- Included in:
- ActiveProject::Adapters::JiraAdapter
- Defined in:
- lib/active_project/adapters/jira/projects.rb
Instance Method Summary collapse
-
#create_project(attributes) ⇒ ActiveProject::Resources::Project
Creates a new project in Jira.
-
#delete_project(project_id_or_key) ⇒ Boolean
Deletes a project in Jira.
-
#find_project(id_or_key) ⇒ ActiveProject::Resources::Project
Finds a specific project by its ID or key.
-
#list_projects ⇒ Array<ActiveProject::Resources::Project>
Lists projects accessible by the configured credentials using the V3 endpoint.
Instance Method Details
#create_project(attributes) ⇒ ActiveProject::Resources::Project
Creates a new project in Jira.
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 lead_account_id] 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.
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.
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_projects ⇒ Array<ActiveProject::Resources::Project>
Lists projects accessible by the configured credentials using the V3 endpoint. Handles pagination automatically.
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 |