Skip to content

Commit 89769bb

Browse files
committed
Allow searching a specific repostory
end_of_life --repo=MatheusRich/ez_attributes
1 parent ddb8a8b commit 89769bb

File tree

3 files changed

+38
-13
lines changed

3 files changed

+38
-13
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
### Added
44

5+
- Allow searching a specific repository.
6+
7+
```sh
8+
$ end_of_life --repo=MatheusRich/ez_attributes
9+
```
10+
511
- Allow specifying the user used on the repository search.
612

713
```sh

lib/end_of_life.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def execute_command(options)
3636
end
3737

3838
def check_eol_ruby_on_repositories(options)
39-
fetch_repositories(user: options[:user])
39+
fetch_repositories(user: options[:user], repository: options[:repository])
4040
.fmap { |repositories| filter_repositories_with_end_of_life(repositories) }
4141
.fmap { |repositories| print_diagnose_for(repositories) }
4242
.or { |error| puts "\n#{error_msg(error)}" }
@@ -50,6 +50,10 @@ def parse_options(argv)
5050

5151
opts.banner = "Usage: end_of_life [options]"
5252

53+
opts.on("--repo=USER/REPO", "--repository=USER/REPO", "Searches a specific repostory") do |repository|
54+
options[:repository] = repository
55+
end
56+
5357
opts.on("-u NAME", "--user=NAME", "Sets the user used on the repository search") do |user|
5458
options[:user] = user
5559
end
@@ -68,9 +72,9 @@ def parse_options(argv)
6872
{command: :print_error, error: e}
6973
end
7074

71-
def fetch_repositories(user:)
75+
def fetch_repositories(user:, repository:)
7276
with_loading_spinner("Fetching repositories...") do |spinner|
73-
result = Repository.fetch(language: "ruby", user: user)
77+
result = Repository.fetch(language: "ruby", user: user, repository: repository)
7478

7579
spinner.error if result.failure?
7680

lib/end_of_life/repository.rb

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,23 @@ class Repository
55
class << self
66
include Dry::Monads[:result, :maybe]
77

8-
def fetch(language:, user:)
9-
github_client.fmap do |github|
8+
def fetch(language:, user:, repository: nil)
9+
github_client.bind do |github|
1010
user ||= github.user.login
11-
response = github.search_repositories("user:#{user} language:#{language}", per_page: 100)
11+
query = search_query_for(language: language, user: user, repository: repository)
12+
13+
response = github.search_repositories(query, per_page: 100)
1214
warn "Incomplete results: we only search 100 repos at a time" if response.incomplete_results
1315

14-
response.items.map do |repo|
15-
Repository.new(
16-
full_name: repo.full_name,
17-
url: repo.html_url,
18-
github_client: github
19-
)
20-
end
16+
Success(
17+
response.items.map do |repo|
18+
Repository.new(
19+
full_name: repo.full_name,
20+
url: repo.html_url,
21+
github_client: github
22+
)
23+
end
24+
)
2125
rescue => e
2226
Failure("Unexpected error: #{e}")
2327
end
@@ -29,6 +33,17 @@ def github_client
2933
.fmap { |token| Octokit::Client.new(access_token: token) }
3034
.or { Failure("Please set GITHUB_TOKEN environment variable") }
3135
end
36+
37+
def search_query_for(language:, user:, repository:)
38+
query = "language:#{language}"
39+
query += if repository
40+
" repo:#{repository}"
41+
else
42+
" user:#{user}"
43+
end
44+
45+
query
46+
end
3247
end
3348

3449
attr :full_name, :url

0 commit comments

Comments
 (0)