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

Parameters:

  • conn (Faraday::Connection)

    Connection object for making API requests



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

Parameters:

  • meeting_id (Integer)

    Unique identifier of the associated meeting

  • title (String)

    Title/name of the issue

  • user_id (Integer) (defaults to: self.user_id)

    Unique identifier of the issue owner (defaults to current user)

  • notes (String, nil) (defaults to: nil)

    Additional notes or description for the issue (optional)

Returns:

  • (Hash)

    Newly created issue details

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

Parameters:

  • issue_id (Integer)

    Unique identifier of the issue

Returns:

  • (Hash)

    Detailed information about the 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

Parameters:

  • user_id (Integer, nil) (defaults to: nil)

    Unique identifier of the user (optional)

  • meeting_id (Integer, nil) (defaults to: nil)

    Unique identifier of the meeting (optional)

Returns:

  • (Array<Hash>)

    List of issues matching the filter criteria

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

Parameters:

  • issue_id (Integer)

    Unique identifier of the issue to be solved

Returns:

  • (Boolean)

    true if issue was successfully solved, false otherwise

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