aws-sdk-core 2.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.simplecov +6 -0
  4. data/.travis.yml +12 -0
  5. data/.yardopts +11 -0
  6. data/Gemfile +26 -0
  7. data/LICENSE.txt +12 -0
  8. data/README.md +169 -0
  9. data/Rakefile +15 -0
  10. data/apis/AutoScaling-2011-01-01.json +1852 -0
  11. data/apis/CloudFormation-2010-05-15.json +981 -0
  12. data/apis/CloudFront-2012-05-05.json +3861 -0
  13. data/apis/CloudFront-2013-05-12.json +4593 -0
  14. data/apis/CloudFront-2013-08-26.json +4849 -0
  15. data/apis/CloudSearch-2011-02-01.json +2080 -0
  16. data/apis/CloudWatch-2010-08-01.json +1206 -0
  17. data/apis/DataPipeline-2012-10-29.json +901 -0
  18. data/apis/DirectConnect-2012-10-25.json +825 -0
  19. data/apis/DynamoDB-2011-12-05.json +2857 -0
  20. data/apis/DynamoDB-2012-08-10.json +3127 -0
  21. data/apis/EC2-2013-06-15.json +13600 -0
  22. data/apis/EC2-2013-10-01.json +14574 -0
  23. data/apis/EMR-2009-03-31.json +957 -0
  24. data/apis/ElastiCache-2012-11-15.json +2921 -0
  25. data/apis/ElastiCache-2013-06-15.json +3586 -0
  26. data/apis/ElasticBeanstalk-2010-12-01.json +2225 -0
  27. data/apis/ElasticLoadBalancing-2012-06-01.json +1215 -0
  28. data/apis/ElasticTranscoder-2012-09-25.json +3692 -0
  29. data/apis/Glacier-2012-06-01.json +1058 -0
  30. data/apis/IAM-2010-05-08.json +2863 -0
  31. data/apis/ImportExport-2010-06-01.json +328 -0
  32. data/apis/OpsWorks-2013-02-18.json +3546 -0
  33. data/apis/RDS-2013-01-10.json +6772 -0
  34. data/apis/RDS-2013-02-12.json +7151 -0
  35. data/apis/RDS-2013-05-15.json +7809 -0
  36. data/apis/Redshift-2012-12-01.json +4180 -0
  37. data/apis/Route53-2012-12-12.json +1018 -0
  38. data/apis/S3-2006-03-01.json +3787 -0
  39. data/apis/SDB-2009-04-15.json +539 -0
  40. data/apis/SES-2010-12-01.json +678 -0
  41. data/apis/SNS-2010-03-31.json +870 -0
  42. data/apis/SQS-2012-11-05.json +798 -0
  43. data/apis/STS-2011-06-15.json +352 -0
  44. data/apis/SWF-2012-01-25.json +5451 -0
  45. data/apis/StorageGateway-2012-06-30.json +1696 -0
  46. data/apis/Support-2013-04-15.json +794 -0
  47. data/apis/configuration/endpoints.json +1337 -0
  48. data/apis/source/autoscaling-2011-01-01.json +3215 -0
  49. data/apis/source/autoscaling-2011-01-01.paginators.json +52 -0
  50. data/apis/source/cloudformation-2010-05-15.json +1260 -0
  51. data/apis/source/cloudformation-2010-05-15.paginators.json +24 -0
  52. data/apis/source/cloudfront-2012-05-05.json +6588 -0
  53. data/apis/source/cloudfront-2012-05-05.paginators.json +28 -0
  54. data/apis/source/cloudfront-2013-05-12.json +7614 -0
  55. data/apis/source/cloudfront-2013-05-12.paginators.json +28 -0
  56. data/apis/source/cloudfront-2013-08-26.json +8016 -0
  57. data/apis/source/cloudfront-2013-08-26.paginators.json +28 -0
  58. data/apis/source/cloudsearch-2011-02-01.json +3585 -0
  59. data/apis/source/cloudsearch-2011-02-01.paginators.json +13 -0
  60. data/apis/source/datapipeline-2012-10-29.json +2144 -0
  61. data/apis/source/datapipeline-2012-10-29.paginators.json +25 -0
  62. data/apis/source/directconnect-2012-10-25.json +1271 -0
  63. data/apis/source/directconnect-2012-10-25.paginators.json +16 -0
  64. data/apis/source/dynamodb-2011-12-05.json +4380 -0
  65. data/apis/source/dynamodb-2011-12-05.paginators.json +24 -0
  66. data/apis/source/dynamodb-2012-08-10.json +4839 -0
  67. data/apis/source/dynamodb-2012-08-10.paginators.json +24 -0
  68. data/apis/source/ec2-2013-02-01.json +18820 -0
  69. data/apis/source/ec2-2013-02-01.paginators.json +115 -0
  70. data/apis/source/ec2-2013-06-15.json +18820 -0
  71. data/apis/source/ec2-2013-06-15.paginators.json +115 -0
  72. data/apis/source/ec2-2013-10-01.json +19885 -0
  73. data/apis/source/ec2-2013-10-01.paginators.json +115 -0
  74. data/apis/source/elasticache-2012-11-15.json +4403 -0
  75. data/apis/source/elasticache-2012-11-15.paginators.json +64 -0
  76. data/apis/source/elasticache-2013-06-15.json +5421 -0
  77. data/apis/source/elasticache-2013-06-15.paginators.json +64 -0
  78. data/apis/source/elasticbeanstalk-2010-12-01.json +3151 -0
  79. data/apis/source/elasticbeanstalk-2010-12-01.paginators.json +25 -0
  80. data/apis/source/elasticloadbalancing-2012-06-01.json +2041 -0
  81. data/apis/source/elasticloadbalancing-2012-06-01.paginators.json +18 -0
  82. data/apis/source/elasticmapreduce-2009-03-31.json +1478 -0
  83. data/apis/source/elasticmapreduce-2009-03-31.paginators.json +7 -0
  84. data/apis/source/elastictranscoder-2012-09-25.json +6148 -0
  85. data/apis/source/elastictranscoder-2012-09-25.paginators.json +20 -0
  86. data/apis/source/email-2010-12-01.json +892 -0
  87. data/apis/source/email-2010-12-01.paginators.json +13 -0
  88. data/apis/source/glacier-2012-06-01.json +3147 -0
  89. data/apis/source/glacier-2012-06-01.paginators.json +28 -0
  90. data/apis/source/iam-2010-05-08.json +5857 -0
  91. data/apis/source/iam-2010-05-08.paginators.json +116 -0
  92. data/apis/source/importexport-2010-06-01.json +876 -0
  93. data/apis/source/importexport-2010-06-01.paginators.json +10 -0
  94. data/apis/source/monitoring-2010-08-01.json +1910 -0
  95. data/apis/source/monitoring-2010-08-01.paginators.json +24 -0
  96. data/apis/source/opsworks-2013-02-18.json +5848 -0
  97. data/apis/source/opsworks-2013-02-18.paginators.json +46 -0
  98. data/apis/source/rds-2013-01-10.json +9283 -0
  99. data/apis/source/rds-2013-01-10.paginators.json +105 -0
  100. data/apis/source/rds-2013-02-12.json +9777 -0
  101. data/apis/source/rds-2013-02-12.paginators.json +105 -0
  102. data/apis/source/rds-2013-05-15.json +10618 -0
  103. data/apis/source/rds-2013-05-15.paginators.json +105 -0
  104. data/apis/source/redshift-2012-12-01.json +5742 -0
  105. data/apis/source/redshift-2012-12-01.paginators.json +74 -0
  106. data/apis/source/route53-2012-12-12.json +2067 -0
  107. data/apis/source/route53-2012-12-12.paginators.json +33 -0
  108. data/apis/source/s3-2006-03-01.json +4261 -0
  109. data/apis/source/s3-2006-03-01.paginators.json +46 -0
  110. data/apis/source/sdb-2009-04-15.json +1145 -0
  111. data/apis/source/sdb-2009-04-15.paginators.json +15 -0
  112. data/apis/source/sns-2010-03-31.json +2234 -0
  113. data/apis/source/sns-2010-03-31.paginators.json +19 -0
  114. data/apis/source/sqs-2012-11-05.json +1162 -0
  115. data/apis/source/sqs-2012-11-05.paginators.json +7 -0
  116. data/apis/source/storagegateway-2012-06-30.json +9487 -0
  117. data/apis/source/storagegateway-2012-06-30.paginators.json +28 -0
  118. data/apis/source/sts-2011-06-15.json +627 -0
  119. data/apis/source/support-2013-04-15.json +1261 -0
  120. data/apis/source/support-2013-04-15.paginators.json +31 -0
  121. data/apis/source/swf-2012-01-25.json +8744 -0
  122. data/apis/source/swf-2012-01-25.paginators.json +46 -0
  123. data/aws-sdk-core.gemspec +21 -0
  124. data/bin/aws.rb +156 -0
  125. data/doc-src/images/lastnode.png +0 -0
  126. data/doc-src/images/node.png +0 -0
  127. data/doc-src/images/vline.png +0 -0
  128. data/doc-src/plugins/apis.rb +205 -0
  129. data/doc-src/templates/default/fulldoc/html/css/common.css +90 -0
  130. data/doc-src/templates/default/fulldoc/html/js/tabs.js +21 -0
  131. data/doc-src/templates/default/fulldoc/html/setup.rb +61 -0
  132. data/doc-src/templates/default/layout/html/footer.erb +29 -0
  133. data/doc-src/templates/default/layout/html/setup.rb +3 -0
  134. data/features/autoscaling/client.feature +22 -0
  135. data/features/autoscaling/setup.rb +6 -0
  136. data/features/cloudformation/client.feature +18 -0
  137. data/features/cloudformation/setup.rb +6 -0
  138. data/features/cloudfront/client.feature +21 -0
  139. data/features/cloudfront/setup.rb +6 -0
  140. data/features/cloudsearch/client.feature +18 -0
  141. data/features/cloudsearch/setup.rb +6 -0
  142. data/features/cloudwatch/client.feature +21 -0
  143. data/features/cloudwatch/setup.rb +6 -0
  144. data/features/common/step_definitions.rb +65 -0
  145. data/features/datapipeline/client.feature +18 -0
  146. data/features/datapipeline/setup.rb +6 -0
  147. data/features/directconnect/client.feature +18 -0
  148. data/features/directconnect/setup.rb +6 -0
  149. data/features/dynamodb/client.feature +21 -0
  150. data/features/dynamodb/setup.rb +8 -0
  151. data/features/dynamodb/simplified.feature +32 -0
  152. data/features/dynamodb/step_definitions.rb +3 -0
  153. data/features/ec2/client.feature +21 -0
  154. data/features/ec2/setup.rb +6 -0
  155. data/features/ec2/step_definitions.rb +19 -0
  156. data/features/elasticache/client.feature +18 -0
  157. data/features/elasticache/setup.rb +6 -0
  158. data/features/elasticbeanstalk/client.feature +18 -0
  159. data/features/elasticbeanstalk/setup.rb +6 -0
  160. data/features/elasticloadbalancing/client.feature +18 -0
  161. data/features/elasticloadbalancing/setup.rb +6 -0
  162. data/features/elastictranscoder/client.feature +18 -0
  163. data/features/elastictranscoder/setup.rb +6 -0
  164. data/features/emr/client.feature +18 -0
  165. data/features/emr/setup.rb +6 -0
  166. data/features/env.rb +23 -0
  167. data/features/glacier/client.feature +28 -0
  168. data/features/glacier/setup.rb +16 -0
  169. data/features/glacier/step_definitions.rb +25 -0
  170. data/features/iam/client.feature +18 -0
  171. data/features/iam/setup.rb +6 -0
  172. data/features/importexport/client.feature +18 -0
  173. data/features/importexport/setup.rb +6 -0
  174. data/features/opsworks/client.feature +18 -0
  175. data/features/opsworks/setup.rb +6 -0
  176. data/features/rds/client.feature +18 -0
  177. data/features/rds/setup.rb +6 -0
  178. data/features/redshift/client.feature +18 -0
  179. data/features/redshift/setup.rb +6 -0
  180. data/features/route53/client.feature +18 -0
  181. data/features/route53/setup.rb +6 -0
  182. data/features/s3/buckets.feature +22 -0
  183. data/features/s3/objects.feature +18 -0
  184. data/features/s3/setup.rb +17 -0
  185. data/features/s3/step_definitions.rb +66 -0
  186. data/features/s3/test.png +0 -0
  187. data/features/sdb/client.feature +18 -0
  188. data/features/sdb/setup.rb +6 -0
  189. data/features/ses/client.feature +18 -0
  190. data/features/ses/setup.rb +6 -0
  191. data/features/sns/client.feature +18 -0
  192. data/features/sns/setup.rb +6 -0
  193. data/features/sqs/client.feature +23 -0
  194. data/features/sqs/setup.rb +10 -0
  195. data/features/sqs/step_definitions.rb +18 -0
  196. data/features/storagegateway/client.feature +18 -0
  197. data/features/storagegateway/setup.rb +6 -0
  198. data/features/sts/client.feature +18 -0
  199. data/features/sts/setup.rb +6 -0
  200. data/features/swf/client.feature +21 -0
  201. data/features/swf/setup.rb +6 -0
  202. data/integration-test-config.json.sample +3 -0
  203. data/lib/aws-sdk-core.rb +11 -0
  204. data/lib/aws.rb +175 -0
  205. data/lib/aws/api/base_translator.rb +72 -0
  206. data/lib/aws/api/doc_example.rb +116 -0
  207. data/lib/aws/api/documentor.rb +140 -0
  208. data/lib/aws/api/operation_translator.rb +77 -0
  209. data/lib/aws/api/service_namer.rb +40 -0
  210. data/lib/aws/api/service_translators/cloud_front.rb +19 -0
  211. data/lib/aws/api/service_translators/dynamo_db.rb +7 -0
  212. data/lib/aws/api/service_translators/glacier.rb +37 -0
  213. data/lib/aws/api/service_translators/import_export.rb +15 -0
  214. data/lib/aws/api/service_translators/route53.rb +23 -0
  215. data/lib/aws/api/service_translators/s3.rb +11 -0
  216. data/lib/aws/api/service_translators/sqs.rb +10 -0
  217. data/lib/aws/api/service_translators/swf.rb +7 -0
  218. data/lib/aws/api/shape_translator.rb +96 -0
  219. data/lib/aws/api/translator.rb +150 -0
  220. data/lib/aws/api/visitor.rb +32 -0
  221. data/lib/aws/credentials.rb +35 -0
  222. data/lib/aws/error_handler.rb +48 -0
  223. data/lib/aws/errors.rb +83 -0
  224. data/lib/aws/json/builder.rb +77 -0
  225. data/lib/aws/json/error_parser.rb +20 -0
  226. data/lib/aws/json/parser.rb +67 -0
  227. data/lib/aws/json/serializer.rb +15 -0
  228. data/lib/aws/plugins/credentials.rb +48 -0
  229. data/lib/aws/plugins/dynamodb_extended_retries.rb +22 -0
  230. data/lib/aws/plugins/glacier_api_version.rb +19 -0
  231. data/lib/aws/plugins/glacier_checksums.rb +100 -0
  232. data/lib/aws/plugins/global_configuration.rb +79 -0
  233. data/lib/aws/plugins/json_protocol.rb +30 -0
  234. data/lib/aws/plugins/json_rpc_headers.rb +34 -0
  235. data/lib/aws/plugins/query_protocol.rb +11 -0
  236. data/lib/aws/plugins/regional_endpoint.rb +37 -0
  237. data/lib/aws/plugins/retry_errors.rb +149 -0
  238. data/lib/aws/plugins/s3_bucket_dns.rb +78 -0
  239. data/lib/aws/plugins/s3_complete_multipart_upload_fix.rb +38 -0
  240. data/lib/aws/plugins/s3_get_bucket_location_fix.rb +21 -0
  241. data/lib/aws/plugins/s3_md5s.rb +61 -0
  242. data/lib/aws/plugins/s3_redirects.rb +38 -0
  243. data/lib/aws/plugins/s3_regional_endpoint.rb +19 -0
  244. data/lib/aws/plugins/s3_signer.rb +9 -0
  245. data/lib/aws/plugins/signature_v2.rb +9 -0
  246. data/lib/aws/plugins/signature_v3.rb +9 -0
  247. data/lib/aws/plugins/signature_v4.rb +29 -0
  248. data/lib/aws/plugins/sqs_queue_urls.rb +33 -0
  249. data/lib/aws/plugins/swf_read_timeouts.rb +23 -0
  250. data/lib/aws/plugins/user_agent.rb +32 -0
  251. data/lib/aws/plugins/xml_protocol.rb +11 -0
  252. data/lib/aws/query/builder.rb +102 -0
  253. data/lib/aws/query/param.rb +43 -0
  254. data/lib/aws/query/param_list.rb +91 -0
  255. data/lib/aws/query/serializer.rb +24 -0
  256. data/lib/aws/request_handler.rb +39 -0
  257. data/lib/aws/response_handler.rb +38 -0
  258. data/lib/aws/service.rb +237 -0
  259. data/lib/aws/signers/base.rb +29 -0
  260. data/lib/aws/signers/handler.rb +18 -0
  261. data/lib/aws/signers/s3.rb +162 -0
  262. data/lib/aws/signers/v2.rb +48 -0
  263. data/lib/aws/signers/v3.rb +34 -0
  264. data/lib/aws/signers/v4.rb +142 -0
  265. data/lib/aws/structure.rb +38 -0
  266. data/lib/aws/timestamp_formatter.rb +16 -0
  267. data/lib/aws/util.rb +38 -0
  268. data/lib/aws/version.rb +3 -0
  269. data/lib/aws/xml/builder.rb +134 -0
  270. data/lib/aws/xml/error_parser.rb +24 -0
  271. data/lib/aws/xml/parser.rb +147 -0
  272. data/lib/aws/xml/serializer.rb +16 -0
  273. data/spec/aws/credentials_spec.rb +39 -0
  274. data/spec/aws/iam_spec.rb +17 -0
  275. data/spec/aws/json/builder_spec.rb +183 -0
  276. data/spec/aws/json/parser_spec.rb +238 -0
  277. data/spec/aws/operations_spec.rb +145 -0
  278. data/spec/aws/plugins/credentials_spec.rb +76 -0
  279. data/spec/aws/plugins/global_configuration_spec.rb +56 -0
  280. data/spec/aws/plugins/region_endpoint_spec.rb +77 -0
  281. data/spec/aws/plugins/retry_errors_spec.rb +253 -0
  282. data/spec/aws/query/builder_spec.rb +361 -0
  283. data/spec/aws/query/param_list_spec.rb +80 -0
  284. data/spec/aws/query/param_spec.rb +59 -0
  285. data/spec/aws/service_spec.rb +247 -0
  286. data/spec/aws/signers/v4_spec.rb +141 -0
  287. data/spec/aws/structure_spec.rb +103 -0
  288. data/spec/aws/xml/builder_spec.rb +404 -0
  289. data/spec/aws/xml/parser_spec.rb +716 -0
  290. data/spec/aws_spec.rb +89 -0
  291. data/spec/fixtures/api/swf.json +100 -0
  292. data/spec/fixtures/operations/cloudfront/list_distributions.yml +195 -0
  293. data/spec/fixtures/operations/cloudfront/max_items.yml +12 -0
  294. data/spec/fixtures/operations/dynamodb/error_parsing.yml +13 -0
  295. data/spec/fixtures/operations/glacier/error_parsing.yml +10 -0
  296. data/spec/fixtures/operations/glacier/list_vaults.yml +24 -0
  297. data/spec/fixtures/operations/iam/result_wrapped_elements.yml +31 -0
  298. data/spec/fixtures/operations/s3/304_response.yml +12 -0
  299. data/spec/fixtures/operations/s3/400_response.yml +12 -0
  300. data/spec/fixtures/operations/s3/403_response.yml +12 -0
  301. data/spec/fixtures/operations/s3/404_response.yml +12 -0
  302. data/spec/fixtures/operations/s3/comlete_multipart_upload_error.yml +18 -0
  303. data/spec/fixtures/operations/s3/create_bucket_with_location_constraint.yml +25 -0
  304. data/spec/fixtures/operations/s3/create_bucket_without_location_constraint.yml +9 -0
  305. data/spec/fixtures/operations/s3/delete_objects.yml +54 -0
  306. data/spec/fixtures/operations/s3/error_parsing.yml +17 -0
  307. data/spec/fixtures/operations/s3/get_bucket_location.yml +17 -0
  308. data/spec/fixtures/operations/s3/get_bucket_location_classic.yml +17 -0
  309. data/spec/fixtures/operations/s3/head_bucket_with_dns_incompatible_name.yml +12 -0
  310. data/spec/fixtures/operations/s3/head_object.yml +50 -0
  311. data/spec/fixtures/operations/s3/list_buckets.yml +41 -0
  312. data/spec/fixtures/operations/s3/md5_checksum_disabled.yml +10 -0
  313. data/spec/fixtures/operations/s3/md5_checksum_enabled.yml +8 -0
  314. data/spec/fixtures/operations/swf/list_domains.yml +20 -0
  315. data/spec/spec_helper.rb +55 -0
  316. data/tasks/apis.rake +51 -0
  317. data/tasks/docs.rake +59 -0
  318. data/tasks/test.rake +39 -0
  319. data/vendor/seahorse/.gitignore +5 -0
  320. data/vendor/seahorse/.simplecov +4 -0
  321. data/vendor/seahorse/.yardopts +10 -0
  322. data/vendor/seahorse/Gemfile +20 -0
  323. data/vendor/seahorse/LICENSE.txt +12 -0
  324. data/vendor/seahorse/README.md +129 -0
  325. data/vendor/seahorse/Rakefile +7 -0
  326. data/vendor/seahorse/ca-bundle.crt +3554 -0
  327. data/vendor/seahorse/lib/seahorse.rb +6 -0
  328. data/vendor/seahorse/lib/seahorse/client.rb +61 -0
  329. data/vendor/seahorse/lib/seahorse/client/base.rb +239 -0
  330. data/vendor/seahorse/lib/seahorse/client/block_io.rb +39 -0
  331. data/vendor/seahorse/lib/seahorse/client/configuration.rb +197 -0
  332. data/vendor/seahorse/lib/seahorse/client/handler.rb +26 -0
  333. data/vendor/seahorse/lib/seahorse/client/handler_builder.rb +49 -0
  334. data/vendor/seahorse/lib/seahorse/client/handler_list.rb +250 -0
  335. data/vendor/seahorse/lib/seahorse/client/http/endpoint.rb +95 -0
  336. data/vendor/seahorse/lib/seahorse/client/http/headers.rb +94 -0
  337. data/vendor/seahorse/lib/seahorse/client/http/plain_string_io.rb +11 -0
  338. data/vendor/seahorse/lib/seahorse/client/http/request.rb +78 -0
  339. data/vendor/seahorse/lib/seahorse/client/http/response.rb +45 -0
  340. data/vendor/seahorse/lib/seahorse/client/logging/formatter.rb +319 -0
  341. data/vendor/seahorse/lib/seahorse/client/logging/handler.rb +35 -0
  342. data/vendor/seahorse/lib/seahorse/client/net_http/connection_pool.rb +339 -0
  343. data/vendor/seahorse/lib/seahorse/client/net_http/handler.rb +109 -0
  344. data/vendor/seahorse/lib/seahorse/client/param_converter.rb +202 -0
  345. data/vendor/seahorse/lib/seahorse/client/param_validator.rb +139 -0
  346. data/vendor/seahorse/lib/seahorse/client/plugin.rb +80 -0
  347. data/vendor/seahorse/lib/seahorse/client/plugin_list.rb +142 -0
  348. data/vendor/seahorse/lib/seahorse/client/plugins/api.rb +11 -0
  349. data/vendor/seahorse/lib/seahorse/client/plugins/content_length.rb +22 -0
  350. data/vendor/seahorse/lib/seahorse/client/plugins/endpoint.rb +36 -0
  351. data/vendor/seahorse/lib/seahorse/client/plugins/json_simple.rb +34 -0
  352. data/vendor/seahorse/lib/seahorse/client/plugins/logging.rb +37 -0
  353. data/vendor/seahorse/lib/seahorse/client/plugins/net_http.rb +26 -0
  354. data/vendor/seahorse/lib/seahorse/client/plugins/operation_methods.rb +48 -0
  355. data/vendor/seahorse/lib/seahorse/client/plugins/param_conversion.rb +29 -0
  356. data/vendor/seahorse/lib/seahorse/client/plugins/param_validation.rb +30 -0
  357. data/vendor/seahorse/lib/seahorse/client/plugins/raise_response_errors.rb +29 -0
  358. data/vendor/seahorse/lib/seahorse/client/plugins/restful_bindings.rb +205 -0
  359. data/vendor/seahorse/lib/seahorse/client/request.rb +62 -0
  360. data/vendor/seahorse/lib/seahorse/client/request_context.rb +68 -0
  361. data/vendor/seahorse/lib/seahorse/client/response.rb +106 -0
  362. data/vendor/seahorse/lib/seahorse/client/xml/builder.rb +92 -0
  363. data/vendor/seahorse/lib/seahorse/model.rb +38 -0
  364. data/vendor/seahorse/lib/seahorse/model/api.rb +39 -0
  365. data/vendor/seahorse/lib/seahorse/model/node.rb +102 -0
  366. data/vendor/seahorse/lib/seahorse/model/operation.rb +32 -0
  367. data/vendor/seahorse/lib/seahorse/model/operation_input.rb +30 -0
  368. data/vendor/seahorse/lib/seahorse/model/operations.rb +59 -0
  369. data/vendor/seahorse/lib/seahorse/model/property.rb +141 -0
  370. data/vendor/seahorse/lib/seahorse/model/shapes/shape.rb +229 -0
  371. data/vendor/seahorse/lib/seahorse/model/types.rb +8 -0
  372. data/vendor/seahorse/lib/seahorse/version.rb +3 -0
  373. data/vendor/seahorse/seahorse.gemspec +20 -0
  374. data/vendor/seahorse/spec/fixtures/plugin.rb +4 -0
  375. data/vendor/seahorse/spec/seahorse/client/base_spec.rb +308 -0
  376. data/vendor/seahorse/spec/seahorse/client/configuration_spec.rb +118 -0
  377. data/vendor/seahorse/spec/seahorse/client/handler_builder_spec.rb +159 -0
  378. data/vendor/seahorse/spec/seahorse/client/handler_list_spec.rb +243 -0
  379. data/vendor/seahorse/spec/seahorse/client/handler_spec.rb +40 -0
  380. data/vendor/seahorse/spec/seahorse/client/http/endpoint_spec.rb +168 -0
  381. data/vendor/seahorse/spec/seahorse/client/http/headers_spec.rb +213 -0
  382. data/vendor/seahorse/spec/seahorse/client/http/plain_string_io_spec.rb +23 -0
  383. data/vendor/seahorse/spec/seahorse/client/http/request_spec.rb +142 -0
  384. data/vendor/seahorse/spec/seahorse/client/http/response_spec.rb +77 -0
  385. data/vendor/seahorse/spec/seahorse/client/logging/formatter_spec.rb +197 -0
  386. data/vendor/seahorse/spec/seahorse/client/logging/handler_spec.rb +63 -0
  387. data/vendor/seahorse/spec/seahorse/client/net_http/connection_pool_spec.rb +10 -0
  388. data/vendor/seahorse/spec/seahorse/client/net_http/handler_spec.rb +232 -0
  389. data/vendor/seahorse/spec/seahorse/client/param_converter_spec.rb +318 -0
  390. data/vendor/seahorse/spec/seahorse/client/param_validator_spec.rb +271 -0
  391. data/vendor/seahorse/spec/seahorse/client/plugin_list_spec.rb +166 -0
  392. data/vendor/seahorse/spec/seahorse/client/plugin_spec.rb +118 -0
  393. data/vendor/seahorse/spec/seahorse/client/plugins/content_length_spec.rb +19 -0
  394. data/vendor/seahorse/spec/seahorse/client/plugins/endpoint_spec.rb +43 -0
  395. data/vendor/seahorse/spec/seahorse/client/plugins/logging_spec.rb +46 -0
  396. data/vendor/seahorse/spec/seahorse/client/plugins/net_http_spec.rb +71 -0
  397. data/vendor/seahorse/spec/seahorse/client/plugins/operation_methods_spec.rb +74 -0
  398. data/vendor/seahorse/spec/seahorse/client/plugins/restful_bindings/uri_path_builder_spec.rb +91 -0
  399. data/vendor/seahorse/spec/seahorse/client/request_context_spec.rb +105 -0
  400. data/vendor/seahorse/spec/seahorse/client/request_spec.rb +102 -0
  401. data/vendor/seahorse/spec/seahorse/client/response_spec.rb +171 -0
  402. data/vendor/seahorse/spec/seahorse/client/xml/builder/xml_doc_spec.rb +142 -0
  403. data/vendor/seahorse/spec/seahorse/client/xml/builder_spec.rb +10 -0
  404. data/vendor/seahorse/spec/seahorse/client_spec.rb +13 -0
  405. data/vendor/seahorse/spec/seahorse/model/api_spec.rb +72 -0
  406. data/vendor/seahorse/spec/seahorse/model/node_spec.rb +114 -0
  407. data/vendor/seahorse/spec/seahorse/model/operation_input_spec.rb +53 -0
  408. data/vendor/seahorse/spec/seahorse/model/operation_spec.rb +48 -0
  409. data/vendor/seahorse/spec/seahorse/model/operations_spec.rb +64 -0
  410. data/vendor/seahorse/spec/seahorse/model/property_spec.rb +136 -0
  411. data/vendor/seahorse/spec/seahorse/model/shapes/shape_spec.rb +105 -0
  412. data/vendor/seahorse/spec/seahorse/version_spec.rb +11 -0
  413. data/vendor/seahorse/spec/spec_helper.rb +34 -0
  414. data/vendor/seahorse/tasks/ca_bundle.rake +23 -0
  415. data/vendor/seahorse/tasks/docs.rake +11 -0
  416. data/vendor/seahorse/tasks/test.rake +26 -0
  417. metadata +614 -0
@@ -0,0 +1,16 @@
1
+ module Aws
2
+ # @api private
3
+ module TimestampFormatter
4
+
5
+ include Seahorse::Model::Shapes
6
+
7
+ def timestamp(shape, value)
8
+ value = case shape
9
+ when Iso8601TimestampShape then value.iso8601
10
+ when Rfc822TimestampShape then value.rfc822
11
+ when UnixTimestampShape then value.to_i
12
+ else raise "invalid timestamp format `#{shape.class.name}'"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,38 @@
1
+ require 'cgi'
2
+
3
+ module Aws
4
+ # @api private
5
+ module Util
6
+
7
+ # @param [String] string
8
+ # @return [String] Returns the underscored version of the given string.
9
+ def underscore(string)
10
+ inflector = Hash.new do |hash, key|
11
+ key.
12
+ gsub(/([A-Z0-9]+)([A-Z][a-z])/, '\1_\2'). # split acronyms
13
+ scan(/[a-z]+|\d+|[A-Z0-9]+[a-z]*/). # split words
14
+ join('_').downcase # join parts
15
+ end
16
+
17
+ # add a few irregular inflections
18
+ inflector['ETag'] = 'etag'
19
+ inflector['s3Bucket'] = 's3_bucket'
20
+ inflector['s3Key'] = 's3_key'
21
+ inflector['Ec2KeyName'] = 'ec2_key_name'
22
+ inflector['Ec2SubnetId'] = 'ec2_subnet_id'
23
+ inflector['Ec2VolumeId'] = 'ec2_volume_id'
24
+ inflector['Ec2InstanceId'] = 'ec2_instance_id'
25
+ inflector['ElastiCache'] = 'elasticache'
26
+ inflector['NotificationARNs'] = 'notification_arns'
27
+
28
+ inflector[string]
29
+ end
30
+ module_function :underscore
31
+
32
+ def uri_escape(string)
33
+ CGI::escape(string.encode('UTF-8')).gsub('+', '%20').gsub('%7E', '~')
34
+ end
35
+ module_function :uri_escape
36
+
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Aws
2
+ VERSION = '2.0.0.rc1'
3
+ end
@@ -0,0 +1,134 @@
1
+ require 'builder'
2
+ require 'base64'
3
+
4
+ module Aws
5
+ module Xml
6
+ # @api private
7
+ class Builder
8
+
9
+ include Seahorse::Model::Shapes
10
+ include TimestampFormatter
11
+
12
+ # @param [Seahorse::Model::Shapes::Shape] rules
13
+ def initialize(rules)
14
+ @xml = []
15
+ @builder = ::Builder::XmlMarkup.new(target: @xml, indent: 2)
16
+ @rules = rules
17
+ end
18
+
19
+ # @param [Hash] params
20
+ # @return [String] Returns an XML doc string.
21
+ def to_xml(params)
22
+ structure(@rules.serialized_name, @rules, params) unless params.empty?
23
+ @xml.join
24
+ end
25
+
26
+ class << self
27
+
28
+ # @param [Seahorse::Model::Shapes::Shape] rules
29
+ # @param [Hash] params
30
+ # @return [String] Returns an XML doc string.
31
+ def to_xml(rules, params)
32
+ new(rules).to_xml(params)
33
+ end
34
+ alias build to_xml
35
+
36
+ end
37
+
38
+ private
39
+
40
+ def structure(name, shape, values)
41
+ if values.empty?
42
+ node(name, shape)
43
+ else
44
+ node(name, shape, structure_attrs(shape, values)) do
45
+ shape.members.each_pair do |member_name, member_shape|
46
+ unless values[member_name].nil?
47
+ next if xml_attribute?(member_shape)
48
+ mname = member_shape.serialized_name
49
+ member(mname, member_shape, values[member_name])
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ def structure_attrs(shape, values)
57
+ shape.members.inject({}) do |attrs, (member_name, member_shape)|
58
+ if xml_attribute?(member_shape) && values.key?(member_name)
59
+ attrs[member_shape.serialized_name] = values[member_name]
60
+ end
61
+ attrs
62
+ end
63
+ end
64
+
65
+ def list(name, shape, values)
66
+ if flat?(shape)
67
+ values.each do |value|
68
+ member(name, shape.members, value)
69
+ end
70
+ else
71
+ node(name, shape) do
72
+ values.each do |value|
73
+ mname = shape.members.serialized_name || 'member'
74
+ member(mname, shape.members, value)
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ def member(name, shape, value)
81
+ case shape
82
+ when StructureShape then structure(name, shape, value)
83
+ when ListShape then list(name, shape, value)
84
+ else node(name, shape, format(shape, value))
85
+ end
86
+ end
87
+
88
+ def format(shape, value)
89
+ case shape
90
+ when TimestampShape then timestamp(shape, value.utc)
91
+ when BlobShape then Base64.strict_encode64(value)
92
+ else value.to_s
93
+ end
94
+ end
95
+
96
+ # The `args` list may contain:
97
+ #
98
+ # * [] - empty, no value or attributes
99
+ # * [value] - inline element, no attributes
100
+ # * [value, attributes_hash] - inline element with attributes
101
+ # * [attributes_hash] - self closing element with attributes
102
+ #
103
+ # Pass a block if you want to nest XML nodes inside. When doing this,
104
+ # you may *not* pass a value to the `args` list.
105
+ #
106
+ def node(name, shape, *args, &block)
107
+ attrs = args.last.is_a?(Hash) ? args.pop : {}
108
+ attrs = shape_attrs(shape).merge(attrs)
109
+ args << attrs
110
+ @builder.__send__(name, *args, &block)
111
+ end
112
+
113
+ def shape_attrs(shape)
114
+ if xmlns = shape.metadata['xmlns_uri']
115
+ prefix = shape.metadata['xmlns_prefix']
116
+ attribute = 'xmlns'
117
+ attribute += ':' + prefix if prefix
118
+ { attribute => xmlns }
119
+ else
120
+ {}
121
+ end
122
+ end
123
+
124
+ def xml_attribute?(shape)
125
+ !!shape.metadata['xmlattribute']
126
+ end
127
+
128
+ def flat?(shape)
129
+ FlatListShape === shape || FlatMapShape === shape
130
+ end
131
+
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,24 @@
1
+ module Aws
2
+ module Xml
3
+ class ErrorParser
4
+
5
+ def extract_error(response)
6
+ error = MultiXml.parse(response.http_response.body_contents)
7
+ %w(Response ErrorResponse Errors Error).each do |wrapper|
8
+ error = error[wrapper] if error[wrapper]
9
+ end
10
+ [remove_prefix(response, error['Code']), error['Message']]
11
+ end
12
+
13
+ def remove_prefix(response, error_code)
14
+ prefix = response.context.config.api.metadata['error_prefix']
15
+ if prefix = response.context.config.api.metadata['error_prefix']
16
+ error_code.sub(/^#{prefix}/, '')
17
+ else
18
+ error_code
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,147 @@
1
+ require 'multi_xml'
2
+ require 'time'
3
+ require 'base64'
4
+
5
+ module Aws
6
+ module Xml
7
+ # @api private
8
+ class Parser
9
+
10
+ include Seahorse::Model::Shapes
11
+
12
+ # @param [Seahorse::Model::Shapes::OutputShape] output
13
+ # @param [String<xml>] xml
14
+ # @return [Hash]
15
+ def parse(output, xml)
16
+ rules = apply_wrapper(output)
17
+ result = structure(rules, MultiXml.parse(xml).values.first || {})
18
+ remove_wrapper(output, result)
19
+ end
20
+
21
+ # @param [Seahorse::Model::Shapes::OutputShape] rules
22
+ # @param [String<xml>] xml
23
+ # @return [Hash]
24
+ def self.parse(rules, xml)
25
+ new.parse(rules, xml)
26
+ end
27
+
28
+ private
29
+
30
+ def apply_wrapper(shape)
31
+ if wrapper_name = shape.metadata['wrapper']
32
+ wrapper = Seahorse::Model::Shapes::OutputShape.new
33
+ wrapper.serialized_name = wrapper_name
34
+ wrapper.members[wrapper_name] = shape
35
+ wrapper
36
+ else
37
+ shape
38
+ end
39
+ end
40
+
41
+ def remove_wrapper(shape, data)
42
+ if wrapper_name = shape.metadata['wrapper']
43
+ data[wrapper_name]
44
+ else
45
+ data
46
+ end
47
+ end
48
+
49
+ def structure(shape, hash)
50
+ data = Structure.new(shape.members.keys)
51
+ shape.members.each do |member_name, member_shape|
52
+ key = member_xmlname(member_shape)
53
+ data[member_name] = member(member_shape, hash[key])
54
+ end
55
+ data
56
+ end
57
+
58
+ def list(shape, values)
59
+ member_shape = shape.members
60
+ unless flat?(shape)
61
+ values = values[member_shape.serialized_name || 'member']
62
+ end
63
+ values = [values] unless values.is_a?(Array)
64
+ values.map { |value| member(member_shape, value) }
65
+ end
66
+
67
+ def map(shape, entries)
68
+ key_shape = shape.keys
69
+ value_shape = shape.members
70
+ data = {}
71
+ entries = entries['entry'] unless flat?(shape)
72
+ entries = [entries] unless entries.is_a?(Array)
73
+ entries.each do |entry|
74
+ key = entry[key_shape.serialized_name || 'key']
75
+ value = entry[value_shape.serialized_name || 'value']
76
+ data[member(key_shape, key)] = member(value_shape, value)
77
+ end
78
+ data
79
+ end
80
+
81
+ def member_xmlname(shape)
82
+ if shape.is_a?(FlatListShape)
83
+ shape.members.serialized_name || shape.serialized_name
84
+ else
85
+ shape.serialized_name
86
+ end
87
+ end
88
+
89
+ def member(shape, raw)
90
+ if raw.nil?
91
+ case shape
92
+ when StructureShape then Structure.new(shape.members.keys)
93
+ when MapShape then {}
94
+ when ListShape then []
95
+ else nil
96
+ end
97
+ else
98
+ case shape
99
+ when StringShape then string(shape, raw)
100
+ when StructureShape then structure(shape, raw)
101
+ when ListShape then list(shape, raw)
102
+ when MapShape then map(shape, raw)
103
+ when BooleanShape then raw == 'true'
104
+ when IntegerShape then raw.to_i
105
+ when FloatShape then raw.to_f
106
+ when TimestampShape then timestamp(raw)
107
+ when BlobShape then Base64.decode64(raw)
108
+ else raw
109
+ end
110
+ end
111
+ end
112
+
113
+ def string(shape, raw)
114
+ if raw.is_a?(Hash)
115
+ decode_string(raw)
116
+ else
117
+ raw
118
+ end
119
+ end
120
+
121
+ def decode_string(raw)
122
+ case raw['encoding']
123
+ when 'base64' then Base64.decode64(raw['__content__'])
124
+ else raw['__content__']
125
+ end
126
+ end
127
+
128
+ def timestamp(raw)
129
+ case raw
130
+ when nil then nil
131
+ when /^\d+$/ then Time.at(raw.to_i)
132
+ else
133
+ begin
134
+ Time.parse(raw)
135
+ rescue ArgumentError
136
+ raise "unhandled timestamp format `#{raw}'"
137
+ end
138
+ end
139
+ end
140
+
141
+ def flat?(shape)
142
+ FlatListShape === shape || FlatMapShape === shape
143
+ end
144
+
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,16 @@
1
+ module Aws
2
+ module Xml
3
+ # @api private
4
+ class Serializer
5
+
6
+ def setup_request(context)
7
+ context.http_request.headers['Content-Type'] = 'application/xml'
8
+ end
9
+
10
+ def serialize_params(context, rules, params)
11
+ context.http_request.body = Builder.build(rules, params)
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module Aws
4
+ describe Credentials do
5
+
6
+ it 'provides access to the access key id' do
7
+ expect(Credentials.new('akid', 'secret').access_key_id).to eq('akid')
8
+ end
9
+
10
+ it 'provides access to the secret access key' do
11
+ expect(Credentials.new('akid', 'secret').secret_access_key).to eq('secret')
12
+ end
13
+
14
+ it 'provides access to the session tokey' do
15
+ creds = Credentials.new('akid', 'secret', 'token')
16
+ expect(creds.session_token).to eq('token')
17
+ end
18
+
19
+ it 'defaults the session token to nil' do
20
+ expect(Credentials.new('akid', 'secret').session_token).to be(nil)
21
+ end
22
+
23
+ describe '#set?' do
24
+
25
+ it 'returns true when the key and secret are both non nil values' do
26
+ expect(Credentials.new('akid', 'secret').set?).to be(true)
27
+ end
28
+
29
+ it 'returns false if the key is nil' do
30
+ expect(Credentials.new(nil, 'secret').set?).to be(false)
31
+ end
32
+
33
+ it 'returns false if the secret is nil' do
34
+ expect(Credentials.new('akid', nil).set?).to be(false)
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ module Aws
4
+ describe IAM do
5
+
6
+ it 'forces the endpoint to iam.amazonaws.com despite region' do
7
+ iam = IAM.new(region: 'us-west-2', credentials: dummy_credentials)
8
+ expect(iam.config.endpoint).to eq('iam.amazonaws.com')
9
+ end
10
+
11
+ it 'uses us-east-1 as the signing region' do
12
+ iam = IAM.new(region: 'us-west-2', credentials: dummy_credentials)
13
+ expect(iam.config.sigv4_region).to eq('us-east-1')
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,183 @@
1
+ require 'spec_helper'
2
+
3
+ module Aws
4
+ module Json
5
+ describe Builder do
6
+
7
+ let(:rules) {{
8
+ 'type' => 'input',
9
+ 'serialized_name' => 'xml',
10
+ 'members' => {},
11
+ }}
12
+
13
+ def json(params)
14
+ shape = Seahorse::Model::Shapes::Shape.from_hash(rules)
15
+ Builder.to_json(shape, params)
16
+ end
17
+
18
+ describe 'structures' do
19
+
20
+ it 'returns an empty xml doc when there are no params' do
21
+ expect(json({})).to eq('{}')
22
+ end
23
+
24
+ it 'omits params that are not in the rules' do
25
+ expect(json(abc: 'xyz')).to eq('{}')
26
+ end
27
+
28
+ it 'observes serialized name properties' do
29
+ rules['members'] = {
30
+ 'name' => { 'type' => 'string', 'serialized_name' => 'FullName' }
31
+ }
32
+ expect(json(name: 'John Doe')).to eq('{"FullName":"John Doe"}')
33
+ end
34
+
35
+ it 'serializes nested structures' do
36
+ rules['members'] = {
37
+ 'abc' => {
38
+ 'type' => 'structure',
39
+ 'members' => {
40
+ 'mno' => { 'type' => 'string', 'serialized_name' => 'MNO' }
41
+ }
42
+ }
43
+ }
44
+ expect(json(abc: { mno: 'xyz' })).to eq('{"abc":{"MNO":"xyz"}}')
45
+ end
46
+
47
+ end
48
+
49
+ describe 'lists' do
50
+
51
+ it 'serializes lists' do
52
+ rules['members'] = {
53
+ 'items' => {
54
+ 'type' => 'list',
55
+ 'members' => { 'type' => 'string' }
56
+ }
57
+ }
58
+ expect(json(items: %w(abc xyz))).to eq('{"items":["abc","xyz"]}')
59
+ end
60
+
61
+ it 'lists of complex shapes' do
62
+ rules['members'] = {
63
+ 'abc' => {
64
+ 'type' => 'list',
65
+ 'members' => {
66
+ 'type' => 'structure',
67
+ 'members' => {
68
+ 'mno' => { 'type' => 'string', 'serialized_name' => 'MNO' }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ expect(json(abc: [{mno:'xyz'}])).to eq('{"abc":[{"MNO":"xyz"}]}')
74
+ end
75
+
76
+ end
77
+
78
+ describe 'maps' do
79
+
80
+ it 'accepts an arbitrary hash of values' do
81
+ rules['members'] = {
82
+ 'attrs' => {
83
+ 'type' => 'map',
84
+ 'keys' => { 'type' => 'string' },
85
+ 'members' => { 'type' => 'string' }
86
+ }
87
+ }
88
+ params = { attrs: { 'Size' => 'large', 'Color' => 'red' } }
89
+ expect(json(params)).to eq('{"attrs":{"Size":"large","Color":"red"}}')
90
+ end
91
+
92
+ it 'supports complex hash values' do
93
+ rules['members'] = {
94
+ 'people' => {
95
+ 'type' => 'map',
96
+ 'keys' => { 'type' => 'string' },
97
+ 'members' => {
98
+ 'type' => 'structure',
99
+ 'members' => {
100
+ 'age' => { 'type' => 'integer', 'serialized_name' => 'AGE' }
101
+ }
102
+ }
103
+ }
104
+ }
105
+ params = { people: { 'John' => { age: 40 } } }
106
+ expect(json(params)).to eq('{"people":{"John":{"AGE":40}}}')
107
+ end
108
+
109
+ end
110
+
111
+ describe 'scalars' do
112
+
113
+ it 'serializes integers' do
114
+ rules['members'] = {
115
+ 'count' => { 'type' => 'integer' }
116
+ }
117
+ expect(json(count: 123)).to eq('{"count":123}')
118
+ end
119
+
120
+ it 'serializes floats' do
121
+ rules['members'] = {
122
+ 'price' => { 'type' => 'float' }
123
+ }
124
+ expect(json(price: 12.34)).to eq('{"price":12.34}')
125
+ end
126
+
127
+ it 'serializes booleans' do
128
+ rules['members'] = {
129
+ 'hot' => { 'type' => 'boolean' },
130
+ 'cold' => { 'type' => 'boolean' }
131
+ }
132
+ expect(json(hot:true, cold:false)).to eq('{"hot":true,"cold":false}')
133
+ end
134
+
135
+ it 'serializes iso8601 timestamps' do
136
+ now = Time.now
137
+ rules['members'] = {
138
+ 'when' => { 'type' => 'iso8601_timestamp' }
139
+ }
140
+ expect(json(when:now)).to eq("{\"when\":\"#{now.utc.iso8601}\"}")
141
+ end
142
+
143
+ it 'can serializes timestamps as rfc8622 strings' do
144
+ now = Time.now
145
+ rules['members'] = {
146
+ 'when' => {
147
+ 'type' => 'rfc822_timestamp'
148
+ }
149
+ }
150
+ expect(json(when:now)).to eq("{\"when\":\"#{now.utc.rfc822}\"}")
151
+ end
152
+
153
+ it 'can serializes timestamps as unix timestamps' do
154
+ now = Time.now
155
+ rules['members'] = {
156
+ 'when' => {
157
+ 'type' => 'unix_timestamp',
158
+ }
159
+ }
160
+ expect(json(when:now)).to eq("{\"when\":#{now.to_i}}")
161
+ end
162
+
163
+ it 'raises an error when the timestamp format is not specified' do
164
+ now = Time.now
165
+ rules['members'] = {
166
+ 'when' => {
167
+ 'type' => 'timestamp',
168
+ }
169
+ }
170
+ expect { json(when:now) }.to raise_error(/invalid timestamp/)
171
+ end
172
+
173
+ it 'serializes blobs as base64 strings' do
174
+ rules['members'] = {
175
+ 'data' => { 'type' => 'blob' }
176
+ }
177
+ expect(json(data:'hello')).to eq('{"data":"aGVsbG8="}')
178
+ end
179
+
180
+ end
181
+ end
182
+ end
183
+ end