if body_object["required"] == false
is_required = false
end
- opt resource.to_sym, "#{resource} (request body)", {
+ _resource_opt_desc = "Either a string representing #{resource} as JSON or a filename from which to read #{resource} JSON (use '-' to read from stdin)."
+ if is_required
+ _resource_opt_desc += " This option must be specified."
+ end
+ opt resource.to_sym, _resource_opt_desc, {
required: is_required,
type: :string
}
request_parameters = {_profile:true}.merge(method_opts)
resource_body = request_parameters.delete(resource_schema.to_sym)
if resource_body
+ # check if resource_body is valid JSON by attempting to parse it
+ _is_json = true
+ begin
+ # we don't actually need the results of the parsing,
+ # just checking for the JSON::ParserError exception
+ JSON.parse resource_body
+ rescue JSON::ParserError => e
+ _is_json = false
+ end
+ if !_is_json
+ # if resource_body is not valid JSON, it should be a filename (or '-' for stdin)
+ if resource_body == '-'
+ _resource_body_file = $stdin
+ else
+ _resource_body_file = File.open(resource_body, 'r')
+ end
+ resource_body = _resource_body_file.read()
+ _resource_body_file.close()
+ end
request_body = {
resource_schema => resource_body
}