aws-sdk 1.32.0 → 1.67.0

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 (549) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aws-sdk.rb +1 -15
  3. metadata +16 -589
  4. data/.yardopts +0 -7
  5. data/LICENSE.txt +0 -12
  6. data/README.md +0 -291
  7. data/bin/aws-rb +0 -169
  8. data/ca-bundle.crt +0 -3554
  9. data/endpoints.json +0 -1506
  10. data/lib/aws.rb +0 -14
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +0 -869
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +0 -358
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +0 -2448
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +0 -2599
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +0 -2765
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +0 -2886
  17. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +0 -681
  18. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +0 -159
  19. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +0 -433
  20. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +0 -422
  21. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +0 -735
  22. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +0 -1168
  23. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +0 -2005
  24. data/lib/aws/api_config/EC2-2013-08-15.yml +0 -4708
  25. data/lib/aws/api_config/EC2-2013-10-01.yml +0 -4726
  26. data/lib/aws/api_config/EC2-2013-10-15.yml +0 -4726
  27. data/lib/aws/api_config/ELB-2012-06-01.yml +0 -632
  28. data/lib/aws/api_config/EMR-2009-03-31.yml +0 -953
  29. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +0 -1188
  30. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +0 -847
  31. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +0 -2285
  32. data/lib/aws/api_config/Glacier-2012-06-01.yml +0 -649
  33. data/lib/aws/api_config/IAM-2010-05-08.yml +0 -1297
  34. data/lib/aws/api_config/ImportExport-2010-06-01.yml +0 -109
  35. data/lib/aws/api_config/Kinesis-2013-12-02.yml +0 -201
  36. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +0 -1825
  37. data/lib/aws/api_config/RDS-2013-05-15.yml +0 -2464
  38. data/lib/aws/api_config/RDS-2013-09-09.yml +0 -2641
  39. data/lib/aws/api_config/Redshift-2012-12-01.yml +0 -2137
  40. data/lib/aws/api_config/Route53-2012-12-12.yml +0 -547
  41. data/lib/aws/api_config/SNS-2010-03-31.yml +0 -433
  42. data/lib/aws/api_config/SQS-2012-11-05.yml +0 -319
  43. data/lib/aws/api_config/STS-2011-06-15.yml +0 -147
  44. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +0 -306
  45. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +0 -346
  46. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +0 -2388
  47. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +0 -748
  48. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +0 -1025
  49. data/lib/aws/api_config/Support-2013-04-15.yml +0 -426
  50. data/lib/aws/auto_scaling.rb +0 -163
  51. data/lib/aws/auto_scaling/activity.rb +0 -102
  52. data/lib/aws/auto_scaling/activity_collection.rb +0 -81
  53. data/lib/aws/auto_scaling/client.rb +0 -48
  54. data/lib/aws/auto_scaling/config.rb +0 -18
  55. data/lib/aws/auto_scaling/errors.rb +0 -22
  56. data/lib/aws/auto_scaling/group.rb +0 -421
  57. data/lib/aws/auto_scaling/group_collection.rb +0 -96
  58. data/lib/aws/auto_scaling/group_options.rb +0 -155
  59. data/lib/aws/auto_scaling/instance.rb +0 -192
  60. data/lib/aws/auto_scaling/instance_collection.rb +0 -63
  61. data/lib/aws/auto_scaling/launch_configuration.rb +0 -162
  62. data/lib/aws/auto_scaling/launch_configuration_collection.rb +0 -160
  63. data/lib/aws/auto_scaling/notification_configuration.rb +0 -89
  64. data/lib/aws/auto_scaling/notification_configuration_collection.rb +0 -183
  65. data/lib/aws/auto_scaling/scaling_policy.rb +0 -142
  66. data/lib/aws/auto_scaling/scaling_policy_collection.rb +0 -72
  67. data/lib/aws/auto_scaling/scaling_policy_options.rb +0 -65
  68. data/lib/aws/auto_scaling/scheduled_action.rb +0 -141
  69. data/lib/aws/auto_scaling/scheduled_action_collection.rb +0 -202
  70. data/lib/aws/auto_scaling/tag.rb +0 -59
  71. data/lib/aws/auto_scaling/tag_collection.rb +0 -114
  72. data/lib/aws/cloud_formation.rb +0 -272
  73. data/lib/aws/cloud_formation/client.rb +0 -48
  74. data/lib/aws/cloud_formation/config.rb +0 -18
  75. data/lib/aws/cloud_formation/errors.rb +0 -22
  76. data/lib/aws/cloud_formation/stack.rb +0 -266
  77. data/lib/aws/cloud_formation/stack_collection.rb +0 -232
  78. data/lib/aws/cloud_formation/stack_event.rb +0 -73
  79. data/lib/aws/cloud_formation/stack_event_collection.rb +0 -47
  80. data/lib/aws/cloud_formation/stack_options.rb +0 -72
  81. data/lib/aws/cloud_formation/stack_output.rb +0 -53
  82. data/lib/aws/cloud_formation/stack_resource.rb +0 -117
  83. data/lib/aws/cloud_formation/stack_resource_collection.rb +0 -83
  84. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +0 -64
  85. data/lib/aws/cloud_formation/stack_summary_collection.rb +0 -123
  86. data/lib/aws/cloud_front.rb +0 -72
  87. data/lib/aws/cloud_front/client.rb +0 -45
  88. data/lib/aws/cloud_front/config.rb +0 -18
  89. data/lib/aws/cloud_front/errors.rb +0 -22
  90. data/lib/aws/cloud_search.rb +0 -73
  91. data/lib/aws/cloud_search/client.rb +0 -36
  92. data/lib/aws/cloud_search/config.rb +0 -18
  93. data/lib/aws/cloud_search/errors.rb +0 -22
  94. data/lib/aws/cloud_trail.rb +0 -72
  95. data/lib/aws/cloud_trail/client.rb +0 -35
  96. data/lib/aws/cloud_trail/config.rb +0 -18
  97. data/lib/aws/cloud_trail/errors.rb +0 -22
  98. data/lib/aws/cloud_watch.rb +0 -118
  99. data/lib/aws/cloud_watch/alarm.rb +0 -290
  100. data/lib/aws/cloud_watch/alarm_collection.rb +0 -153
  101. data/lib/aws/cloud_watch/alarm_history_item.rb +0 -50
  102. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +0 -84
  103. data/lib/aws/cloud_watch/client.rb +0 -40
  104. data/lib/aws/cloud_watch/config.rb +0 -18
  105. data/lib/aws/cloud_watch/errors.rb +0 -22
  106. data/lib/aws/cloud_watch/metric.rb +0 -135
  107. data/lib/aws/cloud_watch/metric_alarm_collection.rb +0 -160
  108. data/lib/aws/cloud_watch/metric_collection.rb +0 -129
  109. data/lib/aws/cloud_watch/metric_statistics.rb +0 -69
  110. data/lib/aws/core.rb +0 -701
  111. data/lib/aws/core/async_handle.rb +0 -90
  112. data/lib/aws/core/cacheable.rb +0 -77
  113. data/lib/aws/core/client.rb +0 -778
  114. data/lib/aws/core/collection.rb +0 -263
  115. data/lib/aws/core/collection/simple.rb +0 -82
  116. data/lib/aws/core/collection/with_limit_and_next_token.rb +0 -71
  117. data/lib/aws/core/collection/with_next_token.rb +0 -97
  118. data/lib/aws/core/configuration.rb +0 -541
  119. data/lib/aws/core/credential_providers.rb +0 -506
  120. data/lib/aws/core/data.rb +0 -247
  121. data/lib/aws/core/deprecations.rb +0 -84
  122. data/lib/aws/core/endpoints.rb +0 -37
  123. data/lib/aws/core/http/connection_pool.rb +0 -349
  124. data/lib/aws/core/http/curb_handler.rb +0 -148
  125. data/lib/aws/core/http/handler.rb +0 -89
  126. data/lib/aws/core/http/net_http_handler.rb +0 -147
  127. data/lib/aws/core/http/patch.rb +0 -102
  128. data/lib/aws/core/http/request.rb +0 -249
  129. data/lib/aws/core/http/response.rb +0 -81
  130. data/lib/aws/core/indifferent_hash.rb +0 -88
  131. data/lib/aws/core/inflection.rb +0 -56
  132. data/lib/aws/core/json_client.rb +0 -47
  133. data/lib/aws/core/json_parser.rb +0 -76
  134. data/lib/aws/core/json_request_builder.rb +0 -35
  135. data/lib/aws/core/json_response_parser.rb +0 -79
  136. data/lib/aws/core/lazy_error_classes.rb +0 -90
  137. data/lib/aws/core/log_formatter.rb +0 -428
  138. data/lib/aws/core/managed_file.rb +0 -32
  139. data/lib/aws/core/meta_utils.rb +0 -45
  140. data/lib/aws/core/model.rb +0 -57
  141. data/lib/aws/core/naming.rb +0 -30
  142. data/lib/aws/core/option_grammar.rb +0 -738
  143. data/lib/aws/core/options/json_serializer.rb +0 -82
  144. data/lib/aws/core/options/validator.rb +0 -155
  145. data/lib/aws/core/options/xml_serializer.rb +0 -118
  146. data/lib/aws/core/page_result.rb +0 -75
  147. data/lib/aws/core/policy.rb +0 -942
  148. data/lib/aws/core/query_client.rb +0 -41
  149. data/lib/aws/core/query_error_parser.rb +0 -24
  150. data/lib/aws/core/query_request_builder.rb +0 -47
  151. data/lib/aws/core/query_response_parser.rb +0 -35
  152. data/lib/aws/core/region.rb +0 -85
  153. data/lib/aws/core/region_collection.rb +0 -80
  154. data/lib/aws/core/resource.rb +0 -413
  155. data/lib/aws/core/resource_cache.rb +0 -40
  156. data/lib/aws/core/response.rb +0 -211
  157. data/lib/aws/core/response_cache.rb +0 -50
  158. data/lib/aws/core/rest_error_parser.rb +0 -24
  159. data/lib/aws/core/rest_json_client.rb +0 -40
  160. data/lib/aws/core/rest_request_builder.rb +0 -154
  161. data/lib/aws/core/rest_response_parser.rb +0 -66
  162. data/lib/aws/core/rest_xml_client.rb +0 -47
  163. data/lib/aws/core/service_interface.rb +0 -83
  164. data/lib/aws/core/signers/base.rb +0 -46
  165. data/lib/aws/core/signers/cloud_front.rb +0 -56
  166. data/lib/aws/core/signers/s3.rb +0 -159
  167. data/lib/aws/core/signers/version_2.rb +0 -72
  168. data/lib/aws/core/signers/version_3.rb +0 -86
  169. data/lib/aws/core/signers/version_3_https.rb +0 -61
  170. data/lib/aws/core/signers/version_4.rb +0 -228
  171. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +0 -191
  172. data/lib/aws/core/uri_escape.rb +0 -44
  173. data/lib/aws/core/xml/frame.rb +0 -244
  174. data/lib/aws/core/xml/frame_stack.rb +0 -85
  175. data/lib/aws/core/xml/grammar.rb +0 -306
  176. data/lib/aws/core/xml/parser.rb +0 -70
  177. data/lib/aws/core/xml/root_frame.rb +0 -65
  178. data/lib/aws/core/xml/sax_handlers/libxml.rb +0 -47
  179. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +0 -56
  180. data/lib/aws/core/xml/sax_handlers/ox.rb +0 -41
  181. data/lib/aws/core/xml/sax_handlers/rexml.rb +0 -47
  182. data/lib/aws/core/xml/stub.rb +0 -123
  183. data/lib/aws/data_pipeline.rb +0 -72
  184. data/lib/aws/data_pipeline/client.rb +0 -36
  185. data/lib/aws/data_pipeline/config.rb +0 -18
  186. data/lib/aws/data_pipeline/errors.rb +0 -20
  187. data/lib/aws/direct_connect.rb +0 -73
  188. data/lib/aws/direct_connect/client.rb +0 -36
  189. data/lib/aws/direct_connect/config.rb +0 -18
  190. data/lib/aws/direct_connect/errors.rb +0 -22
  191. data/lib/aws/dynamo_db.rb +0 -214
  192. data/lib/aws/dynamo_db/attribute_collection.rb +0 -456
  193. data/lib/aws/dynamo_db/batch_get.rb +0 -213
  194. data/lib/aws/dynamo_db/batch_write.rb +0 -252
  195. data/lib/aws/dynamo_db/binary.rb +0 -35
  196. data/lib/aws/dynamo_db/client.rb +0 -129
  197. data/lib/aws/dynamo_db/client/v20111205.rb +0 -1266
  198. data/lib/aws/dynamo_db/client/v20120810.rb +0 -1409
  199. data/lib/aws/dynamo_db/client_v2.rb +0 -44
  200. data/lib/aws/dynamo_db/config.rb +0 -24
  201. data/lib/aws/dynamo_db/errors.rb +0 -20
  202. data/lib/aws/dynamo_db/expectations.rb +0 -40
  203. data/lib/aws/dynamo_db/item.rb +0 -133
  204. data/lib/aws/dynamo_db/item_collection.rb +0 -856
  205. data/lib/aws/dynamo_db/item_data.rb +0 -31
  206. data/lib/aws/dynamo_db/keys.rb +0 -41
  207. data/lib/aws/dynamo_db/primary_key_element.rb +0 -48
  208. data/lib/aws/dynamo_db/resource.rb +0 -33
  209. data/lib/aws/dynamo_db/table.rb +0 -496
  210. data/lib/aws/dynamo_db/table_collection.rb +0 -165
  211. data/lib/aws/dynamo_db/types.rb +0 -111
  212. data/lib/aws/ec2.rb +0 -428
  213. data/lib/aws/ec2/attachment.rb +0 -135
  214. data/lib/aws/ec2/attachment_collection.rb +0 -54
  215. data/lib/aws/ec2/availability_zone.rb +0 -86
  216. data/lib/aws/ec2/availability_zone_collection.rb +0 -43
  217. data/lib/aws/ec2/block_device_mappings.rb +0 -53
  218. data/lib/aws/ec2/client.rb +0 -101
  219. data/lib/aws/ec2/collection.rb +0 -36
  220. data/lib/aws/ec2/config.rb +0 -30
  221. data/lib/aws/ec2/customer_gateway.rb +0 -90
  222. data/lib/aws/ec2/customer_gateway_collection.rb +0 -73
  223. data/lib/aws/ec2/dhcp_options.rb +0 -106
  224. data/lib/aws/ec2/dhcp_options_collection.rb +0 -87
  225. data/lib/aws/ec2/elastic_ip.rb +0 -209
  226. data/lib/aws/ec2/elastic_ip_collection.rb +0 -93
  227. data/lib/aws/ec2/errors.rb +0 -32
  228. data/lib/aws/ec2/export_task.rb +0 -120
  229. data/lib/aws/ec2/export_task_collection.rb +0 -67
  230. data/lib/aws/ec2/filtered_collection.rb +0 -87
  231. data/lib/aws/ec2/has_permissions.rb +0 -44
  232. data/lib/aws/ec2/image.rb +0 -270
  233. data/lib/aws/ec2/image_collection.rb +0 -220
  234. data/lib/aws/ec2/instance.rb +0 -803
  235. data/lib/aws/ec2/instance_collection.rb +0 -391
  236. data/lib/aws/ec2/internet_gateway.rb +0 -122
  237. data/lib/aws/ec2/internet_gateway/attachment.rb +0 -78
  238. data/lib/aws/ec2/internet_gateway_collection.rb +0 -54
  239. data/lib/aws/ec2/key_pair.rb +0 -82
  240. data/lib/aws/ec2/key_pair_collection.rb +0 -99
  241. data/lib/aws/ec2/network_acl.rb +0 -256
  242. data/lib/aws/ec2/network_acl/association.rb +0 -56
  243. data/lib/aws/ec2/network_acl/entry.rb +0 -147
  244. data/lib/aws/ec2/network_acl_collection.rb +0 -64
  245. data/lib/aws/ec2/network_interface.rb +0 -237
  246. data/lib/aws/ec2/network_interface/attachment.rb +0 -100
  247. data/lib/aws/ec2/network_interface_collection.rb +0 -103
  248. data/lib/aws/ec2/permission_collection.rb +0 -174
  249. data/lib/aws/ec2/region.rb +0 -106
  250. data/lib/aws/ec2/region_collection.rb +0 -51
  251. data/lib/aws/ec2/reserved_instances.rb +0 -56
  252. data/lib/aws/ec2/reserved_instances_collection.rb +0 -40
  253. data/lib/aws/ec2/reserved_instances_offering.rb +0 -60
  254. data/lib/aws/ec2/reserved_instances_offering_collection.rb +0 -45
  255. data/lib/aws/ec2/resource.rb +0 -161
  256. data/lib/aws/ec2/resource_tag_collection.rb +0 -211
  257. data/lib/aws/ec2/route_table.rb +0 -205
  258. data/lib/aws/ec2/route_table/association.rb +0 -119
  259. data/lib/aws/ec2/route_table/route.rb +0 -119
  260. data/lib/aws/ec2/route_table_collection.rb +0 -72
  261. data/lib/aws/ec2/security_group.rb +0 -482
  262. data/lib/aws/ec2/security_group/ip_permission.rb +0 -135
  263. data/lib/aws/ec2/security_group/ip_permission_collection.rb +0 -82
  264. data/lib/aws/ec2/security_group_collection.rb +0 -133
  265. data/lib/aws/ec2/snapshot.rb +0 -143
  266. data/lib/aws/ec2/snapshot_collection.rb +0 -131
  267. data/lib/aws/ec2/subnet.rb +0 -161
  268. data/lib/aws/ec2/subnet_collection.rb +0 -115
  269. data/lib/aws/ec2/tag.rb +0 -81
  270. data/lib/aws/ec2/tag_collection.rb +0 -107
  271. data/lib/aws/ec2/tagged_collection.rb +0 -53
  272. data/lib/aws/ec2/tagged_item.rb +0 -85
  273. data/lib/aws/ec2/volume.rb +0 -174
  274. data/lib/aws/ec2/volume_collection.rb +0 -98
  275. data/lib/aws/ec2/vpc.rb +0 -166
  276. data/lib/aws/ec2/vpc_collection.rb +0 -70
  277. data/lib/aws/ec2/vpn_connection.rb +0 -99
  278. data/lib/aws/ec2/vpn_connection/telemetry.rb +0 -49
  279. data/lib/aws/ec2/vpn_connection_collection.rb +0 -96
  280. data/lib/aws/ec2/vpn_gateway.rb +0 -123
  281. data/lib/aws/ec2/vpn_gateway/attachment.rb +0 -45
  282. data/lib/aws/ec2/vpn_gateway_collection.rb +0 -77
  283. data/lib/aws/elastic_beanstalk.rb +0 -49
  284. data/lib/aws/elastic_beanstalk/client.rb +0 -36
  285. data/lib/aws/elastic_beanstalk/config.rb +0 -18
  286. data/lib/aws/elastic_beanstalk/errors.rb +0 -22
  287. data/lib/aws/elastic_transcoder.rb +0 -29
  288. data/lib/aws/elastic_transcoder/client.rb +0 -48
  289. data/lib/aws/elastic_transcoder/config.rb +0 -18
  290. data/lib/aws/elastic_transcoder/errors.rb +0 -23
  291. data/lib/aws/elasticache.rb +0 -49
  292. data/lib/aws/elasticache/client.rb +0 -35
  293. data/lib/aws/elasticache/config.rb +0 -18
  294. data/lib/aws/elasticache/errors.rb +0 -22
  295. data/lib/aws/elb.rb +0 -66
  296. data/lib/aws/elb/availability_zone_collection.rb +0 -138
  297. data/lib/aws/elb/backend_server_policy_collection.rb +0 -139
  298. data/lib/aws/elb/client.rb +0 -35
  299. data/lib/aws/elb/config.rb +0 -18
  300. data/lib/aws/elb/errors.rb +0 -26
  301. data/lib/aws/elb/instance_collection.rb +0 -168
  302. data/lib/aws/elb/listener.rb +0 -190
  303. data/lib/aws/elb/listener_collection.rb +0 -113
  304. data/lib/aws/elb/listener_opts.rb +0 -45
  305. data/lib/aws/elb/load_balancer.rb +0 -280
  306. data/lib/aws/elb/load_balancer_collection.rb +0 -146
  307. data/lib/aws/elb/load_balancer_policy.rb +0 -93
  308. data/lib/aws/elb/load_balancer_policy_collection.rb +0 -208
  309. data/lib/aws/emr.rb +0 -87
  310. data/lib/aws/emr/client.rb +0 -35
  311. data/lib/aws/emr/config.rb +0 -18
  312. data/lib/aws/emr/errors.rb +0 -22
  313. data/lib/aws/emr/instance_group.rb +0 -138
  314. data/lib/aws/emr/instance_group_collection.rb +0 -82
  315. data/lib/aws/emr/job_flow.rb +0 -307
  316. data/lib/aws/emr/job_flow_collection.rb +0 -185
  317. data/lib/aws/errors.rb +0 -162
  318. data/lib/aws/glacier.rb +0 -79
  319. data/lib/aws/glacier/archive.rb +0 -56
  320. data/lib/aws/glacier/archive_collection.rb +0 -146
  321. data/lib/aws/glacier/client.rb +0 -49
  322. data/lib/aws/glacier/config.rb +0 -19
  323. data/lib/aws/glacier/errors.rb +0 -22
  324. data/lib/aws/glacier/resource.rb +0 -30
  325. data/lib/aws/glacier/vault.rb +0 -145
  326. data/lib/aws/glacier/vault_collection.rb +0 -75
  327. data/lib/aws/glacier/vault_notification_configuration.rb +0 -29
  328. data/lib/aws/iam.rb +0 -408
  329. data/lib/aws/iam/access_key.rb +0 -185
  330. data/lib/aws/iam/access_key_collection.rb +0 -128
  331. data/lib/aws/iam/account_alias_collection.rb +0 -79
  332. data/lib/aws/iam/client.rb +0 -49
  333. data/lib/aws/iam/collection.rb +0 -83
  334. data/lib/aws/iam/config.rb +0 -18
  335. data/lib/aws/iam/errors.rb +0 -22
  336. data/lib/aws/iam/group.rb +0 -111
  337. data/lib/aws/iam/group_collection.rb +0 -132
  338. data/lib/aws/iam/group_policy_collection.rb +0 -47
  339. data/lib/aws/iam/group_user_collection.rb +0 -84
  340. data/lib/aws/iam/login_profile.rb +0 -99
  341. data/lib/aws/iam/mfa_device.rb +0 -52
  342. data/lib/aws/iam/mfa_device_collection.rb +0 -127
  343. data/lib/aws/iam/policy.rb +0 -46
  344. data/lib/aws/iam/policy_collection.rb +0 -188
  345. data/lib/aws/iam/resource.rb +0 -62
  346. data/lib/aws/iam/server_certificate.rb +0 -141
  347. data/lib/aws/iam/server_certificate_collection.rb +0 -138
  348. data/lib/aws/iam/signing_certificate.rb +0 -174
  349. data/lib/aws/iam/signing_certificate_collection.rb +0 -131
  350. data/lib/aws/iam/user.rb +0 -200
  351. data/lib/aws/iam/user_collection.rb +0 -133
  352. data/lib/aws/iam/user_group_collection.rb +0 -98
  353. data/lib/aws/iam/user_policy.rb +0 -90
  354. data/lib/aws/iam/user_policy_collection.rb +0 -45
  355. data/lib/aws/iam/virtual_mfa_device.rb +0 -139
  356. data/lib/aws/iam/virtual_mfa_device_collection.rb +0 -73
  357. data/lib/aws/import_export.rb +0 -73
  358. data/lib/aws/import_export/client.rb +0 -35
  359. data/lib/aws/import_export/config.rb +0 -19
  360. data/lib/aws/import_export/errors.rb +0 -22
  361. data/lib/aws/kinesis.rb +0 -53
  362. data/lib/aws/kinesis/client.rb +0 -35
  363. data/lib/aws/kinesis/config.rb +0 -18
  364. data/lib/aws/kinesis/errors.rb +0 -20
  365. data/lib/aws/ops_works.rb +0 -29
  366. data/lib/aws/ops_works/client.rb +0 -35
  367. data/lib/aws/ops_works/config.rb +0 -18
  368. data/lib/aws/ops_works/errors.rb +0 -20
  369. data/lib/aws/rails.rb +0 -195
  370. data/lib/aws/rds.rb +0 -70
  371. data/lib/aws/rds/client.rb +0 -42
  372. data/lib/aws/rds/config.rb +0 -18
  373. data/lib/aws/rds/db_instance.rb +0 -216
  374. data/lib/aws/rds/db_instance_collection.rb +0 -75
  375. data/lib/aws/rds/db_snapshot.rb +0 -163
  376. data/lib/aws/rds/db_snapshot_collection.rb +0 -89
  377. data/lib/aws/rds/errors.rb +0 -22
  378. data/lib/aws/record.rb +0 -139
  379. data/lib/aws/record/abstract_base.rb +0 -690
  380. data/lib/aws/record/attributes.rb +0 -388
  381. data/lib/aws/record/conversion.rb +0 -38
  382. data/lib/aws/record/dirty_tracking.rb +0 -287
  383. data/lib/aws/record/errors.rb +0 -143
  384. data/lib/aws/record/exceptions.rb +0 -51
  385. data/lib/aws/record/hash_model.rb +0 -204
  386. data/lib/aws/record/hash_model/attributes.rb +0 -195
  387. data/lib/aws/record/hash_model/finder_methods.rb +0 -172
  388. data/lib/aws/record/hash_model/scope.rb +0 -108
  389. data/lib/aws/record/model.rb +0 -453
  390. data/lib/aws/record/model/attributes.rb +0 -377
  391. data/lib/aws/record/model/finder_methods.rb +0 -232
  392. data/lib/aws/record/model/scope.rb +0 -212
  393. data/lib/aws/record/naming.rb +0 -31
  394. data/lib/aws/record/scope.rb +0 -203
  395. data/lib/aws/record/validations.rb +0 -694
  396. data/lib/aws/record/validator.rb +0 -246
  397. data/lib/aws/record/validators/acceptance.rb +0 -49
  398. data/lib/aws/record/validators/block.rb +0 -36
  399. data/lib/aws/record/validators/confirmation.rb +0 -41
  400. data/lib/aws/record/validators/count.rb +0 -106
  401. data/lib/aws/record/validators/exclusion.rb +0 -41
  402. data/lib/aws/record/validators/format.rb +0 -55
  403. data/lib/aws/record/validators/inclusion.rb +0 -54
  404. data/lib/aws/record/validators/length.rb +0 -105
  405. data/lib/aws/record/validators/method.rb +0 -31
  406. data/lib/aws/record/validators/numericality.rb +0 -136
  407. data/lib/aws/record/validators/presence.rb +0 -43
  408. data/lib/aws/redshift.rb +0 -51
  409. data/lib/aws/redshift/client.rb +0 -35
  410. data/lib/aws/redshift/config.rb +0 -18
  411. data/lib/aws/redshift/errors.rb +0 -22
  412. data/lib/aws/route_53.rb +0 -86
  413. data/lib/aws/route_53/change_batch.rb +0 -161
  414. data/lib/aws/route_53/change_info.rb +0 -72
  415. data/lib/aws/route_53/client.rb +0 -35
  416. data/lib/aws/route_53/config.rb +0 -18
  417. data/lib/aws/route_53/errors.rb +0 -22
  418. data/lib/aws/route_53/hosted_zone.rb +0 -111
  419. data/lib/aws/route_53/hosted_zone_collection.rb +0 -100
  420. data/lib/aws/route_53/resource_record_set.rb +0 -251
  421. data/lib/aws/route_53/resource_record_set_collection.rb +0 -110
  422. data/lib/aws/s3.rb +0 -156
  423. data/lib/aws/s3/access_control_list.rb +0 -265
  424. data/lib/aws/s3/acl_object.rb +0 -264
  425. data/lib/aws/s3/acl_options.rb +0 -204
  426. data/lib/aws/s3/bucket.rb +0 -742
  427. data/lib/aws/s3/bucket_collection.rb +0 -162
  428. data/lib/aws/s3/bucket_lifecycle_configuration.rb +0 -457
  429. data/lib/aws/s3/bucket_tag_collection.rb +0 -111
  430. data/lib/aws/s3/bucket_version_collection.rb +0 -79
  431. data/lib/aws/s3/cipher_io.rb +0 -120
  432. data/lib/aws/s3/client.rb +0 -1919
  433. data/lib/aws/s3/client/xml.rb +0 -259
  434. data/lib/aws/s3/config.rb +0 -48
  435. data/lib/aws/s3/cors_rule.rb +0 -108
  436. data/lib/aws/s3/cors_rule_collection.rb +0 -194
  437. data/lib/aws/s3/data_options.rb +0 -191
  438. data/lib/aws/s3/encryption_utils.rb +0 -146
  439. data/lib/aws/s3/errors.rb +0 -94
  440. data/lib/aws/s3/multipart_upload.rb +0 -351
  441. data/lib/aws/s3/multipart_upload_collection.rb +0 -76
  442. data/lib/aws/s3/object_collection.rb +0 -353
  443. data/lib/aws/s3/object_metadata.rb +0 -103
  444. data/lib/aws/s3/object_upload_collection.rb +0 -77
  445. data/lib/aws/s3/object_version.rb +0 -154
  446. data/lib/aws/s3/object_version_collection.rb +0 -89
  447. data/lib/aws/s3/paginated_collection.rb +0 -75
  448. data/lib/aws/s3/policy.rb +0 -74
  449. data/lib/aws/s3/prefix_and_delimiter_collection.rb +0 -47
  450. data/lib/aws/s3/prefixed_collection.rb +0 -85
  451. data/lib/aws/s3/presign_v4.rb +0 -127
  452. data/lib/aws/s3/presigned_post.rb +0 -554
  453. data/lib/aws/s3/request.rb +0 -62
  454. data/lib/aws/s3/s3_object.rb +0 -1781
  455. data/lib/aws/s3/tree.rb +0 -116
  456. data/lib/aws/s3/tree/branch_node.rb +0 -68
  457. data/lib/aws/s3/tree/child_collection.rb +0 -104
  458. data/lib/aws/s3/tree/leaf_node.rb +0 -94
  459. data/lib/aws/s3/tree/node.rb +0 -22
  460. data/lib/aws/s3/tree/parent.rb +0 -87
  461. data/lib/aws/s3/uploaded_part.rb +0 -82
  462. data/lib/aws/s3/uploaded_part_collection.rb +0 -84
  463. data/lib/aws/s3/website_configuration.rb +0 -102
  464. data/lib/aws/simple_db.rb +0 -218
  465. data/lib/aws/simple_db/attribute.rb +0 -156
  466. data/lib/aws/simple_db/attribute_collection.rb +0 -240
  467. data/lib/aws/simple_db/client.rb +0 -67
  468. data/lib/aws/simple_db/config.rb +0 -20
  469. data/lib/aws/simple_db/consistent_read_option.rb +0 -42
  470. data/lib/aws/simple_db/delete_attributes.rb +0 -62
  471. data/lib/aws/simple_db/domain.rb +0 -123
  472. data/lib/aws/simple_db/domain_collection.rb +0 -86
  473. data/lib/aws/simple_db/domain_metadata.rb +0 -110
  474. data/lib/aws/simple_db/errors.rb +0 -55
  475. data/lib/aws/simple_db/expect_condition_option.rb +0 -45
  476. data/lib/aws/simple_db/item.rb +0 -93
  477. data/lib/aws/simple_db/item_collection.rb +0 -654
  478. data/lib/aws/simple_db/item_data.rb +0 -73
  479. data/lib/aws/simple_db/put_attributes.rb +0 -60
  480. data/lib/aws/simple_email_service.rb +0 -430
  481. data/lib/aws/simple_email_service/client.rb +0 -37
  482. data/lib/aws/simple_email_service/config.rb +0 -18
  483. data/lib/aws/simple_email_service/email_address_collection.rb +0 -69
  484. data/lib/aws/simple_email_service/errors.rb +0 -22
  485. data/lib/aws/simple_email_service/identity.rb +0 -209
  486. data/lib/aws/simple_email_service/identity_collection.rb +0 -81
  487. data/lib/aws/simple_email_service/quotas.rb +0 -66
  488. data/lib/aws/simple_workflow.rb +0 -227
  489. data/lib/aws/simple_workflow/activity_task.rb +0 -178
  490. data/lib/aws/simple_workflow/activity_task_collection.rb +0 -123
  491. data/lib/aws/simple_workflow/activity_type.rb +0 -131
  492. data/lib/aws/simple_workflow/activity_type_collection.rb +0 -93
  493. data/lib/aws/simple_workflow/client.rb +0 -69
  494. data/lib/aws/simple_workflow/config.rb +0 -18
  495. data/lib/aws/simple_workflow/count.rb +0 -49
  496. data/lib/aws/simple_workflow/decision_task.rb +0 -603
  497. data/lib/aws/simple_workflow/decision_task_collection.rb +0 -225
  498. data/lib/aws/simple_workflow/domain.rb +0 -122
  499. data/lib/aws/simple_workflow/domain_collection.rb +0 -169
  500. data/lib/aws/simple_workflow/errors.rb +0 -20
  501. data/lib/aws/simple_workflow/history_event.rb +0 -276
  502. data/lib/aws/simple_workflow/history_event_collection.rb +0 -76
  503. data/lib/aws/simple_workflow/option_formatters.rb +0 -82
  504. data/lib/aws/simple_workflow/resource.rb +0 -94
  505. data/lib/aws/simple_workflow/type.rb +0 -89
  506. data/lib/aws/simple_workflow/type_collection.rb +0 -140
  507. data/lib/aws/simple_workflow/workflow_execution.rb +0 -384
  508. data/lib/aws/simple_workflow/workflow_execution_collection.rb +0 -617
  509. data/lib/aws/simple_workflow/workflow_type.rb +0 -179
  510. data/lib/aws/simple_workflow/workflow_type_collection.rb +0 -91
  511. data/lib/aws/sns.rb +0 -76
  512. data/lib/aws/sns/client.rb +0 -35
  513. data/lib/aws/sns/config.rb +0 -18
  514. data/lib/aws/sns/errors.rb +0 -22
  515. data/lib/aws/sns/has_delivery_policy.rb +0 -68
  516. data/lib/aws/sns/message.rb +0 -194
  517. data/lib/aws/sns/originators/from_auto_scaling.rb +0 -68
  518. data/lib/aws/sns/policy.rb +0 -47
  519. data/lib/aws/sns/subscription.rb +0 -165
  520. data/lib/aws/sns/subscription_collection.rb +0 -78
  521. data/lib/aws/sns/topic.rb +0 -403
  522. data/lib/aws/sns/topic_collection.rb +0 -62
  523. data/lib/aws/sns/topic_subscription_collection.rb +0 -54
  524. data/lib/aws/sqs.rb +0 -80
  525. data/lib/aws/sqs/client.rb +0 -53
  526. data/lib/aws/sqs/config.rb +0 -20
  527. data/lib/aws/sqs/errors.rb +0 -125
  528. data/lib/aws/sqs/policy.rb +0 -48
  529. data/lib/aws/sqs/queue.rb +0 -843
  530. data/lib/aws/sqs/queue_collection.rb +0 -182
  531. data/lib/aws/sqs/received_message.rb +0 -182
  532. data/lib/aws/sqs/received_sns_message.rb +0 -116
  533. data/lib/aws/storage_gateway.rb +0 -72
  534. data/lib/aws/storage_gateway/client.rb +0 -42
  535. data/lib/aws/storage_gateway/config.rb +0 -18
  536. data/lib/aws/storage_gateway/errors.rb +0 -22
  537. data/lib/aws/sts.rb +0 -164
  538. data/lib/aws/sts/client.rb +0 -46
  539. data/lib/aws/sts/config.rb +0 -18
  540. data/lib/aws/sts/errors.rb +0 -22
  541. data/lib/aws/sts/federated_session.rb +0 -56
  542. data/lib/aws/sts/policy.rb +0 -30
  543. data/lib/aws/sts/session.rb +0 -48
  544. data/lib/aws/support.rb +0 -29
  545. data/lib/aws/support/client.rb +0 -35
  546. data/lib/aws/support/config.rb +0 -18
  547. data/lib/aws/support/errors.rb +0 -20
  548. data/lib/aws/version.rb +0 -17
  549. data/rails/init.rb +0 -15
@@ -1,82 +0,0 @@
1
- # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'json'
15
- require 'base64'
16
-
17
- module AWS
18
- module Core
19
- module Options
20
-
21
- # Given a hash of serialization rules, a JSONSerializer can convert
22
- # a hash of request options into a JSON document. The request options
23
- # are validated before returning JSON.
24
- class JSONSerializer
25
-
26
- # @param [Hash] rules A hash of option rules to validate against.
27
- # @param [String,nil] payload_param
28
- def initialize rules, payload_param
29
- @payload_param = payload_param
30
- @rules = @payload_param ? rules[@payload_param][:members] : rules
31
- end
32
-
33
- # @return [String] Returns the name of the API operation.
34
- attr_reader :operation_name
35
-
36
- # @return [String]
37
- attr_reader :namespace
38
-
39
- # @return [Hash]
40
- attr_reader :rules
41
-
42
- # @overload serialize!(request_options)
43
- # @param [Hash] request_options A hash of already validated
44
- # request options with normalized values.
45
- # @return [String] Returns an string of the request parameters
46
- # serialized into XML.
47
- def serialize request_options
48
- request_options = request_options[@payload_param] if @payload_param
49
- data = normalize_keys(request_options, rules)
50
- if rules.any?{|k,v| v[:location] == 'body' }
51
- data = data.values.first
52
- end
53
- JSON.pretty_generate(data)
54
- end
55
-
56
- protected
57
-
58
- def normalize_keys values, rules
59
- values.inject({}) do |h,(k,v)|
60
- child_rules = rules[k]
61
- child_name = child_rules[:name] || Inflection.class_name(k.to_s)
62
- h.merge(child_name => normalize_value(v, child_rules))
63
- end
64
- end
65
-
66
- def normalize_value value, rules
67
- case rules[:type]
68
- when :hash then normalize_keys(value, rules[:members])
69
- when :array then value.map{|v| normalize_value(v, rules[:members]) }
70
- when :map
71
- value.inject({}) do |h,(k,v)|
72
- h.merge(k => normalize_value(v, rules[:members]))
73
- end
74
- when :blob then Base64.encode64(value.read).strip
75
- else value
76
- end
77
- end
78
-
79
- end
80
- end
81
- end
82
- end
@@ -1,155 +0,0 @@
1
- # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- module AWS
15
- module Core
16
- module Options
17
-
18
- # Given a hash of validation rules, a validator validate request
19
- # options. Validations support:
20
- #
21
- # * rejecting unknown options
22
- # * ensuring presence of required options
23
- # * validating expected option types (e.g. hash, array, string,
24
- # integer, etc).
25
- #
26
- # After validating, a hash of request options is returned with
27
- # with normalized values (with converted types).
28
- class Validator
29
-
30
- # @param [Hash] rules A hash of option rules to validate against.
31
- def initialize rules
32
- @rules = rules
33
- end
34
-
35
- # @return [Hash]
36
- attr_reader :rules
37
-
38
- # @overload validate!(request_options)
39
- # @param [Hash] request_options The hash of options to validate.
40
- # @raise [ArgumentError] Raised when the options do not validate.
41
- # @return [Hash]
42
- def validate! request_options, rules = @rules
43
-
44
- # Verify all required options are present.
45
- rules.each_pair do |opt_name, opt_rules|
46
- if opt_rules[:required]
47
- unless request_options.key?(opt_name)
48
- raise ArgumentError, "missing required option #{opt_name.inspect}"
49
- end
50
- end
51
- end
52
-
53
- request_options.inject({}) do |options, (opt_name, value)|
54
-
55
- # Ensure this is a valid/accepted option
56
- unless rules.key?(opt_name)
57
- raise ArgumentError, "unexpected option #{opt_name.inspect}"
58
- end
59
-
60
- # Validate and convert the value
61
- valid_value = validate_value(rules[opt_name], value, opt_name)
62
-
63
- options.merge(opt_name => valid_value)
64
-
65
- end
66
- end
67
-
68
- protected
69
-
70
- # Proxies calls to the correct validation method based on the
71
- # rules[:type].
72
- def validate_value *args
73
- send("validate_#{args.first[:type]}", *args)
74
- end
75
-
76
- # Ensures the value is a hash and validates the hash context.
77
- def validate_hash rules, value, opt_name, context = nil
78
- unless value.respond_to?(:to_hash)
79
- format_error('hash value', opt_name, context)
80
- end
81
- validate!(value.to_hash, rules[:members])
82
- end
83
-
84
- def validate_map rules, value, opt_name, context = nil
85
- unless value.respond_to?(:to_hash)
86
- format_error('hash value', opt_name, context)
87
- end
88
- value.inject({}) do |values,(k,v)|
89
- context = "member #{k.inspect} of :#{opt_name}"
90
- values[k] = validate_value(rules[:members], v, opt_name, context)
91
- values
92
- end
93
- end
94
-
95
- # Ensures the value is an array (or at least enumerable) and
96
- # that the yielded values are valid.
97
- def validate_array rules, value, opt_name, context = nil
98
- unless value.respond_to?(:each)
99
- format_error('enumerable value', opt_name, context)
100
- end
101
- values = []
102
- value.each do |v|
103
- context = "member #{values.size} of :#{opt_name}"
104
- values << validate_value(rules[:members], v, opt_name, context)
105
- end
106
- values
107
- end
108
-
109
- # Ensures the value is a string.
110
- def validate_string rules, value, opt_name, context = nil
111
-
112
- unless value.respond_to?(:to_str)
113
- format_error('string value', opt_name, context)
114
- end
115
-
116
- rules[:lstrip] ?
117
- value.to_str.sub(/^#{rules[:lstrip]}/, '') :
118
- value.to_str
119
- end
120
-
121
- # Ensures the value is a boolean.
122
- def validate_boolean rules, value, opt_name, context = nil
123
- unless [true, false].include?(value)
124
- format_error('true or false', opt_name, context)
125
- end
126
- value
127
- end
128
-
129
- # Ensures the value is an integer.
130
- def validate_integer rules, value, opt_name, context = nil
131
- unless value.respond_to?(:to_int)
132
- format_error('integer value', opt_name, context)
133
- end
134
- value.to_int
135
- end
136
-
137
- # Ensures the value is a timestamp.
138
- def validate_timestamp rules, value, opt_name, context = nil
139
- # TODO : add validation to timestamps values
140
- value.to_s
141
- end
142
-
143
- def validate_blob rules, value, opt_name, context = nil
144
- value
145
- end
146
-
147
- def format_error description, opt_name, context
148
- context = context || "option :#{opt_name}"
149
- raise ArgumentError, "expected #{description} for #{context}"
150
- end
151
-
152
- end
153
- end
154
- end
155
- end
@@ -1,118 +0,0 @@
1
- # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'nokogiri'
15
-
16
- module AWS
17
- module Core
18
- module Options
19
-
20
- # Given a hash of serialization rules, an XMLSerializer can convert
21
- # a hash of request options into XML. The request options are
22
- # validated before returning XML.
23
- class XMLSerializer
24
-
25
- # @param [String] namespace
26
- # @param [String] operation_name
27
- # @param [Hash] operation
28
- def initialize namespace, operation_name, operation
29
- @namespace = namespace
30
- @operation_name = operation_name
31
- @rules = operation[:inputs]
32
- @http = operation[:http]
33
- @validator = Validator.new(rules)
34
- end
35
-
36
- # @return [String] Returns the name of the API operation.
37
- attr_reader :operation_name
38
-
39
- # @return [String]
40
- attr_reader :namespace
41
-
42
- # @return [Hash]
43
- attr_reader :rules
44
-
45
- # @return [Hash,nil]
46
- attr_reader :http
47
-
48
- # @return [Validator]
49
- attr_reader :validator
50
-
51
- # @overload serialize!(request_options)
52
- # @param [Hash] request_options A hash of already validated
53
- # request options with normalized values.
54
- # @return [String] Returns an string of the request parameters
55
- # serialized into XML.
56
- def serialize request_options
57
- if http && http[:request_payload]
58
- payload = http[:request_payload]
59
- root_node_name = rules[payload][:name]
60
- params = request_options[payload]
61
- rules = self.rules[payload][:members]
62
- else
63
- root_node_name = "#{operation_name}Request"
64
- params = request_options
65
- rules = self.rules
66
- end
67
- xml = Nokogiri::XML::Builder.new
68
- xml.send(root_node_name, :xmlns => namespace) do |xml|
69
- hash_members_xml(params, rules, xml)
70
- end
71
- xml.doc.root.to_xml
72
- end
73
-
74
- protected
75
-
76
- def to_xml builder, opt_name, rules, value
77
-
78
- xml_name = rules[:name]
79
- xml_name ||= opt_name.is_a?(String) ?
80
- opt_name : Inflection.class_name(opt_name.to_s)
81
-
82
- case value
83
- when Hash
84
-
85
- builder.send(xml_name) do |builder|
86
- hash_members_xml(value, rules[:members], builder)
87
- end
88
-
89
- when Array
90
- builder.send(xml_name) do
91
- value.each do |member_value|
92
- to_xml(builder, 'member', rules[:members], member_value)
93
- end
94
- end
95
- else builder.send(xml_name, value)
96
- end
97
-
98
- end
99
-
100
- def hash_members_xml hash, rules, builder
101
- xml_ordered_members(rules).each do |member_name|
102
- if hash.key?(member_name)
103
- value = hash[member_name]
104
- to_xml(builder, member_name, rules[member_name], value)
105
- end
106
- end
107
- end
108
-
109
- def xml_ordered_members members
110
- members.inject([]) do |list,(member_name, member)|
111
- list << [member[:position] || 0, member_name]
112
- end.sort_by(&:first).map(&:last)
113
- end
114
-
115
- end
116
- end
117
- end
118
- end
@@ -1,75 +0,0 @@
1
- # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- module AWS
15
- module Core
16
- class PageResult < Array
17
-
18
- # @return [Collection] Returns the collection that was used to
19
- # populated this page of results.
20
- attr_reader :collection
21
-
22
- # @return [Integer] Returns the maximum number of results per page.
23
- # The final page in a collection may return fewer than `:per_page`
24
- # items (e.g. `:per_page` is 10 and there are only 7 items).
25
- attr_reader :per_page
26
-
27
- # @return [String] An opaque token that can be passed the #page method
28
- # of the collection that returned this page of results. This next
29
- # token behaves as a pseudo offset. If `next_token` is `nil` then
30
- # there are no more results for the collection.
31
- attr_reader :next_token
32
-
33
- # @param [Collection] collection The collection that was used to
34
- # request this page of results. The collection should respond to
35
- # #page and accept a :next_token option.
36
- #
37
- # @param [Array] items An array of result items that represent a
38
- # page of results.
39
- #
40
- # @param [Integer] per_page The number of requested items for this
41
- # page of results. If the count of items is smaller than `per_page`
42
- # then this is the last page of results.
43
- #
44
- # @param [String] next_token (nil) A token that can be passed to the
45
- #
46
- def initialize collection, items, per_page, next_token
47
- @collection = collection
48
- @per_page = per_page
49
- @next_token = next_token
50
- super(items)
51
- end
52
-
53
- # @return [PageResult]
54
- # @raise [RuntimeError] Raises a runtime error when called against
55
- # a collection that has no more results (i.e. #last_page? == true).
56
- def next_page
57
- if last_page?
58
- raise 'unable to get the next page, already at the last page'
59
- end
60
- collection.page(:per_page => per_page, :next_token => next_token)
61
- end
62
-
63
- # @return [Boolean] Returns `true` if this is the last page of results.
64
- def last_page?
65
- next_token.nil?
66
- end
67
-
68
- # @return [Boolean] Returns `true` if there are more pages of results.
69
- def more?
70
- !!next_token
71
- end
72
-
73
- end
74
- end
75
- end
@@ -1,942 +0,0 @@
1
- # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"). You
4
- # may not use this file except in compliance with the License. A copy of
5
- # the License is located at
6
- #
7
- # http://aws.amazon.com/apache2.0/
8
- #
9
- # or in the "license" file accompanying this file. This file is
10
- # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
- # ANY KIND, either express or implied. See the License for the specific
12
- # language governing permissions and limitations under the License.
13
-
14
- require 'uuidtools'
15
- require 'date'
16
- require 'json'
17
-
18
- module AWS
19
- module Core
20
-
21
- # Represents an access policy for AWS operations and resources. For example:
22
- #
23
- # policy = Policy.new
24
- # policy.allow(
25
- # :actions => ['s3:PutObject'],
26
- # :resources => "arn:aws:s3:::mybucket/mykey/*",
27
- # :principals => :any
28
- # ).where(:acl).is("public-read")
29
- #
30
- # policy.to_json # => '{ "Version":"2008-10-17", ...'
31
- #
32
- # @see #initialize More ways to construct a policy.
33
- # @see http://docs.amazonwebservices.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html Example policies (in JSON).
34
- class Policy
35
-
36
- # @see Statement
37
- # @return [Array] An array of policy statements.
38
- attr_reader :statements
39
-
40
- # @return [String] The version of the policy language used in this
41
- # policy object.
42
- attr_reader :version
43
-
44
- # @return [String] A unique ID for the policy.
45
- attr_reader :id
46
-
47
- class Statement; end
48
-
49
- # Constructs a policy. There are a few different ways to
50
- # build a policy:
51
- #
52
- # * With hash arguments:
53
- #
54
- # Policy.new(:statements => [
55
- # {
56
- # :effect => :allow,
57
- # :actions => :all,
58
- # :principals => ["abc123"],
59
- # :resources => "mybucket/mykey"
60
- # }
61
- # ])
62
- #
63
- # * From a JSON policy document:
64
- #
65
- # Policy.from_json(policy_json_string)
66
- #
67
- # * With a block:
68
- #
69
- # Policy.new do |policy|
70
- # policy.allow(
71
- # :actions => ['s3:PutObject'],
72
- # :resources => "arn:aws:s3:::mybucket/mykey/*",
73
- # :principals => :any
74
- # ).where(:acl).is("public-read")
75
- # end
76
- #
77
- def initialize(opts = {})
78
- @statements = opts.values_at(:statements, "Statement").select do |a|
79
- a.kind_of?(Array)
80
- end.flatten.map do |stmt|
81
- self.class::Statement.new(stmt)
82
- end
83
-
84
- if opts.has_key?(:id) or opts.has_key?("Id")
85
- @id = opts[:id] || opts["Id"]
86
- else
87
- @id = UUIDTools::UUID.timestamp_create.to_s.tr('-','')
88
- end
89
- if opts.has_key?(:version) or opts.has_key?("Version")
90
- @version = opts[:version] || opts["Version"]
91
- else
92
- @version = "2008-10-17"
93
- end
94
-
95
- yield(self) if block_given?
96
- end
97
-
98
- # @return [Boolean] Returns true if the two policies are the same.
99
- def ==(other)
100
- if other.kind_of?(Core::Policy)
101
- self.hash_without_ids == other.hash_without_ids
102
- else
103
- false
104
- end
105
- end
106
- alias_method :eql?, :==
107
-
108
- # Removes the ids from the policy and its statements for the purpose
109
- # of comparing two policies for equivilence.
110
- # @return [Hash] Returns the policy as a hash with no ids
111
- # @api private
112
- def hash_without_ids
113
- hash = self.to_h
114
- hash.delete('Id')
115
- hash['Statement'].each do |statement|
116
- statement.delete('Sid')
117
- end
118
- hash
119
- end
120
- protected :hash_without_ids
121
-
122
- # Returns a hash representation of the policy. The following
123
- # statements are equivalent:
124
- #
125
- # policy.to_h.to_json
126
- # policy.to_json
127
- #
128
- # @return [Hash]
129
- def to_h
130
- {
131
- "Version" => version,
132
- "Id" => id,
133
- "Statement" => statements.map { |st| st.to_h }
134
- }
135
- end
136
-
137
- # @return [String] a JSON representation of the policy.
138
- def to_json
139
- to_h.to_json
140
- end
141
-
142
- # Constructs a policy from a JSON representation.
143
- # @see #initialize
144
- # @return [Policy] Returns a Policy object constructed by parsing
145
- # the passed JSON policy.
146
- def self.from_json(json)
147
- new(JSON.parse(json))
148
- end
149
-
150
- # Convenient syntax for expressing operators in statement
151
- # condition blocks. For example, the following:
152
- #
153
- # policy.allow.where(:s3_prefix).not("forbidden").
154
- # where(:current_time).lte(Date.today+1)
155
- #
156
- # is equivalent to:
157
- #
158
- # conditions = Policy::ConditionBlock.new
159
- # conditions.add(:not, :s3_prefix, "forbidden")
160
- # conditions.add(:lte, :current_time, Date.today+1)
161
- # policy.allow(:conditions => conditions)
162
- #
163
- # @see ConditionBlock#add
164
- class OperatorBuilder
165
-
166
- # @api private
167
- def initialize(condition_builder, key)
168
- @condition_builder = condition_builder
169
- @key = key
170
- end
171
-
172
- def method_missing(m, *values)
173
- @condition_builder.conditions.add(m, @key, *values)
174
- @condition_builder
175
- end
176
-
177
- end
178
-
179
- # Convenient syntax for adding conditions to a statement.
180
- # @see Policy#allow
181
- # @see Policy#deny
182
- class ConditionBuilder
183
-
184
- # @return [Array] Returns an array of policy conditions.
185
- attr_reader :conditions
186
-
187
- # @api private
188
- def initialize(conditions)
189
- @conditions = conditions
190
- end
191
-
192
- # Adds a condition for the given key. For example:
193
- #
194
- # policy.allow(...).where(:current_time).lte(Date.today + 1)
195
- #
196
- # @return [OperatorBuilder]
197
- def where(key, operator = nil, *values)
198
- if operator
199
- @conditions.add(operator, key, *values)
200
- self
201
- else
202
- OperatorBuilder.new(self, key)
203
- end
204
- end
205
-
206
- end
207
-
208
- # Convenience method for constructing a new statement with the
209
- # "Allow" effect and adding it to the policy. For example:
210
- #
211
- # policy.allow(
212
- # :actions => [:put_object],
213
- # :principals => :any,
214
- # :resources => "mybucket/mykey/*").
215
- # where(:acl).is("public-read")
216
- #
217
- # @option (see Statement#initialize)
218
- # @see Statement#initialize
219
- # @return [ConditionBuilder]
220
- def allow(opts = {})
221
- stmt = self.class::Statement.new(opts.merge(:effect => :allow))
222
- statements << stmt
223
- ConditionBuilder.new(stmt.conditions)
224
- end
225
-
226
- # Convenience method for constructing a new statement with the
227
- # "Deny" effect and adding it to the policy. For example:
228
- #
229
- # policy.deny(
230
- # :actions => [:put_object],
231
- # :principals => :any,
232
- # :resources => "mybucket/mykey/*"
233
- # ).where(:acl).is("public-read")
234
- #
235
- # @param (see Statement#initialize)
236
- # @see Statement#initialize
237
- # @return [ConditionBuilder]
238
- def deny(opts = {})
239
- stmt = self.class::Statement.new(opts.merge(:effect => :deny))
240
- statements << stmt
241
- ConditionBuilder.new(stmt.conditions)
242
- end
243
-
244
- # Represents the condition block of a policy. In JSON,
245
- # condition blocks look like this:
246
- #
247
- # { "StringLike": { "s3:prefix": ["photos/*", "photos.html"] } }
248
- #
249
- # ConditionBlock lets you specify conditions like the above
250
- # example using the add method, for example:
251
- #
252
- # conditions.add(:like, :s3_prefix, "photos/*", "photos.html")
253
- #
254
- # See the add method documentation for more details about how
255
- # to specify keys and operators.
256
- #
257
- # This class also provides a convenient way to query a
258
- # condition block to see what operators, keys, and values it
259
- # has. For example, consider the following condition block
260
- # (in JSON):
261
- #
262
- # {
263
- # "StringEquals": {
264
- # "s3:prefix": "photos/index.html"
265
- # },
266
- # "DateEquals": {
267
- # "aws:CurrentTime": ["2010-10-12", "2011-01-02"]
268
- # },
269
- # "NumericEquals": {
270
- # "s3:max-keys": 10
271
- # }
272
- # }
273
- #
274
- # You can get access to the condition data using #[], #keys,
275
- # #operators, and #values -- for example:
276
- #
277
- # conditions["DateEquals"]["aws:CurrentTime"].values
278
- # # => ["2010-10-12", "2011-01-02"]
279
- #
280
- # You can also perform more sophisticated queries, like this
281
- # one:
282
- #
283
- # conditions[:is].each do |equality_conditions|
284
- # equality_conditions.keys.each do |key|
285
- # puts("#{key} may be any of: " +
286
- # equality_conditions[key].values.join(" ")
287
- # end
288
- # end
289
- #
290
- # This would print the following lines:
291
- #
292
- # s3:prefix may be any of: photos/index.html
293
- # aws:CurrentTime may be any of: 2010-10-12 2011-01-02
294
- # s3:max-keys may be any of: 10
295
- #
296
- class ConditionBlock
297
-
298
- # @api private
299
- def initialize(conditions = {})
300
- # filter makes a copy
301
- @conditions = filter_conditions(conditions)
302
- end
303
-
304
- # Adds a condition to the block. This method defines a
305
- # convenient set of abbreviations for operators based on the
306
- # type of value passed in. For example:
307
- #
308
- # conditions.add(:is, :secure_transport, true)
309
- #
310
- # Maps to:
311
- #
312
- # { "Bool": { "aws:SecureTransport": true } }
313
- #
314
- # While:
315
- #
316
- # conditions.add(:is, :s3_prefix, "photos/")
317
- #
318
- # Maps to:
319
- #
320
- # { "StringEquals": { "s3:prefix": "photos/" } }
321
- #
322
- # The following list shows which operators are accepted as
323
- # symbols and how they are represented in the JSON policy:
324
- #
325
- # * `:is` (StringEquals, NumericEquals, DateEquals, or Bool)
326
- # * `:like` (StringLike)
327
- # * `:not_like` (StringNotLike)
328
- # * `:not` (StringNotEquals, NumericNotEquals, or DateNotEquals)
329
- # * `:greater_than`, `:gt` (NumericGreaterThan or DateGreaterThan)
330
- # * `:greater_than_equals`, `:gte`
331
- # (NumericGreaterThanEquals or DateGreaterThanEquals)
332
- # * `:less_than`, `:lt` (NumericLessThan or DateLessThan)
333
- # * `:less_than_equals`, `:lte`
334
- # (NumericLessThanEquals or DateLessThanEquals)
335
- # * `:is_ip_address` (IpAddress)
336
- # * `:not_ip_address` (NotIpAddress)
337
- # * `:is_arn` (ArnEquals)
338
- # * `:not_arn` (ArnNotEquals)
339
- # * `:is_arn_like` (ArnLike)
340
- # * `:not_arn_like` (ArnNotLike)
341
- #
342
- # @param [Symbol or String] operator The operator used to
343
- # compare the key with the value. See above for valid
344
- # values and their interpretations.
345
- #
346
- # @param [Symbol or String] key The key to compare. Symbol
347
- # keys are inflected to match AWS conventions. By
348
- # default, the key is assumed to be in the "aws"
349
- # namespace, but if you prefix the symbol name with "s3_"
350
- # it will be sent in the "s3" namespace. For example,
351
- # `:s3_prefix` is sent as "s3:prefix" while
352
- # `:secure_transport` is sent as "aws:SecureTransport".
353
- # See
354
- # http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingResOpsConditions.html
355
- # for a list of the available keys for each action in S3.
356
- #
357
- # @param [Mixed] values The value to compare against.
358
- # This can be:
359
- # * a String
360
- # * a number
361
- # * a Date, DateTime, or Time
362
- # * a boolean value
363
- # This method does not attempt to validate that the values
364
- # are valid for the operators or keys they are used with.
365
- #
366
- def add(operator, key, *values)
367
- if operator.kind_of?(Symbol)
368
- converted_values = values.map { |v| convert_value(v) }
369
- else
370
- converted_values = values
371
- end
372
- operator = translate_operator(operator, values.first)
373
- op = (@conditions[operator] ||= {})
374
- raise "duplicate #{operator} conditions for #{key}" if op[key]
375
- op[translate_key(key)] = converted_values
376
- end
377
-
378
- # @api private
379
- def to_h
380
- @conditions
381
- end
382
-
383
- # Filters the conditions described in the block, returning a
384
- # new ConditionBlock that contains only the matching
385
- # conditions. Each argument is matched against either the
386
- # keys or the operators in the block, and you can specify
387
- # the key or operator in any way that's valid for the #add
388
- # method. Some examples:
389
- #
390
- # # all conditions using the StringLike operator
391
- # conditions["StringLike"]
392
- #
393
- # # all conditions using StringEquals, DateEquals, NumericEquals, or Bool
394
- # conditions[:is]
395
- #
396
- # # all conditions on the s3:prefix key
397
- # conditions["s3:prefix"]
398
- #
399
- # # all conditions on the aws:CurrentTime key
400
- # conditions[:current_time]
401
- #
402
- # Multiple conditions are ANDed together, so the following
403
- # are equivalent:
404
- #
405
- # conditions[:s3_prefix][:is]
406
- # conditions[:is][:s3_prefix]
407
- # conditions[:s3_prefix, :is]
408
- #
409
- # @see #add
410
- # @return [ConditionBlock] A new set of conditions filtered by the
411
- # given conditions.
412
- def [](*args)
413
- filtered = @conditions
414
- args.each do |filter|
415
- type = valid_operator?(filter) ? nil : :key
416
- filtered = filter_conditions(filtered) do |op, key, value|
417
- (match, type) = match_triple(filter, type, op, key, value)
418
- match
419
- end
420
- end
421
- self.class.new(filtered)
422
- end
423
-
424
- # @return [Array] Returns an array of operators used in this block.
425
- def operators
426
- @conditions.keys
427
- end
428
-
429
- # @return [Array] Returns an array of unique keys used in the block.
430
- def keys
431
- @conditions.values.map do |keys|
432
- keys.keys if keys
433
- end.compact.flatten.uniq
434
- end
435
-
436
- # Returns all values used in the block. Note that the
437
- # values may not all be from the same condition; for example:
438
- #
439
- # conditions.add(:like, :user_agent, "mozilla", "explorer")
440
- # conditions.add(:lt, :s3_max_keys, 12)
441
- # conditions.values # => ["mozilla", "explorer", 12]
442
- #
443
- # @return [Array] Returns an array of values used in this condition block.
444
- def values
445
- @conditions.values.map do |keys|
446
- keys.values
447
- end.compact.flatten
448
- end
449
-
450
- # @api private
451
- protected
452
- def match_triple(filter, type, op, key, value)
453
- value = [value].flatten.first
454
- if type
455
- target = (type == :operator ? op : key)
456
- match = send("match_#{type}", filter, target, value)
457
- else
458
- if match_operator(filter, op, value)
459
- match = true
460
- type = :operator
461
- elsif match_key(filter, key)
462
- match = true
463
- type = :key
464
- else
465
- match = false
466
- end
467
- end
468
- [match, type]
469
- end
470
-
471
- # @api private
472
- protected
473
- def match_operator(filter, op, value)
474
- # dates are the only values that don't come back as native types in JSON
475
- # but where we use the type as a cue to the operator translation
476
- value = Date.today if op =~ /^Date/
477
- translate_operator(filter, value) == op
478
- end
479
-
480
- # @api private
481
- protected
482
- def match_key(filter, key, value = nil)
483
- translate_key(filter) == key
484
- end
485
-
486
- # @api private
487
- protected
488
- def filter_conditions(conditions = @conditions)
489
- conditions.inject({}) do |m, (op, keys)|
490
- m[op] = keys.inject({}) do |m2, (key, value)|
491
- m2[key] = value if !block_given? or yield(op, key, value)
492
- m2
493
- end
494
- m.delete(op) if m[op].empty?
495
- m
496
- end
497
- end
498
-
499
- # @api private
500
- protected
501
- def translate_key(key)
502
- if key.kind_of?(Symbol)
503
- if key.to_s =~ /^s3_(.*)$/
504
- s3_name = $1
505
- if s3_name == "version_id" or
506
- s3_name == "location_constraint"
507
- s3_name = Inflection.class_name(s3_name)
508
- else
509
- s3_name.tr!('_', '-')
510
- end
511
- "s3:#{s3_name}"
512
- else
513
- "aws:#{Inflection.class_name(key.to_s)}"
514
- end
515
- else
516
- key
517
- end
518
- end
519
-
520
- # @api private
521
- MODIFIERS = {
522
- /_ignoring_case$/ => "IgnoreCase",
523
- /_equals$/ => "Equals"
524
- }
525
-
526
- # @api private
527
- protected
528
- def valid_operator?(operator)
529
- translate_operator(operator, "")
530
- true
531
- rescue ArgumentError => e
532
- false
533
- end
534
-
535
- # @api private
536
- protected
537
- def translate_operator(operator, example_value)
538
- return operator if operator.kind_of?(String)
539
-
540
- original_operator = operator
541
- (operator, opts) = strip_modifiers(operator)
542
-
543
- raise ArgumentError.new("unrecognized operator #{original_operator}") unless
544
- respond_to?("translate_#{operator}", true)
545
- send("translate_#{operator}", example_value, opts)
546
- end
547
-
548
- # @api private
549
- protected
550
- def translate_is(example, opts)
551
- return "Bool" if type_notation(example) == "Bool"
552
- base_translate(example, "Equals", opts[:ignore_case])
553
- end
554
-
555
- # @api private
556
- protected
557
- def translate_not(example, opts)
558
- base_translate(example, "NotEquals", opts[:ignore_case])
559
- end
560
-
561
- # @api private
562
- protected
563
- def translate_like(example, opts)
564
- base_translate(example, "Like")
565
- end
566
-
567
- # @api private
568
- protected
569
- def translate_not_like(example, opts)
570
- base_translate(example, "NotLike")
571
- end
572
-
573
- # @api private
574
- protected
575
- def translate_less_than(example, opts)
576
- base_translate(example, "LessThan", opts[:equals])
577
- end
578
- alias_method :translate_lt, :translate_less_than
579
-
580
- # @api private
581
- protected
582
- def translate_lte(example, opts)
583
- translate_less_than(example, { :equals => "Equals" })
584
- end
585
-
586
- # @api private
587
- protected
588
- def translate_greater_than(example, opts)
589
- base_translate(example, "GreaterThan", opts[:equals])
590
- end
591
- alias_method :translate_gt, :translate_greater_than
592
-
593
- # @api private
594
- protected
595
- def translate_gte(example, opts)
596
- translate_greater_than(example, { :equals => "Equals" })
597
- end
598
-
599
- # @api private
600
- protected
601
- def translate_is_ip_address(example, opts)
602
- "IpAddress"
603
- end
604
-
605
- # @api private
606
- protected
607
- def translate_not_ip_address(example, opts)
608
- "NotIpAddress"
609
- end
610
-
611
- # @api private
612
- protected
613
- def translate_is_arn(example, opts)
614
- "ArnEquals"
615
- end
616
-
617
- # @api private
618
- protected
619
- def translate_not_arn(example, opts)
620
- "ArnNotEquals"
621
- end
622
-
623
- # @api private
624
- protected
625
- def translate_is_arn_like(example, opts)
626
- "ArnLike"
627
- end
628
-
629
- # @api private
630
- protected
631
- def translate_not_arn_like(example, opts)
632
- "ArnNotLike"
633
- end
634
-
635
- # @api private
636
- protected
637
- def base_translate(example, base_operator, *modifiers)
638
- "#{type_notation(example)}#{base_operator}#{modifiers.join}"
639
- end
640
-
641
- # @api private
642
- protected
643
- def type_notation(example)
644
- case example
645
- when String
646
- "String"
647
- when Numeric
648
- "Numeric"
649
- when Time, Date
650
- "Date"
651
- when true, false
652
- "Bool"
653
- end
654
- end
655
-
656
- # @api private
657
- protected
658
- def convert_value(value)
659
- case value
660
- when DateTime, Time
661
- Time.parse(value.to_s).iso8601
662
- when Date
663
- value.strftime("%Y-%m-%d")
664
- else
665
- value
666
- end
667
- end
668
-
669
- # @api private
670
- protected
671
- def strip_modifiers(operator)
672
- opts = {}
673
- MODIFIERS.each do |(regex, mod)|
674
- ruby_name = Inflection.ruby_name(mod).to_sym
675
- opts[ruby_name] = ""
676
- if operator.to_s =~ regex
677
- opts[ruby_name] = mod
678
- operator = operator.to_s.sub(regex, '').to_sym
679
- end
680
- end
681
- [operator, opts]
682
- end
683
-
684
- end
685
-
686
- # Represents a statement in a policy.
687
- #
688
- # @see Policy#allow
689
- # @see Policy#deny
690
- class Statement
691
-
692
- # @return [String] Returns the statement id
693
- attr_accessor :sid
694
-
695
- # @return [String] Returns the statement effect, either "Allow" or
696
- # "Deny"
697
- attr_accessor :effect
698
-
699
- # @return [Array] Returns an array of principals.
700
- attr_accessor :principals
701
-
702
- # @return [Array] Returns an array of statement actions included
703
- # by this policy statement.
704
- attr_accessor :actions
705
-
706
- # @return [Array] Returns an array of actions excluded by this
707
- # policy statement.
708
- attr_accessor :excluded_actions
709
-
710
- # @return [Array] Returns an array of resources affected by this
711
- # policy statement.
712
- attr_accessor :resources
713
-
714
- # @return [Array] Returns an array of conditions for this policy.
715
- attr_accessor :conditions
716
-
717
- attr_accessor :excluded_resources
718
-
719
- # Constructs a new statement.
720
- #
721
- # @option opts [String] :sid The statement ID. This is optional; if
722
- # omitted, a UUID will be generated for the statement.
723
- # @option opts [String] :effect The statement effect, which must be either
724
- # "Allow" or "Deny".
725
- # @see Policy#allow
726
- # @see Policy#deny
727
- # @option opts [String or array of strings] :principals The account(s)
728
- # affected by the statement. These should be AWS account IDs.
729
- # @option opts :actions The action or actions affected by
730
- # the statement. These can be symbols or strings. If
731
- # they are strings, you can use wildcard character "*"
732
- # to match zero or more characters in the action name.
733
- # Symbols are expected to match methods of S3::Client.
734
- # @option opts :excluded_actions Action or actions which are
735
- # explicitly not affected by this statement. As with
736
- # `:actions`, these may be symbols or strings.
737
- # @option opts [String or array of strings] :resources The
738
- # resource(s) affected by the statement. These can be
739
- # expressed as ARNs (e.g. `arn:aws:s3:::mybucket/mykey`)
740
- # or you may omit the `arn:aws:s3:::` prefix and just give
741
- # the path as `bucket_name/key`. You may use the wildcard
742
- # character "*" to match zero or more characters in the
743
- # resource name.
744
- # @option opts [ConditionBlock or Hash] :conditions
745
- # Additional conditions that narrow the effect of the
746
- # statement. It's typically more convenient to use the
747
- # ConditionBuilder instance returned from Policy#allow or
748
- # Policy#deny to add conditions to a statement.
749
- # @see S3::Client
750
- def initialize(opts = {})
751
- self.sid = UUIDTools::UUID.timestamp_create.to_s.tr('-','')
752
- self.conditions = ConditionBlock.new
753
-
754
- parse_options(opts)
755
-
756
- yield(self) if block_given?
757
- end
758
-
759
- # Convenience method to add to the list of actions affected
760
- # by this statement.
761
- def include_actions(*actions)
762
- self.actions ||= []
763
- self.actions.push(*actions)
764
- end
765
- alias_method :include_action, :include_actions
766
-
767
- # Convenience method to add to the list of actions
768
- # explicitly not affected by this statement.
769
- def exclude_actions(*actions)
770
- self.excluded_actions ||= []
771
- self.excluded_actions.push(*actions)
772
- end
773
- alias_method :exclude_action, :exclude_actions
774
-
775
- # @api private
776
- def to_h
777
- stmt = {
778
- "Sid" => sid,
779
- "Effect" => Inflection.class_name(effect.to_s),
780
- "Principal" => principals_hash,
781
- "Resource" => (resource_arns if resource_arns),
782
- "NotResource" => (excluded_resource_arns if excluded_resource_arns),
783
- "Condition" => (conditions.to_h if conditions)
784
- }
785
- stmt.delete("Condition") if !conditions || conditions.to_h.empty?
786
- stmt.delete("Principal") unless principals_hash
787
- stmt.delete("Resource") unless resource_arns
788
- stmt.delete("NotResource") unless excluded_resource_arns
789
- if !translated_actions || translated_actions.empty?
790
- stmt["NotAction"] = translated_excluded_actions
791
- else
792
- stmt["Action"] = translated_actions
793
- end
794
- stmt
795
- end
796
-
797
- protected
798
- def parse_options(options)
799
- options.each do |name, value|
800
- name = Inflection.ruby_name(name.to_s)
801
- name.sub!(/s$/,'')
802
- send("parse_#{name}_option", value) if
803
- respond_to?("parse_#{name}_option", true)
804
- end
805
- end
806
-
807
- protected
808
- def parse_effect_option(value)
809
- self.effect = value
810
- end
811
-
812
- protected
813
- def parse_sid_option(value)
814
- self.sid = value
815
- end
816
-
817
- protected
818
- def parse_action_option(value)
819
- coerce_array_option(:actions, value)
820
- end
821
-
822
- protected
823
- def parse_not_action_option(value)
824
- coerce_array_option(:excluded_actions, value)
825
- end
826
- alias_method :parse_excluded_action_option, :parse_not_action_option
827
-
828
- protected
829
- def parse_principal_option(value)
830
- if value and value.kind_of?(Hash)
831
- value = value["AWS"] || []
832
- end
833
-
834
- coerce_array_option(:principals, value)
835
- end
836
-
837
- protected
838
- def parse_resource_option(value)
839
- coerce_array_option(:resources, value)
840
- end
841
-
842
- def parse_not_resource_option(value)
843
- coerce_array_option(:excluded_resources, value)
844
- end
845
- alias_method :parse_excluded_resource_option, :parse_not_resource_option
846
-
847
- protected
848
- def parse_condition_option(value)
849
- self.conditions = ConditionBlock.new(value)
850
- end
851
-
852
- protected
853
- def coerce_array_option(attr, value)
854
- if value.kind_of?(Array)
855
- send("#{attr}=", value)
856
- else
857
- send("#{attr}=", [value])
858
- end
859
- end
860
-
861
- protected
862
- def principals_hash
863
- return nil unless principals
864
- { "AWS" =>
865
- principals.map do |principal|
866
- principal == :any ? "*" : principal
867
- end }
868
- end
869
-
870
- protected
871
- def translate_action(action)
872
- case action
873
- when String then action
874
- when :any then '*'
875
- when Symbol
876
-
877
- if self.class == Core::Policy::Statement
878
- msg = 'symbolized action names are only accepted by service ' +
879
- 'specific policies (e.g. AWS::S3::Policy)'
880
- raise ArgumentError, msg
881
- end
882
-
883
- unless self.class::ACTION_MAPPING.has_key?(action)
884
- raise ArgumentError, "unrecognized action: #{action}"
885
- end
886
-
887
- self.class::ACTION_MAPPING[action]
888
-
889
- end
890
- end
891
-
892
- protected
893
- def translated_actions
894
- return nil unless actions
895
- actions.map do |action|
896
- translate_action(action)
897
- end
898
- end
899
-
900
- protected
901
- def translated_excluded_actions
902
- return nil unless excluded_actions
903
- excluded_actions.map { |a| translate_action(a) }
904
- end
905
-
906
- protected
907
- def resource_arns
908
- return nil unless resources
909
- resources.map do |resource|
910
- case resource
911
- when :any then "*"
912
- else resource_arn(resource)
913
- end
914
- end
915
- end
916
-
917
- protected
918
- def resource_arn resource
919
- resource.to_s
920
- end
921
-
922
- protected
923
- def excluded_resource_arns
924
- return nil unless excluded_resources
925
- excluded_resources.map do |excluded_resource|
926
- case excluded_resource
927
- when :any then "*"
928
- else excluded_resource_arn(excluded_resource)
929
- end
930
- end
931
- end
932
-
933
- protected
934
- def excluded_resource_arn excluded_resource
935
- excluded_resource.to_s
936
- end
937
-
938
- end
939
-
940
- end
941
- end
942
- end