leftovers 0.2.3 → 0.4.3
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/CHANGELOG.md +39 -0
- data/README.md +65 -49
- data/docs/Configuration.md +627 -0
- data/exe/leftovers +2 -2
- data/leftovers.gemspec +13 -6
- data/lib/config/attr_encrypted.yml +3 -4
- data/lib/config/audited.yml +9 -4
- data/lib/config/datagrid.yml +1 -1
- data/lib/config/flipper.yml +1 -3
- data/lib/config/graphql.yml +15 -13
- data/lib/config/okcomputer.yml +1 -3
- data/lib/config/parser.yml +89 -91
- data/lib/config/rails.yml +126 -107
- data/lib/config/redcarpet.yml +35 -38
- data/lib/config/rollbar.yml +1 -3
- data/lib/config/rspec.yml +18 -10
- data/lib/config/ruby.yml +42 -49
- data/lib/config/selenium-webdriver.yml +19 -0
- data/lib/config/sidekiq.yml +4 -8
- data/lib/config/will_paginate.yml +12 -14
- data/lib/leftovers.rb +66 -54
- data/lib/leftovers/ast.rb +8 -0
- data/lib/leftovers/ast/builder.rb +6 -3
- data/lib/leftovers/ast/node.rb +66 -107
- data/lib/leftovers/backports.rb +24 -40
- data/lib/leftovers/cli.rb +27 -15
- data/lib/leftovers/collector.rb +8 -11
- data/lib/leftovers/config.rb +38 -13
- data/lib/leftovers/config_validator.rb +60 -0
- data/lib/leftovers/config_validator/error_processor.rb +196 -0
- data/lib/leftovers/config_validator/schema_hash.rb +496 -0
- data/lib/leftovers/definition.rb +16 -41
- data/lib/leftovers/definition_node.rb +36 -0
- data/lib/leftovers/definition_set.rb +17 -24
- data/lib/leftovers/dynamic_processors.rb +11 -0
- data/lib/leftovers/dynamic_processors/call.rb +25 -0
- data/lib/leftovers/dynamic_processors/call_definition.rb +31 -0
- data/lib/leftovers/dynamic_processors/definition.rb +26 -0
- data/lib/leftovers/dynamic_processors/each.rb +19 -0
- data/lib/leftovers/dynamic_processors/null.rb +9 -0
- data/lib/leftovers/erb.rb +2 -2
- data/lib/leftovers/file.rb +3 -5
- data/lib/leftovers/file_collector.rb +79 -61
- data/lib/leftovers/file_list.rb +9 -15
- data/lib/leftovers/haml.rb +9 -12
- data/lib/leftovers/matcher_builders.rb +24 -0
- data/lib/leftovers/matcher_builders/and.rb +19 -0
- data/lib/leftovers/matcher_builders/and_not.rb +14 -0
- data/lib/leftovers/matcher_builders/argument_node_value.rb +21 -0
- data/lib/leftovers/matcher_builders/name.rb +29 -0
- data/lib/leftovers/matcher_builders/node.rb +40 -0
- data/lib/leftovers/matcher_builders/node_has_argument.rb +71 -0
- data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +22 -0
- data/lib/leftovers/matcher_builders/node_has_positional_argument.rb +24 -0
- data/lib/leftovers/matcher_builders/node_name.rb +15 -0
- data/lib/leftovers/matcher_builders/node_pair_name.rb +18 -0
- data/lib/leftovers/matcher_builders/node_pair_value.rb +16 -0
- data/lib/leftovers/matcher_builders/node_path.rb +14 -0
- data/lib/leftovers/matcher_builders/node_type.rb +28 -0
- data/lib/leftovers/matcher_builders/or.rb +73 -0
- data/lib/leftovers/matcher_builders/path.rb +15 -0
- data/lib/leftovers/matcher_builders/string.rb +11 -0
- data/lib/leftovers/matcher_builders/string_pattern.rb +19 -0
- data/lib/leftovers/matcher_builders/unless.rb +13 -0
- data/lib/leftovers/matchers.rb +26 -0
- data/lib/leftovers/matchers/all.rb +25 -0
- data/lib/leftovers/matchers/and.rb +24 -0
- data/lib/leftovers/matchers/any.rb +27 -0
- data/lib/leftovers/matchers/node_has_any_keyword_argument.rb +28 -0
- data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +25 -0
- data/lib/leftovers/matchers/node_has_positional_argument.rb +23 -0
- data/lib/leftovers/matchers/node_has_positional_argument_with_value.rb +25 -0
- data/lib/leftovers/matchers/node_name.rb +23 -0
- data/lib/leftovers/matchers/node_pair_value.rb +23 -0
- data/lib/leftovers/matchers/node_path.rb +23 -0
- data/lib/leftovers/matchers/node_scalar_value.rb +25 -0
- data/lib/leftovers/matchers/node_type.rb +23 -0
- data/lib/leftovers/matchers/not.rb +23 -0
- data/lib/leftovers/matchers/or.rb +26 -0
- data/lib/leftovers/merged_config.rb +29 -14
- data/lib/leftovers/parser.rb +1 -4
- data/lib/leftovers/processor_builders.rb +22 -0
- data/lib/leftovers/processor_builders/action.rb +63 -0
- data/lib/leftovers/processor_builders/add_prefix.rb +20 -0
- data/lib/leftovers/processor_builders/add_suffix.rb +20 -0
- data/lib/leftovers/processor_builders/argument.rb +25 -0
- data/lib/leftovers/processor_builders/dynamic.rb +27 -0
- data/lib/leftovers/processor_builders/each.rb +36 -0
- data/lib/leftovers/processor_builders/each_action.rb +51 -0
- data/lib/leftovers/processor_builders/each_dynamic.rb +54 -0
- data/lib/leftovers/processor_builders/each_for_definition_set.rb +36 -0
- data/lib/leftovers/processor_builders/itself.rb +13 -0
- data/lib/leftovers/processor_builders/keyword.rb +24 -0
- data/lib/leftovers/processor_builders/keyword_argument.rb +14 -0
- data/lib/leftovers/processor_builders/transform.rb +55 -0
- data/lib/leftovers/processor_builders/transform_chain.rb +24 -0
- data/lib/leftovers/processor_builders/transform_set.rb +47 -0
- data/lib/leftovers/processor_builders/value.rb +13 -0
- data/lib/leftovers/rake_task.rb +4 -4
- data/lib/leftovers/reporter.rb +56 -4
- data/lib/leftovers/todo_reporter.rb +124 -0
- data/lib/leftovers/value_processors.rb +40 -0
- data/lib/leftovers/value_processors/add_dynamic_prefix.rb +31 -0
- data/lib/leftovers/value_processors/add_dynamic_suffix.rb +31 -0
- data/lib/leftovers/value_processors/add_prefix.rb +20 -0
- data/lib/leftovers/value_processors/add_suffix.rb +20 -0
- data/lib/leftovers/value_processors/camelize.rb +24 -0
- data/lib/leftovers/value_processors/capitalize.rb +19 -0
- data/lib/leftovers/value_processors/deconstantize.rb +24 -0
- data/lib/leftovers/value_processors/delete_after.rb +22 -0
- data/lib/leftovers/value_processors/delete_before.rb +22 -0
- data/lib/leftovers/value_processors/delete_prefix.rb +26 -0
- data/lib/leftovers/value_processors/delete_suffix.rb +26 -0
- data/lib/leftovers/value_processors/demodulize.rb +24 -0
- data/lib/leftovers/value_processors/downcase.rb +19 -0
- data/lib/leftovers/value_processors/each.rb +21 -0
- data/lib/leftovers/value_processors/each_for_definition_set.rb +29 -0
- data/lib/leftovers/value_processors/each_keyword.rb +27 -0
- data/lib/leftovers/value_processors/each_keyword_argument.rb +27 -0
- data/lib/leftovers/value_processors/each_positional_argument.rb +24 -0
- data/lib/leftovers/value_processors/itself.rb +17 -0
- data/lib/leftovers/value_processors/keyword.rb +36 -0
- data/lib/leftovers/value_processors/keyword_argument.rb +36 -0
- data/lib/leftovers/value_processors/parameterize.rb +24 -0
- data/lib/leftovers/value_processors/placeholder.rb +18 -0
- data/lib/leftovers/value_processors/pluralize.rb +24 -0
- data/lib/leftovers/value_processors/positional_argument.rb +26 -0
- data/lib/leftovers/value_processors/replace_value.rb +18 -0
- data/lib/leftovers/value_processors/return_definition.rb +26 -0
- data/lib/leftovers/value_processors/return_string.rb +14 -0
- data/lib/leftovers/value_processors/singularize.rb +24 -0
- data/lib/leftovers/value_processors/split.rb +22 -0
- data/lib/leftovers/value_processors/swapcase.rb +19 -0
- data/lib/leftovers/value_processors/titleize.rb +24 -0
- data/lib/leftovers/value_processors/underscore.rb +24 -0
- data/lib/leftovers/value_processors/upcase.rb +19 -0
- data/lib/leftovers/version.rb +1 -1
- metadata +201 -25
- data/lib/config/selenium.yml +0 -21
- data/lib/leftovers/argument_rule.rb +0 -219
- data/lib/leftovers/core_ext.rb +0 -13
- data/lib/leftovers/hash_rule.rb +0 -40
- data/lib/leftovers/name_rule.rb +0 -53
- data/lib/leftovers/rule.rb +0 -74
- data/lib/leftovers/transform_rule.rb +0 -171
- data/lib/leftovers/value_rule.rb +0 -56
|
@@ -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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class DeleteBefore
|
|
6
|
+
def initialize(delete_before, then_processor)
|
|
7
|
+
@delete_before = delete_before
|
|
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_before, 2)[1] || str
|
|
18
|
+
@then_processor.process(str, node, method_node)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class DeletePrefix
|
|
6
|
+
# :nocov:
|
|
7
|
+
if defined?(::Leftovers::Backports::StringDeletePrefixSuffix)
|
|
8
|
+
using ::Leftovers::Backports::StringDeletePrefixSuffix
|
|
9
|
+
end
|
|
10
|
+
# :nocov:
|
|
11
|
+
|
|
12
|
+
def initialize(prefix, then_processor)
|
|
13
|
+
@prefix = prefix
|
|
14
|
+
@then_processor = then_processor
|
|
15
|
+
|
|
16
|
+
freeze
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def process(str, node, method_node)
|
|
20
|
+
return unless str
|
|
21
|
+
|
|
22
|
+
@then_processor.process(str.delete_prefix(@prefix), node, method_node)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class DeleteSuffix
|
|
6
|
+
# :nocov:
|
|
7
|
+
if defined?(::Leftovers::Backports::StringDeletePrefixSuffix)
|
|
8
|
+
using ::Leftovers::Backports::StringDeletePrefixSuffix
|
|
9
|
+
end
|
|
10
|
+
# :nocov:
|
|
11
|
+
|
|
12
|
+
def initialize(suffix, then_processor)
|
|
13
|
+
@suffix = suffix
|
|
14
|
+
@then_processor = then_processor
|
|
15
|
+
|
|
16
|
+
freeze
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def process(str, node, method_node)
|
|
20
|
+
return unless str
|
|
21
|
+
|
|
22
|
+
@then_processor.process(str.delete_suffix(@suffix), node, method_node)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class Demodulize
|
|
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.demodulize, node, method_node)
|
|
16
|
+
rescue NoMethodError
|
|
17
|
+
Leftovers.error <<~MESSAGE
|
|
18
|
+
Tried using the String#demodulize 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 Downcase
|
|
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.downcase, node, method_node)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class Each
|
|
6
|
+
attr_reader :processors
|
|
7
|
+
|
|
8
|
+
def initialize(processors)
|
|
9
|
+
@processors = processors
|
|
10
|
+
|
|
11
|
+
freeze
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def process(str, node, method_node)
|
|
15
|
+
@processors.flat_map do |processor|
|
|
16
|
+
processor.process(str, node, method_node)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class EachForDefinitionSet
|
|
6
|
+
def initialize(then_processors)
|
|
7
|
+
@then_processors = then_processors
|
|
8
|
+
|
|
9
|
+
freeze
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def process(str, node, method_node)
|
|
13
|
+
definitions = @then_processors.map do |then_processor|
|
|
14
|
+
processed = then_processor.process(str, node, method_node)
|
|
15
|
+
return if processed == :keep # rubocop:disable Lint/NonLocalExitFromIterator
|
|
16
|
+
|
|
17
|
+
processed
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
definitions.flatten!
|
|
21
|
+
definitions.compact!
|
|
22
|
+
|
|
23
|
+
return definitions.first if definitions.length <= 1
|
|
24
|
+
|
|
25
|
+
::Leftovers::DefinitionSet.new(definitions)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module ValueProcessors
|
|
5
|
+
class EachKeyword
|
|
6
|
+
def initialize(then_processor)
|
|
7
|
+
@then_processor = then_processor
|
|
8
|
+
|
|
9
|
+
freeze
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def process(_str, node, method_node)
|
|
13
|
+
kwargs = node.kwargs
|
|
14
|
+
return unless kwargs
|
|
15
|
+
|
|
16
|
+
kwargs.children.map do |pair|
|
|
17
|
+
next unless pair.type == :pair
|
|
18
|
+
|
|
19
|
+
argument_node = pair.first
|
|
20
|
+
str = argument_node.to_s if argument_node.string_or_symbol?
|
|
21
|
+
|
|
22
|
+
@then_processor.process(str, argument_node, method_node)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|