def method_missing(method_name, *args, &block)
      key = normalize_method_name(method_name)

      if args.length > 0
        attrs[key] = args.length > 1 ? args : args[0]
      else
        attrs[key] ||= Store.new
        self.class.new(attrs[key], &block)
      end
    end
def method_missing(method_name, *args, &block)
      key = normalize_method_name(method_name)

      if args.length > 0
        attrs[key] = args.length > 1 ? args : args[0]
      else
        attrs[key] ||= Store.new
        self.class.new(attrs[key], &block)
      end
    end
Private: Initialize a new Builder

 Params:
 - attrs {Sequoia::Store} For internal use only (optional)

 Yields: block with key-value definitions


 Private: Method missing handler

 This is where all the magic happens

 Params:
 - method_name {Symbol} Method name
 - args        {Array}  Array of arguments sended to the method

 Yields: Block with nested definitions