leftovers 0.3.0 → 0.4.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 (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/README.md +28 -45
  4. data/docs/Configuration.md +598 -0
  5. data/exe/leftovers +1 -1
  6. data/leftovers.gemspec +9 -6
  7. data/lib/config/attr_encrypted.yml +3 -4
  8. data/lib/config/audited.yml +9 -4
  9. data/lib/config/datagrid.yml +1 -1
  10. data/lib/config/flipper.yml +1 -3
  11. data/lib/config/graphql.yml +15 -13
  12. data/lib/config/okcomputer.yml +1 -3
  13. data/lib/config/parser.yml +89 -91
  14. data/lib/config/rails.yml +125 -107
  15. data/lib/config/redcarpet.yml +35 -38
  16. data/lib/config/rollbar.yml +1 -3
  17. data/lib/config/rspec.yml +18 -10
  18. data/lib/config/ruby.yml +40 -50
  19. data/lib/config/selenium-webdriver.yml +19 -21
  20. data/lib/config/sidekiq.yml +4 -8
  21. data/lib/config/will_paginate.yml +12 -14
  22. data/lib/leftovers.rb +38 -26
  23. data/lib/leftovers/ast.rb +8 -0
  24. data/lib/leftovers/ast/builder.rb +4 -4
  25. data/lib/leftovers/ast/node.rb +50 -77
  26. data/lib/leftovers/backports.rb +27 -23
  27. data/lib/leftovers/cli.rb +0 -3
  28. data/lib/leftovers/collector.rb +4 -8
  29. data/lib/leftovers/config.rb +19 -25
  30. data/lib/leftovers/config_validator.rb +60 -0
  31. data/lib/leftovers/config_validator/error_processor.rb +196 -0
  32. data/lib/leftovers/config_validator/schema_hash.rb +495 -0
  33. data/lib/leftovers/definition.rb +11 -36
  34. data/lib/leftovers/definition_set.rb +7 -17
  35. data/lib/leftovers/dynamic_processors.rb +11 -0
  36. data/lib/leftovers/dynamic_processors/call.rb +25 -0
  37. data/lib/leftovers/dynamic_processors/call_definition.rb +31 -0
  38. data/lib/leftovers/dynamic_processors/definition.rb +26 -0
  39. data/lib/leftovers/dynamic_processors/each.rb +19 -0
  40. data/lib/leftovers/dynamic_processors/null.rb +9 -0
  41. data/lib/leftovers/erb.rb +2 -2
  42. data/lib/leftovers/file.rb +3 -5
  43. data/lib/leftovers/file_collector.rb +65 -49
  44. data/lib/leftovers/file_list.rb +0 -1
  45. data/lib/leftovers/haml.rb +1 -1
  46. data/lib/leftovers/matcher_builders.rb +24 -0
  47. data/lib/leftovers/matcher_builders/and.rb +19 -0
  48. data/lib/leftovers/matcher_builders/and_not.rb +14 -0
  49. data/lib/leftovers/matcher_builders/argument_node_value.rb +21 -0
  50. data/lib/leftovers/matcher_builders/name.rb +29 -0
  51. data/lib/leftovers/matcher_builders/node.rb +40 -0
  52. data/lib/leftovers/matcher_builders/node_has_argument.rb +71 -0
  53. data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +22 -0
  54. data/lib/leftovers/matcher_builders/node_has_positional_argument.rb +24 -0
  55. data/lib/leftovers/matcher_builders/node_name.rb +15 -0
  56. data/lib/leftovers/matcher_builders/node_pair_name.rb +18 -0
  57. data/lib/leftovers/matcher_builders/node_pair_value.rb +16 -0
  58. data/lib/leftovers/matcher_builders/node_path.rb +14 -0
  59. data/lib/leftovers/matcher_builders/node_type.rb +28 -0
  60. data/lib/leftovers/matcher_builders/or.rb +73 -0
  61. data/lib/leftovers/matcher_builders/path.rb +15 -0
  62. data/lib/leftovers/matcher_builders/string.rb +11 -0
  63. data/lib/leftovers/matcher_builders/string_pattern.rb +19 -0
  64. data/lib/leftovers/matcher_builders/unless.rb +13 -0
  65. data/lib/leftovers/matchers.rb +26 -0
  66. data/lib/leftovers/matchers/all.rb +25 -0
  67. data/lib/leftovers/matchers/and.rb +24 -0
  68. data/lib/leftovers/matchers/any.rb +27 -0
  69. data/lib/leftovers/matchers/node_has_any_keyword_argument.rb +28 -0
  70. data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +25 -0
  71. data/lib/leftovers/matchers/node_has_positional_argument.rb +23 -0
  72. data/lib/leftovers/matchers/node_has_positional_argument_with_value.rb +25 -0
  73. data/lib/leftovers/matchers/node_name.rb +23 -0
  74. data/lib/leftovers/matchers/node_pair_value.rb +23 -0
  75. data/lib/leftovers/matchers/node_path.rb +23 -0
  76. data/lib/leftovers/matchers/node_scalar_value.rb +25 -0
  77. data/lib/leftovers/matchers/node_type.rb +23 -0
  78. data/lib/leftovers/matchers/not.rb +23 -0
  79. data/lib/leftovers/matchers/or.rb +26 -0
  80. data/lib/leftovers/merged_config.rb +13 -8
  81. data/lib/leftovers/parser.rb +1 -4
  82. data/lib/leftovers/processor_builders.rb +22 -0
  83. data/lib/leftovers/processor_builders/action.rb +63 -0
  84. data/lib/leftovers/processor_builders/add_prefix.rb +20 -0
  85. data/lib/leftovers/processor_builders/add_suffix.rb +20 -0
  86. data/lib/leftovers/processor_builders/argument.rb +25 -0
  87. data/lib/leftovers/processor_builders/dynamic.rb +27 -0
  88. data/lib/leftovers/processor_builders/each.rb +36 -0
  89. data/lib/leftovers/processor_builders/each_action.rb +51 -0
  90. data/lib/leftovers/processor_builders/each_dynamic.rb +54 -0
  91. data/lib/leftovers/processor_builders/each_for_definition_set.rb +36 -0
  92. data/lib/leftovers/processor_builders/itself.rb +13 -0
  93. data/lib/leftovers/processor_builders/keyword.rb +24 -0
  94. data/lib/leftovers/processor_builders/keyword_argument.rb +14 -0
  95. data/lib/leftovers/processor_builders/transform.rb +55 -0
  96. data/lib/leftovers/processor_builders/transform_chain.rb +24 -0
  97. data/lib/leftovers/processor_builders/transform_set.rb +47 -0
  98. data/lib/leftovers/processor_builders/value.rb +13 -0
  99. data/lib/leftovers/rake_task.rb +1 -1
  100. data/lib/leftovers/reporter.rb +1 -1
  101. data/lib/leftovers/value_processors.rb +40 -0
  102. data/lib/leftovers/value_processors/add_dynamic_prefix.rb +31 -0
  103. data/lib/leftovers/value_processors/add_dynamic_suffix.rb +31 -0
  104. data/lib/leftovers/value_processors/add_prefix.rb +20 -0
  105. data/lib/leftovers/value_processors/add_suffix.rb +20 -0
  106. data/lib/leftovers/value_processors/camelize.rb +24 -0
  107. data/lib/leftovers/value_processors/capitalize.rb +19 -0
  108. data/lib/leftovers/value_processors/deconstantize.rb +24 -0
  109. data/lib/leftovers/value_processors/delete_after.rb +22 -0
  110. data/lib/leftovers/value_processors/delete_before.rb +22 -0
  111. data/lib/leftovers/value_processors/delete_prefix.rb +26 -0
  112. data/lib/leftovers/value_processors/delete_suffix.rb +26 -0
  113. data/lib/leftovers/value_processors/demodulize.rb +24 -0
  114. data/lib/leftovers/value_processors/downcase.rb +19 -0
  115. data/lib/leftovers/value_processors/each.rb +21 -0
  116. data/lib/leftovers/value_processors/each_for_definition_set.rb +33 -0
  117. data/lib/leftovers/value_processors/each_keyword.rb +27 -0
  118. data/lib/leftovers/value_processors/each_keyword_argument.rb +27 -0
  119. data/lib/leftovers/value_processors/each_positional_argument.rb +24 -0
  120. data/lib/leftovers/value_processors/itself.rb +17 -0
  121. data/lib/leftovers/value_processors/keyword.rb +36 -0
  122. data/lib/leftovers/value_processors/keyword_argument.rb +36 -0
  123. data/lib/leftovers/value_processors/parameterize.rb +24 -0
  124. data/lib/leftovers/value_processors/placeholder.rb +18 -0
  125. data/lib/leftovers/value_processors/pluralize.rb +24 -0
  126. data/lib/leftovers/value_processors/positional_argument.rb +26 -0
  127. data/lib/leftovers/value_processors/replace_value.rb +18 -0
  128. data/lib/leftovers/value_processors/return_definition.rb +24 -0
  129. data/lib/leftovers/value_processors/return_string.rb +14 -0
  130. data/lib/leftovers/value_processors/singularize.rb +24 -0
  131. data/lib/leftovers/value_processors/split.rb +22 -0
  132. data/lib/leftovers/value_processors/swapcase.rb +19 -0
  133. data/lib/leftovers/value_processors/titleize.rb +24 -0
  134. data/lib/leftovers/value_processors/underscore.rb +24 -0
  135. data/lib/leftovers/value_processors/upcase.rb +19 -0
  136. data/lib/leftovers/version.rb +1 -1
  137. metadata +143 -24
  138. data/lib/leftovers/argument_rule.rb +0 -229
  139. data/lib/leftovers/core_ext.rb +0 -15
  140. data/lib/leftovers/hash_rule.rb +0 -42
  141. data/lib/leftovers/name_rule.rb +0 -98
  142. data/lib/leftovers/rule.rb +0 -82
  143. data/lib/leftovers/transform_rule.rb +0 -169
  144. data/lib/leftovers/value_rule.rb +0 -57
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module Itself
6
+ def self.build(value, then_processor)
7
+ return unless value && then_processor
8
+
9
+ ::Leftovers::ValueProcessors::Itself.new(then_processor)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module Keyword
6
+ def self.build(value, then_processor) # rubocop:disable Metrics/MethodLength
7
+ return unless value && then_processor
8
+
9
+ case value
10
+ when true, '**'
11
+ ::Leftovers::ValueProcessors::EachKeyword.new(then_processor)
12
+ when ::String, ::Hash, ::Array
13
+ ::Leftovers::ValueProcessors::Keyword.new(
14
+ ::Leftovers::MatcherBuilders::NodePairName.build(value),
15
+ then_processor
16
+ )
17
+ # :nocov:
18
+ else raise
19
+ # :nocov:
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module KeywordArgument
6
+ def self.build(pattern, then_processor)
7
+ ::Leftovers::ValueProcessors::KeywordArgument.new(
8
+ ::Leftovers::MatcherBuilders::NodePairName.build(pattern),
9
+ then_processor
10
+ )
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,55 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module Transform
6
+ def self.build(transform, argument, then_processor) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize
7
+ case transform.to_s
8
+ when 'original', nil
9
+ then_processor
10
+ when 'downcase'
11
+ ::Leftovers::ValueProcessors::Downcase.new(then_processor)
12
+ when 'upcase'
13
+ ::Leftovers::ValueProcessors::Upcase.new(then_processor)
14
+ when 'capitalize'
15
+ ::Leftovers::ValueProcessors::Capitalize.new(then_processor)
16
+ when 'swapcase'
17
+ ::Leftovers::ValueProcessors::Swapcase.new(then_processor)
18
+ when 'pluralize'
19
+ ::Leftovers::ValueProcessors::Pluralize.new(then_processor)
20
+ when 'singularize'
21
+ ::Leftovers::ValueProcessors::Singularize.new(then_processor)
22
+ when 'camelize', 'camelcase'
23
+ ::Leftovers::ValueProcessors::Camelize.new(then_processor)
24
+ when 'titleize', 'titlecase'
25
+ ::Leftovers::ValueProcessors::Titleize.new(then_processor)
26
+ when 'demodulize'
27
+ ::Leftovers::ValueProcessors::Demodulize.new(then_processor)
28
+ when 'deconstantize'
29
+ ::Leftovers::ValueProcessors::Deconstantize.new(then_processor)
30
+ when 'parameterize'
31
+ ::Leftovers::ValueProcessors::Parameterize.new(then_processor)
32
+ when 'underscore'
33
+ ::Leftovers::ValueProcessors::Underscore.new(then_processor)
34
+ when 'split'
35
+ ::Leftovers::ValueProcessors::Split.new(argument, then_processor)
36
+ when 'delete_before'
37
+ ::Leftovers::ValueProcessors::DeleteBefore.new(argument, then_processor)
38
+ when 'delete_after'
39
+ ::Leftovers::ValueProcessors::DeleteAfter.new(argument, then_processor)
40
+ when 'add_prefix'
41
+ ::Leftovers::ProcessorBuilders::AddPrefix.build(argument, then_processor)
42
+ when 'add_suffix'
43
+ ::Leftovers::ProcessorBuilders::AddSuffix.build(argument, then_processor)
44
+ when 'delete_prefix'
45
+ ::Leftovers::ValueProcessors::DeletePrefix.new(argument, then_processor)
46
+ when 'delete_suffix'
47
+ ::Leftovers::ValueProcessors::DeleteSuffix.new(argument, then_processor)
48
+ # :nocov:
49
+ else raise
50
+ # :nocov:
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,24 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module TransformChain
6
+ def self.build(transforms, next_transform) # rubocop:disable Metrics/MethodLength
7
+ case transforms
8
+ when ::Hash
9
+ transforms.reverse_each do |(transform, transform_arg)|
10
+ next_transform = ::Leftovers::ProcessorBuilders::Transform.build(
11
+ transform, transform_arg, next_transform
12
+ )
13
+ end
14
+ next_transform
15
+ when ::String
16
+ ::Leftovers::ProcessorBuilders::Transform.build(transforms, true, next_transform)
17
+ # :nocov:
18
+ else raise
19
+ # :nocov:
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module TransformSet
6
+ def self.build(transforms, action)
7
+ each_builder(action).each_or_self(transforms) do |transform|
8
+ case transform
9
+ when ::Hash
10
+ next build(transform[:transforms], action) if transform[:transforms]
11
+
12
+ ::Leftovers::ProcessorBuilders::TransformChain.build(transform, build_final(action))
13
+ when ::String
14
+ ::Leftovers::ProcessorBuilders::TransformChain.build(transform, build_final(action))
15
+ # :nocov:
16
+ else raise
17
+ # :nocov:
18
+ end
19
+ end
20
+ end
21
+
22
+ def self.each_builder(action)
23
+ case action
24
+ when :call
25
+ ::Leftovers::ProcessorBuilders::Each
26
+ when :define
27
+ ::Leftovers::ProcessorBuilders::EachForDefinitionSet
28
+ # :nocov:
29
+ else raise
30
+ # :nocov:
31
+ end
32
+ end
33
+
34
+ def self.build_final(action)
35
+ case action
36
+ when :call
37
+ ::Leftovers::ValueProcessors::ReturnString
38
+ when :define
39
+ ::Leftovers::ValueProcessors::ReturnDefinition
40
+ # :nocov:
41
+ else raise
42
+ # :nocov:
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ProcessorBuilders
5
+ module Value
6
+ def self.build(value, then_processor)
7
+ return unless value && then_processor
8
+
9
+ ::Leftovers::ValueProcessors::ReplaceValue.new(value, then_processor)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rake'
4
4
  require 'shellwords'
5
- require_relative 'cli'
5
+ require_relative '../leftovers'
6
6
 
7
7
  module Leftovers
8
8
  class RakeTask
@@ -4,7 +4,7 @@ module Leftovers
4
4
  class Reporter
5
5
  def call(definition)
6
6
  Leftovers.puts(
7
- "\e[36m#{definition.full_location}\e[0m #{definition} \e[2m#{definition.highlighted_source("\e[33m", "\e[0;2m")}\e[0m" # rubocop:disable Layout/LineLength
7
+ "\e[36m#{definition.location_s}\e[0m #{definition} \e[2m#{definition.highlighted_source("\e[33m", "\e[0;2m")}\e[0m" # rubocop:disable Layout/LineLength
8
8
  )
9
9
  end
10
10
  end
@@ -0,0 +1,40 @@
1
+ # frozen-string-literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ autoload(:AddDynamicPrefix, "#{__dir__}/value_processors/add_dynamic_prefix")
6
+ autoload(:AddDynamicSuffix, "#{__dir__}/value_processors/add_dynamic_suffix")
7
+ autoload(:AddPrefix, "#{__dir__}/value_processors/add_prefix")
8
+ autoload(:AddSuffix, "#{__dir__}/value_processors/add_suffix")
9
+ autoload(:Camelize, "#{__dir__}/value_processors/camelize")
10
+ autoload(:Capitalize, "#{__dir__}/value_processors/capitalize")
11
+ autoload(:Deconstantize, "#{__dir__}/value_processors/deconstantize")
12
+ autoload(:DeleteAfter, "#{__dir__}/value_processors/delete_after")
13
+ autoload(:DeleteBefore, "#{__dir__}/value_processors/delete_before")
14
+ autoload(:DeletePrefix, "#{__dir__}/value_processors/delete_prefix")
15
+ autoload(:DeleteSuffix, "#{__dir__}/value_processors/delete_suffix")
16
+ autoload(:Demodulize, "#{__dir__}/value_processors/demodulize")
17
+ autoload(:Downcase, "#{__dir__}/value_processors/downcase")
18
+ autoload(:EachForDefinitionSet, "#{__dir__}/value_processors/each_for_definition_set")
19
+ autoload(:EachKeyword, "#{__dir__}/value_processors/each_keyword")
20
+ autoload(:EachKeywordArgument, "#{__dir__}/value_processors/each_keyword_argument")
21
+ autoload(:EachPositionalArgument, "#{__dir__}/value_processors/each_positional_argument")
22
+ autoload(:Each, "#{__dir__}/value_processors/each")
23
+ autoload(:Itself, "#{__dir__}/value_processors/itself")
24
+ autoload(:Keyword, "#{__dir__}/value_processors/keyword")
25
+ autoload(:KeywordArgument, "#{__dir__}/value_processors/keyword_argument")
26
+ autoload(:Parameterize, "#{__dir__}/value_processors/parameterize")
27
+ autoload(:Placeholder, "#{__dir__}/value_processors/placeholder")
28
+ autoload(:Pluralize, "#{__dir__}/value_processors/pluralize")
29
+ autoload(:PositionalArgument, "#{__dir__}/value_processors/positional_argument")
30
+ autoload(:ReplaceValue, "#{__dir__}/value_processors/replace_value")
31
+ autoload(:ReturnDefinition, "#{__dir__}/value_processors/return_definition")
32
+ autoload(:ReturnString, "#{__dir__}/value_processors/return_string")
33
+ autoload(:Singularize, "#{__dir__}/value_processors/singularize")
34
+ autoload(:Split, "#{__dir__}/value_processors/split")
35
+ autoload(:Swapcase, "#{__dir__}/value_processors/swapcase")
36
+ autoload(:Titleize, "#{__dir__}/value_processors/titleize")
37
+ autoload(:Underscore, "#{__dir__}/value_processors/underscore")
38
+ autoload(:Upcase, "#{__dir__}/value_processors/upcase")
39
+ end
40
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddDynamicPrefix
6
+ def initialize(prefix_processor, then_processor)
7
+ @prefix_processor = prefix_processor
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node) # rubocop:disable Metrics/MethodLength
14
+ return unless str
15
+
16
+ prefixes = @prefix_processor.process(nil, method_node, method_node)
17
+ if prefixes.is_a?(Array)
18
+ prefixes.flatten!
19
+ prefixes.compact!
20
+ prefixes.uniq!
21
+
22
+ prefixes.map do |prefix|
23
+ @then_processor.process("#{prefix}#{str}", node, method_node)
24
+ end
25
+ else
26
+ @then_processor.process("#{prefixes}#{str}", node, method_node)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddDynamicSuffix
6
+ def initialize(suffix_processor, then_processor)
7
+ @suffix_processor = suffix_processor
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node) # rubocop:disable Metrics/MethodLength
14
+ return unless str
15
+
16
+ suffixes = @suffix_processor.process(nil, method_node, method_node)
17
+ if suffixes.is_a?(Array)
18
+ suffixes.flatten!
19
+ suffixes.compact!
20
+ suffixes.uniq!
21
+
22
+ suffixes.map do |suffix|
23
+ @then_processor.process("#{str}#{suffix}", node, method_node)
24
+ end
25
+ else
26
+ @then_processor.process("#{str}#{suffixes}", node, method_node)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddPrefix
6
+ def initialize(prefix, then_processor)
7
+ @prefix = prefix
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ @then_processor.process("#{@prefix}#{str}", node, method_node)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class AddSuffix
6
+ def initialize(suffix, then_processor)
7
+ @suffix = suffix
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ @then_processor.process("#{str}#{@suffix}", node, method_node)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Camelize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.camelize, node, method_node)
16
+ rescue NoMethodError
17
+ Leftovers.error <<~MESSAGE
18
+ Tried using the String#camelize method, but the activesupport gem was not available and/or not required
19
+ `gem install activesupport`, and/or add `requires: 'active_support/core_ext/string'` to your .leftovers.yml
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Capitalize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.capitalize, node, method_node)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class Deconstantize
6
+ def initialize(then_processor)
7
+ @then_processor = then_processor
8
+
9
+ freeze
10
+ end
11
+
12
+ def process(str, node, method_node)
13
+ return unless str
14
+
15
+ @then_processor.process(str.deconstantize, node, method_node)
16
+ rescue NoMethodError
17
+ Leftovers.error <<~MESSAGE
18
+ Tried using the String#deconstantize method, but the activesupport gem was not available and/or not required
19
+ `gem install activesupport`, and/or add `requires: 'active_support/core_ext/string'` to your .leftovers.yml
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Leftovers
4
+ module ValueProcessors
5
+ class DeleteAfter
6
+ def initialize(delete_after, then_processor)
7
+ @delete_after = delete_after
8
+ @then_processor = then_processor
9
+
10
+ freeze
11
+ end
12
+
13
+ def process(str, node, method_node)
14
+ return unless str
15
+
16
+ # TODO: investigate index
17
+ str = str.split(@delete_after, 2).first || str
18
+ @then_processor.process(str, node, method_node)
19
+ end
20
+ end
21
+ end
22
+ end