Skip to content

Instantly share code, notes, and snippets.

@ivopt
Created December 17, 2013 22:41
Show Gist options
  • Save ivopt/8013985 to your computer and use it in GitHub Desktop.
Save ivopt/8013985 to your computer and use it in GitHub Desktop.
module attribute accessors and defaults
class Module
# =============================================================================
def module_attr_reader opts
Array(opts).each do |m_name, default_value|
class_eval(<<-RUBY, __FILE__, __LINE__)
@@#{m_name} = default_value unless defined? @@#{m_name}
def self.#{m_name}; @@#{m_name}; end
RUBY
end
end
# =============================================================================
def module_attr_writer opts
Array(opts).each do |m_name, default_value|
class_eval(<<-RUBY, __FILE__, __LINE__)
@@#{m_name} = default_value unless defined? @@#{m_name}
def self.#{m_name}=(obj); @@#{m_name} = obj; end
RUBY
end
end
# =============================================================================
def module_attr_accessor opts
module_attr_writer opts
module_attr_reader opts
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment