nya_pr 0.1.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.
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dotenv'
4
+
5
+ module NyaPr
6
+ class Runner
7
+ attr_reader :options
8
+
9
+ def initialize(options)
10
+ @options = options
11
+ end
12
+
13
+ def run
14
+ Dotenv.load
15
+ configure_logger
16
+
17
+ pull_requests = find_pull_requests
18
+
19
+ pull_request_printer.print(pull_requests)
20
+ save_pull_requests(pull_requests)
21
+ end
22
+
23
+ private
24
+
25
+ def paths
26
+ @paths ||= Paths.new(
27
+ repositories_path: options[:repositories_csv],
28
+ pull_requests_dir: options[:pull_requests_dir]
29
+ )
30
+ end
31
+
32
+ def configure_logger
33
+ NyaPr.logger.level = options[:log_level]
34
+ end
35
+
36
+ def target_repositories
37
+ repository_collector.collect
38
+ end
39
+
40
+ def repository_collector
41
+ @repository_collector ||= Repository::Collector.new(
42
+ client,
43
+ username,
44
+ owners,
45
+ repository_store,
46
+ refresh: options[:refresh],
47
+ skip_archived: options[:skip_archived],
48
+ progress: options[:progress]
49
+ )
50
+ end
51
+
52
+ def save_pull_requests(pull_requests)
53
+ pull_request_store.write(pull_requests)
54
+
55
+ NyaPr.logger.info(
56
+ "Saved #{pull_requests.size} pull requests to #{pull_request_store.path}"
57
+ )
58
+ end
59
+
60
+ def find_pull_requests
61
+ PullRequest::Finder.
62
+ new(
63
+ client,
64
+ target_repositories,
65
+ limit: options[:limit],
66
+ progress_enabled: options[:progress]
67
+ ).
68
+ find
69
+ end
70
+
71
+ def repository_store
72
+ @repository_store ||= Repository::CsvStore.new(paths.repositories_csv)
73
+ end
74
+
75
+ def pull_request_store
76
+ @pull_request_store ||= PullRequest::CsvStore.new(paths.pull_requests_csv)
77
+ end
78
+
79
+ def pull_request_printer
80
+ @pull_request_printer ||= PullRequest::Printer.new
81
+ end
82
+
83
+ def client
84
+ @client ||= Client.new(token)
85
+ end
86
+
87
+ def token
88
+ options[:token] || ENV.fetch('GITHUB_TOKEN') do
89
+ raise NyaPr::Error, 'GitHub token is required (--token or GITHUB_TOKEN)'
90
+ end
91
+ end
92
+
93
+ def username
94
+ options[:username]
95
+ end
96
+
97
+ def owners
98
+ ([username] + options[:owners]).uniq
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NyaPr
4
+ VERSION = '0.1.0'
5
+ end
data/lib/nya_pr.rb ADDED
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zeitwerk'
4
+ require 'logger'
5
+ require 'csv'
6
+ require 'dry/cli'
7
+
8
+ loader = Zeitwerk::Loader.for_gem
9
+ loader.setup
10
+
11
+ module NyaPr
12
+ class << self
13
+ def run(argv = ARGV)
14
+ Dry::CLI.new(Cli::Command).call(arguments: argv)
15
+ end
16
+
17
+ def logger
18
+ @logger ||= Logger.new($stderr).tap do |logger|
19
+ logger.level = Logger::INFO
20
+ logger.progname = 'nya-pr'
21
+ end
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nya_pr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Elijah S. Krukowski
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: csv
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: dotenv
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.2'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ - !ruby/object:Gem::Dependency
41
+ name: dry-cli
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.4'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.4'
54
+ - !ruby/object:Gem::Dependency
55
+ name: faraday
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.14'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.14'
68
+ - !ruby/object:Gem::Dependency
69
+ name: oj
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.10'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.10'
82
+ - !ruby/object:Gem::Dependency
83
+ name: zeitwerk
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.6'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.6'
96
+ description: |
97
+ NyaPr collects repositories you own or contribute to, finds their open pull
98
+ requests, and puts them together in one place for maximum kawaii.
99
+ email:
100
+ - elskruk@proton.me
101
+ executables:
102
+ - nya-pr
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - LICENSE.md
107
+ - README.md
108
+ - exe/nya-pr
109
+ - lib/nya_pr.rb
110
+ - lib/nya_pr/cli/command.rb
111
+ - lib/nya_pr/client.rb
112
+ - lib/nya_pr/connection.rb
113
+ - lib/nya_pr/error.rb
114
+ - lib/nya_pr/paths.rb
115
+ - lib/nya_pr/progress.rb
116
+ - lib/nya_pr/pull_request/csv_store.rb
117
+ - lib/nya_pr/pull_request/finder.rb
118
+ - lib/nya_pr/pull_request/printer.rb
119
+ - lib/nya_pr/repository/collector.rb
120
+ - lib/nya_pr/repository/csv_store.rb
121
+ - lib/nya_pr/repository/filter.rb
122
+ - lib/nya_pr/repository/finder.rb
123
+ - lib/nya_pr/request.rb
124
+ - lib/nya_pr/runner.rb
125
+ - lib/nya_pr/version.rb
126
+ homepage: https://github.com/bodrovis/nya_pr
127
+ licenses:
128
+ - MIT
129
+ metadata:
130
+ rubygems_mfa_required: 'true'
131
+ bug_tracker_uri: https://github.com/bodrovis/nya_pr/issues
132
+ documentation_uri: https://github.com/bodrovis/nya_pr/blob/master/README.md
133
+ homepage_uri: https://github.com/bodrovis/nya_pr
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '4.0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubygems_version: 4.0.20
149
+ specification_version: 4
150
+ summary: A tiny kawaii CLI for hunting down GitHub pull requests
151
+ test_files: []