module Dieses::Application::Sheet::DSL

Public Class Methods

extended(klass) click to toggle source
Calls superclass method
# File lib/dieses/application/sheet.rb, line 30
def self.extended(klass)
  super

  klass.extend Support::ClassAttribute

  klass.define :proto
  klass.define :variants, default: {}
  klass.define :param,    default: Param.new
  klass.define :style,    default: Param.new
end

Public Instance Methods

sheet(name, desc, default: Undefined) click to toggle source
# File lib/dieses/application/sheet.rb, line 10
def sheet(name, desc, default: Undefined)
  Sheets.register name, klass: self, desc: desc, default: default
end
variant(key, desc, **kwargs) click to toggle source
# File lib/dieses/application/sheet.rb, line 14
def variant(key, desc, **kwargs)
  variants key.to_sym => Proto.new(name: key, desc: desc, param: Param.new(**kwargs))
end
variate(**kwargs, &block) click to toggle source
# File lib/dieses/application/sheet.rb, line 18
def variate(**kwargs, &block)
  kwargs.transform_values! { |value| [*value] }

  builder = proc { |keys, values| Proto.(**keys.zip(values).to_h) }
  variants = [nil].product(*kwargs.values).map { |_, *values| builder.call(kwargs.keys, values) }
  variants.each do |variant|
    variant.instance_exec(&block)
    self.variant variant.name, variant.desc, **variant.to_h
  end
  variants
end