module Tablesalt::DSLAccessor::ClassMethods

Private Instance Methods

_define_dsl_accessor(attr) click to toggle source
# File lib/tablesalt/dsl_accessor.rb, line 55
def _define_dsl_accessor(attr)
  ivar_name = attr_internal_ivar_name(attr)

  define_singleton_method attr do |*args|
    if instance_variable_defined?(ivar_name)
      raise NameError, "internal attribute #{attr} already set" if args.one?
      raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 0)" if args.size > 1

      instance_variable_get(ivar_name)
    else
      raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 1)" unless args.one?

      instance_variable_set(ivar_name, args.first)
    end
  end

  private_class_method attr
end
_define_instance_reader(attr) click to toggle source
# File lib/tablesalt/dsl_accessor.rb, line 74
def _define_instance_reader(attr)
  ivar_name = attr_internal_ivar_name(attr)

  define_method attr do
    self.class.instance_variable_get(ivar_name)
  end

  private attr
end
dsl_accessor(*accessors, **options) click to toggle source

@param *accessors [Array<String, Symbol>] A list of dsl accessor attributes to define @param :instance_reader [Boolean] If true, a reader method is defined on the instance. Default: false

# File lib/tablesalt/dsl_accessor.rb, line 48
def dsl_accessor(*accessors, **options)
  accessors.each do |attr|
    _define_dsl_accessor(attr)
    _define_instance_reader(attr) if options[:instance_reader]
  end
end