ft_42 0.1.7 → 0.2.0
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.
- checksums.yaml +4 -4
- data/lib/ft_42.rb +175 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1045636a9b4a0cbd599f49f692e94e4f01df6c6f
|
4
|
+
data.tar.gz: cd2bff5d6d35f831c306afc0cfa22c67e908e12c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d956c086a08bbcfbe1106b6d47ad4b95adaa605d996ea67bc0ab11090b2ccb32c0b711659feb33726bfa067fe2880d9828ce148116caa2453e0313c8779cddae
|
7
|
+
data.tar.gz: c5d4b8db1e543f0ab9be74cdc5256a632e2c2ea4f2659773d56d19dc8e7ea53e83b2ca4614e14fe82d0a2c10d0776165dc62de971ffe73c2294bfd0802476dc8
|
data/lib/ft_42.rb
CHANGED
@@ -3,6 +3,7 @@ require "action_view"
|
|
3
3
|
require "pastel"
|
4
4
|
require "oauth2"
|
5
5
|
require "ruby-progressbar"
|
6
|
+
require "pp"
|
6
7
|
|
7
8
|
module Constants
|
8
9
|
URL_42 = "https://api.intra.42.fr"
|
@@ -16,49 +17,93 @@ end
|
|
16
17
|
class FT_42
|
17
18
|
def initialize(*args)
|
18
19
|
if (args.size > 2)
|
19
|
-
|
20
|
-
|
20
|
+
if (args.first == "project")
|
21
|
+
ft_42 = Client.new(args.second, args.last)
|
22
|
+
else
|
23
|
+
ft_42 = Client.new(args.first, args.third)
|
24
|
+
end
|
21
25
|
else
|
22
26
|
ft_42 = Client.new(args.first)
|
23
27
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
elsif args.second == "sessions"
|
32
|
-
user_sessions_print.sessions
|
28
|
+
if (args.first == "project")
|
29
|
+
project = Project.new(ft_42.project)
|
30
|
+
project_users = ProjectUsers.new(ft_42.project_users)
|
31
|
+
project_print = ProjectPrinter.new(project)
|
32
|
+
project_users_print = ProjectUsersPrinter.new(project_users)
|
33
|
+
project_print.all
|
34
|
+
project_users_print.all
|
33
35
|
else
|
34
|
-
|
36
|
+
user = User.new(ft_42.user)
|
37
|
+
user_sessions = UserSessions.new(ft_42.user_sessions)
|
38
|
+
user_print = UserPrinter.new(user)
|
39
|
+
user_sessions_print = UserSessionsPrinter.new(user_sessions)
|
40
|
+
if args.size == 1
|
41
|
+
user_print.all
|
42
|
+
user_sessions_print.all
|
43
|
+
elsif args.second == "sessions"
|
44
|
+
user_sessions_print.sessions
|
45
|
+
else
|
46
|
+
puts"Wrong arguments. Usage ft_42 [USER_LOGIN] [OPTIONAL CMD]"
|
47
|
+
end
|
35
48
|
end
|
36
49
|
end
|
37
50
|
end
|
38
51
|
|
39
52
|
|
40
53
|
class Client
|
41
|
-
attr_reader :
|
54
|
+
attr_reader :input_1, :input_2, :token
|
42
55
|
|
43
|
-
def initialize(
|
44
|
-
@
|
45
|
-
@
|
56
|
+
def initialize(input_1, input_2 = nil)
|
57
|
+
@input_1 = input_1
|
58
|
+
@input_2 = input_2
|
46
59
|
@token = Token.new.token
|
47
60
|
end
|
48
61
|
|
49
62
|
def user
|
50
|
-
token.get("/v2/users/#{
|
63
|
+
token.get("/v2/users/#{input_1}", params: { per_page: 100 }).parsed
|
51
64
|
end
|
52
65
|
|
53
66
|
def user_sessions
|
54
|
-
token.get("/v2/users/#{
|
67
|
+
token.get("/v2/users/#{input_1}/locations?range[end_at]=#{time_ago},#{right_now}", params: { per_page: 100 }).parsed
|
68
|
+
end
|
69
|
+
|
70
|
+
def project
|
71
|
+
token.get("/v2/projects/#{input_1}").parsed
|
72
|
+
end
|
73
|
+
|
74
|
+
def campus
|
75
|
+
token.get("/v2/campus/#{input_2}").parsed
|
76
|
+
end
|
77
|
+
|
78
|
+
def project_users
|
79
|
+
user_projects = []
|
80
|
+
i = 1
|
81
|
+
loop do
|
82
|
+
begin
|
83
|
+
tries ||= 3
|
84
|
+
response = token.get("/v2/projects_users?filter[campus]=#{campus['id']}&filter[project_id]=#{project['id']}", params: { page: i, per_page: 100 }).parsed
|
85
|
+
rescue
|
86
|
+
puts "Something went wrong..."
|
87
|
+
puts "REFRESHING API TOKEN... wait 8 sec"
|
88
|
+
sleep 8
|
89
|
+
client = OAuth2::Client.new(ENV.fetch("UID42"), ENV.fetch("SECRET42"), site: ENV.fetch("API42"))
|
90
|
+
token = client.client_credentials.get_token
|
91
|
+
puts "Retrying request..."
|
92
|
+
retry unless (tries -= 1).zero?
|
93
|
+
else
|
94
|
+
break if response.empty?
|
95
|
+
user_projects << response
|
96
|
+
i += 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
user_projects
|
55
100
|
end
|
56
101
|
|
57
102
|
private
|
58
103
|
|
59
104
|
def time_ago
|
60
|
-
if
|
61
|
-
time = Time.current - (
|
105
|
+
if input_2
|
106
|
+
time = Time.current - (input_2.to_i * 7).days
|
62
107
|
return time.to_s.split(" ")[0...-1].join("T")
|
63
108
|
else
|
64
109
|
return Time.current.beginning_of_week.to_s.split(" ")[0...-1].join("T")
|
@@ -83,6 +128,69 @@ class Token
|
|
83
128
|
end
|
84
129
|
|
85
130
|
|
131
|
+
class Project
|
132
|
+
attr_reader :project
|
133
|
+
|
134
|
+
def initialize(project_response)
|
135
|
+
@project = project_response
|
136
|
+
end
|
137
|
+
|
138
|
+
def id
|
139
|
+
project["id"]
|
140
|
+
end
|
141
|
+
|
142
|
+
def name
|
143
|
+
project["name"]
|
144
|
+
end
|
145
|
+
|
146
|
+
def slug
|
147
|
+
project["slug"]
|
148
|
+
end
|
149
|
+
|
150
|
+
def tier
|
151
|
+
project["tier"]
|
152
|
+
end
|
153
|
+
|
154
|
+
def exam
|
155
|
+
project["exam"]
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
class Campus
|
161
|
+
attr_reader :campus
|
162
|
+
|
163
|
+
def initialize(campus_response)
|
164
|
+
@campus = campus_response
|
165
|
+
end
|
166
|
+
|
167
|
+
def id
|
168
|
+
campus["id"]
|
169
|
+
end
|
170
|
+
|
171
|
+
def name
|
172
|
+
campus["name"]
|
173
|
+
end
|
174
|
+
|
175
|
+
def student_count
|
176
|
+
campus["users_count"]
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
class ProjectUsers
|
182
|
+
attr_reader :project_users
|
183
|
+
|
184
|
+
def initialize(project_users_response)
|
185
|
+
@project_users = project_users_response
|
186
|
+
@project_users.flatten!
|
187
|
+
end
|
188
|
+
|
189
|
+
def logins
|
190
|
+
logins = project_users.map { |user_project| user_project["user"]["login"] }
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
86
194
|
|
87
195
|
class User
|
88
196
|
attr_reader :user
|
@@ -201,6 +309,53 @@ class UserSessions
|
|
201
309
|
end
|
202
310
|
|
203
311
|
|
312
|
+
class ProjectPrinter
|
313
|
+
attr_reader :pastel, :project
|
314
|
+
|
315
|
+
def initialize(project)
|
316
|
+
@pastel = Pastel.new
|
317
|
+
@project = project
|
318
|
+
end
|
319
|
+
|
320
|
+
def all
|
321
|
+
name
|
322
|
+
tier
|
323
|
+
end
|
324
|
+
|
325
|
+
def name
|
326
|
+
puts highlight(project.name)
|
327
|
+
end
|
328
|
+
|
329
|
+
def tier
|
330
|
+
puts "Tier: #{project.tier}"
|
331
|
+
end
|
332
|
+
|
333
|
+
private
|
334
|
+
|
335
|
+
def highlight(string)
|
336
|
+
pastel.bright_green.bold(string)
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
class ProjectUsersPrinter
|
341
|
+
attr_reader :pastel, :project_users
|
342
|
+
|
343
|
+
def initialize(project_users)
|
344
|
+
@pastel = Pastel.new
|
345
|
+
@project_users = project_users
|
346
|
+
end
|
347
|
+
|
348
|
+
def all
|
349
|
+
usernames
|
350
|
+
end
|
351
|
+
|
352
|
+
def usernames
|
353
|
+
project_users.logins.each_with_index do |login, i|
|
354
|
+
puts "#{i + 1}. #{login}"
|
355
|
+
end
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
204
359
|
|
205
360
|
class UserPrinter
|
206
361
|
attr_reader :pastel, :user
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ft_42
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matias Fernandez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|