My team has been reading existing ruby code to build our understanding. We commonly find things we don't quite understand, even with research. Please comment on the following questions.
Question 1
For the following code, why is class << self defined right under the module name? Does that imply defining a class with the module name?
module GravatarImageTag
class << self
attr_accessor :configuration
end
Question 2
Why does the author define class << self and go on to define methods with self.? Our understanding is thay you can define self. methods in a block that starts with class << self rather than repeat self. for each method.
module GravatarImageTag
class << self
attr_accessor :configuration
end
def self.configuration
@configuration ||= Configuration.new
end
def self.configure
yield(configuration)
end
Question 3
Why does the author use the class name rather than self in the method self.include(base)? Furthermore, with this file's structure, what is class is self.include(base) a member of? This relates to question 1.
module GravatarImageTag
class << self
attr_accessor :configuration
end
def self.configuration
@configuration ||= Configuration.new
end
def self.configure
yield(configuration)
end
class Configuration
attr_accessor :default_image, :filetype, :include_size_attributes,
:rating, :size, :secure
def initialize
@include_size_attributes = true
end
end
def self.included(base)
GravatarImageTag.configure { |c| nil }
base.extend ClassMethods
base.send :include, InstanceMethods
end
Thanks.