Module: ActiveProject::Adapters::Basecamp::Projects
- Included in:
- ActiveProject::Adapters::BasecampAdapter
- Defined in:
- lib/active_project/adapters/basecamp/projects.rb
Instance Method Summary collapse
-
#create_project(attributes) ⇒ ActiveProject::Resources::Project
Creates a new project in Basecamp.
-
#delete_project(project_id) ⇒ Boolean
Archives (trashes) a project in Basecamp.
-
#find_project(project_id) ⇒ ActiveProject::Resources::Project
Finds a specific project by its ID.
-
#list_projects ⇒ Array<ActiveProject::Resources::Project>
Lists projects accessible by the configured credentials.
-
#untrash_project(project_id) ⇒ Boolean
Recovers a trashed project in Basecamp.
Instance Method Details
#create_project(attributes) ⇒ ActiveProject::Resources::Project
Creates a new project in Basecamp.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/active_project/adapters/basecamp/projects.rb', line 65 def create_project(attributes) unless attributes[:name] && !attributes[:name].empty? raise ArgumentError, "Missing required attribute for Basecamp project creation: :name" end path = "projects.json" payload = { name: attributes[:name], description: attributes[:description] }.compact project_data = make_request(:post, path, payload.to_json) Resources::Project.new(self, id: project_data["id"], key: nil, name: project_data["name"], adapter_source: :basecamp, raw_data: project_data) end |
#delete_project(project_id) ⇒ Boolean
Archives (trashes) a project in Basecamp. Note: Basecamp API doesn’t offer permanent deletion via this endpoint.
102 103 104 105 106 |
# File 'lib/active_project/adapters/basecamp/projects.rb', line 102 def delete_project(project_id) path = "projects/#{project_id}.json" make_request(:delete, path) true end |
#find_project(project_id) ⇒ ActiveProject::Resources::Project
Finds a specific project by its ID.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/active_project/adapters/basecamp/projects.rb', line 47 def find_project(project_id) path = "projects/#{project_id}.json" project_data = make_request(:get, path) return nil unless project_data raise NotFoundError, "Basecamp project ID #{project_id} is trashed." if project_data["status"] == "trashed" Resources::Project.new(self, id: project_data["id"], key: nil, name: project_data["name"], adapter_source: :basecamp, raw_data: project_data) end |
#list_projects ⇒ Array<ActiveProject::Resources::Project>
Lists projects accessible by the configured credentials. Handles pagination automatically using the Link header.
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 39 40 41 42 |
# File 'lib/active_project/adapters/basecamp/projects.rb', line 10 def list_projects all_projects = [] path = "projects.json" loop do response = @connection.get(path) projects_data = begin JSON.parse(response.body) rescue StandardError [] end break if projects_data.empty? projects_data.each do |project_data| all_projects << Resources::Project.new(self, id: project_data["id"], key: nil, name: project_data["name"], adapter_source: :basecamp, raw_data: project_data) end link_header = response.headers["Link"] next_url = parse_next_link(link_header) break unless next_url path = next_url.sub(@base_url, "").sub(%r{^/}, "") end all_projects rescue Faraday::Error => e handle_faraday_error(e) end |
#untrash_project(project_id) ⇒ Boolean
Recovers a trashed project in Basecamp.
89 90 91 92 93 |
# File 'lib/active_project/adapters/basecamp/projects.rb', line 89 def untrash_project(project_id) path = "projects/#{project_id}.json" make_request(:put, path, { "status": "active" }.to_json) true end |