Class: Fulgur::Margin

Inherits:
Object
  • Object
show all
Defined in:
lib/fulgur/margin.rb

Class Method Summary collapse

Class Method Details

.__native_new__Object



6
# File 'lib/fulgur/margin.rb', line 6

alias_method :__native_new__, :new

.new(*args, **kwargs) ⇒ 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
32
33
# File 'lib/fulgur/margin.rb', line 8

def new(*args, **kwargs)
  unless kwargs.empty?
    raise ArgumentError, "positional and kwargs are mutually exclusive" unless args.empty?

    required = %i[top right bottom left]
    missing = required - kwargs.keys
    raise ArgumentError, "missing keys: #{missing.join(", ")}" unless missing.empty?

    t, r, b, l = kwargs.values_at(*required).map(&:to_f)
    return __build__(t, r, b, l)
  end

  case args.length
  when 1
    v = args[0].to_f
    __build__(v, v, v, v)
  when 2
    vv, hh = args.map(&:to_f)
    __build__(vv, hh, vv, hh)
  when 4
    t, r, b, l = args.map(&:to_f)
    __build__(t, r, b, l)
  else
    raise ArgumentError, "wrong number of arguments (#{args.length} for 1, 2, 4, or kwargs)"
  end
end