github_cli 0.5.9 → 0.6.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.
- data/.travis.yml +1 -0
- data/CHANGELOG.md +12 -1
- data/Gemfile.lock +12 -10
- data/README.md +18 -0
- data/features/authorization.feature +53 -0
- data/features/blob.feature +1 -1
- data/features/download.feature +13 -11
- data/features/gist.feature +9 -1
- data/features/label.feature +11 -12
- data/features/member.feature +5 -4
- data/features/merging.feature +5 -4
- data/features/organization.feature +5 -4
- data/features/repository.feature +9 -1
- data/features/search.feature +5 -4
- data/github_cli.gemspec +1 -1
- data/lib/github_cli/api.rb +56 -49
- data/lib/github_cli/apis/assignee.rb +6 -6
- data/lib/github_cli/apis/authorization.rb +5 -5
- data/lib/github_cli/apis/blob.rb +6 -6
- data/lib/github_cli/apis/collaborator.rb +12 -12
- data/lib/github_cli/apis/commit.rb +6 -6
- data/lib/github_cli/apis/content.rb +9 -9
- data/lib/github_cli/apis/download.rb +15 -15
- data/lib/github_cli/apis/email.rb +9 -9
- data/lib/github_cli/apis/event.rb +24 -24
- data/lib/github_cli/apis/follower.rb +16 -15
- data/lib/github_cli/apis/fork.rb +6 -6
- data/lib/github_cli/apis/gist.rb +31 -30
- data/lib/github_cli/apis/hook.rb +6 -6
- data/lib/github_cli/apis/issue.rb +12 -12
- data/lib/github_cli/apis/key.rb +15 -15
- data/lib/github_cli/apis/label.rb +24 -26
- data/lib/github_cli/apis/member.rb +15 -27
- data/lib/github_cli/apis/merging.rb +3 -3
- data/lib/github_cli/apis/milestone.rb +15 -15
- data/lib/github_cli/apis/notification.rb +18 -18
- data/lib/github_cli/apis/organization.rb +9 -9
- data/lib/github_cli/apis/pull_request.rb +24 -24
- data/lib/github_cli/apis/reference.rb +15 -15
- data/lib/github_cli/apis/repository.rb +13 -12
- data/lib/github_cli/apis/search.rb +12 -12
- data/lib/github_cli/apis/starring.rb +15 -15
- data/lib/github_cli/apis/status.rb +6 -6
- data/lib/github_cli/apis/tag.rb +6 -6
- data/lib/github_cli/apis/team.rb +39 -39
- data/lib/github_cli/apis/tree.rb +6 -6
- data/lib/github_cli/apis/user.rb +9 -9
- data/lib/github_cli/apis/watching.rb +15 -15
- data/lib/github_cli/cli.rb +24 -16
- data/lib/github_cli/commands/assignees.rb +8 -2
- data/lib/github_cli/commands/authorizations.rb +10 -13
- data/lib/github_cli/commands/blobs.rb +9 -3
- data/lib/github_cli/commands/collaborators.rb +16 -4
- data/lib/github_cli/commands/commits.rb +11 -6
- data/lib/github_cli/commands/contents.rb +9 -6
- data/lib/github_cli/commands/downloads.rb +30 -6
- data/lib/github_cli/commands/emails.rb +12 -3
- data/lib/github_cli/commands/events.rb +30 -8
- data/lib/github_cli/commands/followers.rb +20 -5
- data/lib/github_cli/commands/forks.rb +6 -4
- data/lib/github_cli/commands/gists.rb +39 -12
- data/lib/github_cli/commands/hooks.rb +1 -1
- data/lib/github_cli/commands/issues.rb +15 -4
- data/lib/github_cli/commands/keys.rb +20 -5
- data/lib/github_cli/commands/labels.rb +53 -14
- data/lib/github_cli/commands/members.rb +28 -9
- data/lib/github_cli/commands/merging.rb +3 -2
- data/lib/github_cli/commands/milestones.rb +27 -15
- data/lib/github_cli/commands/notifications.rb +19 -11
- data/lib/github_cli/commands/organizations.rb +24 -5
- data/lib/github_cli/commands/pull_requests.rb +30 -8
- data/lib/github_cli/commands/references.rb +17 -5
- data/lib/github_cli/commands/repositories.rb +6 -4
- data/lib/github_cli/commands/search.rb +24 -6
- data/lib/github_cli/commands/starring.rb +19 -5
- data/lib/github_cli/commands/statuses.rb +7 -3
- data/lib/github_cli/commands/tags.rb +7 -3
- data/lib/github_cli/commands/teams.rb +52 -17
- data/lib/github_cli/commands/trees.rb +6 -2
- data/lib/github_cli/commands/users.rb +9 -3
- data/lib/github_cli/commands/watching.rb +19 -5
- data/lib/github_cli/vendor/thor/actions/directory.rb +2 -0
- data/lib/github_cli/vendor/thor/actions/empty_directory.rb +3 -19
- data/lib/github_cli/vendor/thor/actions/file_manipulation.rb +4 -1
- data/lib/github_cli/vendor/thor/actions.rb +1 -1
- data/lib/github_cli/vendor/thor/base.rb +20 -18
- data/lib/github_cli/vendor/thor/command.rb +1 -1
- data/lib/github_cli/vendor/thor/error.rb +0 -4
- data/lib/github_cli/vendor/thor/group.rb +4 -9
- data/lib/github_cli/vendor/thor/runner.rb +1 -1
- data/lib/github_cli/vendor/thor/shell/basic.rb +25 -7
- data/lib/github_cli/vendor/thor/version.rb +1 -1
- data/lib/github_cli/vendor/thor.rb +17 -2
- data/lib/github_cli/version.rb +1 -1
- data/spec/github_cli/api/configure_spec.rb +50 -0
- data/spec/github_cli/api/github_api_spec.rb +19 -0
- data/spec/github_cli/commands/assignees_spec.rb +1 -1
- data/spec/github_cli/commands/blobs_spec.rb +1 -1
- data/spec/github_cli/commands/collaborators_spec.rb +1 -1
- data/spec/github_cli/commands/commits_spec.rb +1 -1
- data/spec/github_cli/commands/contents_spec.rb +1 -1
- data/spec/github_cli/commands/downloads_spec.rb +35 -0
- data/spec/github_cli/commands/emails_spec.rb +1 -1
- data/spec/github_cli/commands/events_spec.rb +1 -1
- data/spec/github_cli/commands/followers_spec.rb +1 -1
- data/spec/github_cli/commands/forks_spec.rb +1 -1
- data/spec/github_cli/commands/gists_spec.rb +6 -1
- data/spec/github_cli/commands/issues_spec.rb +1 -1
- data/spec/github_cli/commands/keys_spec.rb +1 -1
- data/spec/github_cli/commands/labels_spec.rb +13 -3
- data/spec/github_cli/commands/members_spec.rb +46 -0
- data/spec/github_cli/commands/merging_spec.rb +1 -1
- data/spec/github_cli/commands/milestones_spec.rb +1 -1
- data/spec/github_cli/commands/notifications_spec.rb +1 -1
- data/spec/github_cli/commands/organizations_spec.rb +30 -0
- data/spec/github_cli/commands/pull_requests_spec.rb +1 -1
- data/spec/github_cli/commands/references_spec.rb +1 -1
- data/spec/github_cli/commands/repositories_spec.rb +5 -0
- data/spec/github_cli/commands/starring_spec.rb +1 -1
- data/spec/github_cli/commands/statuses_spec.rb +1 -1
- data/spec/github_cli/commands/tags_spec.rb +1 -1
- data/spec/github_cli/commands/teams_spec.rb +1 -1
- data/spec/github_cli/commands/trees_spec.rb +1 -1
- data/spec/github_cli/commands/users_spec.rb +1 -1
- data/spec/github_cli/commands/watching_spec.rb +1 -1
- metadata +27 -17
- data/spec/github_cli/api_spec.rb +0 -19
|
@@ -7,12 +7,18 @@ module GithubCLI
|
|
|
7
7
|
|
|
8
8
|
desc 'list <org>', "List teams"
|
|
9
9
|
def list(org)
|
|
10
|
-
|
|
10
|
+
global_options = options.dup
|
|
11
|
+
params = options[:params].dup
|
|
12
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
13
|
+
Team.all org, params, global_options
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
desc 'get <id>', "Get a team"
|
|
14
17
|
def get(id)
|
|
15
|
-
|
|
18
|
+
global_options = options.dup
|
|
19
|
+
params = options[:params].dup
|
|
20
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
21
|
+
Team.get id, params, global_options
|
|
16
22
|
end
|
|
17
23
|
|
|
18
24
|
option :name, :type => :string, :required => true
|
|
@@ -32,12 +38,13 @@ module GithubCLI
|
|
|
32
38
|
* admin - team members can pull, push and administor these repositories.\n
|
|
33
39
|
DESC
|
|
34
40
|
def create(org)
|
|
41
|
+
global_options = options.dup
|
|
35
42
|
params = options[:params].dup
|
|
36
|
-
params['name']
|
|
43
|
+
params['name'] = options[:name]
|
|
37
44
|
params['repo_names'] = options[:repo_names] if options[:repo_names]
|
|
38
45
|
params['permission'] = options[:permission] if options[:permission]
|
|
39
|
-
|
|
40
|
-
Team.create org, params,
|
|
46
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
47
|
+
Team.create org, params, global_options
|
|
41
48
|
end
|
|
42
49
|
|
|
43
50
|
option :name, :type => :string, :required => true
|
|
@@ -55,11 +62,12 @@ module GithubCLI
|
|
|
55
62
|
* admin - team members can pull, push and administor these repositories.\n
|
|
56
63
|
DESC
|
|
57
64
|
def edit(id)
|
|
65
|
+
global_options = options.dup
|
|
58
66
|
params = options[:params].dup
|
|
59
|
-
params['name']
|
|
67
|
+
params['name'] = options[:name]
|
|
60
68
|
params['permission'] = options[:permission] if options[:permission]
|
|
61
|
-
|
|
62
|
-
Team.edit id, params,
|
|
69
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
70
|
+
Team.edit id, params, global_options
|
|
63
71
|
end
|
|
64
72
|
|
|
65
73
|
desc 'delete <id>', 'Delete team <id>'
|
|
@@ -67,12 +75,18 @@ module GithubCLI
|
|
|
67
75
|
In order to delete a team, the authenticated user must be an owner of the org that the team is associated with.
|
|
68
76
|
DESC
|
|
69
77
|
def delete(id)
|
|
70
|
-
|
|
78
|
+
global_options = options.dup
|
|
79
|
+
params = options[:params].dup
|
|
80
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
81
|
+
Team.delete id, params, global_options
|
|
71
82
|
end
|
|
72
83
|
|
|
73
84
|
desc 'list_member <id>', "List team <id> members"
|
|
74
85
|
def list_member(id)
|
|
75
|
-
|
|
86
|
+
global_options = options.dup
|
|
87
|
+
params = options[:params].dup
|
|
88
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
89
|
+
Team.all_member id, params, global_options
|
|
76
90
|
end
|
|
77
91
|
|
|
78
92
|
desc 'member <id> <user>', 'Check if <user> is a team member'
|
|
@@ -80,7 +94,10 @@ module GithubCLI
|
|
|
80
94
|
In order to get if a user is a member of a team, the authenticated user must be a member of the team.
|
|
81
95
|
DESC
|
|
82
96
|
def member(id, user)
|
|
83
|
-
|
|
97
|
+
global_options = options.dup
|
|
98
|
+
params = options[:params].dup
|
|
99
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
100
|
+
Team.member id, user, params, global_options
|
|
84
101
|
end
|
|
85
102
|
|
|
86
103
|
desc 'add_member <id> <user>', 'Add team member'
|
|
@@ -88,7 +105,10 @@ module GithubCLI
|
|
|
88
105
|
In order to add a user to a team, the authenticated user must have ‘admin’ permissions to the team or be an owner of the org that the team is associated with.
|
|
89
106
|
DESC
|
|
90
107
|
def add_member(id, user)
|
|
91
|
-
|
|
108
|
+
global_options = options.dup
|
|
109
|
+
params = options[:params].dup
|
|
110
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
111
|
+
Team.add_member id, user, params, global_options
|
|
92
112
|
end
|
|
93
113
|
|
|
94
114
|
desc 'remove_member <id> <user>', 'Remove team member'
|
|
@@ -99,17 +119,26 @@ module GithubCLI
|
|
|
99
119
|
them from the team.
|
|
100
120
|
DESC
|
|
101
121
|
def remove_member(id, user)
|
|
102
|
-
|
|
122
|
+
global_options = options.dup
|
|
123
|
+
params = options[:params].dup
|
|
124
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
125
|
+
Team.remove_member id, user, params, global_options
|
|
103
126
|
end
|
|
104
127
|
|
|
105
128
|
desc 'list_repo <id>', "List team <id> repositories"
|
|
106
129
|
def list_repo(id)
|
|
107
|
-
|
|
130
|
+
global_options = options.dup
|
|
131
|
+
params = options[:params].dup
|
|
132
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
133
|
+
Team.all_repo id, params, global_options
|
|
108
134
|
end
|
|
109
135
|
|
|
110
136
|
desc 'repo <id> <user> <repo>', 'Check if <repo> is managed by team <id>'
|
|
111
137
|
def repo(id, user, repo)
|
|
112
|
-
|
|
138
|
+
global_options = options.dup
|
|
139
|
+
params = options[:params].dup
|
|
140
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
141
|
+
Team.repo id, user, repo, params, global_options
|
|
113
142
|
end
|
|
114
143
|
|
|
115
144
|
desc 'add_repo <id> <user> <repo>', 'Add team <repo>'
|
|
@@ -119,7 +148,10 @@ module GithubCLI
|
|
|
119
148
|
by the organization, or a direct for of a repo owned by the organization.
|
|
120
149
|
DESC
|
|
121
150
|
def add_repo(id, user, repo)
|
|
122
|
-
|
|
151
|
+
global_options = options.dup
|
|
152
|
+
params = options[:params].dup
|
|
153
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
154
|
+
Team.add_repo id, user, repo, params, global_options
|
|
123
155
|
end
|
|
124
156
|
|
|
125
157
|
desc 'remove_repo <id> <user> <repo>', 'Remove team <repo>'
|
|
@@ -129,7 +161,10 @@ module GithubCLI
|
|
|
129
161
|
delete the repo, it just removes it from the team.
|
|
130
162
|
DESC
|
|
131
163
|
def remove_repo(id, user, repo)
|
|
132
|
-
|
|
164
|
+
global_options = options.dup
|
|
165
|
+
params = options[:params].dup
|
|
166
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
167
|
+
Team.remove_repo id, user, repo, params, global_options
|
|
133
168
|
end
|
|
134
169
|
|
|
135
170
|
end # Teams
|
|
@@ -9,9 +9,11 @@ module GithubCLI
|
|
|
9
9
|
method_option :recursive, :type => :boolean, :aliases => ["-r"],
|
|
10
10
|
:desc => 'get a tree recursively'
|
|
11
11
|
def get(user, repo, sha)
|
|
12
|
+
global_options = options.dup
|
|
12
13
|
params = options[:params].dup
|
|
13
14
|
params['recursive'] = options[:recursive] if options[:recursive]
|
|
14
|
-
|
|
15
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
16
|
+
Tree.get user, repo, sha, params, global_options
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
desc 'create <user> <repo>', 'Create a new Tree'
|
|
@@ -36,10 +38,12 @@ module GithubCLI
|
|
|
36
38
|
tree.content - String of content you want this file to have - GitHub will write this blob out and use the SHA for this entry. Use either this or tree.sha
|
|
37
39
|
DESC
|
|
38
40
|
def create(user, repo)
|
|
41
|
+
global_options = options.dup
|
|
39
42
|
params = options[:params].dup
|
|
40
43
|
params['base_tree'] = options[:base_tree] if options[:base_tree]
|
|
41
44
|
params['tree'] = options[:tree] if options[:tree]
|
|
42
|
-
|
|
45
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
46
|
+
Tree.create user, repo, params, global_options
|
|
43
47
|
end
|
|
44
48
|
|
|
45
49
|
end # Blobs
|
|
@@ -9,9 +9,11 @@ module GithubCLI
|
|
|
9
9
|
option :since, :type => :string, :banner => "<user>",
|
|
10
10
|
:desc => "The integer ID of the last User that you’ve seen."
|
|
11
11
|
def list
|
|
12
|
+
global_options = options.dup
|
|
12
13
|
params = options[:params].dup
|
|
13
14
|
params['since'] = options[:since] if options[:since]
|
|
14
|
-
|
|
15
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
16
|
+
User.all params, global_options
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
desc 'get', 'Get the authenticated user'
|
|
@@ -19,9 +21,11 @@ module GithubCLI
|
|
|
19
21
|
:desc => 'Get a single unauthenticated <user>',
|
|
20
22
|
:banner => '<user>'
|
|
21
23
|
def get
|
|
24
|
+
global_options = options.dup
|
|
22
25
|
params = options[:params].dup
|
|
23
26
|
params['user'] = options[:user] if options[:user]
|
|
24
|
-
|
|
27
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
28
|
+
User.get params, global_options
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
desc 'update', 'Update the authenticated user'
|
|
@@ -33,6 +37,7 @@ module GithubCLI
|
|
|
33
37
|
option :hireable, :type => :string
|
|
34
38
|
option :bio, :type => :string
|
|
35
39
|
def update
|
|
40
|
+
global_options = options.dup
|
|
36
41
|
params = options[:params].dup
|
|
37
42
|
params['name'] = options[:name] if options[:name]
|
|
38
43
|
params['email'] = options[:email] if options[:email]
|
|
@@ -41,7 +46,8 @@ module GithubCLI
|
|
|
41
46
|
params['location'] = options[:location] if options[:location]
|
|
42
47
|
params['hireable'] = options[:hireable] if options[:hireable]
|
|
43
48
|
params['bio'] = options[:bio] if options[:bio]
|
|
44
|
-
|
|
49
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
50
|
+
User.update params, global_options
|
|
45
51
|
end
|
|
46
52
|
|
|
47
53
|
end # Users
|
|
@@ -7,33 +7,47 @@ module GithubCLI
|
|
|
7
7
|
|
|
8
8
|
desc 'list <user> <repo>', 'Lists repo watchers'
|
|
9
9
|
def list(user, repo)
|
|
10
|
-
|
|
10
|
+
global_options = options.dup
|
|
11
|
+
params = options[:params].dup
|
|
12
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
13
|
+
Watching.list user, repo, params, global_options
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
desc 'watched', 'Lists repos being watched by a user'
|
|
14
17
|
method_option :user, :type => :string, :aliases => ["-u"],
|
|
15
18
|
:desc => 'Watch repositories for <user>'
|
|
16
19
|
def watched
|
|
20
|
+
global_options = options.dup
|
|
17
21
|
params = options[:params].dup
|
|
18
22
|
if options[:user]
|
|
19
23
|
params['user'] = options[:user]
|
|
20
24
|
end
|
|
21
|
-
|
|
25
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
26
|
+
Watching.watched params, global_options
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
desc 'watching <user> <repo>', 'Check if you are watching a repository'
|
|
25
30
|
def watching(user, repo)
|
|
26
|
-
|
|
31
|
+
global_options = options.dup
|
|
32
|
+
params = options[:params].dup
|
|
33
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
34
|
+
Watching.watching? user, repo, params, global_options
|
|
27
35
|
end
|
|
28
36
|
|
|
29
37
|
desc 'start <user> <repo>', 'Watch a repository'
|
|
30
38
|
def start(user, repo)
|
|
31
|
-
|
|
39
|
+
global_options = options.dup
|
|
40
|
+
params = options[:params].dup
|
|
41
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
42
|
+
Watching.start user, repo, params, global_options
|
|
32
43
|
end
|
|
33
44
|
|
|
34
45
|
desc 'stop <user> <repo>', 'Stop watching a repository'
|
|
35
46
|
def stop(user, repo)
|
|
36
|
-
|
|
47
|
+
global_options = options.dup
|
|
48
|
+
params = options[:params].dup
|
|
49
|
+
Util.hash_without!(global_options, params.keys + ['params'])
|
|
50
|
+
Watching.stop user, repo, params, global_options
|
|
37
51
|
end
|
|
38
52
|
|
|
39
53
|
end # Watching
|
|
@@ -39,6 +39,7 @@ class Thor
|
|
|
39
39
|
# config<Hash>:: give :verbose => false to not log the status.
|
|
40
40
|
# If :recursive => false, does not look for paths recursively.
|
|
41
41
|
# If :mode => :preserve, preserve the file mode from the source.
|
|
42
|
+
# If :exclude_pattern => /regexp/, prevents copying files that match that regexp.
|
|
42
43
|
#
|
|
43
44
|
# ==== Examples
|
|
44
45
|
#
|
|
@@ -78,6 +79,7 @@ class Thor
|
|
|
78
79
|
|
|
79
80
|
files(lookup).sort.each do |file_source|
|
|
80
81
|
next if File.directory?(file_source)
|
|
82
|
+
next if config[:exclude_pattern] && file_source.match(config[:exclude_pattern])
|
|
81
83
|
file_destination = File.join(given_destination, file_source.gsub(source, '.'))
|
|
82
84
|
file_destination.gsub!('/./', '/')
|
|
83
85
|
|
|
@@ -97,28 +97,12 @@ class Thor
|
|
|
97
97
|
#
|
|
98
98
|
# user.rb
|
|
99
99
|
#
|
|
100
|
-
# The method referenced
|
|
101
|
-
# get the exception with the corresponding error message.
|
|
100
|
+
# The method referenced can be either public or private.
|
|
102
101
|
#
|
|
103
102
|
def convert_encoded_instructions(filename)
|
|
104
103
|
filename.gsub(/%(.*?)%/) do |initial_string|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Calls `base`'s public method `sym`.
|
|
110
|
-
# Returns:: result of `base.sym` or `nil` if `sym` wasn't found in
|
|
111
|
-
# `base`
|
|
112
|
-
# Raises:: Thor::PrivateMethodEncodedError if `sym` references
|
|
113
|
-
# a private method.
|
|
114
|
-
def call_public_method(sym)
|
|
115
|
-
if base.respond_to?(sym)
|
|
116
|
-
base.send(sym)
|
|
117
|
-
elsif base.respond_to?(sym, true)
|
|
118
|
-
raise Thor::PrivateMethodEncodedError,
|
|
119
|
-
"Method #{base.class}##{sym} should be public, not private"
|
|
120
|
-
else
|
|
121
|
-
nil
|
|
104
|
+
method = $1.strip
|
|
105
|
+
base.respond_to?(method, true) ? base.send(method) : initial_string
|
|
122
106
|
end
|
|
123
107
|
end
|
|
124
108
|
|
|
@@ -293,8 +293,11 @@ class Thor
|
|
|
293
293
|
end
|
|
294
294
|
alias :remove_dir :remove_file
|
|
295
295
|
|
|
296
|
+
attr_accessor :output_buffer
|
|
297
|
+
private :output_buffer, :output_buffer=
|
|
298
|
+
|
|
296
299
|
private
|
|
297
|
-
|
|
300
|
+
|
|
298
301
|
def concat(string)
|
|
299
302
|
@output_buffer.concat(string)
|
|
300
303
|
end
|
|
@@ -227,7 +227,7 @@ class Thor
|
|
|
227
227
|
# ==== Parameters
|
|
228
228
|
# command<String>:: the command to be executed.
|
|
229
229
|
# config<Hash>:: give :verbose => false to not log the status, :capture => true to hide to output. Specify :with
|
|
230
|
-
# to append an executable to command
|
|
230
|
+
# to append an executable to command execution.
|
|
231
231
|
#
|
|
232
232
|
# ==== Example
|
|
233
233
|
#
|
|
@@ -119,6 +119,18 @@ class Thor
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
module ClassMethods
|
|
122
|
+
def attr_reader(*) #:nodoc:
|
|
123
|
+
no_commands { super }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def attr_writer(*) #:nodoc:
|
|
127
|
+
no_commands { super }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def attr_accessor(*) #:nodoc:
|
|
131
|
+
no_commands { super }
|
|
132
|
+
end
|
|
133
|
+
|
|
122
134
|
# If you want to raise an error for unknown options, call check_unknown_options!
|
|
123
135
|
# This is disabled by default to allow dynamic invocations.
|
|
124
136
|
def check_unknown_options!
|
|
@@ -406,11 +418,10 @@ class Thor
|
|
|
406
418
|
# thor :my_command
|
|
407
419
|
#
|
|
408
420
|
def namespace(name=nil)
|
|
409
|
-
|
|
410
|
-
when nil
|
|
411
|
-
@namespace || Thor::Util.namespace_from_thor_class(self)
|
|
412
|
-
else
|
|
421
|
+
if name
|
|
413
422
|
@namespace = name.to_s
|
|
423
|
+
else
|
|
424
|
+
@namespace ||= Thor::Util.namespace_from_thor_class(self)
|
|
414
425
|
end
|
|
415
426
|
end
|
|
416
427
|
|
|
@@ -462,17 +473,11 @@ class Thor
|
|
|
462
473
|
end
|
|
463
474
|
alias handle_no_task_error handle_no_command_error
|
|
464
475
|
|
|
465
|
-
def handle_argument_error(command, error, arity
|
|
466
|
-
msg = "#{basename} #{command.name}"
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
msg << "s" if required > 1
|
|
471
|
-
else
|
|
472
|
-
msg = "call #{msg} as"
|
|
473
|
-
end
|
|
474
|
-
|
|
475
|
-
msg << ": #{self.banner(command).inspect}."
|
|
476
|
+
def handle_argument_error(command, error, args, arity) #:nodoc:
|
|
477
|
+
msg = "ERROR: #{basename} #{command.name} was called with "
|
|
478
|
+
msg << 'no arguments' if args.empty?
|
|
479
|
+
msg << 'arguments ' << args.inspect if !args.empty?
|
|
480
|
+
msg << "\nUsage: #{self.banner(command).inspect}."
|
|
476
481
|
raise InvocationError, msg
|
|
477
482
|
end
|
|
478
483
|
|
|
@@ -584,9 +589,6 @@ class Thor
|
|
|
584
589
|
# Return if it's not a public instance method
|
|
585
590
|
return unless public_method_defined?(meth.to_sym)
|
|
586
591
|
|
|
587
|
-
# Return if attr_* added the method
|
|
588
|
-
return if caller.first.to_s[/`attr_(reader|writer|accessor)'/]
|
|
589
|
-
|
|
590
592
|
return if @no_commands || !create_command(meth)
|
|
591
593
|
|
|
592
594
|
is_thor_reserved_word?(meth, :command)
|
|
@@ -32,7 +32,7 @@ class Thor
|
|
|
32
32
|
end
|
|
33
33
|
rescue ArgumentError => e
|
|
34
34
|
handle_argument_error?(instance, e, caller) ?
|
|
35
|
-
instance.class.handle_argument_error(self, e, arity) : (raise e)
|
|
35
|
+
instance.class.handle_argument_error(self, e, args, arity) : (raise e)
|
|
36
36
|
rescue NoMethodError => e
|
|
37
37
|
handle_no_method_error?(instance, e, caller) ?
|
|
38
38
|
instance.class.handle_no_command_error(name) : (raise e)
|
|
@@ -205,15 +205,10 @@ class Thor::Group
|
|
|
205
205
|
end
|
|
206
206
|
alias printable_tasks printable_commands
|
|
207
207
|
|
|
208
|
-
def handle_argument_error(command, error, arity
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
msg << ", but it should not."
|
|
213
|
-
else
|
|
214
|
-
msg = "You should not pass arguments to #{basename} #{command.name}."
|
|
215
|
-
end
|
|
216
|
-
|
|
208
|
+
def handle_argument_error(command, error, args, arity) #:nodoc:
|
|
209
|
+
msg = "#{basename} #{command.name} takes #{arity} argument"
|
|
210
|
+
msg << "s" if arity > 1
|
|
211
|
+
msg << ", but it should not."
|
|
217
212
|
raise error, msg
|
|
218
213
|
end
|
|
219
214
|
|
|
@@ -206,7 +206,7 @@ class Thor::Runner < Thor #:nodoc:
|
|
|
206
206
|
# in the thor_root instead of loading them all.
|
|
207
207
|
#
|
|
208
208
|
# By default, it also traverses the current path until find Thor files, as
|
|
209
|
-
# described in thorfiles. This look up can be skipped by
|
|
209
|
+
# described in thorfiles. This look up can be skipped by supplying
|
|
210
210
|
# skip_lookup true.
|
|
211
211
|
#
|
|
212
212
|
def initialize_thorfiles(relevant_to=nil, skip_lookup=false)
|
|
@@ -47,8 +47,13 @@ class Thor
|
|
|
47
47
|
#
|
|
48
48
|
def ask(statement, *args)
|
|
49
49
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
|
50
|
+
color = args.first
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
if options[:limited_to]
|
|
53
|
+
ask_filtered(statement, color, options)
|
|
54
|
+
else
|
|
55
|
+
ask_simply(statement, color, options)
|
|
56
|
+
end
|
|
52
57
|
end
|
|
53
58
|
|
|
54
59
|
# Say (print) something to the user. If the sentence ends with a whitespace
|
|
@@ -372,17 +377,30 @@ HELP
|
|
|
372
377
|
end
|
|
373
378
|
end
|
|
374
379
|
|
|
375
|
-
def ask_simply(statement, color
|
|
376
|
-
|
|
377
|
-
|
|
380
|
+
def ask_simply(statement, color, options)
|
|
381
|
+
default = options[:default]
|
|
382
|
+
message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
|
|
383
|
+
say(message, color)
|
|
384
|
+
result = stdin.gets
|
|
385
|
+
|
|
386
|
+
return unless result
|
|
387
|
+
|
|
388
|
+
result.strip!
|
|
389
|
+
|
|
390
|
+
if default && result == ""
|
|
391
|
+
default
|
|
392
|
+
else
|
|
393
|
+
result
|
|
394
|
+
end
|
|
378
395
|
end
|
|
379
396
|
|
|
380
|
-
def ask_filtered(statement,
|
|
397
|
+
def ask_filtered(statement, color, options)
|
|
398
|
+
answer_set = options[:limited_to]
|
|
381
399
|
correct_answer = nil
|
|
382
400
|
until correct_answer
|
|
383
|
-
|
|
401
|
+
answers = answer_set.join(", ")
|
|
402
|
+
answer = ask_simply("#{statement} [#{answers}]", color, options)
|
|
384
403
|
correct_answer = answer_set.include?(answer) ? answer : nil
|
|
385
|
-
answers = answer_set.map(&:inspect).join(", ")
|
|
386
404
|
say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
|
|
387
405
|
end
|
|
388
406
|
correct_answer
|
|
@@ -3,6 +3,16 @@ require 'thor/base'
|
|
|
3
3
|
|
|
4
4
|
class Thor
|
|
5
5
|
class << self
|
|
6
|
+
# Allows for custom "Command" package naming.
|
|
7
|
+
#
|
|
8
|
+
# === Parameters
|
|
9
|
+
# name<String>
|
|
10
|
+
# options<Hash>
|
|
11
|
+
#
|
|
12
|
+
def package_name(name, options={})
|
|
13
|
+
@package_name = name.nil? || name == '' ? nil : name
|
|
14
|
+
end
|
|
15
|
+
|
|
6
16
|
# Sets the default command when thor is executed without an explicit command to be called.
|
|
7
17
|
#
|
|
8
18
|
# ==== Parameters
|
|
@@ -185,7 +195,12 @@ class Thor
|
|
|
185
195
|
end
|
|
186
196
|
list.sort!{ |a,b| a[0] <=> b[0] }
|
|
187
197
|
|
|
188
|
-
|
|
198
|
+
if @package_name
|
|
199
|
+
shell.say "#{@package_name} commands:"
|
|
200
|
+
else
|
|
201
|
+
shell.say "Commands:"
|
|
202
|
+
end
|
|
203
|
+
|
|
189
204
|
shell.print_table(list, :indent => 2, :truncate => true)
|
|
190
205
|
shell.say
|
|
191
206
|
class_options_help(shell)
|
|
@@ -299,7 +314,7 @@ class Thor
|
|
|
299
314
|
end
|
|
300
315
|
|
|
301
316
|
def stop_on_unknown_option?(command) #:nodoc:
|
|
302
|
-
|
|
317
|
+
command && !@stop_on_unknown_option.nil? && @stop_on_unknown_option.include?(command.name.to_sym)
|
|
303
318
|
end
|
|
304
319
|
|
|
305
320
|
protected
|
data/lib/github_cli/version.rb
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe GithubCLI::API, '#configure' do
|
|
6
|
+
let(:object) { described_class }
|
|
7
|
+
|
|
8
|
+
before {
|
|
9
|
+
GithubCLI.stub(:config).and_return(config)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
subject { object.configure }
|
|
13
|
+
|
|
14
|
+
context 'with default' do
|
|
15
|
+
let(:config) { { } }
|
|
16
|
+
|
|
17
|
+
its(:adapter) { should eql(:net_http) }
|
|
18
|
+
|
|
19
|
+
its(:ssl) { should eql({}) }
|
|
20
|
+
|
|
21
|
+
its(:site) { should eql('https://github.com') }
|
|
22
|
+
|
|
23
|
+
its(:endpoint) { should eql('https://api.github.com') }
|
|
24
|
+
|
|
25
|
+
its(:oauth_token) { should be_nil }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context 'with config values' do
|
|
29
|
+
let(:config) {
|
|
30
|
+
{
|
|
31
|
+
'core.ssl' => {"verify" => false},
|
|
32
|
+
'core.adapter' => :patron,
|
|
33
|
+
'core.site' => 'http://site.com',
|
|
34
|
+
'core.endpoint' => 'http://api.com',
|
|
35
|
+
'user.token' => 'abc1234'
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
its(:adapter) { should eql(:patron) }
|
|
40
|
+
|
|
41
|
+
its(:ssl) { should eql({"verify" => false})}
|
|
42
|
+
|
|
43
|
+
its(:site) { should eql('http://site.com')}
|
|
44
|
+
|
|
45
|
+
its(:endpoint) { should eql('http://api.com') }
|
|
46
|
+
|
|
47
|
+
its(:oauth_token) { should eql('abc1234') }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe GithubCLI::API, '#gihtub_api' do
|
|
4
|
+
before {
|
|
5
|
+
described_class.send(:instance_variable_set, :@github_api, nil)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
it 'sets up github api connection' do
|
|
9
|
+
github_instance = stub.as_null_object
|
|
10
|
+
Github.should_receive(:new).and_return github_instance
|
|
11
|
+
expect(described_class.github_api).to eql(github_instance)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'does not instantiate on subsequent calls' do
|
|
15
|
+
described_class.github_api
|
|
16
|
+
Github.should_receive(:new).exactly(0).times
|
|
17
|
+
described_class.github_api
|
|
18
|
+
end
|
|
19
|
+
end # GithubCLI::API
|