repofetch 0.4.0 → 0.4.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +13 -3
- data/CREDITS.md +1 -1
- data/Gemfile.lock +13 -9
- data/Makefile +8 -2
- data/README.md +32 -1
- data/RELEASE_NOTES +19 -0
- data/Rakefile +2 -0
- data/exe/repofetch +3 -53
- data/lib/repofetch/DEFAULT_CONFIG +1 -0
- data/lib/repofetch/cli.rb +95 -0
- data/lib/repofetch/config.rb +19 -6
- data/lib/repofetch/env.rb +5 -2
- data/lib/repofetch/github.rb +6 -2
- data/lib/repofetch/util.rb +1 -1
- data/lib/repofetch.rb +35 -22
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a3b48794c6a23b6870a55091f87a583638b81b29d15e1d5cffa5b503607a77b
|
4
|
+
data.tar.gz: bdf1c9f91651673550c9796d307a5f5a47dce9af84269af71f0b9e5c1675307e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb7b2c2b2c9d3878f4a60be6270af5fe784f01a097982347bc2bad923c6e7cce379b73d84204e2cad2fa72c72967dae8a203d84cef78c37f643ab6fbe4c6da71
|
7
|
+
data.tar.gz: e5230639b4f37e07a21c27656eef2cfe6455b81f7e9f937b923b4814ed1fdf91b6ab2eb9770111136343f680bb2a49e6430c0bcca2aa0667bf701cc289baa652
|
data/CHANGELOG.md
CHANGED
data/CONTRIBUTING.md
CHANGED
@@ -19,7 +19,11 @@ bundle exec overcommit --install
|
|
19
19
|
configuration files.
|
20
20
|
|
21
21
|
You can view an officially supported plugin, like `Repofetch::Github`, as an
|
22
|
-
example for writing a plugin.
|
22
|
+
example for writing a plugin. Some information for writing a plugin is provided
|
23
|
+
below, but you can view more information from the generated documentation. Versioned
|
24
|
+
documentation is deployed to [rdoc.info](https://rubydoc.info/gems/repofetch), and
|
25
|
+
bleeding-edge documentation is deployed to
|
26
|
+
[GitHub Pages](https://spenserblack.github.io/repofetch/).
|
23
27
|
|
24
28
|
The easiest way to set up a plugin is to inherit from `Repofetch::Plugin`, which
|
25
29
|
will provide several helper methods that repofetch relies on to construct the
|
@@ -86,11 +90,11 @@ class MyCoolPlugin < Repofetch::Plugin
|
|
86
90
|
@arg_count = arg_count
|
87
91
|
end
|
88
92
|
|
89
|
-
def self.from_git(git, args
|
93
|
+
def self.from_git(git, args)
|
90
94
|
new(true, args.length)
|
91
95
|
end
|
92
96
|
|
93
|
-
def self.from_args(args
|
97
|
+
def self.from_args(args)
|
94
98
|
new(false, args.length)
|
95
99
|
end
|
96
100
|
|
@@ -120,4 +124,10 @@ end
|
|
120
124
|
MyCoolPlugin.register
|
121
125
|
```
|
122
126
|
|
127
|
+
### Guidelines
|
128
|
+
|
129
|
+
- For ASCII art, try to avoid using explicit black and white colors for negative and positive space.
|
130
|
+
This can harm compatibility between light and dark terminals. Instead, simply use whitespace for
|
131
|
+
negative space, and uncolored text for positive space.
|
132
|
+
|
123
133
|
[git-base]: https://www.rubydoc.info/github/ruby-git/ruby-git/Git/Base
|
data/CREDITS.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
repofetch (0.4.
|
4
|
+
repofetch (0.4.1)
|
5
5
|
actionview (~> 7.0, >= 7.0.4)
|
6
6
|
dotenv (~> 2.8)
|
7
7
|
faraday-retry (~> 2.0)
|
@@ -34,25 +34,25 @@ GEM
|
|
34
34
|
docile (1.4.0)
|
35
35
|
dotenv (2.8.1)
|
36
36
|
erubi (1.11.0)
|
37
|
-
faraday (2.7.
|
37
|
+
faraday (2.7.2)
|
38
38
|
faraday-net_http (>= 2.0, < 3.1)
|
39
39
|
ruby2_keywords (>= 0.0.4)
|
40
40
|
faraday-net_http (3.0.2)
|
41
41
|
faraday-retry (2.0.0)
|
42
42
|
faraday (~> 2.0)
|
43
|
-
git (1.
|
43
|
+
git (1.13.0)
|
44
44
|
addressable (~> 2.8)
|
45
45
|
rchardet (~> 1.8)
|
46
46
|
i18n (1.12.0)
|
47
47
|
concurrent-ruby (~> 1.0)
|
48
48
|
iniparse (1.5.0)
|
49
49
|
json (2.6.2)
|
50
|
-
loofah (2.19.
|
50
|
+
loofah (2.19.1)
|
51
51
|
crass (~> 1.0.2)
|
52
52
|
nokogiri (>= 1.5.9)
|
53
53
|
mini_portile2 (2.8.0)
|
54
54
|
minitest (5.16.3)
|
55
|
-
nokogiri (1.13.
|
55
|
+
nokogiri (1.13.10)
|
56
56
|
mini_portile2 (~> 2.8.0)
|
57
57
|
racc (~> 1.4)
|
58
58
|
octokit (6.0.1)
|
@@ -65,13 +65,13 @@ GEM
|
|
65
65
|
parallel (1.22.1)
|
66
66
|
parser (3.1.3.0)
|
67
67
|
ast (~> 2.4.1)
|
68
|
-
public_suffix (5.0.
|
69
|
-
racc (1.6.
|
68
|
+
public_suffix (5.0.1)
|
69
|
+
racc (1.6.1)
|
70
70
|
rails-dom-testing (2.0.3)
|
71
71
|
activesupport (>= 4.2.0)
|
72
72
|
nokogiri (>= 1.6)
|
73
|
-
rails-html-sanitizer (1.4.
|
74
|
-
loofah (~> 2.
|
73
|
+
rails-html-sanitizer (1.4.4)
|
74
|
+
loofah (~> 2.19, >= 2.19.1)
|
75
75
|
rainbow (3.1.1)
|
76
76
|
rake (13.0.6)
|
77
77
|
rchardet (1.8.0)
|
@@ -126,6 +126,9 @@ GEM
|
|
126
126
|
tzinfo (2.0.5)
|
127
127
|
concurrent-ruby (~> 1.0)
|
128
128
|
unicode-display_width (2.3.0)
|
129
|
+
webrick (1.7.0)
|
130
|
+
yard (0.9.28)
|
131
|
+
webrick (~> 1.7.0)
|
129
132
|
|
130
133
|
PLATFORMS
|
131
134
|
ruby
|
@@ -142,6 +145,7 @@ DEPENDENCIES
|
|
142
145
|
rubocop-rspec (~> 2.13)
|
143
146
|
simplecov (~> 0.21)
|
144
147
|
simplecov-cobertura (~> 2.1)
|
148
|
+
yard (~> 0.9.28)
|
145
149
|
|
146
150
|
BUNDLED WITH
|
147
151
|
2.1.2
|
data/Makefile
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
.PHONY: install
|
2
|
-
|
3
1
|
repofetch.gem: repofetch.gemspec lib/** exe/**
|
4
2
|
gem build -o repofetch.gem repofetch.gemspec
|
5
3
|
|
4
|
+
demos: tapes/*
|
5
|
+
$(foreach tape,$(wildcard tapes/*),vhs $(tape);)
|
6
|
+
|
7
|
+
.PHONY: doc
|
8
|
+
doc:
|
9
|
+
bundle exec yardoc
|
10
|
+
|
11
|
+
.PHONY: install
|
6
12
|
install: repofetch.gem
|
7
13
|
gem install repofetch.gem
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# `repofetch`
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/repofetch)
|
3
4
|
[](./CREDITS.md)
|
4
5
|

|
5
6
|
[](https://github.com/spenserblack/repofetch/actions/workflows/codeql.yml)
|
@@ -7,6 +8,12 @@
|
|
7
8
|
|
8
9
|
Fetch details about your remote repository.
|
9
10
|
|
11
|
+
## Usage
|
12
|
+
|
13
|
+

|
14
|
+
|
15
|
+

|
16
|
+
|
10
17
|
## Description
|
11
18
|
|
12
19
|
repofetch is a CLI tool to fetch stats (think [neofetch] or
|
@@ -16,7 +23,24 @@ repofetch. With 3rd-party plugins, however, it can support other types of output
|
|
16
23
|
|
17
24
|
## Installation
|
18
25
|
|
19
|
-
###
|
26
|
+
### Via RubyGems.org
|
27
|
+
|
28
|
+
```bash
|
29
|
+
gem install repofetch
|
30
|
+
```
|
31
|
+
|
32
|
+
### Installing Version `< 0.4.0`
|
33
|
+
|
34
|
+
Version 0.3.3 and lower was a different implementation written in Rust. While `>= 0.4.0` is unstable
|
35
|
+
and likely buggy, you may want to use a lower version.
|
36
|
+
|
37
|
+
#### Via [Crates.io](https://crates.io/crates/repofetch)
|
38
|
+
|
39
|
+
```bash
|
40
|
+
cargo install repofetch
|
41
|
+
```
|
42
|
+
|
43
|
+
#### Via NetBSD
|
20
44
|
|
21
45
|
Pre-compiled binaries are available from the [official repositories](https://pkgsrc.se/sysutils/repofetch)
|
22
46
|
To install this, simply run:
|
@@ -61,6 +85,13 @@ plugins:
|
|
61
85
|
GITHUB_TOKEN=$(gh auth token)
|
62
86
|
```
|
63
87
|
|
88
|
+
## Notes on Rust Implementation (Version `< 0.4.0`)
|
89
|
+
|
90
|
+
I switched from Rust to Ruby to rewrite this project to use and support
|
91
|
+
plugins. I won't develop new features for the Rust implementation, but I may
|
92
|
+
fix bugs, and I'll review pull requests. The Rust implementation is on the
|
93
|
+
`rust` branch.
|
94
|
+
|
64
95
|
[dotenv]: https://github.com/bkeepers/dotenv
|
65
96
|
[neofetch]: https://github.com/dylanaraps/neofetch
|
66
97
|
[onefetch]: https://github.com/o2sh/onefetch
|
data/RELEASE_NOTES
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
0.4.1
|
2
|
+
|
3
|
+
## Fixed
|
4
|
+
|
5
|
+
- Repofetch failing when a git repository was not found even though a plugin was
|
6
|
+
selected from the command-line (#227) (#225)
|
7
|
+
|
8
|
+
## Other
|
9
|
+
|
10
|
+
- Fixed and improved generated documentation
|
11
|
+
|
12
|
+
******
|
13
|
+
|
14
|
+
## Breaking for 3rd-party plugins
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
|
18
|
+
- Configuration to be a class variable on `Repofetch` instead of a value that's
|
19
|
+
passed to various instantiation and rendering methods
|
data/Rakefile
CHANGED
@@ -5,11 +5,13 @@ require 'rake'
|
|
5
5
|
|
6
6
|
require 'rspec/core/rake_task'
|
7
7
|
require 'rubocop/rake_task'
|
8
|
+
require 'yard'
|
8
9
|
|
9
10
|
RSpec::Core::RakeTask.new(:spec)
|
10
11
|
RuboCop::RakeTask.new(:format) do |t|
|
11
12
|
t.requires << 'rubocop-rspec'
|
12
13
|
end
|
14
|
+
YARD::Rake::YardocTask.new(:doc)
|
13
15
|
|
14
16
|
desc 'Run tests'
|
15
17
|
task default: %i[format spec]
|
data/exe/repofetch
CHANGED
@@ -1,60 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require 'git'
|
5
|
-
require 'optparse'
|
6
4
|
require 'repofetch'
|
7
|
-
require 'repofetch/
|
5
|
+
require 'repofetch/cli'
|
8
6
|
require 'repofetch/env'
|
9
7
|
|
10
8
|
Repofetch::Env.load
|
11
|
-
|
12
|
-
|
13
|
-
config.plugins.each { |plugin| require plugin }
|
14
|
-
|
15
|
-
options = {
|
16
|
-
plugin: nil,
|
17
|
-
repository: '.'
|
18
|
-
}
|
19
|
-
|
20
|
-
available_plugins = Repofetch.plugins.to_h { |plugin| [plugin.name, plugin] }
|
21
|
-
|
22
|
-
command = OptionParser.new do |opts|
|
23
|
-
opts.banner = 'Usage: repofetch [options] -- [plugin arguments]'
|
24
|
-
|
25
|
-
opts.on('-r', '--repository PATH', 'Use the provided repository. Defaults to the current directory.') do |path|
|
26
|
-
options[:repository] = path
|
27
|
-
end
|
28
|
-
|
29
|
-
opts.on('-p', '--plugin PLUGIN', 'Use the specified plugin') do |plugin|
|
30
|
-
options[:plugin] = available_plugins[plugin]
|
31
|
-
end
|
32
|
-
|
33
|
-
Repofetch.plugins.each do |plugin|
|
34
|
-
opts.on("--#{plugin.name.sub(/::/, '-').downcase}", "Shortcut for --plugin #{plugin.name}") do
|
35
|
-
options[:plugin] = plugin
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
opts.separator ''
|
40
|
-
dotenv_paths = Repofetch::Env::DOTENV_PATHS.join(', ')
|
41
|
-
opts.separator "The following dotenv files can be used to set environment variables: #{dotenv_paths}"
|
42
|
-
opts.separator ''
|
43
|
-
opts.separator "You config file is at #{Repofetch::Config::PATH}"
|
44
|
-
opts.separator "Installed plugins: #{available_plugins.keys.join(', ')}"
|
45
|
-
end
|
46
|
-
|
47
|
-
command.parse!
|
48
|
-
|
49
|
-
git = Git.open(options[:repository])
|
50
|
-
plugin_class = options[:plugin]
|
51
|
-
# NOTE: If the user explicitly selected a plugin, then it is constructed from CLI args.
|
52
|
-
# Otherwise, we try to build it from the repository.
|
53
|
-
begin
|
54
|
-
plugin = plugin_class.nil? ? Repofetch.get_plugin(git, ARGV, config) : plugin_class.from_args(ARGV, config)
|
55
|
-
rescue ArgumentError => e
|
56
|
-
warn e
|
57
|
-
exit 1
|
58
|
-
end
|
59
|
-
|
60
|
-
puts plugin
|
9
|
+
Repofetch.load_config!
|
10
|
+
exit Repofetch::CLI.new.start
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'git'
|
4
|
+
require 'optparse'
|
5
|
+
require 'repofetch'
|
6
|
+
require 'repofetch/config'
|
7
|
+
|
8
|
+
class Repofetch
|
9
|
+
# Command line interface for repofetch.
|
10
|
+
class CLI
|
11
|
+
attr_reader :repository_path, :plugin
|
12
|
+
|
13
|
+
# Define the command line interface.
|
14
|
+
#
|
15
|
+
# @param [Repofetch::Config] config The configuration to use. Defaults to +Repofetch.config+.
|
16
|
+
# @param [Array<String>] args Command line arguments.
|
17
|
+
def initialize(config = nil, args = ARGV)
|
18
|
+
@config = config || Repofetch.config
|
19
|
+
@args = args
|
20
|
+
@repository_path = '.'
|
21
|
+
end
|
22
|
+
|
23
|
+
# Run the command line interface.
|
24
|
+
#
|
25
|
+
# @return [Integer] The exit code.
|
26
|
+
def start
|
27
|
+
load_plugins
|
28
|
+
define_options.parse!(@args)
|
29
|
+
|
30
|
+
begin
|
31
|
+
plugin = new_plugin
|
32
|
+
rescue ArgumentError => e
|
33
|
+
warn e
|
34
|
+
return 1
|
35
|
+
end
|
36
|
+
|
37
|
+
puts plugin
|
38
|
+
0
|
39
|
+
end
|
40
|
+
|
41
|
+
def define_options
|
42
|
+
OptionParser.new do |opts|
|
43
|
+
opts.banner = 'Usage: repofetch [options] -- [plugin arguments]'
|
44
|
+
|
45
|
+
add_repository_options(opts)
|
46
|
+
add_plugin_options(opts)
|
47
|
+
add_options_notes(opts)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def load_plugins
|
52
|
+
@config.plugins.each { |plugin| require plugin }
|
53
|
+
end
|
54
|
+
|
55
|
+
def new_plugin
|
56
|
+
return @plugin.from_args(@args) unless @plugin.nil?
|
57
|
+
|
58
|
+
git = Git.open(@repository_path)
|
59
|
+
Repofetch.get_plugin(git, @args)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def add_repository_options(opts)
|
65
|
+
opts.on('-r', '--repository PATH', 'Use the provided repository. Defaults to the current directory.') do |path|
|
66
|
+
@repository_path = path
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_plugin_options(opts)
|
71
|
+
opts.on('-p', '--plugin PLUGIN', 'Use the specified plugin.') do |plugin|
|
72
|
+
@plugin = available_plugins[plugin]
|
73
|
+
end
|
74
|
+
|
75
|
+
Repofetch.plugins.each do |plugin|
|
76
|
+
opts.on("--#{plugin.name.sub(/::/, '-').downcase}", "Shortcut for --plugin #{plugin.name}") do
|
77
|
+
@plugin = plugin
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def add_options_notes(opts)
|
83
|
+
opts.separator ''
|
84
|
+
dotenv_paths = Repofetch::Env.dotenv_paths.join(', ')
|
85
|
+
opts.separator "The following dotenv files can be used to set environment variables: #{dotenv_paths}"
|
86
|
+
opts.separator ''
|
87
|
+
opts.separator "You config file is at #{Repofetch::Config.path}"
|
88
|
+
opts.separator "Installed plugins: #{available_plugins.keys.join(', ')}"
|
89
|
+
end
|
90
|
+
|
91
|
+
def available_plugins
|
92
|
+
Repofetch.plugins.to_h { |plugin| [plugin.name, plugin] }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/repofetch/config.rb
CHANGED
@@ -5,34 +5,47 @@ require 'yaml'
|
|
5
5
|
class Repofetch
|
6
6
|
# Utilities for managing config.
|
7
7
|
class Config
|
8
|
-
PATH = File.expand_path('.repofetch.yml', Dir.home)
|
9
8
|
DEFAULT_CONFIG = File.read(File.expand_path('DEFAULT_CONFIG', __dir__))
|
10
9
|
|
11
10
|
# Loads from config file.
|
12
11
|
def self.load
|
13
|
-
new(File.read(
|
12
|
+
new(File.read(path))
|
13
|
+
end
|
14
|
+
|
15
|
+
# The path to the config file.
|
16
|
+
def self.path
|
17
|
+
File.expand_path('.repofetch.yml', Dir.home)
|
14
18
|
end
|
15
19
|
|
16
20
|
# Loads from a config file if it exists. If it doesn't, it writes the config file,
|
17
21
|
# then creates a default.
|
18
22
|
def self.load!
|
19
|
-
if File.exist?(
|
23
|
+
if File.exist?(path)
|
20
24
|
self.load
|
21
25
|
else
|
22
|
-
File.write(
|
26
|
+
File.write(path, DEFAULT_CONFIG)
|
23
27
|
new(DEFAULT_CONFIG)
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
27
31
|
# @param config_yaml [String] a YAML string
|
28
|
-
def initialize(config_yaml =
|
29
|
-
@config = YAML.safe_load(config_yaml, symbolize_names: true)
|
32
|
+
def initialize(config_yaml = '')
|
33
|
+
@config = YAML.safe_load(config_yaml, symbolize_names: true) || {}
|
30
34
|
end
|
31
35
|
|
32
36
|
def plugins
|
33
37
|
@config[:plugins] || []
|
34
38
|
end
|
35
39
|
|
40
|
+
# Should emojis be shown
|
41
|
+
def emojis?
|
42
|
+
@config[:emojis].nil? || @config[:emojis]
|
43
|
+
end
|
44
|
+
|
45
|
+
def emojis=(emojis)
|
46
|
+
@config[:emojis] = emojis
|
47
|
+
end
|
48
|
+
|
36
49
|
def [](key)
|
37
50
|
@config[key]
|
38
51
|
end
|
data/lib/repofetch/env.rb
CHANGED
@@ -6,10 +6,13 @@ class Repofetch
|
|
6
6
|
# Environment variable manager. Basically a wrapper around dotenv.
|
7
7
|
class Env
|
8
8
|
DOTENV_NAMES = ['repofetch.env', '.repofetch.env'].freeze
|
9
|
-
DOTENV_PATHS = DOTENV_NAMES.map { |name| File.expand_path(name, Dir.home) }
|
10
9
|
|
11
10
|
def self.load
|
12
|
-
|
11
|
+
dotenv_paths.each { |dotenv| Dotenv.load(dotenv) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.dotenv_paths
|
15
|
+
DOTENV_NAMES.map { |name| File.expand_path(name, Dir.home) }
|
13
16
|
end
|
14
17
|
end
|
15
18
|
end
|
data/lib/repofetch/github.rb
CHANGED
@@ -64,7 +64,9 @@ class Repofetch
|
|
64
64
|
end
|
65
65
|
|
66
66
|
# Creates an instance from a +Git::Base+ instance.
|
67
|
-
|
67
|
+
#
|
68
|
+
# @raise [ArgumentError] if this plugin was selected *and* arguments were passed.
|
69
|
+
def self.from_git(git, args)
|
68
70
|
# TODO: Raise a better exception than ArgumentError
|
69
71
|
raise ArgumentError, 'Explicitly activate this plugin to CLI arguments' unless args.empty?
|
70
72
|
|
@@ -74,7 +76,9 @@ class Repofetch
|
|
74
76
|
end
|
75
77
|
|
76
78
|
# Creates an instance from CLI args and configuration.
|
77
|
-
|
79
|
+
#
|
80
|
+
# @raise [ArgumentError] if +args+ couldn't be parsed.
|
81
|
+
def self.from_args(args)
|
78
82
|
parser = OptionParser.new do |opts|
|
79
83
|
opts.banner = 'Usage: <plugin activation> -- [options] OWNER/REPOSITORY'
|
80
84
|
opts.separator ''
|
data/lib/repofetch/util.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
class Repofetch
|
4
4
|
# Provides uncategorized utilities.
|
5
5
|
class Util
|
6
|
-
# Cleans a string with style parameters (e.g. "%{green}OK" -> "OK")
|
6
|
+
# Cleans a string with style parameters (e.g. +"%{green}OK"+ -> +"OK"+)
|
7
7
|
def self.clean_s(str)
|
8
8
|
str.gsub(/%{[\w\d]+?}/, '')
|
9
9
|
end
|
data/lib/repofetch.rb
CHANGED
@@ -16,9 +16,20 @@ class Repofetch
|
|
16
16
|
@plugins = []
|
17
17
|
|
18
18
|
class << self
|
19
|
+
attr_accessor :config
|
19
20
|
attr_reader :plugins
|
20
21
|
end
|
21
22
|
|
23
|
+
# Loads the config, without affecting the file system.
|
24
|
+
def self.load_config
|
25
|
+
@config = Config.load
|
26
|
+
end
|
27
|
+
|
28
|
+
# Loads the config, writing a default config if it doesn't exist.
|
29
|
+
def self.load_config!
|
30
|
+
@config = Config.load!
|
31
|
+
end
|
32
|
+
|
22
33
|
# Registers a plugin.
|
23
34
|
#
|
24
35
|
# @param [Plugin] plugin The plugin to register
|
@@ -45,12 +56,14 @@ class Repofetch
|
|
45
56
|
# Raises a +Repofetch::NoPluginsError+ if no plugins are found.
|
46
57
|
# Raises a +Repofetch::TooManyPluginsError+ if more than one plugin is found.
|
47
58
|
#
|
48
|
-
# @param [
|
59
|
+
# @param [Git::Base] git A repository instance.
|
49
60
|
# @param [Array<String>] args The arguments passed to the program.
|
50
|
-
# @param [Repofetch::Config] config The configuration to use.
|
51
61
|
#
|
52
|
-
# @
|
53
|
-
|
62
|
+
# @raise [NoPluginsError] If no plugins were selected.
|
63
|
+
# @raise [TooManyPluginsError] If more than one plugin was selected.
|
64
|
+
#
|
65
|
+
# @return [Plugin] A plugin to use.
|
66
|
+
def self.get_plugin(git, args)
|
54
67
|
available_plugins = @plugins.filter do |plugin_class|
|
55
68
|
plugin_class.matches_repo?(git)
|
56
69
|
rescue NoMethodError
|
@@ -61,7 +74,7 @@ class Repofetch
|
|
61
74
|
|
62
75
|
raise TooManyPluginsError if available_plugins.length > 1
|
63
76
|
|
64
|
-
available_plugins[0].from_git(git, args
|
77
|
+
available_plugins[0].from_git(git, args)
|
65
78
|
end
|
66
79
|
|
67
80
|
# Gets the name of the default remote to use.
|
@@ -69,9 +82,9 @@ class Repofetch
|
|
69
82
|
# Will try to pick "origin", but if that is not found then it will
|
70
83
|
# pick the first one found, or nil if there aren't any available.
|
71
84
|
#
|
72
|
-
# @param [
|
85
|
+
# @param [Git::Base] git The repository instance.
|
73
86
|
#
|
74
|
-
# @
|
87
|
+
# @return [Git::Remote]
|
75
88
|
def self.default_remote(git)
|
76
89
|
remotes = git.remotes
|
77
90
|
found_remote = remotes.find { |remote| remote.name == 'origin' }
|
@@ -90,7 +103,7 @@ class Repofetch
|
|
90
103
|
default_remote(path)&.url
|
91
104
|
end
|
92
105
|
|
93
|
-
#
|
106
|
+
# @abstract Subclass to create a plugin.
|
94
107
|
class Plugin
|
95
108
|
# Plugin intializer arguments should come from the +from_git+ or +from_args+
|
96
109
|
# class methods.
|
@@ -109,7 +122,7 @@ class Repofetch
|
|
109
122
|
Repofetch.replace_or_register_plugin(old, self)
|
110
123
|
end
|
111
124
|
|
112
|
-
# Detects that this plugin should be used. Should be overridden by subclasses.
|
125
|
+
# @abstract Detects that this plugin should be used. Should be overridden by subclasses.
|
113
126
|
#
|
114
127
|
# An example implementation is checking if +Repofetch.default_remote_url+ matches
|
115
128
|
# a regular expression.
|
@@ -119,24 +132,22 @@ class Repofetch
|
|
119
132
|
raise NoMethodError, 'matches_repo? must be overridden by the plugin subclass'
|
120
133
|
end
|
121
134
|
|
122
|
-
# This should use a git instance and call +Plugin.new+.
|
135
|
+
# @abstract This should use a git instance and call +Plugin.new+.
|
123
136
|
#
|
124
137
|
# @param [Git::Base] _git The Git repository object to use when calling +Plugin.new+.
|
125
138
|
# @param [Array] _args The arguments to process.
|
126
|
-
# @param [Config] _config The configuration loaded by the CLI.
|
127
139
|
#
|
128
|
-
# @
|
129
|
-
def self.from_git(_git, _args
|
140
|
+
# @return [Plugin]
|
141
|
+
def self.from_git(_git, _args)
|
130
142
|
raise NoMethodError, 'from_git must be overridden by the plugin subclass'
|
131
143
|
end
|
132
144
|
|
133
|
-
# This will receive an array of strings (e.g. +ARGV+) and call +Plugin.new+.
|
145
|
+
# @abstract This will receive an array of strings (e.g. +ARGV+) and call +Plugin.new+.
|
134
146
|
#
|
135
147
|
# @param [Array] _args The arguments to process.
|
136
|
-
# @param [Config] _config The configuration loaded by the CLI.
|
137
148
|
#
|
138
|
-
# @
|
139
|
-
def self.from_args(_args
|
149
|
+
# @return [Plugin]
|
150
|
+
def self.from_args(_args)
|
140
151
|
raise NoMethodError, 'from_args must be overridden by the plugin subclass'
|
141
152
|
end
|
142
153
|
|
@@ -145,7 +156,7 @@ class Repofetch
|
|
145
156
|
Repofetch::DEFAULT_THEME
|
146
157
|
end
|
147
158
|
|
148
|
-
# The ASCII to be printed alongside the stats.
|
159
|
+
# @abstract The ASCII to be printed alongside the stats.
|
149
160
|
#
|
150
161
|
# This should be overridden by the plugin subclass.
|
151
162
|
# Should be within the bounds 40x20 (width x height).
|
@@ -153,7 +164,7 @@ class Repofetch
|
|
153
164
|
raise NoMethodError, 'ascii must be overridden by the plugin subclass'
|
154
165
|
end
|
155
166
|
|
156
|
-
# The header to show for the plugin.
|
167
|
+
# @abstract The header to show for the plugin.
|
157
168
|
#
|
158
169
|
# This should be overridden by the plugin subclass.
|
159
170
|
# For example, "foo/bar @ GitHub".
|
@@ -175,9 +186,9 @@ class Repofetch
|
|
175
186
|
end.join
|
176
187
|
end
|
177
188
|
|
178
|
-
# An array of stats that will be displayed to the right of the ASCII art.
|
189
|
+
# @abstract An array of stats that will be displayed to the right of the ASCII art.
|
179
190
|
#
|
180
|
-
# @
|
191
|
+
# @return [Array<Stat>]
|
181
192
|
def stats
|
182
193
|
[]
|
183
194
|
end
|
@@ -217,7 +228,9 @@ class Repofetch
|
|
217
228
|
end
|
218
229
|
|
219
230
|
def to_s
|
220
|
-
|
231
|
+
emoji = @emoji
|
232
|
+
emoji = nil unless Repofetch.config.nil? || Repofetch.config.emojis?
|
233
|
+
"#{emoji}#{@theme.nil? ? @label : @theme.format(:bold, @label)}: #{format_value}"
|
221
234
|
end
|
222
235
|
|
223
236
|
# Formats the value
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: repofetch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Spenser Black
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-12-
|
11
|
+
date: 2022-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -232,6 +232,20 @@ dependencies:
|
|
232
232
|
- - "~>"
|
233
233
|
- !ruby/object:Gem::Version
|
234
234
|
version: '2.1'
|
235
|
+
- !ruby/object:Gem::Dependency
|
236
|
+
name: yard
|
237
|
+
requirement: !ruby/object:Gem::Requirement
|
238
|
+
requirements:
|
239
|
+
- - "~>"
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: 0.9.28
|
242
|
+
type: :development
|
243
|
+
prerelease: false
|
244
|
+
version_requirements: !ruby/object:Gem::Requirement
|
245
|
+
requirements:
|
246
|
+
- - "~>"
|
247
|
+
- !ruby/object:Gem::Version
|
248
|
+
version: 0.9.28
|
235
249
|
description: A plugin-based tool to fetch stats, with a GitHub stat fetcher included
|
236
250
|
by default
|
237
251
|
email:
|
@@ -249,10 +263,12 @@ files:
|
|
249
263
|
- LICENSE
|
250
264
|
- Makefile
|
251
265
|
- README.md
|
266
|
+
- RELEASE_NOTES
|
252
267
|
- Rakefile
|
253
268
|
- exe/repofetch
|
254
269
|
- lib/repofetch.rb
|
255
270
|
- lib/repofetch/DEFAULT_CONFIG
|
271
|
+
- lib/repofetch/cli.rb
|
256
272
|
- lib/repofetch/config.rb
|
257
273
|
- lib/repofetch/env.rb
|
258
274
|
- lib/repofetch/exceptions.rb
|
@@ -265,9 +281,11 @@ licenses:
|
|
265
281
|
- MIT
|
266
282
|
metadata:
|
267
283
|
homepage_uri: https://github.com/spenserblack/repofetch
|
284
|
+
changelog_uri: https://github.com/spenserblack/repofetch/releases
|
285
|
+
documentation_uri: https://rubydoc.info/gems/repofetch
|
268
286
|
source_code_uri: https://github.com/spenserblack/repofetch
|
269
|
-
rubygems_mfa_required: 'true'
|
270
287
|
github_repo: ssh://github.com/spenserblack/repofetch
|
288
|
+
rubygems_mfa_required: 'true'
|
271
289
|
post_install_message:
|
272
290
|
rdoc_options: []
|
273
291
|
require_paths:
|