class RailsBestPractices::Core::Methods

Method container.

Public Class Methods

new() click to toggle source
# File lib/rails_best_practices/core/methods.rb, line 7
def initialize
  @methods = {}
  @possible_methods = {}
end

Public Instance Methods

add_method(class_name, method_name, meta = {}, access_control = 'public') click to toggle source

Add a method.

@param [String] class name @param [String] method name @param [Hash] method meta, file and line, {“file” => “app/models/post.rb”, “line_number” => 5} @param [String] access control, public, protected or private

# File lib/rails_best_practices/core/methods.rb, line 18
def add_method(class_name, method_name, meta = {}, access_control = 'public')
  return if class_name == ''
  return if has_method?(class_name, method_name)

  methods(class_name) << Method.new(class_name, method_name, access_control, meta)
  if access_control == 'public'
    @possible_methods[method_name] = false
  end
end
get_all_unused_methods(access_control = nil) click to toggle source

Get all unused methods.

@param [String] access control @return [Array] array of Method

# File lib/rails_best_practices/core/methods.rb, line 130
def get_all_unused_methods(access_control = nil)
  @methods.inject([]) do |unused_methods, (_class_name, methods)|
    unused_methods +=
      if access_control
        methods.select { |method| method.access_control == access_control && !method.used }
      else
        methods.reject(&:used)
      end
  end.reject { |method| method.access_control == 'public' && @possible_methods[method.method_name] }
end
get_method(class_name, method_name, access_control = nil) click to toggle source

Get a method in a class.

@param [String] class name @param [String] method name @param [String] access control @return [Method] Method object

# File lib/rails_best_practices/core/methods.rb, line 116
def get_method(class_name, method_name, access_control = nil)
  if access_control
    methods(class_name).find do |method|
      method.method_name == method_name && method.access_control == access_control
    end
  else
    methods(class_name).find { |method| method.method_name == method_name }
  end
end
get_methods(class_name, access_control = nil) click to toggle source

Get methods of a class.

@param [String] class name @param [String] access control @return [Array] all methods of a class for such access control, if access control is nil, return all public/protected/private methods

# File lib/rails_best_practices/core/methods.rb, line 33
def get_methods(class_name, access_control = nil)
  if access_control
    methods(class_name).select { |method| method.access_control == access_control }
  else
    methods(class_name)
  end
end
has_method?(class_name, method_name, access_control = nil) click to toggle source

If a class has a method.

@param [String] class name @param [String] method name @param [String] access control @return [Boolean] has a method or not

# File lib/rails_best_practices/core/methods.rb, line 47
def has_method?(class_name, method_name, access_control = nil)
  if access_control
    !!methods(class_name).find do |method|
      method.method_name == method_name && method.access_control == access_control
    end
  else
    !!methods(class_name).find { |method| method.method_name == method_name }
  end
end
mark_parent_class_method_used(class_name, method_name) click to toggle source

Mark parent class' method as used.

@param [String] class name @param [String] method name

# File lib/rails_best_practices/core/methods.rb, line 61
def mark_parent_class_method_used(class_name, method_name)
  klass = Prepares.klasses.find { |klass| klass.to_s == class_name }
  if klass&.extend_class_name
    mark_parent_class_method_used(klass.extend_class_name, method_name)
    method = get_method(klass.extend_class_name, method_name)
    method&.mark_used
  end
end
mark_parent_class_methods_publicize(class_name, method_name) click to toggle source

Mark parent classs' method as public.

@param [String] class name @param [String] method name

# File lib/rails_best_practices/core/methods.rb, line 95
def mark_parent_class_methods_publicize(class_name, method_name)
  klass = Prepares.klasses.find { |klass| klass.to_s == class_name }
  if klass&.extend_class_name
    mark_parent_class_methods_publicize(klass.extend_class_name, method_name)
    mark_publicize(class_name, method_name)
  end
end
mark_publicize(class_name, method_name) click to toggle source

Mark the method as public.

@param [String] class name @param [String] method name

# File lib/rails_best_practices/core/methods.rb, line 86
def mark_publicize(class_name, method_name)
  method = get_method(class_name, method_name)
  method&.publicize
end
mark_subclasses_method_used(class_name, method_name) click to toggle source

Mark sub classes' method as used.

@param [String] class name @param [String] method name

# File lib/rails_best_practices/core/methods.rb, line 74
def mark_subclasses_method_used(class_name, method_name)
  Prepares.klasses.select { |klass| klass.extend_class_name == class_name }.each do |klass|
    mark_subclasses_method_used(klass.to_s, method_name)
    method = get_method(klass.to_s, method_name)
    method&.mark_used
  end
end
possible_public_used(method_name) click to toggle source

Remomber the method name, the method is probably be used for the class' public method.

@param [String] method name

# File lib/rails_best_practices/core/methods.rb, line 106
def possible_public_used(method_name)
  @possible_methods[method_name] = true
end

Private Instance Methods

methods(class_name) click to toggle source

Methods of a class.

@param [String] class name @return [Array] array of methods

# File lib/rails_best_practices/core/methods.rb, line 147
def methods(class_name)
  @methods[class_name] ||= []
end