Module: L42::DataClass

Defined in:
lib/l42/data_class.rb

Defined Under Namespace

Classes: KeywordArgumentError, PositionalArgumentError

Instance Method Summary collapse

Instance Method Details

#attributes(*args, **kwds) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/l42/data_class.rb', line 8

def attributes(*args, **kwds)
  attr_reader(*args)
  attr_reader(*kwds.keys)

  define_method :initialize do |*a, **k|
    asize = a.size
    argssize = args.size
    raise PositionalArgumentError, "bad arity: expected were #{argssize} given are #{asize}\n#{a.inspect}" unless
    asize == args.size

    spourious = k.keys - kwds.keys
    raise KeywordArgumentError, "spurious keywords: #{spourious.inspect}" unless spourious.empty?

    args.zip(a).each { |name, value| instance_variable_set("@#{name}", value) }

    kwds.merge(k).each { |name, value| instance_variable_set("@#{name}", value) }

    begin
      init
    rescue NameError
      nil
    end
  end
end