@@ -13,7 +13,7 @@ class GthUserItem {
1313}
1414
1515class 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}
0 commit comments