mj 0.5.0 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a69d697244fdee8394820682a99fdc199ec5b1b912c2d573f4b181c541100dc3
4
- data.tar.gz: 7ac9b8f07c95ce5af439ddbfb18cb8d0385a1e1a3815188a5016757cfac978d6
3
+ metadata.gz: 683483a53bb0ecac42edc0a0f5f51e8cb14a2cd47af192caddfaf5b8317cdfd8
4
+ data.tar.gz: eff84fc6a46cb4a000340ba32cadd1ab9edf84bdbb3c8b2d0745fe935ed8c025
5
5
  SHA512:
6
- metadata.gz: 19af4785f9f6441ca64ac8b721ef45db5e4b4ddff476f077b1f8430711ecad83070e643a102dd867e0d66bd7c6b9d1eb6510d37f5b58e1dbb92531b33e4025f8
7
- data.tar.gz: fade8044f50496e2e2cf1a6d804e39fe69ae94b518faf733d489a3e17e2a48ba4af99dba3011ec647d0c3ea4d86498810f787d9d07ab5d47082636ab9c858d56
6
+ metadata.gz: c4e1b4dd41ebec30aabbc7ed605a9b0b0407a2803305e41f52c07a3e326b4111b186d07de57aba6d15843aa211f6a4c630fd591dd015c1a1e8d2577aee0a7540
7
+ data.tar.gz: 93afecccc6e7ab89277acb49a444936bf37ffa2c54409556beeb107ac67f9d35c1e149ec6a0d026dbb4e844ce4278c69d21cb948ab565436118fae4b7305a4fd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mj (0.5.0)
4
+ mj (0.5.3)
5
5
  thor (~> 1.2.1)
6
6
 
7
7
  GEM
@@ -78,4 +78,4 @@ DEPENDENCIES
78
78
  simplecov-lcov
79
79
 
80
80
  BUNDLED WITH
81
- 2.3.6
81
+ 2.3.16
data/README.md CHANGED
@@ -25,9 +25,76 @@ Or install it yourself as:
25
25
  ## Usage
26
26
 
27
27
  ```bash
28
- mj --help
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.
@@ -4,6 +4,7 @@ module Mj
4
4
  module AlternativeFile
5
5
  module Resolvers
6
6
  module Ruby
7
+ # rubocop:disable Metrics/MethodLength
7
8
  class RailsControllerResolver < Resolvers::Base
8
9
  private
9
10
 
@@ -13,7 +14,11 @@ module Mj
13
14
  "spec/integration",
14
15
  "test/integration",
15
16
  "test/controllers",
16
- "spec/controllers"
17
+ "spec/controllers",
18
+ "spec/requests",
19
+ "test/requests",
20
+ "spec/system",
21
+ "test/system"
17
22
  )
18
23
  end
19
24
 
@@ -23,27 +28,53 @@ module Mj
23
28
  add_controller_test(file, candidates, "test")
24
29
  add_integration_test(file, candidates, "spec")
25
30
  add_integration_test(file, candidates, "test")
31
+ add_request_test(file, candidates, "spec")
32
+ add_request_test(file, candidates, "test")
33
+ add_system_test(file, candidates, "spec")
34
+ add_system_test(file, candidates, "test")
26
35
  return
27
36
  end
28
37
 
29
38
  resolve_controller(file, candidates)
30
39
  end
40
+ # rubocop:enable Metrics/MethodLength
31
41
 
32
42
  def add_integration_test(file, candidates, type)
33
43
  path = file.without_prefix("app/controllers").without_suffix(".rb").trim_slashes
34
44
  add_candidate("#{type}/integration/#{path}_#{type}.rb", "integration_#{type}", to: candidates)
35
45
  end
36
46
 
47
+ def add_request_test(file, candidates, type)
48
+ path = file.without_prefix("app/controllers").sub("_controller", "").without_suffix(".rb").trim_slashes
49
+ add_candidate("#{type}/requests/#{path}_#{type}.rb", "request_#{type}", to: candidates)
50
+ end
51
+
52
+ def add_system_test(file, candidates, type)
53
+ path = file.without_prefix("app/controllers").sub("_controller", "").without_suffix(".rb").trim_slashes
54
+ add_candidate("#{type}/system/#{path}_#{type}.rb", "system_#{type}", to: candidates)
55
+ end
56
+
37
57
  def add_controller_test(file, candidates, type)
38
58
  path = file.without_prefix("app/controllers").without_suffix(".rb").trim_slashes
39
59
  add_candidate("#{type}/controllers/#{path}_#{type}.rb", "controller_#{type}", to: candidates)
40
60
  end
41
61
 
62
+ # rubocop:disable Metrics/MethodLength
42
63
  def resolve_controller(file, candidates)
64
+ # requests|system tests don't usually have "request_{type}.rb" suffix
65
+ if file.start_with?(%r{(test|spec)/(system|request)})
66
+ file = file.sub("_spec.rb", "_controller_spec.rb")
67
+ .sub("_test.rb", "_controller_test.rb")
68
+ end
69
+
43
70
  controller_path = file.sub("test/integration", "app/controllers")
44
71
  .sub("spec/integration", "app/controllers")
45
72
  .sub("spec/controllers", "app/controllers")
46
73
  .sub("test/controllers", "app/controllers")
74
+ .sub("test/requests", "app/controllers")
75
+ .sub("test/system", "app/controllers")
76
+ .sub("spec/requests", "app/controllers")
77
+ .sub("spec/system", "app/controllers")
47
78
  .sub("_spec.rb", ".rb")
48
79
  .sub("_test.rb", ".rb")
49
80
  .to_s
@@ -51,6 +82,7 @@ module Mj
51
82
  add_candidate(controller_path, "controller", to: candidates)
52
83
  end
53
84
  end
85
+ # rubocop:enable Metrics/MethodLength
54
86
  end
55
87
  end
56
88
  end
@@ -19,6 +19,9 @@ module Mj
19
19
 
20
20
  # lib files
21
21
  add_candidate("lib/#{ruby_file.class_path}.rb", "lib", to: candidates)
22
+ add_candidate("#{ruby_file.class_path}.rb", "lib", to: candidates)
23
+ add_candidate("spec/lib/#{ruby_file.class_path}_spec.rb", :spec, to: candidates)
24
+ add_candidate("test/lib/#{ruby_file.class_path}_test.rb", :minitest, to: candidates)
22
25
  end
23
26
  end
24
27
  end
@@ -7,9 +7,10 @@ module Mj
7
7
  class RubyFile < AlternativeFile::CurrentFile
8
8
  def class_path
9
9
  path_without_extension
10
+ .without_prefix("spec")
11
+ .without_prefix("test")
10
12
  .without_prefix("app")
11
13
  .without_prefix("lib")
12
- .without_prefix("spec")
13
14
  .without_suffix("_spec")
14
15
  .without_suffix("_test")
15
16
  .trim_slashes
data/lib/mj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mj
4
- VERSION = "0.5.0"
4
+ VERSION = "0.5.3"
5
5
  end
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.5.0
4
+ version: 0.5.3
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-14 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  - !ruby/object:Gem::Version
86
86
  version: '0'
87
87
  requirements: []
88
- rubygems_version: 3.2.22
88
+ rubygems_version: 3.2.33
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: My personal CLI