Class: Meeting

Inherits:
Object
  • Object
show all
Defined in:
lib/bloomy/operations/meetings.rb

Overview

Note:

This class is already initialized via the client and usable as ‘client.measurable.method`

Class to handle all the operations related to meeting

Instance Method Summary collapse

Constructor Details

#initialize(conn, user_id) ⇒ Meeting

Initializes a new Meeting instance

Parameters:

  • conn (Object)

    the connection object to interact with the API

  • user_id (Integer)

    the ID of the user



11
12
13
14
# File 'lib/bloomy/operations/meetings.rb', line 11

def initialize(conn, user_id)
  @conn = conn
  @user_id = user_id
end

Instance Method Details

#attendees(meeting_id) ⇒ Array<Hash>

Lists all attendees for a specific meeting

Examples:

client.meeting.attendees(1)
#=> [{ name: "John Doe", id: 1 }, ...]

Parameters:

  • meeting_id (Integer)

    the ID of the meeting

Returns:

  • (Array<Hash>)

    an array of hashes containing attendee details



35
36
37
38
# File 'lib/bloomy/operations/meetings.rb', line 35

def attendees(meeting_id)
  response = @conn.get("L10/#{meeting_id}/attendees").body
  response.map { |attendee| {name: attendee["Name"], id: attendee["Id"]} }
end

#create(title:, add_self: true, attendees: []) ⇒ Hash

Creates a new meeting

Examples:

client.meeting.create(title: "New Meeting", attendees: [2, 3])
#=> { meeting_id: 1, title: "New Meeting", attendees: [2, 3] }

Parameters:

  • title (String)

    the title of the new meeting

  • add_self (Boolean) (defaults to: true)

    whether to add the current user as an attendee (default: true)

  • attendees (Array<Integer>) (defaults to: [])

    a list of user IDs to add as attendees

Returns:

  • (Hash)

    a hash containing the new meeting’s ID and title, and the list of attendees



151
152
153
154
155
156
157
158
159
160
# File 'lib/bloomy/operations/meetings.rb', line 151

def create(title:, add_self: true, attendees: [])
  payload = {title: title, addSelf: add_self}.to_json
  response = @conn.post("L10/create", payload).body
  meeting_id = response["meetingId"]
  meeting_details = {meeting_id: meeting_id, title: title}
  attendees.each do |attendee|
    @conn.post("L10/#{meeting_id}/attendees/#{attendee}")
  end
  meeting_details.merge(attendees: attendees)
end

#delete(meeting_id) ⇒ Object

Deletes a meeting

Examples:

client.meeting.delete(1)

Parameters:

  • meeting_id (Integer)

    the ID of the meeting to delete



167
168
169
# File 'lib/bloomy/operations/meetings.rb', line 167

def delete(meeting_id)
  @conn.delete("L10/#{meeting_id}")
end

#details(meeting_id, include_closed: false) ⇒ Hash

Retrieves details of a specific meeting

Examples:

client.meeting.details(1)
#=> { id: 1, name: "Team Meeting", attendees: [...], issues: [...], todos: [...], metrics: [...] }

Parameters:

  • meeting_id (Integer)

    the ID of the meeting

  • include_closed (Boolean) (defaults to: false)

    whether to include closed issues and todos (default: false)

Returns:

  • (Hash)

    a hash containing detailed information about the meeting



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/bloomy/operations/meetings.rb', line 126

def details(meeting_id, include_closed: false)
  meeting = list.find { |m| m[:id] == meeting_id }
  attendees = attendees(meeting_id)
  issues = issues(meeting_id, include_closed: include_closed)
  todos = todos(meeting_id, include_closed: include_closed)
  measurables = metrics(meeting_id)
  {
    id: meeting[:id],
    name: meeting[:name],
    attendees: attendees,
    issues: issues,
    todos: todos,
    metrics: measurables
  }
end

#issues(meeting_id, include_closed: false) ⇒ Array<Hash>

Lists all issues for a specific meeting

Examples:

client.meeting.issues(1)
#=> [{ id: 1, title: "Issue Title", created_at: "2024-06-10", ... }, ...]

Parameters:

  • meeting_id (Integer)

    the ID of the meeting

  • include_closed (Boolean) (defaults to: false)

    whether to include closed issues (default: false)

Returns:

  • (Array<Hash>)

    an array of hashes containing issue details



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

def issues(meeting_id, include_closed: false)
  response = @conn.get("L10/#{meeting_id}/issues?include_resolved=#{include_closed}").body
  response.map do |issue|
    {
      id: issue["Id"],
      title: issue["Name"],
      created_at: issue["CreateTime"],
      closed_at: issue["CloseTime"],
      details_url: issue["DetailsUrl"],
      owner: {
        id: issue["Owner"]["Id"],
        name: issue["Owner"]["Name"]
      }
    }
  end
end

#list(user_id: @user_id) ⇒ Array<Hash>

Lists all meetings for a specific user

Examples:

client.meeting.list
#=> [{ id: 123, name: "Team Meeting" }, ...]

Parameters:

  • user_id (Integer) (defaults to: @user_id)

    the ID of the user (default is the initialized user ID)

Returns:

  • (Array<Hash>)

    an array of hashes containing meeting details



23
24
25
26
# File 'lib/bloomy/operations/meetings.rb', line 23

def list(user_id: @user_id)
  response = @conn.get("L10/#{user_id}/list").body
  response.map { |meeting| {id: meeting["Id"], name: meeting["Name"]} }
end

#metrics(meeting_id) ⇒ Array<Hash>

Lists all metrics for a specific meeting

Examples:

client.meeting.metrics(1)
#=> [{ id: 1, name: "Sales", target: 100, operator: ">", format: "currency", ... }, ...]

Parameters:

  • meeting_id (Integer)

    the ID of the meeting

Returns:

  • (Array<Hash>)

    an array of hashes containing metric details



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/bloomy/operations/meetings.rb', line 97

def metrics(meeting_id)
  response = @conn.get("L10/#{meeting_id}/measurables").body
  response.map do |measurable|
    {
      id: measurable["Id"],
      name: measurable["Name"].strip,
      target: measurable["Target"],
      operator: measurable["Direction"],
      format: measurable["Modifiers"],
      owner: {
        id: measurable["Owner"]["Id"],
        name: measurable["Owner"]["Name"]
      },
      admin: {
        id: measurable["Admin"]["Id"],
        name: measurable["Admin"]["Name"]
      }
    }
  end
end

#todos(meeting_id, include_closed: false) ⇒ Array<Hash>

Lists all todos for a specific meeting

Examples:

client.meeting.todos(1)
#=> [{ id: 1, title: "Todo Title", due_date: "2024-06-12", ... }, ...]

Parameters:

  • meeting_id (Integer)

    the ID of the meeting

  • include_closed (Boolean) (defaults to: false)

    whether to include closed todos (default: false)

Returns:

  • (Array<Hash>)

    an array of hashes containing todo details



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/bloomy/operations/meetings.rb', line 73

def todos(meeting_id, include_closed: false)
  response = @conn.get("L10/#{meeting_id}/todos?INCLUDE_CLOSED=#{include_closed}").body
  response.map do |todo|
    {
      id: todo["Id"],
      title: todo["Name"],
      due_date: todo["DueDate"],
      details_url: todo["DetailsUrl"],
      completed_at: todo["CompleteTime"],
      owner: {
        id: todo["Owner"]["Id"],
        name: todo["Owner"]["Name"]
      }
    }
  end
end