# Case 1
# Simple case of a class having an instance method and a class method
class Person
def self.count
21
end
def name
"Neeraj"
end
end
puts Person.count
puts Person.new.name
---------------------------------------------------------------------
# Case 2
# A class includes a module to have an instance method
module PersonName
def name
"Neeraj"
end
end
class Person
def self.count
21
end
include PersonName
end
puts Person.count
puts Person.new.name
---------------------------------------------------------------------
# Case 3
# A module with self.method doesn't become a class method as
# it might seem on the surface
module PersonModule
def name
"Neeraj"
end
def self.count
21
end
end
class Person
include PersonModule
end
puts Person.new.name
# Following operation does not work. Exception message is undefined
# method `count' for Person:Class (NoMethodError)
puts Person.count
---------------------------------------------------------------------
# Case 4
# Including a module and thus creating a class method is a bit tricky.
# Simpler solutions are presented in next versions.
module PersonModule
def self.included(base_class)
base_class.extend(ClassMethods)
end
def name
"Neeraj"
end
module ClassMethods
def count
21
end
end
end
class Person
include PersonModule
end
puts Person.new.name
puts Person.count