Skip to content

Commit cb322e7

Browse files
author
Miqueas Martinez
committed
Updated Dart and TS example
1 parent 5dc2f64 commit cb322e7

File tree

2 files changed

+90
-55
lines changed

2 files changed

+90
-55
lines changed

Github.dart

Lines changed: 89 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class GthUserItem {
1313
}
1414

1515
class GthUser {
16-
late String _url;
16+
String username;
1717

1818
late String name;
1919
late String bio;
@@ -23,97 +23,132 @@ class GthUser {
2323
late GthUserItem followers;
2424
late GthUserItem following;
2525

26-
GthUser(String username) : this._url = BASE_URL + username;
26+
GthUser(this.username);
2727

28-
Future<void> init() async {
29-
var res = await http.get(Uri.parse(this._url));
28+
static Future<GthUser> create(String user) async {
29+
final self = GthUser(user);
30+
var res = await http.get(Uri.parse(BASE_URL + self.username));
3031
var obj = jsonDecode(res.body);
3132

32-
this.name = obj["name"];
33-
this.bio = obj["bio"];
34-
this.link = obj["html_url"];
33+
self.name = obj["name"];
34+
self.bio = obj["bio"];
35+
self.link = obj["html_url"];
3536

36-
this.repos = GthUserItem(obj["public_repos"]);
37-
this.gists = GthUserItem(obj["public_gists"]);
38-
this.followers = GthUserItem(obj["followers"]);
39-
this.following = GthUserItem(obj["following"]);
37+
self.repos = GthUserItem(obj["public_repos"]);
38+
self.gists = GthUserItem(obj["public_gists"]);
39+
self.followers = GthUserItem(obj["followers"]);
40+
self.following = GthUserItem(obj["following"]);
41+
42+
return self;
4043
}
4144

4245
Future<void> fetch(String thing) async {
43-
var url = "${this._url}/$thing";
46+
var url = "${BASE_URL + this.username}/$thing";
4447
var res = await http.get(Uri.parse(url));
4548
var arr = jsonDecode(res.body);
4649

4750
switch (thing) {
4851
case "repos":
49-
for (var v in arr) this.repos.arr.add(v["name"]);
52+
for (var v in arr)
53+
this.repos.arr.add(v["name"]);
54+
5055
break;
56+
5157
case "gists":
52-
for (var v in arr) this.gists.arr.add(v["description"]);
58+
for (var v in arr)
59+
this.gists.arr.add(v["description"]);
60+
5361
break;
62+
5463
case "followers":
55-
for (var v in arr) this.followers.arr.add(v["login"]);
64+
for (var v in arr)
65+
this.followers.arr.add(v["login"]);
66+
5667
break;
68+
5769
case "following":
58-
for (var v in arr) this.following.arr.add(v["login"]);
70+
for (var v in arr)
71+
this.following.arr.add(v["login"]);
72+
73+
break;
74+
75+
default:
5976
break;
60-
default: break;
6177
}
6278
}
6379
}
6480

65-
void main(List<String> args) async {
66-
var parser = ArgParser();
81+
void showHelp() {
82+
print("Github [OPTIONS...] <USERNAMES...>");
83+
print("");
84+
print("Options:");
85+
print(" -r, --repos Show user repos [boolean]");
86+
print(" -g, --gists Show user gists [boolean]");
87+
print(" -f, --followers Show user followers [boolean]");
88+
print(" -F, --following Show user following [boolean]");
89+
print(" -h, --help Show this help [boolean]");
90+
}
91+
92+
void main(final List<String> args) async {
93+
final parser = ArgParser();
6794
parser.addFlag("repos", abbr: "r", defaultsTo: false);
6895
parser.addFlag("gists", abbr: "g", defaultsTo: false);
6996
parser.addFlag("followers", abbr: "f", defaultsTo: false);
7097
parser.addFlag("following", abbr: "F", defaultsTo: false);
98+
parser.addFlag("help", abbr: "h", defaultsTo: false);
99+
100+
final opts = parser.parse(args);
101+
102+
if (opts["help"]) {
103+
showHelp();
104+
exit(0);
105+
}
71106

72-
var opts = parser.parse(args);
73-
args = opts.rest;
107+
if (args.isEmpty) {
108+
print("Nothing to do.");
109+
print("Pass -h or --help to see the help.");
110+
exit(1);
111+
}
74112

75-
if (args.isNotEmpty) {
76-
for (var arg in args) {
77-
var user = GthUser(arg);
78-
await user.init();
113+
for (final arg in opts.rest) {
114+
final user = await GthUser.create(arg);
79115

80-
print("Name: ${user.name}");
81-
print("Bio: ${user.bio}");
82-
print("Link: ${user.link}");
116+
print("Name: ${user.name}");
117+
print("Bio: ${user.bio}");
118+
print("Link: ${user.link}");
83119

84-
print("Public repos: ${user.repos.count}");
85-
if (opts["repos"]) {
86-
await user.fetch("repos");
120+
print("Public repos: ${user.repos.count}");
121+
if (opts["repos"]) {
122+
await user.fetch("repos");
87123

88-
for (var i = 0; i < user.repos.arr.length; i++)
89-
print(" | ${i + 1}. ${user.repos.arr[i]}");
90-
}
124+
for (final r in user.repos.arr)
125+
print(" | $r");
126+
}
91127

92-
print("Public gists: ${user.gists.count}");
93-
if (opts["gists"]) {
94-
await user.fetch("gists");
128+
print("Public gists: ${user.gists.count}");
129+
if (opts["gists"]) {
130+
await user.fetch("gists");
95131

96-
for (var i = 0; i < user.gists.arr.length; i++)
97-
print(" | ${i + 1}. ${user.gists.arr[i]}");
98-
}
132+
for (final g in user.gists.arr)
133+
print(" | $g");
134+
}
99135

100-
print("Followers: ${user.followers.count}");
101-
if (opts["followers"]) {
102-
await user.fetch("followers");
136+
print("Followers: ${user.followers.count}");
137+
if (opts["followers"]) {
138+
await user.fetch("followers");
103139

104-
for (var i = 0; i < user.followers.arr.length; i++)
105-
print(" | ${i + 1}. ${user.followers.arr[i]}");
106-
}
140+
for (final u in user.followers.arr)
141+
print(" | @$u");
142+
}
107143

108-
print("Following: ${user.following.count}");
109-
if (opts["following"]) {
110-
await user.fetch("following");
144+
print("Following: ${user.following.count}");
145+
if (opts["following"]) {
146+
await user.fetch("following");
111147

112-
for (var i = 0; i < user.following.arr.length; i++)
113-
print(" | ${i + 1}. ${user.following.arr[i]}");
114-
}
148+
for (final u in user.following.arr)
149+
print(" | @$u");
115150
}
116-
} else {
117-
print("No arguments, nothing to do.");
151+
152+
print("");
118153
}
119154
}

Github.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class GthUser {
8787

8888
let opts = yargs(Deno.args)
8989
.version(false)
90-
.usage("$0 Github.ts [options...] <usernames...>")
90+
.usage("Github [options...] <usernames...>")
9191
.option("repos", {
9292
alias: "r",
9393
type: "boolean",

0 commit comments

Comments
 (0)