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
|
@@ -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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.parameterize,
|
|
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
|
|
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,
|
|
14
|
-
@processor.process(str,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.pluralize,
|
|
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
|
|
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,
|
|
14
|
-
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
|
-
|
|
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
|
|
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,
|
|
14
|
-
@then_processor.process(@value,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.singularize,
|
|
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
|
|
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,
|
|
15
|
+
def process(str, current_node, matched_node, acc)
|
|
14
16
|
return unless str
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
@then_processor.process(sub_str,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.swapcase,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.titleize,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.underscore,
|
|
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
|
|
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,
|
|
14
|
+
def process(str, current_node, matched_node, acc)
|
|
13
15
|
return unless str
|
|
14
16
|
|
|
15
|
-
@then_processor.process(str.upcase,
|
|
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
|
data/lib/leftovers/version.rb
CHANGED