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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/README.md +7 -7
- data/docs/Configuration.md +141 -32
- data/docs/Custom-Precompilers.md +6 -0
- data/leftovers.gemspec +2 -1
- data/lib/config/actioncable.yml +36 -0
- data/lib/config/actionmailbox.yml +28 -0
- data/lib/config/actionmailer.yml +87 -11
- data/lib/config/actionpack.yml +130 -34
- data/lib/config/actiontext.yml +56 -0
- data/lib/config/actionview.yml +194 -44
- data/lib/config/activejob.yml +15 -8
- data/lib/config/activemodel.yml +175 -18
- data/lib/config/activerecord.yml +397 -86
- data/lib/config/activestorage.yml +26 -0
- data/lib/config/activesupport.yml +167 -24
- data/lib/config/leftovers.yml +48 -0
- data/lib/config/rails.yml +7 -3
- data/lib/config/railties.yml +7 -0
- data/lib/config/ruby.yml +438 -83
- data/lib/config/test-unit.yml +8 -0
- data/lib/leftovers/ast/array_node.rb +12 -0
- data/lib/leftovers/ast/block_node.rb +12 -0
- data/lib/leftovers/ast/builder.rb +24 -5
- data/lib/leftovers/ast/casgn_node.rb +20 -0
- data/lib/leftovers/ast/const_node.rb +15 -0
- data/lib/leftovers/ast/def_node.rb +15 -0
- data/lib/leftovers/ast/defs_node.rb +15 -0
- data/lib/leftovers/ast/false_node.rb +24 -0
- data/lib/leftovers/ast/has_arguments.rb +31 -0
- data/lib/leftovers/ast/hash_node.rb +17 -0
- data/lib/leftovers/ast/module_node.rb +16 -0
- data/lib/leftovers/ast/nil_node.rb +23 -0
- data/lib/leftovers/ast/node.rb +33 -90
- data/lib/leftovers/ast/numeric_node.rb +22 -0
- data/lib/leftovers/ast/send_node.rb +25 -0
- data/lib/leftovers/ast/str_node.rb +24 -0
- data/lib/leftovers/ast/sym_node.rb +25 -0
- data/lib/leftovers/ast/true_node.rb +24 -0
- data/lib/leftovers/ast/var_node.rb +14 -0
- data/lib/leftovers/ast/vasgn_node.rb +20 -0
- data/lib/leftovers/ast.rb +18 -0
- data/lib/leftovers/cli.rb +7 -1
- data/lib/leftovers/comparable_instance.rb +18 -0
- data/lib/leftovers/config_loader/argument_position_schema.rb +3 -1
- data/lib/leftovers/config_loader/array_schema.rb +53 -0
- data/lib/leftovers/config_loader/document_schema.rb +3 -2
- data/lib/leftovers/config_loader/dynamic_schema.rb +1 -0
- data/lib/leftovers/config_loader/has_value_schema.rb +4 -0
- data/lib/leftovers/config_loader/keyword_argument_schema.rb +13 -0
- data/lib/leftovers/config_loader/regexp_schema.rb +27 -0
- data/lib/leftovers/config_loader/rule_pattern_schema.rb +2 -0
- data/lib/leftovers/config_loader/scalar_value_schema.rb +8 -0
- data/lib/leftovers/config_loader/schema.rb +10 -0
- data/lib/leftovers/config_loader/string_enum_schema.rb +1 -1
- data/lib/leftovers/config_loader/string_pattern_schema.rb +1 -1
- data/lib/leftovers/config_loader/transform_schema.rb +12 -6
- data/lib/leftovers/config_loader/value_matcher_condition_schema.rb +13 -0
- data/lib/leftovers/config_loader/value_matcher_schema.rb +4 -1
- data/lib/leftovers/config_loader/value_or_array_schema.rb +2 -34
- data/lib/leftovers/config_loader/value_processor_schema.rb +2 -2
- data/lib/leftovers/config_loader.rb +11 -4
- data/lib/leftovers/definition_collection.rb +37 -0
- data/lib/leftovers/definition_node_set.rb +10 -2
- data/lib/leftovers/file.rb +1 -1
- data/lib/leftovers/file_collector/comments_processor.rb +1 -1
- data/lib/leftovers/file_collector/node_processor.rb +7 -7
- data/lib/leftovers/file_collector.rb +26 -32
- data/lib/leftovers/file_list.rb +3 -2
- data/lib/leftovers/matcher_builders/and.rb +26 -9
- data/lib/leftovers/matcher_builders/node.rb +32 -20
- data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +3 -1
- data/lib/leftovers/matcher_builders/node_pair_key.rb +16 -0
- data/lib/leftovers/matcher_builders/node_type.rb +9 -9
- data/lib/leftovers/matcher_builders/node_value.rb +23 -9
- data/lib/leftovers/matcher_builders/or.rb +22 -7
- data/lib/leftovers/matcher_builders/path.rb +3 -1
- data/lib/leftovers/matcher_builders.rb +1 -1
- data/lib/leftovers/matchers/all.rb +4 -0
- data/lib/leftovers/matchers/and.rb +4 -0
- data/lib/leftovers/matchers/any.rb +2 -0
- data/lib/leftovers/matchers/node_has_any_keyword_argument.rb +7 -4
- data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +5 -4
- data/lib/leftovers/matchers/node_has_positional_argument.rb +5 -1
- data/lib/leftovers/matchers/node_has_positional_argument_with_value.rb +6 -1
- data/lib/leftovers/matchers/node_has_receiver.rb +4 -0
- data/lib/leftovers/matchers/node_is_proc.rb +13 -0
- data/lib/leftovers/matchers/node_name.rb +9 -3
- data/lib/leftovers/matchers/node_pair_key.rb +23 -0
- data/lib/leftovers/matchers/node_pair_value.rb +7 -3
- data/lib/leftovers/matchers/node_path.rb +7 -3
- data/lib/leftovers/matchers/node_privacy.rb +7 -3
- data/lib/leftovers/matchers/node_scalar_value.rb +6 -1
- data/lib/leftovers/matchers/node_type.rb +7 -3
- data/lib/leftovers/matchers/not.rb +2 -0
- data/lib/leftovers/matchers/or.rb +2 -0
- data/lib/leftovers/matchers/path.rb +21 -0
- data/lib/leftovers/matchers.rb +3 -1
- data/lib/leftovers/merged_config.rb +26 -25
- data/lib/leftovers/parser.rb +7 -4
- data/lib/leftovers/precompilers.rb +5 -5
- data/lib/leftovers/processor_builders/action.rb +55 -37
- data/lib/leftovers/processor_builders/add_prefix.rb +18 -10
- data/lib/leftovers/processor_builders/add_suffix.rb +18 -10
- data/lib/leftovers/processor_builders/argument.rb +28 -11
- data/lib/leftovers/processor_builders/dynamic.rb +37 -31
- data/lib/leftovers/processor_builders/each.rb +82 -10
- data/lib/leftovers/processor_builders/itself.rb +2 -2
- data/lib/leftovers/processor_builders/keyword.rb +7 -6
- data/lib/leftovers/processor_builders/keyword_argument.rb +4 -2
- data/lib/leftovers/processor_builders/receiver.rb +13 -0
- data/lib/leftovers/processor_builders/transform.rb +55 -44
- data/lib/leftovers/processor_builders/transform_chain.rb +1 -1
- data/lib/leftovers/processor_builders/transform_set.rb +9 -29
- data/lib/leftovers/processor_builders/value.rb +4 -4
- data/lib/leftovers/processor_builders.rb +1 -3
- data/lib/leftovers/processors/add_call.rb +14 -0
- data/lib/leftovers/processors/add_definition_node.rb +16 -0
- data/lib/leftovers/processors/add_dynamic_prefix.rb +29 -0
- data/lib/leftovers/processors/add_dynamic_suffix.rb +29 -0
- data/lib/leftovers/{value_processors → processors}/add_prefix.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/add_suffix.rb +7 -3
- data/lib/leftovers/processors/append_sym.rb +13 -0
- data/lib/leftovers/{value_processors → processors}/camelize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/capitalize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/deconstantize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/delete_after.rb +9 -5
- data/lib/leftovers/processors/delete_after_last.rb +26 -0
- data/lib/leftovers/processors/delete_before.rb +27 -0
- data/lib/leftovers/processors/delete_before_last.rb +27 -0
- data/lib/leftovers/{value_processors → processors}/delete_prefix.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/delete_suffix.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/demodulize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/downcase.rb +7 -3
- data/lib/leftovers/processors/each.rb +25 -0
- data/lib/leftovers/processors/each_for_definition_set.rb +33 -0
- data/lib/leftovers/processors/each_keyword.rb +29 -0
- data/lib/leftovers/processors/each_keyword_argument.rb +29 -0
- data/lib/leftovers/processors/each_positional_argument.rb +27 -0
- data/lib/leftovers/processors/each_positional_argument_from.rb +30 -0
- data/lib/leftovers/processors/eval.rb +16 -0
- data/lib/leftovers/processors/itself.rb +21 -0
- data/lib/leftovers/processors/keyword_argument.rb +30 -0
- data/lib/leftovers/processors/match_current_node.rb +26 -0
- data/lib/leftovers/processors/match_matched_node.rb +26 -0
- data/lib/leftovers/{value_processors → processors}/parameterize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/placeholder.rb +5 -4
- data/lib/leftovers/{value_processors → processors}/pluralize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/positional_argument.rb +8 -6
- data/lib/leftovers/processors/receiver.rb +24 -0
- data/lib/leftovers/{value_processors → processors}/replace_value.rb +7 -3
- data/lib/leftovers/processors/set_default_privacy.rb +21 -0
- data/lib/leftovers/processors/set_privacy.rb +23 -0
- data/lib/leftovers/{value_processors → processors}/singularize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/split.rb +8 -4
- data/lib/leftovers/{value_processors → processors}/swapcase.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/titleize.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/underscore.rb +7 -3
- data/lib/leftovers/{value_processors → processors}/upcase.rb +7 -3
- data/lib/leftovers/processors.rb +49 -0
- data/lib/leftovers/version.rb +1 -1
- data/lib/leftovers.rb +3 -12
- metadata +97 -52
- data/lib/leftovers/dynamic_processors/call.rb +0 -22
- data/lib/leftovers/dynamic_processors/call_definition.rb +0 -34
- data/lib/leftovers/dynamic_processors/definition.rb +0 -27
- data/lib/leftovers/dynamic_processors/each.rb +0 -19
- data/lib/leftovers/dynamic_processors/null.rb +0 -9
- data/lib/leftovers/dynamic_processors/set_default_privacy.rb +0 -18
- data/lib/leftovers/dynamic_processors/set_privacy.rb +0 -23
- data/lib/leftovers/dynamic_processors.rb +0 -13
- data/lib/leftovers/matcher_builders/node_pair_name.rb +0 -18
- data/lib/leftovers/matchers/predicate.rb +0 -19
- data/lib/leftovers/processor_builders/each_action.rb +0 -51
- data/lib/leftovers/processor_builders/each_dynamic.rb +0 -50
- data/lib/leftovers/processor_builders/each_for_definition_set.rb +0 -40
- data/lib/leftovers/value_processors/add_dynamic_prefix.rb +0 -24
- data/lib/leftovers/value_processors/add_dynamic_suffix.rb +0 -24
- data/lib/leftovers/value_processors/delete_before.rb +0 -22
- data/lib/leftovers/value_processors/each.rb +0 -21
- data/lib/leftovers/value_processors/each_for_definition_set.rb +0 -23
- data/lib/leftovers/value_processors/each_keyword.rb +0 -27
- data/lib/leftovers/value_processors/each_keyword_argument.rb +0 -27
- data/lib/leftovers/value_processors/each_positional_argument.rb +0 -25
- data/lib/leftovers/value_processors/itself.rb +0 -17
- data/lib/leftovers/value_processors/keyword.rb +0 -28
- data/lib/leftovers/value_processors/keyword_argument.rb +0 -28
- data/lib/leftovers/value_processors/return_definition_node.rb +0 -14
- data/lib/leftovers/value_processors/return_sym.rb +0 -14
- data/lib/leftovers/value_processors.rb +0 -40
|
@@ -7,7 +7,7 @@ module Leftovers
|
|
|
7
7
|
def build(transforms, next_transform)
|
|
8
8
|
case transforms
|
|
9
9
|
when ::Hash then build_from_hash(transforms, next_transform)
|
|
10
|
-
when ::
|
|
10
|
+
when ::Symbol
|
|
11
11
|
::Leftovers::ProcessorBuilders::Transform.build(transforms, true, next_transform)
|
|
12
12
|
# :nocov:
|
|
13
13
|
else raise Leftovers::UnexpectedCase, "Unhandled value #{transforms.inspect}"
|
|
@@ -4,15 +4,11 @@ module Leftovers
|
|
|
4
4
|
module ProcessorBuilders
|
|
5
5
|
module TransformSet
|
|
6
6
|
class << self
|
|
7
|
-
def build(transforms,
|
|
8
|
-
each_builder(
|
|
7
|
+
def build(transforms, final_processor)
|
|
8
|
+
each_builder(final_processor).each_or_self(transforms) do |transform|
|
|
9
9
|
case transform
|
|
10
|
-
when ::Hash
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
::Leftovers::ProcessorBuilders::TransformChain.build(transform, build_final(action))
|
|
14
|
-
when ::String
|
|
15
|
-
::Leftovers::ProcessorBuilders::TransformChain.build(transform, build_final(action))
|
|
10
|
+
when ::Hash, ::Symbol
|
|
11
|
+
::Leftovers::ProcessorBuilders::TransformChain.build(transform, final_processor)
|
|
16
12
|
# :nocov:
|
|
17
13
|
else raise Leftovers::UnexpectedCase, "Unhandled value #{transform.inspect}"
|
|
18
14
|
# :nocov:
|
|
@@ -20,29 +16,13 @@ module Leftovers
|
|
|
20
16
|
end
|
|
21
17
|
end
|
|
22
18
|
|
|
23
|
-
def build_final(action)
|
|
24
|
-
case action
|
|
25
|
-
when :sym
|
|
26
|
-
::Leftovers::ValueProcessors::ReturnSym
|
|
27
|
-
when :definition_node
|
|
28
|
-
::Leftovers::ValueProcessors::ReturnDefinitionNode
|
|
29
|
-
# :nocov:
|
|
30
|
-
else raise Leftovers::UnexpectedCase, "Unhandled value #{action.inspect}"
|
|
31
|
-
# :nocov:
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
19
|
private
|
|
36
20
|
|
|
37
|
-
def each_builder(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
::Leftovers::ProcessorBuilders::EachForDefinitionSet
|
|
43
|
-
# :nocov:
|
|
44
|
-
else raise Leftovers::UnexpectedCase, "Unhandled value #{action.inspect}"
|
|
45
|
-
# :nocov:
|
|
21
|
+
def each_builder(final_processor)
|
|
22
|
+
if final_processor == ::Leftovers::Processors::AddDefinitionNode
|
|
23
|
+
::Leftovers::ProcessorBuilders::Each[:each_for_definition_set]
|
|
24
|
+
else
|
|
25
|
+
::Leftovers::ProcessorBuilders::Each[:each]
|
|
46
26
|
end
|
|
47
27
|
end
|
|
48
28
|
end
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
module Leftovers
|
|
4
4
|
module ProcessorBuilders
|
|
5
5
|
module Value
|
|
6
|
-
def self.build(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
def self.build(values, then_processor)
|
|
7
|
+
::Leftovers::ProcessorBuilders::Each.each_or_self(values) do |value|
|
|
8
|
+
::Leftovers::Processors::ReplaceValue.new(value, then_processor)
|
|
9
|
+
end
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -7,13 +7,11 @@ module Leftovers
|
|
|
7
7
|
autoload(:AddSuffix, "#{__dir__}/processor_builders/add_suffix")
|
|
8
8
|
autoload(:Argument, "#{__dir__}/processor_builders/argument")
|
|
9
9
|
autoload(:Dynamic, "#{__dir__}/processor_builders/dynamic")
|
|
10
|
-
autoload(:EachAction, "#{__dir__}/processor_builders/each_action")
|
|
11
|
-
autoload(:EachDynamic, "#{__dir__}/processor_builders/each_dynamic")
|
|
12
|
-
autoload(:EachForDefinitionSet, "#{__dir__}/processor_builders/each_for_definition_set")
|
|
13
10
|
autoload(:Each, "#{__dir__}/processor_builders/each")
|
|
14
11
|
autoload(:Itself, "#{__dir__}/processor_builders/itself")
|
|
15
12
|
autoload(:Keyword, "#{__dir__}/processor_builders/keyword")
|
|
16
13
|
autoload(:KeywordArgument, "#{__dir__}/processor_builders/keyword_argument")
|
|
14
|
+
autoload(:Receiver, "#{__dir__}/processor_builders/receiver")
|
|
17
15
|
autoload(:TransformChain, "#{__dir__}/processor_builders/transform_chain")
|
|
18
16
|
autoload(:TransformSet, "#{__dir__}/processor_builders/transform_set")
|
|
19
17
|
autoload(:Transform, "#{__dir__}/processor_builders/transform")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
module AddDefinitionNode
|
|
6
|
+
def self.process(str, current_node, _matched_node, acc)
|
|
7
|
+
return unless str
|
|
8
|
+
return if str.empty?
|
|
9
|
+
|
|
10
|
+
acc.add_definition_node Leftovers::DefinitionNode.new(current_node, name: str.to_sym)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
freeze
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class AddDynamicPrefix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
def initialize(prefix_processor, then_processor)
|
|
9
|
+
@prefix_processor = prefix_processor
|
|
10
|
+
@then_processor = then_processor
|
|
11
|
+
|
|
12
|
+
freeze
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
16
|
+
return unless str
|
|
17
|
+
|
|
18
|
+
prefixes = []
|
|
19
|
+
@prefix_processor.process(nil, matched_node, matched_node, prefixes)
|
|
20
|
+
|
|
21
|
+
prefixes.each do |prefix|
|
|
22
|
+
@then_processor.process("#{prefix}#{str}", current_node, matched_node, acc)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
freeze
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class AddDynamicSuffix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
def initialize(suffix_processor, then_processor)
|
|
9
|
+
@suffix_processor = suffix_processor
|
|
10
|
+
@then_processor = then_processor
|
|
11
|
+
|
|
12
|
+
freeze
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
16
|
+
return unless str
|
|
17
|
+
|
|
18
|
+
suffixes = []
|
|
19
|
+
@suffix_processor.process(nil, matched_node, matched_node, suffixes)
|
|
20
|
+
|
|
21
|
+
suffixes.each do |suffix|
|
|
22
|
+
@then_processor.process("#{str}#{suffix}", current_node, matched_node, acc)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
freeze
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class AddPrefix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
6
8
|
def initialize(prefix, then_processor)
|
|
7
9
|
@prefix = prefix
|
|
8
10
|
@then_processor = then_processor
|
|
@@ -10,11 +12,13 @@ module Leftovers
|
|
|
10
12
|
freeze
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def process(str,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
@then_processor.process("#{@prefix}#{str}",
|
|
18
|
+
@then_processor.process("#{@prefix}#{str}", current_node, matched_node, acc)
|
|
17
19
|
end
|
|
20
|
+
|
|
21
|
+
freeze
|
|
18
22
|
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class AddSuffix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
6
8
|
def initialize(suffix, then_processor)
|
|
7
9
|
@suffix = suffix
|
|
8
10
|
@then_processor = then_processor
|
|
@@ -10,11 +12,13 @@ module Leftovers
|
|
|
10
12
|
freeze
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def process(str,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
@then_processor.process("#{str}#{@suffix}",
|
|
18
|
+
@then_processor.process("#{str}#{@suffix}", current_node, matched_node, acc)
|
|
17
19
|
end
|
|
20
|
+
|
|
21
|
+
freeze
|
|
18
22
|
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class Camelize
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.camelize,
|
|
17
|
+
@then_processor.process(str.camelize, current_node, matched_node, acc)
|
|
16
18
|
rescue NoMethodError
|
|
17
19
|
Leftovers.error <<~MESSAGE
|
|
18
20
|
Tried using the String#camelize 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
|
|
4
|
+
module Processors
|
|
5
5
|
class Capitalize
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.capitalize,
|
|
17
|
+
@then_processor.process(str.capitalize, 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
|
|
4
|
+
module Processors
|
|
5
5
|
class Deconstantize
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.deconstantize,
|
|
17
|
+
@then_processor.process(str.deconstantize, current_node, matched_node, acc)
|
|
16
18
|
rescue NoMethodError
|
|
17
19
|
Leftovers.error <<~MESSAGE
|
|
18
20
|
Tried using the String#deconstantize 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
|
|
4
|
+
module Processors
|
|
5
5
|
class DeleteAfter
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
6
8
|
def initialize(delete_after, then_processor)
|
|
7
9
|
@delete_after = delete_after
|
|
8
10
|
@then_processor = then_processor
|
|
@@ -10,13 +12,15 @@ module Leftovers
|
|
|
10
12
|
freeze
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def process(str,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
str = str
|
|
18
|
-
@then_processor.process(str,
|
|
18
|
+
index = str.index(@delete_after)
|
|
19
|
+
str = str[0...index] if index
|
|
20
|
+
@then_processor.process(str, current_node, matched_node, acc)
|
|
19
21
|
end
|
|
22
|
+
|
|
23
|
+
freeze
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
26
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class DeleteAfterLast
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
def initialize(delete_after, then_processor)
|
|
9
|
+
@delete_after = delete_after
|
|
10
|
+
@then_processor = then_processor
|
|
11
|
+
|
|
12
|
+
freeze
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
16
|
+
return unless str
|
|
17
|
+
|
|
18
|
+
index = str.rindex(@delete_after)
|
|
19
|
+
str = str[0...index] if index
|
|
20
|
+
@then_processor.process(str, current_node, matched_node, acc)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
freeze
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class DeleteBefore
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
def initialize(delete_before, then_processor)
|
|
9
|
+
@delete_before = delete_before
|
|
10
|
+
@delete_before_length = delete_before.length
|
|
11
|
+
@then_processor = then_processor
|
|
12
|
+
|
|
13
|
+
freeze
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def process(str, current_node, matched_node, acc)
|
|
17
|
+
return unless str
|
|
18
|
+
|
|
19
|
+
index = str.index(@delete_before)
|
|
20
|
+
str = str[(index + @delete_before_length)..-1] if index
|
|
21
|
+
@then_processor.process(str, current_node, matched_node, acc)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
freeze
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class DeleteBeforeLast
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
def initialize(delete_before, then_processor)
|
|
9
|
+
@delete_before = delete_before
|
|
10
|
+
@delete_before_length = delete_before.length
|
|
11
|
+
@then_processor = then_processor
|
|
12
|
+
|
|
13
|
+
freeze
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def process(str, current_node, matched_node, acc)
|
|
17
|
+
return unless str
|
|
18
|
+
|
|
19
|
+
index = str.rindex(@delete_before)
|
|
20
|
+
str = str[(index + @delete_before_length)..-1] if index
|
|
21
|
+
@then_processor.process(str, current_node, matched_node, acc)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
freeze
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class DeletePrefix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
6
8
|
def initialize(prefix, then_processor)
|
|
7
9
|
@prefix = prefix
|
|
8
10
|
@then_processor = then_processor
|
|
@@ -10,11 +12,13 @@ module Leftovers
|
|
|
10
12
|
freeze
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def process(str,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
@then_processor.process(str.delete_prefix(@prefix),
|
|
18
|
+
@then_processor.process(str.delete_prefix(@prefix), current_node, matched_node, acc)
|
|
17
19
|
end
|
|
20
|
+
|
|
21
|
+
freeze
|
|
18
22
|
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class DeleteSuffix
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
6
8
|
def initialize(suffix, then_processor)
|
|
7
9
|
@suffix = suffix
|
|
8
10
|
@then_processor = then_processor
|
|
@@ -10,11 +12,13 @@ module Leftovers
|
|
|
10
12
|
freeze
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def process(str,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
@then_processor.process(str.delete_suffix(@suffix),
|
|
18
|
+
@then_processor.process(str.delete_suffix(@suffix), current_node, matched_node, acc)
|
|
17
19
|
end
|
|
20
|
+
|
|
21
|
+
freeze
|
|
18
22
|
end
|
|
19
23
|
end
|
|
20
24
|
end
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Leftovers
|
|
4
|
-
module
|
|
4
|
+
module Processors
|
|
5
5
|
class Demodulize
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.demodulize,
|
|
17
|
+
@then_processor.process(str.demodulize, current_node, matched_node, acc)
|
|
16
18
|
rescue NoMethodError
|
|
17
19
|
Leftovers.error <<~MESSAGE
|
|
18
20
|
Tried using the String#demodulize 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
|
|
4
|
+
module Processors
|
|
5
5
|
class Downcase
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.downcase,
|
|
17
|
+
@then_processor.process(str.downcase, current_node, matched_node, acc)
|
|
16
18
|
end
|
|
19
|
+
|
|
20
|
+
freeze
|
|
17
21
|
end
|
|
18
22
|
end
|
|
19
23
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class Each
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
attr_reader :processors
|
|
9
|
+
|
|
10
|
+
def initialize(processors)
|
|
11
|
+
@processors = processors
|
|
12
|
+
|
|
13
|
+
freeze
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def process(str, current_node, matched_node, acc)
|
|
17
|
+
@processors.each do |processor|
|
|
18
|
+
processor.process(str, current_node, matched_node, acc)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
freeze
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen-string-literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class EachForDefinitionSet
|
|
6
|
+
include ComparableInstance
|
|
7
|
+
|
|
8
|
+
attr_reader :processors
|
|
9
|
+
|
|
10
|
+
def initialize(processors)
|
|
11
|
+
@processors = processors
|
|
12
|
+
|
|
13
|
+
freeze
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def process(str, current_node, matched_node, acc)
|
|
17
|
+
set = ::Leftovers::DefinitionNodeSet.new
|
|
18
|
+
|
|
19
|
+
@processors.each do |processor|
|
|
20
|
+
processor.process(str, current_node, matched_node, set)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if set.definitions.length == 1
|
|
24
|
+
acc.add_definition_node set.definitions.first
|
|
25
|
+
else
|
|
26
|
+
acc.add_definition_set set
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
freeze
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Leftovers
|
|
4
|
+
module Processors
|
|
5
|
+
class EachKeyword
|
|
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
|
+
key_node = pair.first
|
|
22
|
+
@then_processor.process(key_node.to_literal_s, key_node, matched_node, acc)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
freeze
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|