class RuboCop::Cop::Style::TopLevelMethodDefinition
end
define_method(:foo) { puts 1 }
class Foo
# good
end
end
def some_method
Struct.new do
# good
end
end
def self.some_method
class Foo
# good
end
end
def some_method
module Foo
# good
define_method(:foo) { puts 1 }
# bad
end
def self.some_method
# bad
end
def some_method
# bad
@example
Hence this cop is disabled by default.
However for ruby scripts it is perfectly fine to use top-level methods.
This cop looks for definitions of top-level methods and warns about them.
when ideally they should be organized in appropriate classes or modules.
Newcomers to ruby applications may write top-level methods,
def on_block(node)
def on_block(node) return unless define_method_block?(node) && top_level_method_definition?(node) add_offense(node) end
def on_def(node)
def on_def(node) return unless top_level_method_definition?(node) add_offense(node) end
def top_level_method_definition?(node)
def top_level_method_definition?(node) if node.parent&.begin_type? node.parent.root? else node.root? end end