def object_mask(*args)
    raise ArgumentError, "object_mask expects object mask strings" if args.empty? || (1 == args.count && !args[0])
    raise ArgumentError, "object_mask expects strings" if args.find{ |arg| !arg.kind_of?(String) }

    mask_parser = ObjectMaskParser.new()
    object_masks = args.collect { |mask_string| mask_parser.parse(mask_string)}.flatten
    object_mask = (@parameters[:object_mask] || []) + object_masks

    # we create a new object in case the user wants to store off the
    # filter chain and reuse it later
    APIParameterFilter.new(self.target, @parameters.merge({ :object_mask => object_mask }));
  end
def object_mask(*args)
    raise ArgumentError, "object_mask expects object mask strings" if args.empty? || (1 == args.count && !args[0])
    raise ArgumentError, "object_mask expects strings" if args.find{ |arg| !arg.kind_of?(String) }

    mask_parser = ObjectMaskParser.new()
    object_masks = args.collect { |mask_string| mask_parser.parse(mask_string)}.flatten
    object_mask = (@parameters[:object_mask] || []) + object_masks

    # we create a new object in case the user wants to store off the
    # filter chain and reuse it later
    APIParameterFilter.new(self.target, @parameters.merge({ :object_mask => object_mask }));
  end
Use this as part of a method call chain to add an object mask to
 the request. The arguments to object mask should be well formed
 Extended Object Mask strings:

   ticket_service.object_mask(
     "mask[createDate, modifyDate]",
     "mask(SoftLayer_Some_Type).aProperty").getObject

 The object_mask becomes part of the request sent to the server
 The object mask strings are parsed into ObjectMaskProperty trees
 and those trees are stored with the parameters. The trees are
 converted to strings immediately before the mask is used in a call