Module: Tablesalt::DSLAccessor::ClassMethods

Defined in:
lib/tablesalt/dsl_accessor.rb

Instance Method Summary collapse

Instance Method Details

#_define_dsl_accessor(attr) ⇒ Object (private)



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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) ⇒ Object (private)



74
75
76
77
78
79
80
81
82
# 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) ⇒ Object (private)

Parameters:

  • *accessors (Array<String, Symbol>)

    A list of dsl accessor attributes to define

  • :instance_reader (Boolean)

    If true, a reader method is defined on the instance. Default: false



48
49
50
51
52
53
# 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