leftovers 0.8.0 → 0.9.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.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +7 -7
  4. data/docs/Configuration.md +141 -32
  5. data/docs/Custom-Precompilers.md +6 -0
  6. data/leftovers.gemspec +2 -1
  7. data/lib/config/actioncable.yml +36 -0
  8. data/lib/config/actionmailbox.yml +28 -0
  9. data/lib/config/actionmailer.yml +87 -11
  10. data/lib/config/actionpack.yml +130 -34
  11. data/lib/config/actiontext.yml +56 -0
  12. data/lib/config/actionview.yml +194 -44
  13. data/lib/config/activejob.yml +15 -8
  14. data/lib/config/activemodel.yml +175 -18
  15. data/lib/config/activerecord.yml +397 -86
  16. data/lib/config/activestorage.yml +26 -0
  17. data/lib/config/activesupport.yml +167 -24
  18. data/lib/config/leftovers.yml +48 -0
  19. data/lib/config/rails.yml +7 -3
  20. data/lib/config/railties.yml +7 -0
  21. data/lib/config/ruby.yml +438 -83
  22. data/lib/config/test-unit.yml +8 -0
  23. data/lib/leftovers/ast/array_node.rb +12 -0
  24. data/lib/leftovers/ast/block_node.rb +12 -0
  25. data/lib/leftovers/ast/builder.rb +24 -5
  26. data/lib/leftovers/ast/casgn_node.rb +20 -0
  27. data/lib/leftovers/ast/const_node.rb +15 -0
  28. data/lib/leftovers/ast/def_node.rb +15 -0
  29. data/lib/leftovers/ast/defs_node.rb +15 -0
  30. data/lib/leftovers/ast/false_node.rb +24 -0
  31. data/lib/leftovers/ast/has_arguments.rb +31 -0
  32. data/lib/leftovers/ast/hash_node.rb +17 -0
  33. data/lib/leftovers/ast/module_node.rb +16 -0
  34. data/lib/leftovers/ast/nil_node.rb +23 -0
  35. data/lib/leftovers/ast/node.rb +33 -90
  36. data/lib/leftovers/ast/numeric_node.rb +22 -0
  37. data/lib/leftovers/ast/send_node.rb +25 -0
  38. data/lib/leftovers/ast/str_node.rb +24 -0
  39. data/lib/leftovers/ast/sym_node.rb +25 -0
  40. data/lib/leftovers/ast/true_node.rb +24 -0
  41. data/lib/leftovers/ast/var_node.rb +14 -0
  42. data/lib/leftovers/ast/vasgn_node.rb +20 -0
  43. data/lib/leftovers/ast.rb +18 -0
  44. data/lib/leftovers/cli.rb +7 -1
  45. data/lib/leftovers/comparable_instance.rb +18 -0
  46. data/lib/leftovers/config_loader/argument_position_schema.rb +3 -1
  47. data/lib/leftovers/config_loader/array_schema.rb +53 -0
  48. data/lib/leftovers/config_loader/document_schema.rb +3 -2
  49. data/lib/leftovers/config_loader/dynamic_schema.rb +1 -0
  50. data/lib/leftovers/config_loader/has_value_schema.rb +4 -0
  51. data/lib/leftovers/config_loader/keyword_argument_schema.rb +13 -0
  52. data/lib/leftovers/config_loader/regexp_schema.rb +27 -0
  53. data/lib/leftovers/config_loader/rule_pattern_schema.rb +2 -0
  54. data/lib/leftovers/config_loader/scalar_value_schema.rb +8 -0
  55. data/lib/leftovers/config_loader/schema.rb +10 -0
  56. data/lib/leftovers/config_loader/string_enum_schema.rb +1 -1
  57. data/lib/leftovers/config_loader/string_pattern_schema.rb +1 -1
  58. data/lib/leftovers/config_loader/transform_schema.rb +12 -6
  59. data/lib/leftovers/config_loader/value_matcher_condition_schema.rb +13 -0
  60. data/lib/leftovers/config_loader/value_matcher_schema.rb +4 -1
  61. data/lib/leftovers/config_loader/value_or_array_schema.rb +2 -34
  62. data/lib/leftovers/config_loader/value_processor_schema.rb +2 -2
  63. data/lib/leftovers/config_loader.rb +11 -4
  64. data/lib/leftovers/definition_collection.rb +37 -0
  65. data/lib/leftovers/definition_node_set.rb +10 -2
  66. data/lib/leftovers/file.rb +1 -1
  67. data/lib/leftovers/file_collector/comments_processor.rb +1 -1
  68. data/lib/leftovers/file_collector/node_processor.rb +7 -7
  69. data/lib/leftovers/file_collector.rb +26 -32
  70. data/lib/leftovers/file_list.rb +3 -2
  71. data/lib/leftovers/matcher_builders/and.rb +26 -9
  72. data/lib/leftovers/matcher_builders/node.rb +32 -20
  73. data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +3 -1
  74. data/lib/leftovers/matcher_builders/node_pair_key.rb +16 -0
  75. data/lib/leftovers/matcher_builders/node_type.rb +9 -9
  76. data/lib/leftovers/matcher_builders/node_value.rb +23 -9
  77. data/lib/leftovers/matcher_builders/or.rb +22 -7
  78. data/lib/leftovers/matcher_builders/path.rb +3 -1
  79. data/lib/leftovers/matcher_builders.rb +1 -1
  80. data/lib/leftovers/matchers/all.rb +4 -0
  81. data/lib/leftovers/matchers/and.rb +4 -0
  82. data/lib/leftovers/matchers/any.rb +2 -0
  83. data/lib/leftovers/matchers/node_has_any_keyword_argument.rb +7 -4
  84. data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +5 -4
  85. data/lib/leftovers/matchers/node_has_positional_argument.rb +5 -1
  86. data/lib/leftovers/matchers/node_has_positional_argument_with_value.rb +6 -1
  87. data/lib/leftovers/matchers/node_has_receiver.rb +4 -0
  88. data/lib/leftovers/matchers/node_is_proc.rb +13 -0
  89. data/lib/leftovers/matchers/node_name.rb +9 -3
  90. data/lib/leftovers/matchers/node_pair_key.rb +23 -0
  91. data/lib/leftovers/matchers/node_pair_value.rb +7 -3
  92. data/lib/leftovers/matchers/node_path.rb +7 -3
  93. data/lib/leftovers/matchers/node_privacy.rb +7 -3
  94. data/lib/leftovers/matchers/node_scalar_value.rb +6 -1
  95. data/lib/leftovers/matchers/node_type.rb +7 -3
  96. data/lib/leftovers/matchers/not.rb +2 -0
  97. data/lib/leftovers/matchers/or.rb +2 -0
  98. data/lib/leftovers/matchers/path.rb +21 -0
  99. data/lib/leftovers/matchers.rb +3 -1
  100. data/lib/leftovers/merged_config.rb +26 -25
  101. data/lib/leftovers/parser.rb +7 -4
  102. data/lib/leftovers/precompilers.rb +5 -5
  103. data/lib/leftovers/processor_builders/action.rb +55 -37
  104. data/lib/leftovers/processor_builders/add_prefix.rb +18 -10
  105. data/lib/leftovers/processor_builders/add_suffix.rb +18 -10
  106. data/lib/leftovers/processor_builders/argument.rb +28 -11
  107. data/lib/leftovers/processor_builders/dynamic.rb +37 -31
  108. data/lib/leftovers/processor_builders/each.rb +82 -10
  109. data/lib/leftovers/processor_builders/itself.rb +2 -2
  110. data/lib/leftovers/processor_builders/keyword.rb +7 -6
  111. data/lib/leftovers/processor_builders/keyword_argument.rb +4 -2
  112. data/lib/leftovers/processor_builders/receiver.rb +13 -0
  113. data/lib/leftovers/processor_builders/transform.rb +55 -44
  114. data/lib/leftovers/processor_builders/transform_chain.rb +1 -1
  115. data/lib/leftovers/processor_builders/transform_set.rb +9 -29
  116. data/lib/leftovers/processor_builders/value.rb +4 -4
  117. data/lib/leftovers/processor_builders.rb +1 -3
  118. data/lib/leftovers/processors/add_call.rb +14 -0
  119. data/lib/leftovers/processors/add_definition_node.rb +16 -0
  120. data/lib/leftovers/processors/add_dynamic_prefix.rb +29 -0
  121. data/lib/leftovers/processors/add_dynamic_suffix.rb +29 -0
  122. data/lib/leftovers/{value_processors → processors}/add_prefix.rb +7 -3
  123. data/lib/leftovers/{value_processors → processors}/add_suffix.rb +7 -3
  124. data/lib/leftovers/processors/append_sym.rb +13 -0
  125. data/lib/leftovers/{value_processors → processors}/camelize.rb +7 -3
  126. data/lib/leftovers/{value_processors → processors}/capitalize.rb +7 -3
  127. data/lib/leftovers/{value_processors → processors}/deconstantize.rb +7 -3
  128. data/lib/leftovers/{value_processors → processors}/delete_after.rb +9 -5
  129. data/lib/leftovers/processors/delete_after_last.rb +26 -0
  130. data/lib/leftovers/processors/delete_before.rb +27 -0
  131. data/lib/leftovers/processors/delete_before_last.rb +27 -0
  132. data/lib/leftovers/{value_processors → processors}/delete_prefix.rb +7 -3
  133. data/lib/leftovers/{value_processors → processors}/delete_suffix.rb +7 -3
  134. data/lib/leftovers/{value_processors → processors}/demodulize.rb +7 -3
  135. data/lib/leftovers/{value_processors → processors}/downcase.rb +7 -3
  136. data/lib/leftovers/processors/each.rb +25 -0
  137. data/lib/leftovers/processors/each_for_definition_set.rb +33 -0
  138. data/lib/leftovers/processors/each_keyword.rb +29 -0
  139. data/lib/leftovers/processors/each_keyword_argument.rb +29 -0
  140. data/lib/leftovers/processors/each_positional_argument.rb +27 -0
  141. data/lib/leftovers/processors/each_positional_argument_from.rb +30 -0
  142. data/lib/leftovers/processors/eval.rb +16 -0
  143. data/lib/leftovers/processors/itself.rb +21 -0
  144. data/lib/leftovers/processors/keyword_argument.rb +30 -0
  145. data/lib/leftovers/processors/match_current_node.rb +26 -0
  146. data/lib/leftovers/processors/match_matched_node.rb +26 -0
  147. data/lib/leftovers/{value_processors → processors}/parameterize.rb +7 -3
  148. data/lib/leftovers/{value_processors → processors}/placeholder.rb +5 -4
  149. data/lib/leftovers/{value_processors → processors}/pluralize.rb +7 -3
  150. data/lib/leftovers/{value_processors → processors}/positional_argument.rb +8 -6
  151. data/lib/leftovers/processors/receiver.rb +24 -0
  152. data/lib/leftovers/{value_processors → processors}/replace_value.rb +7 -3
  153. data/lib/leftovers/processors/set_default_privacy.rb +21 -0
  154. data/lib/leftovers/processors/set_privacy.rb +23 -0
  155. data/lib/leftovers/{value_processors → processors}/singularize.rb +7 -3
  156. data/lib/leftovers/{value_processors → processors}/split.rb +8 -4
  157. data/lib/leftovers/{value_processors → processors}/swapcase.rb +7 -3
  158. data/lib/leftovers/{value_processors → processors}/titleize.rb +7 -3
  159. data/lib/leftovers/{value_processors → processors}/underscore.rb +7 -3
  160. data/lib/leftovers/{value_processors → processors}/upcase.rb +7 -3
  161. data/lib/leftovers/processors.rb +49 -0
  162. data/lib/leftovers/version.rb +1 -1
  163. data/lib/leftovers.rb +3 -12
  164. metadata +97 -52
  165. data/lib/leftovers/dynamic_processors/call.rb +0 -22
  166. data/lib/leftovers/dynamic_processors/call_definition.rb +0 -34
  167. data/lib/leftovers/dynamic_processors/definition.rb +0 -27
  168. data/lib/leftovers/dynamic_processors/each.rb +0 -19
  169. data/lib/leftovers/dynamic_processors/null.rb +0 -9
  170. data/lib/leftovers/dynamic_processors/set_default_privacy.rb +0 -18
  171. data/lib/leftovers/dynamic_processors/set_privacy.rb +0 -23
  172. data/lib/leftovers/dynamic_processors.rb +0 -13
  173. data/lib/leftovers/matcher_builders/node_pair_name.rb +0 -18
  174. data/lib/leftovers/matchers/predicate.rb +0 -19
  175. data/lib/leftovers/processor_builders/each_action.rb +0 -51
  176. data/lib/leftovers/processor_builders/each_dynamic.rb +0 -50
  177. data/lib/leftovers/processor_builders/each_for_definition_set.rb +0 -40
  178. data/lib/leftovers/value_processors/add_dynamic_prefix.rb +0 -24
  179. data/lib/leftovers/value_processors/add_dynamic_suffix.rb +0 -24
  180. data/lib/leftovers/value_processors/delete_before.rb +0 -22
  181. data/lib/leftovers/value_processors/each.rb +0 -21
  182. data/lib/leftovers/value_processors/each_for_definition_set.rb +0 -23
  183. data/lib/leftovers/value_processors/each_keyword.rb +0 -27
  184. data/lib/leftovers/value_processors/each_keyword_argument.rb +0 -27
  185. data/lib/leftovers/value_processors/each_positional_argument.rb +0 -25
  186. data/lib/leftovers/value_processors/itself.rb +0 -17
  187. data/lib/leftovers/value_processors/keyword.rb +0 -28
  188. data/lib/leftovers/value_processors/keyword_argument.rb +0 -28
  189. data/lib/leftovers/value_processors/return_definition_node.rb +0 -14
  190. data/lib/leftovers/value_processors/return_sym.rb +0 -14
  191. data/lib/leftovers/value_processors.rb +0 -40
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class EachKeywordArgument
6
+ include ComparableInstance
7
+
8
+ def initialize(then_processor)
9
+ @then_processor = then_processor
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(_str, current_node, matched_node, acc)
15
+ kwargs = current_node.kwargs
16
+ return unless kwargs
17
+
18
+ kwargs.children.each do |pair|
19
+ next unless pair.type == :pair
20
+
21
+ value_node = pair.second
22
+ @then_processor.process(value_node.to_literal_s, value_node, matched_node, acc)
23
+ end
24
+ end
25
+
26
+ freeze
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class EachPositionalArgument
6
+ include ComparableInstance
7
+
8
+ def initialize(then_processor)
9
+ @then_processor = then_processor
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(_str, current_node, matched_node, acc)
15
+ positional_arguments = current_node.positional_arguments
16
+
17
+ return unless positional_arguments
18
+
19
+ positional_arguments.each do |argument_node|
20
+ @then_processor.process(argument_node.to_literal_s, argument_node, matched_node, acc)
21
+ end
22
+ end
23
+
24
+ freeze
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class EachPositionalArgumentFrom
6
+ include ComparableInstance
7
+
8
+ def initialize(position, then_processor)
9
+ @position = position
10
+ @then_processor = then_processor
11
+
12
+ freeze
13
+ end
14
+
15
+ def process(_str, current_node, matched_node, acc)
16
+ positional_arguments = current_node.positional_arguments
17
+
18
+ return unless positional_arguments
19
+
20
+ positional_arguments.each_with_index do |argument_node, index|
21
+ next if index < @position
22
+
23
+ @then_processor.process(argument_node.to_literal_s, argument_node, matched_node, acc)
24
+ end
25
+ end
26
+
27
+ freeze
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,16 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ module Eval
6
+ def self.process(str, current_node, _matched_node, acc)
7
+ return unless str
8
+ return if str.empty?
9
+
10
+ acc.collect_subfile(str, current_node.loc.expression)
11
+ end
12
+
13
+ freeze
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class Itself
6
+ include ComparableInstance
7
+
8
+ def initialize(then_processor)
9
+ @then_processor = then_processor
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(_str, current_node, matched_node, acc)
15
+ @then_processor.process(current_node.to_s, current_node, matched_node, acc)
16
+ end
17
+
18
+ freeze
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class KeywordArgument
6
+ include ComparableInstance
7
+
8
+ def initialize(matcher, then_processor)
9
+ @matcher = matcher
10
+ @then_processor = then_processor
11
+
12
+ freeze
13
+ end
14
+
15
+ def process(_str, current_node, matched_node, acc)
16
+ kwargs = current_node.kwargs
17
+ return unless kwargs
18
+
19
+ kwargs.children.each do |pair|
20
+ next unless @matcher === pair
21
+
22
+ value_node = pair.second
23
+ @then_processor.process(value_node.to_literal_s, value_node, matched_node, acc)
24
+ end
25
+ end
26
+
27
+ freeze
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class MatchCurrentNode
6
+ include ComparableInstance
7
+
8
+ attr_reader :matcher, :then_processor
9
+
10
+ def initialize(matcher, then_processor)
11
+ @matcher = matcher
12
+ @then_processor = then_processor
13
+
14
+ freeze
15
+ end
16
+
17
+ def process(str, current_node, matched_node, acc)
18
+ return unless @matcher === current_node
19
+
20
+ @then_processor.process(str, current_node, matched_node, acc)
21
+ end
22
+
23
+ freeze
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class MatchMatchedNode
6
+ include ComparableInstance
7
+
8
+ attr_reader :matcher, :then_processor
9
+
10
+ def initialize(matcher, then_processor)
11
+ @matcher = matcher
12
+ @then_processor = then_processor
13
+
14
+ freeze
15
+ end
16
+
17
+ def process(str, current_node, matched_node, acc)
18
+ return unless @matcher === matched_node
19
+
20
+ @then_processor.process(str, current_node, matched_node, acc)
21
+ end
22
+
23
+ freeze
24
+ end
25
+ end
26
+ end
@@ -1,24 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Parameterize
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.parameterize, node, method_node)
17
+ @then_processor.process(str.parameterize, current_node, matched_node, acc)
16
18
  rescue NoMethodError
17
19
  Leftovers.error <<~MESSAGE
18
20
  Tried using the String#parameterize method, but the activesupport gem was not available and/or not required
19
21
  `gem install activesupport`, and/or add `requires: ['active_support', 'active_support/core_ext/string']` to your .leftovers.yml
20
22
  MESSAGE
21
23
  end
24
+
25
+ freeze
22
26
  end
23
27
  end
24
28
  end
@@ -1,8 +1,7 @@
1
1
  # frozen-string-literal: true
2
2
 
3
- # TODO: find a way for this to remove itself from the chain
4
3
  module Leftovers
5
- module ValueProcessors
4
+ module Processors
6
5
  class Placeholder
7
6
  def processor=(value)
8
7
  @processor = value
@@ -10,9 +9,11 @@ module Leftovers
10
9
  freeze
11
10
  end
12
11
 
13
- def process(str, node, method_node)
14
- @processor.process(str, node, method_node)
12
+ def process(str, current_node, matched_node, acc)
13
+ @processor.process(str, current_node, matched_node, acc)
15
14
  end
15
+
16
+ freeze
16
17
  end
17
18
  end
18
19
  end
@@ -1,24 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Pluralize
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.pluralize, node, method_node)
17
+ @then_processor.process(str.pluralize, current_node, matched_node, acc)
16
18
  rescue NoMethodError
17
19
  Leftovers.error <<~MESSAGE
18
20
  Tried using the String#pluralize method, but the activesupport gem was not available and/or not required
19
21
  `gem install activesupport`, and/or add `requires: ['active_support', 'active_support/core_ext/string']` to your .leftovers.yml
20
22
  MESSAGE
21
23
  end
24
+
25
+ freeze
22
26
  end
23
27
  end
24
28
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class PositionalArgument
6
+ include ComparableInstance
7
+
6
8
  def initialize(index, then_processor)
7
9
  @index = index
8
10
  @then_processor = then_processor
@@ -10,17 +12,17 @@ module Leftovers
10
12
  freeze
11
13
  end
12
14
 
13
- def process(_str, node, method_node)
14
- positional_arguments = node.positional_arguments
15
+ def process(_str, current_node, matched_node, acc)
16
+ positional_arguments = current_node.positional_arguments
15
17
  return unless positional_arguments
16
18
 
17
19
  argument_node = positional_arguments[@index]
18
20
  return unless argument_node
19
21
 
20
- str = argument_node.to_s if argument_node.string_or_symbol?
21
-
22
- @then_processor.process(str, argument_node, method_node)
22
+ @then_processor.process(argument_node.to_literal_s, argument_node, matched_node, acc)
23
23
  end
24
+
25
+ freeze
24
26
  end
25
27
  end
26
28
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class Receiver
6
+ include ComparableInstance
7
+
8
+ def initialize(then_processor)
9
+ @then_processor = then_processor
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(_str, current_node, matched_node, acc)
15
+ receiver = matched_node.receiver
16
+ return unless receiver
17
+
18
+ @then_processor.process(receiver.to_s, current_node, matched_node, acc)
19
+ end
20
+
21
+ freeze
22
+ end
23
+ end
24
+ end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class ReplaceValue
6
+ include ComparableInstance
7
+
6
8
  def initialize(value, then_processor)
7
9
  @value = value
8
10
  @then_processor = then_processor
@@ -10,9 +12,11 @@ module Leftovers
10
12
  freeze
11
13
  end
12
14
 
13
- def process(_str, node, method_node)
14
- @then_processor.process(@value, node, method_node)
15
+ def process(_str, current_node, matched_node, acc)
16
+ @then_processor.process(@value, current_node, matched_node, acc)
15
17
  end
18
+
19
+ freeze
16
20
  end
17
21
  end
18
22
  end
@@ -0,0 +1,21 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class SetDefaultPrivacy
6
+ include ComparableInstance
7
+
8
+ def initialize(to)
9
+ @to = to
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(_str, _current_node, _matched_node, acc)
15
+ acc.default_method_privacy = @to
16
+ end
17
+
18
+ freeze
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ class SetPrivacy
6
+ include ComparableInstance
7
+
8
+ def initialize(to)
9
+ @to = to
10
+
11
+ freeze
12
+ end
13
+
14
+ def process(str, _current_node, _matched_node, acc)
15
+ return unless str
16
+
17
+ acc.set_privacy(str.to_sym, @to)
18
+ end
19
+
20
+ freeze
21
+ end
22
+ end
23
+ end
@@ -1,24 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Singularize
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.singularize, node, method_node)
17
+ @then_processor.process(str.singularize, current_node, matched_node, acc)
16
18
  rescue NoMethodError
17
19
  Leftovers.error <<~MESSAGE
18
20
  Tried using the String#singularize method, but the activesupport gem was not available and/or not required
19
21
  `gem install activesupport`, and/or add `requires: ['active_support', 'active_support/core_ext/string']` to your .leftovers.yml
20
22
  MESSAGE
21
23
  end
24
+
25
+ freeze
22
26
  end
23
27
  end
24
28
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Split
6
+ include ComparableInstance
7
+
6
8
  def initialize(split_on, then_processor)
7
9
  @split_on = split_on
8
10
  @then_processor = then_processor
@@ -10,13 +12,15 @@ module Leftovers
10
12
  freeze
11
13
  end
12
14
 
13
- def process(str, node, method_node)
15
+ def process(str, current_node, matched_node, acc)
14
16
  return unless str
15
17
 
16
- Leftovers.map_or_self(str.split(@split_on)) do |sub_str|
17
- @then_processor.process(sub_str, node, method_node)
18
+ str.split(@split_on).each do |sub_str|
19
+ @then_processor.process(sub_str, current_node, matched_node, acc)
18
20
  end
19
21
  end
22
+
23
+ freeze
20
24
  end
21
25
  end
22
26
  end
@@ -1,19 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Swapcase
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.swapcase, node, method_node)
17
+ @then_processor.process(str.swapcase, current_node, matched_node, acc)
16
18
  end
19
+
20
+ freeze
17
21
  end
18
22
  end
19
23
  end
@@ -1,24 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Titleize
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.titleize, node, method_node)
17
+ @then_processor.process(str.titleize, current_node, matched_node, acc)
16
18
  rescue NoMethodError
17
19
  Leftovers.error <<~MESSAGE
18
20
  Tried using the String#titleize method, but the activesupport gem was not available and/or not required
19
21
  `gem install activesupport`, and/or add `requires: ['active_support', 'active_support/core_ext/string']` to your .leftovers.yml
20
22
  MESSAGE
21
23
  end
24
+
25
+ freeze
22
26
  end
23
27
  end
24
28
  end
@@ -1,24 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Underscore
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.underscore, node, method_node)
17
+ @then_processor.process(str.underscore, current_node, matched_node, acc)
16
18
  rescue NoMethodError
17
19
  Leftovers.error <<~MESSAGE
18
20
  Tried using the String#underscore method, but the activesupport gem was not available and/or not required
19
21
  `gem install activesupport`, and/or add `requires: ['active_support', 'active_support/core_ext/string']` to your .leftovers.yml
20
22
  MESSAGE
21
23
  end
24
+
25
+ freeze
22
26
  end
23
27
  end
24
28
  end
@@ -1,19 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- module ValueProcessors
4
+ module Processors
5
5
  class Upcase
6
+ include ComparableInstance
7
+
6
8
  def initialize(then_processor)
7
9
  @then_processor = then_processor
8
10
 
9
11
  freeze
10
12
  end
11
13
 
12
- def process(str, node, method_node)
14
+ def process(str, current_node, matched_node, acc)
13
15
  return unless str
14
16
 
15
- @then_processor.process(str.upcase, node, method_node)
17
+ @then_processor.process(str.upcase, current_node, matched_node, acc)
16
18
  end
19
+
20
+ freeze
17
21
  end
18
22
  end
19
23
  end
@@ -0,0 +1,49 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module Processors
5
+ autoload(:AddCall, "#{__dir__}/processors/add_call")
6
+ autoload(:AddDefinitionNode, "#{__dir__}/processors/add_definition_node")
7
+ autoload(:AddDynamicPrefix, "#{__dir__}/processors/add_dynamic_prefix")
8
+ autoload(:AddDynamicSuffix, "#{__dir__}/processors/add_dynamic_suffix")
9
+ autoload(:AddPrefix, "#{__dir__}/processors/add_prefix")
10
+ autoload(:AddSuffix, "#{__dir__}/processors/add_suffix")
11
+ autoload(:AppendSym, "#{__dir__}/processors/append_sym")
12
+ autoload(:Camelize, "#{__dir__}/processors/camelize")
13
+ autoload(:Capitalize, "#{__dir__}/processors/capitalize")
14
+ autoload(:Deconstantize, "#{__dir__}/processors/deconstantize")
15
+ autoload(:DeleteAfter, "#{__dir__}/processors/delete_after")
16
+ autoload(:DeleteAfterLast, "#{__dir__}/processors/delete_after_last")
17
+ autoload(:DeleteBefore, "#{__dir__}/processors/delete_before")
18
+ autoload(:DeleteBeforeLast, "#{__dir__}/processors/delete_before_last")
19
+ autoload(:DeletePrefix, "#{__dir__}/processors/delete_prefix")
20
+ autoload(:DeleteSuffix, "#{__dir__}/processors/delete_suffix")
21
+ autoload(:Demodulize, "#{__dir__}/processors/demodulize")
22
+ autoload(:Downcase, "#{__dir__}/processors/downcase")
23
+ autoload(:Each, "#{__dir__}/processors/each")
24
+ autoload(:EachForDefinitionSet, "#{__dir__}/processors/each_for_definition_set")
25
+ autoload(:EachKeyword, "#{__dir__}/processors/each_keyword")
26
+ autoload(:EachKeywordArgument, "#{__dir__}/processors/each_keyword_argument")
27
+ autoload(:EachPositionalArgument, "#{__dir__}/processors/each_positional_argument")
28
+ autoload(:EachPositionalArgumentFrom, "#{__dir__}/processors/each_positional_argument_from")
29
+ autoload(:Eval, "#{__dir__}/processors/eval")
30
+ autoload(:Itself, "#{__dir__}/processors/itself")
31
+ autoload(:KeywordArgument, "#{__dir__}/processors/keyword_argument")
32
+ autoload(:MatchCurrentNode, "#{__dir__}/processors/match_current_node")
33
+ autoload(:MatchMatchedNode, "#{__dir__}/processors/match_matched_node")
34
+ autoload(:Parameterize, "#{__dir__}/processors/parameterize")
35
+ autoload(:Placeholder, "#{__dir__}/processors/placeholder")
36
+ autoload(:Pluralize, "#{__dir__}/processors/pluralize")
37
+ autoload(:PositionalArgument, "#{__dir__}/processors/positional_argument")
38
+ autoload(:Receiver, "#{__dir__}/processors/receiver")
39
+ autoload(:ReplaceValue, "#{__dir__}/processors/replace_value")
40
+ autoload(:SetDefaultPrivacy, "#{__dir__}/processors/set_default_privacy")
41
+ autoload(:SetPrivacy, "#{__dir__}/processors/set_privacy")
42
+ autoload(:Singularize, "#{__dir__}/processors/singularize")
43
+ autoload(:Split, "#{__dir__}/processors/split")
44
+ autoload(:Swapcase, "#{__dir__}/processors/swapcase")
45
+ autoload(:Titleize, "#{__dir__}/processors/titleize")
46
+ autoload(:Underscore, "#{__dir__}/processors/underscore")
47
+ autoload(:Upcase, "#{__dir__}/processors/upcase")
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Leftovers
4
- VERSION = '0.8.0'
4
+ VERSION = '0.9.0'
5
5
  end