16: def describe_spot_price_history( options = {} )
17: raise ArgumentError, ":start_time must be a Time object" unless options[:start_time].nil? || options[:start_time].kind_of?(Time)
18: raise ArgumentError, ":end_time must be a Time object" unless options[:end_time].nil? || options[:end_time].kind_of?(Time)
19: raise ArgumentError, ":instance_type must specify a valid instance type" unless options[:instance_type].nil? || ["t1.micro", "m1.small", "m1.large", "m1.xlarge", "m2.xlarge", "c1.medium", "c1.xlarge", "m2.2xlarge", "m2.4xlarge", "cc1.4xlarge"].include?(options[:instance_type])
20: raise ArgumentError, ":product_description must be 'Linux/UNIX' or 'Windows'" unless options[:product_description].nil? || ["Linux/UNIX", "Windows"].include?(options[:product_description])
21:
22: params = {}
23: params.merge!("StartTime" => options[:start_time].iso8601) if options[:start_time]
24: params.merge!("EndTime" => options[:end_time].iso8601) if options[:end_time]
25: params.merge!("InstanceType" => options[:instance_type]) if options[:instance_type]
26: params.merge!("ProductDescription" => options[:product_description]) if options[:product_description]
27:
28: return response_generator(:action => "DescribeSpotPriceHistory", :params => params)
29: end