Module: WhyClasses::Correctors::FunctionBucketCorrector

Defined in:
lib/why_classes/correctors/function_bucket_corrector.rb

Overview

Rewrites a single-function "service object" class into a module function:

class CreateUser        =>   module CreateUser
def call                     module_function
  ...
end                          def call
end                              ...
                               end
                             end

Unsafe-tier: CreateUser.new.call call sites elsewhere would break.

Class Method Summary collapse

Class Method Details

.correctable?(shape) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
25
26
27
28
29
# File 'lib/why_classes/correctors/function_bucket_corrector.rb', line 21

def correctable?(shape)
  return false if shape.module?
  return false if shape.superclass?
  return false if shape.uses_metaprogramming?
  return false unless shape.initialize_method.nil?
  return false unless shape.singleton_methods.empty?

  shape.behavior_methods.size == 1
end

.corrector(class_node, method_node) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/why_classes/correctors/function_bucket_corrector.rb', line 31

def corrector(class_node, method_node)
  lambda do |rewriter|
    rewriter.replace(class_node.location.keyword, "module")
    inner = " " * (class_node.location.keyword.column + 2)
    rewriter.insert_before(method_node.location.expression, "module_function\n\n#{inner}")
  end
end