mj 0.4.1 → 0.5.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/Gemfile.lock +1 -1
- data/README.md +68 -1
- data/lib/mj/alternative_file/candidates.rb +4 -0
- data/lib/mj/alternative_file/commands/list_command.rb +28 -0
- data/lib/mj/alternative_file/commands/list_command_handler.rb +33 -0
- data/lib/mj/alternative_file/resolvers/ruby/rails_resolver.rb +2 -0
- data/lib/mj/alternative_file/thor_command.rb +15 -27
- data/lib/mj/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 040511b6ef46ad0760a5958920e53ec8d00fa3f0697c9098004e649808c41f73
|
4
|
+
data.tar.gz: b9eaa497531aa4856674cf0f5d80825769e0b431ee8c304cf052680f8d22ee2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e0c951f24b70e6d25746e51f3cf0a37c9fd781818763e26115f6199a157da4cc3f6590cba8819f56d5ecbdb7de8523e509b3f29dd5362340cebc7d1646c3028
|
7
|
+
data.tar.gz: 112bc4d98c34cd67f5ef1cae09646e06a920ab2b5ed27010130bbd926dc23d033bdf1a329d9fd0d4e56466dfb086747a40a3414200a5a441839f1a397dd90fdd
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -25,9 +25,76 @@ Or install it yourself as:
|
|
25
25
|
## Usage
|
26
26
|
|
27
27
|
```bash
|
28
|
-
mj
|
28
|
+
mj help
|
29
29
|
```
|
30
30
|
|
31
|
+
### Alternative file
|
32
|
+
|
33
|
+
Examples:
|
34
|
+
|
35
|
+
```
|
36
|
+
$ mj alternative_file list app/components/attribute_component.rb
|
37
|
+
app/components/attribute_component.html.erb
|
38
|
+
app/components/attribute_component.rb
|
39
|
+
lib/components/attribute_component.rb
|
40
|
+
spec/components/attribute_component_spec.rb
|
41
|
+
test/components/attribute_component_test.rb
|
42
|
+
|
43
|
+
$ mj alternative_file list app/components/attribute_component.rb --exists
|
44
|
+
app/components/attribute_component.html.erb
|
45
|
+
app/components/attribute_component.rb
|
46
|
+
spec/components/attribute_component_spec.rb
|
47
|
+
|
48
|
+
$ mj alternative_file list app/components/attribute_component.rb --types=spec
|
49
|
+
spec/components/attribute_component_spec.rb
|
50
|
+
|
51
|
+
$ mj alternative_file next app/components/attribute_component.rb
|
52
|
+
lib/components/attribute_component.rb
|
53
|
+
|
54
|
+
$ mj alternative_file prev app/components/attribute_component.rb
|
55
|
+
app/components/attribute_component.html.erb
|
56
|
+
```
|
57
|
+
|
58
|
+
Why? Because you can integrate that command with your IDE/Text Editor. For instance, here's my [neovim integration](https://github.com/mjacobus/dotfiles/blob/d8ceda659dc9b587ab22b05fc15eac2fa5b477d7/neovim/.config/nvim/init.lua#L31-L63):
|
59
|
+
|
60
|
+
```lua
|
61
|
+
vimp.nnoremap('<leader>ak', function()
|
62
|
+
open_mj_alternative_file('next', '--exists')
|
63
|
+
end)
|
64
|
+
|
65
|
+
vimp.nnoremap('<leader>aj', function()
|
66
|
+
open_mj_alternative_file('prev', '--exists')
|
67
|
+
end)
|
68
|
+
|
69
|
+
function open_mj_alternative_file(subcommand, options)
|
70
|
+
file_path = vim.fn.expand('%')
|
71
|
+
files = mj_alternative_file(file_path, subcommand, options)
|
72
|
+
files = vim.split(files, ' ')
|
73
|
+
file = files[1]
|
74
|
+
|
75
|
+
|
76
|
+
if file ~= '' then
|
77
|
+
vim.api.nvim_command('e ' .. file)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
function mj_alternative_file(file, subcommand, options)
|
82
|
+
local cmd = 'mj alternative_file ' .. subcommand .. ' ' .. file .. ' ' .. options
|
83
|
+
return execute_command(cmd)
|
84
|
+
end
|
85
|
+
|
86
|
+
function execute_command(cmd)
|
87
|
+
print("cmd: " .. cmd)
|
88
|
+
local f = io.popen(cmd)
|
89
|
+
local s = f:read('*a')
|
90
|
+
f:close()
|
91
|
+
return s
|
92
|
+
end
|
93
|
+
```
|
94
|
+
|
95
|
+
This way I can use `<leader>a{direction}`, where `k` is `next`, and `j` is `previous` alternative file.
|
96
|
+
|
97
|
+
|
31
98
|
## Development
|
32
99
|
|
33
100
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mj
|
4
|
+
module AlternativeFile
|
5
|
+
module Commands
|
6
|
+
class ListCommand
|
7
|
+
attr_reader :file
|
8
|
+
|
9
|
+
def initialize(file, options)
|
10
|
+
@file = CurrentFile.new(file.to_s)
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
def exists?
|
15
|
+
@options[:exists]
|
16
|
+
end
|
17
|
+
|
18
|
+
def types
|
19
|
+
@options[:types].to_s.split(",")
|
20
|
+
end
|
21
|
+
|
22
|
+
def debug?
|
23
|
+
@options[:debug]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mj
|
4
|
+
module AlternativeFile
|
5
|
+
module Commands
|
6
|
+
class ListCommandHandler
|
7
|
+
def initialize(resolvers:)
|
8
|
+
@resolvers = resolvers
|
9
|
+
end
|
10
|
+
|
11
|
+
# rubocop:disable Metrics/MethodLength
|
12
|
+
def handle(command)
|
13
|
+
candidates = @resolvers.resolve(command.file)
|
14
|
+
|
15
|
+
if command.types.any?
|
16
|
+
candidates = candidates.of_types(command.types)
|
17
|
+
end
|
18
|
+
|
19
|
+
if command.exists?
|
20
|
+
candidates = candidates.existing
|
21
|
+
end
|
22
|
+
|
23
|
+
unless command.debug?
|
24
|
+
candidates = candidates.unique
|
25
|
+
end
|
26
|
+
|
27
|
+
candidates.sorted_by_path
|
28
|
+
end
|
29
|
+
# rubocop:enable Metrics/MethodLength
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -19,6 +19,8 @@ module Mj
|
|
19
19
|
|
20
20
|
# lib files
|
21
21
|
add_candidate("lib/#{ruby_file.class_path}.rb", "lib", to: candidates)
|
22
|
+
add_candidate("spec/lib/#{ruby_file.class_path}_spec.rb", :spec, to: candidates)
|
23
|
+
add_candidate("test/lib/#{ruby_file.class_path}_test.rb", :minitest, to: candidates)
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -10,6 +10,8 @@ require_relative "resolvers/ruby/rails_resolver"
|
|
10
10
|
require_relative "resolvers/ruby/rails_controller_resolver"
|
11
11
|
require_relative "resolvers/ruby/view_component_resolver"
|
12
12
|
require_relative "resolvers/ruby/ruby_file"
|
13
|
+
require_relative "commands/list_command_handler"
|
14
|
+
require_relative "commands/list_command"
|
13
15
|
|
14
16
|
module Mj
|
15
17
|
module AlternativeFile
|
@@ -19,8 +21,10 @@ module Mj
|
|
19
21
|
option :exists, type: :boolean, banner: "files that exist", aliases: :e
|
20
22
|
option :debug, type: :boolean, banner: "print debug information", aliases: :d
|
21
23
|
def list(reference_file)
|
22
|
-
|
23
|
-
|
24
|
+
handler = Commands::ListCommandHandler.new(resolvers: self.class.resolvers)
|
25
|
+
command = Commands::ListCommand.new(reference_file, options)
|
26
|
+
candidates = handler.handle(command)
|
27
|
+
print_candidates(candidates)
|
24
28
|
end
|
25
29
|
|
26
30
|
desc "next <reference-file>", "Next alternative file"
|
@@ -28,8 +32,10 @@ module Mj
|
|
28
32
|
option :exists, type: :boolean, banner: "files that exist", aliases: :e
|
29
33
|
option :debug, type: :boolean, banner: "print debug information", aliases: :d
|
30
34
|
def next(reference_file)
|
31
|
-
|
32
|
-
|
35
|
+
handler = Commands::ListCommandHandler.new(resolvers: self.class.resolvers)
|
36
|
+
command = Commands::ListCommand.new(reference_file, options)
|
37
|
+
candidates = handler.handle(command)
|
38
|
+
candidate = candidates.after(command.file)
|
33
39
|
print_candidates([candidate].compact)
|
34
40
|
end
|
35
41
|
|
@@ -38,8 +44,10 @@ module Mj
|
|
38
44
|
option :exists, type: :boolean, banner: "files that exist", aliases: :e
|
39
45
|
option :debug, type: :boolean, banner: "print debug information", aliases: :d
|
40
46
|
def prev(reference_file)
|
41
|
-
|
42
|
-
|
47
|
+
handler = Commands::ListCommandHandler.new(resolvers: self.class.resolvers)
|
48
|
+
command = Commands::ListCommand.new(reference_file, options)
|
49
|
+
candidates = handler.handle(command)
|
50
|
+
candidate = candidates.before(command.file)
|
43
51
|
print_candidates([candidate].compact)
|
44
52
|
end
|
45
53
|
|
@@ -54,28 +62,8 @@ module Mj
|
|
54
62
|
private
|
55
63
|
|
56
64
|
def print_candidates(candidates)
|
57
|
-
$stdout.puts candidates.map { |i| i.to_s(debug: options[:debug]) }.join("
|
65
|
+
$stdout.puts candidates.map { |i| i.to_s(debug: options[:debug]) }.join("\n")
|
58
66
|
end
|
59
|
-
|
60
|
-
# rubocop:disable Metrics/MethodLength
|
61
|
-
def resolve(file)
|
62
|
-
candidates = self.class.resolvers.resolve(file)
|
63
|
-
|
64
|
-
if options[:types]
|
65
|
-
candidates = candidates.of_types(options[:types].to_s.split(","))
|
66
|
-
end
|
67
|
-
|
68
|
-
if options[:exists]
|
69
|
-
candidates = candidates.existing
|
70
|
-
end
|
71
|
-
|
72
|
-
unless options[:debug]
|
73
|
-
candidates = candidates.unique
|
74
|
-
end
|
75
|
-
|
76
|
-
candidates
|
77
|
-
end
|
78
|
-
# rubocop:enable Metrics/MethodLength
|
79
67
|
end
|
80
68
|
end
|
81
69
|
end
|
data/lib/mj/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Jacobus
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -47,6 +47,8 @@ files:
|
|
47
47
|
- lib/mj.rb
|
48
48
|
- lib/mj/alternative_file/candidate.rb
|
49
49
|
- lib/mj/alternative_file/candidates.rb
|
50
|
+
- lib/mj/alternative_file/commands/list_command.rb
|
51
|
+
- lib/mj/alternative_file/commands/list_command_handler.rb
|
50
52
|
- lib/mj/alternative_file/current_file.rb
|
51
53
|
- lib/mj/alternative_file/resolver.rb
|
52
54
|
- lib/mj/alternative_file/resolvers/base.rb
|