module Mocca

Constants

VERSION

Public Class Methods

VStruct(**props) click to toggle source
Calls superclass method
# File lib/mocca/struct.rb, line 17
def self.VStruct(**props)
  Class.new(VStruct) do
    @props = props
    wrapper_raise = Tchae.Wrapper
    wrapper_retor = Tchae.Wrapper(::Tchae::Handling::RETURN_RESULT_OR_ERROR  )
    wrapper_retwra = Tchae.Wrapper(::Tchae::Handling::RETURN_WRAPPER  )
    h = {}
    p = []
    props.each{|a,klassmod|
      asym = a.to_sym
      define_method(asym) do 
        @values[asym]
      end
      create_validated_method("#{a}=", VStruct.is_a_wrapper(klassmod)) do |val|   @values[asym] = val    end     
        h[asym] = ->{ is_a? klassmod }
        p << ->{ is_a? klassmod }
    }
    wrapper_raise.args.positional.expect(*p)
    wrapper_retwra.args.positional.expect(*p)
    wrapper_retor.args.positional.expect(*p)
    
    wrapper_raise.args.keyword.expect(**h)
    wrapper_retwra.args.keyword.expect(**h)
    wrapper_retor.args.keyword.expect(**h)
    
    create_validated_singleton_method(:create_or_raise, wrapper_raise) do |*p, **kwparms|
     new(*p, **kwparms)
    end
    create_validated_singleton_method(:create_and_wrap,
                                       wrapper_retwra) do |*p, **kwparms|
      new(*p, **kwparms)
    end
    
    create_validated_singleton_method(:create_valid_or_error,
                                       wrapper_retor) do |*p, **kwparms|
      new(*p, **kwparms)
    end
    
    private_class_method :new
    define_method :initialize do |*p, **kwvals|
      super()
     
      p.zip(props.keys).each{|val, a| @values[a] = val}
      kwvals.each{|a, val|  @values[a] = val }
      
    end
    
  end
  
end