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