Class: Bloomy::Issue

Inherits:
Object
  • Object
show all
Includes:
Utilities::UserIdUtility
Defined in:
lib/bloomy/operations/issues.rb

Overview

Handles CRUD operations for issues in the system. Provides functionality to create, retrieve, list, and solve issues associated with meetings and users.

Instance Method Summary collapse

Methods included from Utilities::UserIdUtility

#user_id

Constructor Details

#initialize(conn) ⇒ Issue

Initializes a new Issue instance



17
18
19
# File 'lib/bloomy/operations/issues.rb', line 17

def initialize(conn)
  @conn = conn
end

Instance Method Details

#create(meeting_id:, title:, user_id: self.user_id, notes: nil) ⇒ Hash

Creates a new issue in the system

Raises:

  • (ApiError)

    When the API request fails or returns invalid data

  • (ArgumentError)

    When required parameters are missing or invalid



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/bloomy/operations/issues.rb', line 86

def create(meeting_id:, title:, user_id: self.user_id, notes: nil)
  response = @conn.post("issues/create", {title: title, meetingid: meeting_id, ownerid: user_id, notes: notes}.to_json)
  {
    id: response.body["Id"],
    meeting_id: response.body["OriginId"],
    meeting_title: response.body["Origin"],
    title: response.body["Name"],
    user_id: response.body["Owner"]["Id"],
    notes_url: response.body["DetailsUrl"]
  }
end

#details(issue_id) ⇒ Hash

Retrieves detailed information about a specific issue

Raises:

  • (ApiError)

    When the API request fails or returns invalid data



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/bloomy/operations/issues.rb', line 26

def details(issue_id)
  response = @conn.get("issues/#{issue_id}").body
  {
    id: response["Id"],
    title: response["Name"],
    notes_url: response["DetailsUrl"],
    created_at: response["CreateTime"],
    completed_at: response["CloseTime"],
    meeting_id: response["OriginId"],
    meeting_title: response["Origin"],
    user_id: response["Owner"]["Id"],
    user_name: response["Owner"]["Name"]
  }
end

#list(user_id: nil, meeting_id: nil) ⇒ Array<Hash>

Lists issues filtered by user or meeting

Raises:

  • (ArgumentError)

    When both user_id and meeting_id are provided

  • (ApiError)

    When the API request fails or returns invalid data



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/bloomy/operations/issues.rb', line 48

def list(user_id: nil, meeting_id: nil)
  if user_id && meeting_id
    raise ArgumentError, "Please provide either `user_id` or `meeting_id`, not both."
  end

  response = meeting_id ? @conn.get("l10/#{meeting_id}/issues").body : @conn.get("issues/users/#{user_id || self.user_id}").body

  response.map do |issue|
    {
      id: issue["Id"],
      title: issue["Name"],
      notes_url: issue["DetailsUrl"],
      created_at: issue["CreateTime"],
      meeting_id: issue["OriginId"],
      meeting_title: issue["Origin"]
    }
  end
end

#solve(issue_id) ⇒ Boolean

Marks an issue as completed/solved

Raises:

  • (ApiError)

    When the API request fails



72
73
74
75
# File 'lib/bloomy/operations/issues.rb', line 72

def solve(issue_id)
  response = @conn.post("issues/#{issue_id}/complete", {complete: true}.to_json)
  response.success?
end