Sha256: f401bbc762f765161d413ba87aa0712dc57834beb302708456ee9c7c2c9f6c3d

Contents?: true

Size: 514 Bytes

Versions: 1

Compression:

Stored size: 514 Bytes

Contents

# def foo opts = {}
#   @opts = StructOpts opts, foo: 123, bar: nil
#   ...

module StructOpts
  OPTS ||= {}

  def self.call vars, opts
    name   = '%sStructOpts' % self.class
    struct = StructOpts::OPTS[name] ||= Struct.new name, *opts.keys
    ivars  = struct.new

    vars.each do |k, v|
      ivars.send '%s=' % k, v
    end

    opts.each do |k, v|
      if vars[k].empty?
        ivars.send '%s=' % k, v
      end
    end

    ivars
  end
end

def StructOpts vars, opts
  StructOpts.call vars, opts
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lux-fw-0.6.2 ./lib/common/struct_opts.rb