Module: ActiveProject::Adapters::Basecamp::Lists
- Included in:
- ActiveProject::Adapters::BasecampAdapter
- Defined in:
- lib/active_project/adapters/basecamp/lists.rb
Instance Method Summary collapse
-
#create_list(project_id, attributes) ⇒ Hash
Creates a new Todolist within a project.
-
#find_first_todolist_id(project_id) ⇒ String?
Finds the ID of the first todolist in a project.
Instance Method Details
#create_list(project_id, attributes) ⇒ Hash
Creates a new Todolist within a project.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/active_project/adapters/basecamp/lists.rb', line 11 def create_list(project_id, attributes) unless attributes[:name] && !attributes[:name].empty? raise ArgumentError, "Missing required attribute for Basecamp todolist creation: :name" end project_data = make_request(:get, "projects/#{project_id}.json") todoset_dock_entry = project_data&.dig("dock")&.find { |d| d["name"] == "todoset" } todoset_url = todoset_dock_entry&.dig("url") raise ApiError, "Could not find todoset URL for project #{project_id}" unless todoset_url todoset_id = todoset_url.match(%r{todosets/(\d+)\.json$})&.captures&.first raise ApiError, "Could not extract todoset ID from URL: #{todoset_url}" unless todoset_id path = "buckets/#{project_id}/todosets/#{todoset_id}/todolists.json" payload = { name: attributes[:name], description: attributes[:description] }.compact make_request(:post, path, payload.to_json) end |
#find_first_todolist_id(project_id) ⇒ String?
Finds the ID of the first todolist in a project.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/active_project/adapters/basecamp/lists.rb', line 36 def find_first_todolist_id(project_id) project_data = make_request(:get, "projects/#{project_id}.json") todoset_dock_entry = project_data&.dig("dock")&.find { |d| d["name"] == "todoset" } todoset_url = todoset_dock_entry&.dig("url") return nil unless todoset_url todoset_id = todoset_url.match(%r{todosets/(\d+)\.json$})&.captures&.first return nil unless todoset_id todolists_url_path = "buckets/#{project_id}/todosets/#{todoset_id}/todolists.json" todolists_data = make_request(:get, todolists_url_path) todolists_data&.first&.dig("id") rescue NotFoundError nil end |