bloomy 0.10.0 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,103 +2,118 @@
2
2
 
3
3
  require "bloomy/utils/get_user_id"
4
4
 
5
- # Class to handle all the operations related to users
6
- class User
7
- include Bloomy::Utilities::UserIdUtility
5
+ module Bloomy
6
+ # Class to handle all the operations related to users
7
+ class User
8
+ include Bloomy::Utilities::UserIdUtility
8
9
 
9
- # Initializes a new User instance
10
- #
11
- # @param conn [Object] the connection object to interact with the API
12
- def initialize(conn)
13
- @conn = conn
14
- end
15
-
16
- # Retrieves details of a specific user
17
- #
18
- # @param user_id [Integer] the ID of the user (default: the current user ID)
19
- # @param direct_reports [Boolean] whether to include direct reports (default: false)
20
- # @param positions [Boolean] whether to include positions (default: false)
21
- # @param all [Boolean] whether to include both direct reports and positions (default: false)
22
- # @return [Hash] a hash containing user details
23
- # @example
24
- # client.user.details
25
- # #=> {name: "John Doe", id: 1, image_url: "http://example.com/image.jpg", ...}
26
- def details(user_id = self.user_id, direct_reports: false, positions: false, all: false)
27
- response = @conn.get("users/#{user_id}").body
28
- user_details = {name: response["Name"], id: response["Id"], image_url: response["ImageUrl"]}
10
+ # Initializes a new User instance
11
+ #
12
+ # @param conn [Object] the connection object to interact with the API
13
+ def initialize(conn)
14
+ @conn = conn
15
+ end
29
16
 
30
- user_details[:direct_reports] = direct_reports(user_id) if direct_reports || all
31
- user_details[:positions] = positions(user_id) if positions || all
32
- user_details
33
- end
17
+ # Retrieves details of a specific user
18
+ #
19
+ # @param user_id [Integer] the ID of the user (default: the current user ID)
20
+ # @param direct_reports [Boolean] whether to include direct reports (default: false)
21
+ # @param positions [Boolean] whether to include positions (default: false)
22
+ # @param all [Boolean] whether to include both direct reports and positions (default: false)
23
+ # @return [Types::UserItem] a UserItem object containing user details
24
+ # @example
25
+ # client.user.details
26
+ # #=> #<Types::UserItem id: 1, name: "John Doe", image_url: "http://example.com/image.jpg">
27
+ def details(user_id = self.user_id, direct_reports: false, positions: false, all: false)
28
+ response = @conn.get("users/#{user_id}").body
29
+ user_details = Types::UserItem.new(
30
+ id: response["Id"],
31
+ name: response["Name"],
32
+ image_url: response["ImageUrl"]
33
+ )
34
34
 
35
- # Retrieves direct reports of a specific user
36
- #
37
- # @param user_id [Integer] the ID of the user (default: the current user ID)
38
- # @return [Array<Hash>] an array of hashes containing direct report details
39
- # @example
40
- # client.user.direct_reports
41
- # #=> [{name: "Jane Smith", id: 2, image_url: "http://example.com/image.jpg"}, ...]
42
- def direct_reports(user_id = self.user_id)
43
- direct_reports_response = @conn.get("users/#{user_id}/directreports").body
44
- direct_reports_response.map { |report| {name: report["Name"], id: report["Id"], image_url: report["ImageUrl"]} }
45
- end
35
+ user_details.direct_reports = direct_reports(user_id) if direct_reports || all
36
+ user_details.positions = positions(user_id) if positions || all
37
+ user_details
38
+ end
46
39
 
47
- # Retrieves positions of a specific user
48
- #
49
- # @param user_id [Integer] the ID of the user (default: the current user ID)
50
- # @return [Array<Hash>] an array of hashes containing position details
51
- # @example
52
- # user.positions
53
- # #=> [{name: "Manager", id: 3}, ...]
54
- def positions(user_id = self.user_id)
55
- position_response = @conn.get("users/#{user_id}/seats").body
56
- position_response.map do |position|
57
- {name: position["Group"]["Position"]["Name"], id: position["Group"]["Position"]["Id"]}
40
+ # Retrieves direct reports of a specific user
41
+ #
42
+ # @param user_id [Integer] the ID of the user (default: the current user ID)
43
+ # @return [Array<Types::UserItem>] an array of UserItem objects containing direct report details
44
+ # @example
45
+ # client.user.direct_reports
46
+ # #=> [#<Types::UserItem name: "Jane Smith", id: 2, image_url: "http://example.com/image.jpg">, ...]
47
+ def direct_reports(user_id = self.user_id)
48
+ direct_reports_response = @conn.get("users/#{user_id}/directreports").body
49
+ direct_reports_response.map do |report|
50
+ Types::UserItem.new(
51
+ name: report["Name"],
52
+ id: report["Id"],
53
+ image_url: report["ImageUrl"]
54
+ )
55
+ end
58
56
  end
59
- end
60
57
 
61
- # Searches for users based on a search term
62
- #
63
- # @param term [String] the search term
64
- # @return [Array<Hash>] an array of hashes containing search results
65
- # @example
66
- # user.search("John")
67
- # #=> [{id: 1, name: "John Doe", description: "Developer", ...}, ...]
68
- def search(term)
69
- response = @conn.get("search/user", term: term).body
70
- response.map do |user|
71
- {
72
- id: user["Id"],
73
- name: user["Name"],
74
- description: user["Description"],
75
- email: user["Email"],
76
- organization_id: user["OrganizationId"],
77
- image_url: user["ImageUrl"]
78
- }
58
+ # Retrieves positions of a specific user
59
+ #
60
+ # @param user_id [Integer] the ID of the user (default: the current user ID)
61
+ # @return [Array<Types::UserItem>] an array of UserItem objects containing position details
62
+ # @example
63
+ # user.positions
64
+ # #=> [#<Types::UserItem name: "Manager", id: 3>, ...]
65
+ def positions(user_id = self.user_id)
66
+ position_response = @conn.get("users/#{user_id}/seats").body
67
+ position_response.map do |position|
68
+ Types::UserItem.new(
69
+ name: position["Group"]["Position"]["Name"],
70
+ id: position["Group"]["Position"]["Id"]
71
+ )
72
+ end
79
73
  end
80
- end
81
74
 
82
- # Retrieves all users in the system
83
- #
84
- # @param include_placeholders [Boolean] whether to include users
85
- # @return [Array<Hash>] an array of hashes containing user details
86
- # @example
87
- # user.all
88
- # #=> [{id: 1, name: "John Doe", email: "john@example.com", ...}, ...]
89
- def all(include_placeholders: false)
90
- users = @conn.get("search/all", term: "%").body
91
- users
92
- .select { |user| user["ResultType"] == "User" }
93
- .reject { |user| !include_placeholders && user["ImageUrl"] == "/i/userplaceholder" }
94
- .map do |user|
95
- {
75
+ # Searches for users based on a search term
76
+ #
77
+ # @param term [String] the search term
78
+ # @return [Array<Types::UserItem>] an array of UserItem objects containing search results
79
+ # @example
80
+ # user.search("John")
81
+ # #=> [#<Types::UserItem id: 1, name: "John Doe", description: "Developer", ...>, ...]
82
+ def search(term)
83
+ response = @conn.get("search/user", term: term).body
84
+ response.map do |user|
85
+ Types::UserItem.new(
96
86
  id: user["Id"],
97
87
  name: user["Name"],
88
+ description: user["Description"],
98
89
  email: user["Email"],
99
- position: user["Description"],
90
+ organization_id: user["OrganizationId"],
100
91
  image_url: user["ImageUrl"]
101
- }
92
+ )
102
93
  end
94
+ end
95
+
96
+ # Retrieves all users in the system
97
+ #
98
+ # @param include_placeholders [Boolean] whether to include placeholder users (default: false)
99
+ # @return [Array<Types::UserItem>] an array of UserItem objects containing user details
100
+ # @example
101
+ # user.all
102
+ # #=> [#<Types::UserItem id: 1, name: "John Doe", email: "john@example.com", ...>, ...]
103
+ def all(include_placeholders: false)
104
+ users = @conn.get("search/all", term: "%").body
105
+ users
106
+ .select { |user| user["ResultType"] == "User" }
107
+ .reject { |user| !include_placeholders && user["ImageUrl"] == "/i/userplaceholder" }
108
+ .map do |user|
109
+ Types::UserItem.new(
110
+ id: user["Id"],
111
+ name: user["Name"],
112
+ email: user["Email"],
113
+ position: user["Description"],
114
+ image_url: user["ImageUrl"]
115
+ )
116
+ end
117
+ end
103
118
  end
104
119
  end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bloomy
4
+ module Types
5
+ TodoItem = Struct.new(
6
+ :id,
7
+ :title,
8
+ :notes_url,
9
+ :due_date,
10
+ :created_at,
11
+ :completed_at,
12
+ :status,
13
+ :user_name,
14
+ :user_id,
15
+ keyword_init: true
16
+ )
17
+
18
+ HeadlineItem = Struct.new(
19
+ :id,
20
+ :title,
21
+ :notes_url,
22
+ :meeting_details,
23
+ :owner_details,
24
+ :archived,
25
+ :created_at,
26
+ :closed_at,
27
+ keyword_init: true
28
+ )
29
+
30
+ MeetingItem = Struct.new(
31
+ :id,
32
+ :title,
33
+ keyword_init: true
34
+ )
35
+
36
+ MeetingDetails = Struct.new(
37
+ :id,
38
+ :title,
39
+ :attendees,
40
+ :issues,
41
+ :todos,
42
+ :metrics,
43
+ keyword_init: true
44
+ )
45
+
46
+ MetricItem = Struct.new(
47
+ :id,
48
+ :title,
49
+ :target,
50
+ :operator,
51
+ :format,
52
+ :user_id,
53
+ :user_name,
54
+ :admin_id,
55
+ :admin_name,
56
+ keyword_init: true
57
+ )
58
+
59
+ UserItem = Struct.new(
60
+ :id,
61
+ :name,
62
+ :image_url,
63
+ :email,
64
+ :description,
65
+ :organization_id,
66
+ :position,
67
+ :direct_reports,
68
+ :positions,
69
+ keyword_init: true
70
+ )
71
+
72
+ GoalItem = Struct.new(
73
+ :id,
74
+ :title,
75
+ :created_at,
76
+ :due_date,
77
+ :status,
78
+ :meeting_id,
79
+ :meeting_title,
80
+ :user_id,
81
+ :user_name,
82
+ keyword_init: true
83
+ )
84
+
85
+ IssueItem = Struct.new(
86
+ :id,
87
+ :title,
88
+ :notes_url,
89
+ :created_at,
90
+ :completed_at,
91
+ :meeting_id,
92
+ :meeting_title,
93
+ :user_id,
94
+ :user_name,
95
+ keyword_init: true
96
+ )
97
+
98
+ WeekItem = Struct.new(
99
+ :id,
100
+ :week_number,
101
+ :week_start,
102
+ :week_end,
103
+ keyword_init: true
104
+ )
105
+
106
+ ScorecardItem = Struct.new(
107
+ :id,
108
+ :measurable_id,
109
+ :accountable_user_id,
110
+ :title,
111
+ :target,
112
+ :value,
113
+ :week,
114
+ :week_id,
115
+ :updated_at,
116
+ keyword_init: true
117
+ )
118
+ end
119
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bloomy
4
- VERSION = "0.10.0"
4
+ VERSION = "0.11.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bloomy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franccesco Orozco
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-20 00:00:00.000000000 Z
11
+ date: 2024-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -66,6 +66,7 @@ files:
66
66
  - lib/bloomy/operations/scorecard.rb
67
67
  - lib/bloomy/operations/todos.rb
68
68
  - lib/bloomy/operations/users.rb
69
+ - lib/bloomy/types/items.rb
69
70
  - lib/bloomy/utils/get_user_id.rb
70
71
  - lib/bloomy/utils/plugin_loader.rb
71
72
  - lib/bloomy/version.rb