mj 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69dc7451d088acc2d1a698e89db77361de5cdf2bb07bb137b8e63ddc224f6fc2
4
- data.tar.gz: 7f1ac63a2d0b9e44845242bbf77f1154a0f14da3ba2a2a361b9dc90015a67904
3
+ metadata.gz: a69d697244fdee8394820682a99fdc199ec5b1b912c2d573f4b181c541100dc3
4
+ data.tar.gz: 7ac9b8f07c95ce5af439ddbfb18cb8d0385a1e1a3815188a5016757cfac978d6
5
5
  SHA512:
6
- metadata.gz: 34c4108ff9d1bb29b9efa6051c5bf7399ac93fa7bb543cb3fcddfbbeabbd7be27fc19c8b66e088a56be329fd1291893c5a768699e74aaaa4d0c16ccdf4a9ac66
7
- data.tar.gz: cc60732174983f0616a47a7735ab34229234676fea0a6e472adc639bfad107823c95b0f3498e2246ec7dccb2a3e40d23a290fd430ec417db5e98f3e7e0c6482f
6
+ metadata.gz: 19af4785f9f6441ca64ac8b721ef45db5e4b4ddff476f077b1f8430711ecad83070e643a102dd867e0d66bd7c6b9d1eb6510d37f5b58e1dbb92531b33e4025f8
7
+ data.tar.gz: fade8044f50496e2e2cf1a6d804e39fe69ae94b518faf733d489a3e17e2a48ba4af99dba3011ec647d0c3ea4d86498810f787d9d07ab5d47082636ab9c858d56
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mj (0.4.0)
4
+ mj (0.5.0)
5
5
  thor (~> 1.2.1)
6
6
 
7
7
  GEM
@@ -41,6 +41,10 @@ module Mj
41
41
  next_file(@items.reverse, reference_file)
42
42
  end
43
43
 
44
+ def sorted_by_path
45
+ new(@items.sort_by(&:path))
46
+ end
47
+
44
48
  private
45
49
 
46
50
  def new(*args)
@@ -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
@@ -8,11 +8,16 @@ module Mj
8
8
  private
9
9
 
10
10
  def apply_to?(file)
11
- file.end_with?("component.rb", "component.html.erb")
11
+ file.end_with?(
12
+ "component.rb",
13
+ "component.html.erb",
14
+ "component_test.rb",
15
+ "component_spec.rb"
16
+ )
12
17
  end
13
18
 
14
19
  def add_candidates(file, candidates)
15
- if file.end_with?("component.rb")
20
+ if file.extension == "rb"
16
21
  return resolve_template(file, candidates)
17
22
  end
18
23
 
@@ -20,8 +25,9 @@ module Mj
20
25
  end
21
26
 
22
27
  def resolve_template(file, candidates)
23
- file_name = file.sub(/_component.rb$/, "_component.html.erb")
24
- add_candidate(file_name, "component_template", to: candidates)
28
+ file = file.sub(/_component(_test|_spec)?.rb$/, "_component.html.erb")
29
+ file = file.sub(/^(spec|test)/, "app")
30
+ add_candidate(file, "component_template", to: candidates)
25
31
  end
26
32
 
27
33
  def resolve_component_class(file, candidates)
@@ -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
- file = CurrentFile.new(reference_file)
23
- print_candidates(resolve(file))
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
- file = CurrentFile.new(reference_file)
32
- candidate = resolve(file).after(file)
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
- file = CurrentFile.new(reference_file)
42
- candidate = resolve(file).before(file)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mj
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Jacobus
@@ -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