aws-sdk 2.0.1 → 2.0.5

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 (251) hide show
  1. package/.eslintrc +20 -0
  2. package/.gitignore +10 -0
  3. package/.travis.yml +20 -0
  4. package/.yardopts +20 -0
  5. package/.yardopts_guide +21 -0
  6. package/Gemfile +16 -0
  7. package/Gemfile.lock +34 -0
  8. package/README.md +5 -6
  9. package/Rakefile +14 -0
  10. package/UPGRADING.md +9 -4
  11. package/configuration.sample +5 -0
  12. package/dist/BUNDLE_LICENSE.txt +96 -0
  13. package/dist/aws-sdk.js +9594 -0
  14. package/dist/aws-sdk.min.js +21 -0
  15. package/dist-tools/.eslintrc +10 -0
  16. package/dist-tools/browser-builder.js +142 -0
  17. package/dist-tools/strategies/cache.js +68 -0
  18. package/dist-tools/strategies/default.js +165 -0
  19. package/dist-tools/test/browser-builder.mocha.spec.coffee +182 -0
  20. package/dist-tools/test/helpers.coffee +16 -0
  21. package/doc-src/guide/browser-building.md +93 -0
  22. package/doc-src/guide/browser-configuring-wif.md +287 -0
  23. package/doc-src/guide/browser-configuring.md +218 -0
  24. package/doc-src/guide/browser-examples.md +220 -0
  25. package/doc-src/guide/browser-intro.md +46 -0
  26. package/doc-src/guide/browser-making-requests.md +279 -0
  27. package/doc-src/guide/browser-services.md +75 -0
  28. package/doc-src/guide/index.md +41 -0
  29. package/doc-src/guide/node-configuring.md +272 -0
  30. package/doc-src/guide/node-examples.md +341 -0
  31. package/doc-src/guide/node-intro.md +32 -0
  32. package/doc-src/guide/node-making-requests.md +309 -0
  33. package/doc-src/guide/node-services.md +159 -0
  34. package/doc-src/templates/api-versions/model_documentor.rb +366 -0
  35. package/doc-src/templates/api-versions/plugin.rb +230 -0
  36. package/doc-src/templates/api-versions/templates/default/class/html/setup.rb +9 -0
  37. package/doc-src/templates/api-versions/templates/default/class/html/waiter_details_list.erb +7 -0
  38. package/doc-src/templates/api-versions/templates/default/class/html/waiter_summary.erb +7 -0
  39. package/doc-src/templates/api-versions/templates/default/docstring/html/experimental.erb +4 -0
  40. package/doc-src/templates/api-versions/templates/default/docstring/setup.rb +9 -0
  41. package/doc-src/templates/api-versions/templates/default/fulldoc/html/css/common.css +6 -0
  42. package/doc-src/templates/api-versions/templates/default/fulldoc/html/setup.rb +62 -0
  43. package/doc-src/templates/api-versions/templates/default/layout/html/services.erb +10 -0
  44. package/doc-src/templates/api-versions/templates/default/layout/html/setup.rb +28 -0
  45. package/doc-src/templates/api-versions/templates/default/module/html/box_info.erb +45 -0
  46. package/doc-src/templates/api-versions/templates/default/module/html/children.erb +8 -0
  47. package/doc-src/templates/api-versions/templates/default/tags/setup.rb +3 -0
  48. package/doc-src/templates/api-versions/templates/default/waiter_details/html/method_signature.erb +3 -0
  49. package/doc-src/templates/api-versions/templates/default/waiter_details/html/setup.rb +5 -0
  50. package/doc-src/templates/default/layout/html/footer.erb +31 -0
  51. package/doc-src/templates/default/layout/html/layout.erb +23 -0
  52. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/css/highlight.github.css +127 -0
  53. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/css/style.css +1192 -0
  54. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/img/logo.png +0 -0
  55. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/app.js +33 -0
  56. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/highlight.pack.js +27 -0
  57. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/sphinx/AUTHORS +55 -0
  58. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/sphinx/LICENSE +25 -0
  59. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/sphinx/doctools.js +247 -0
  60. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/sphinx/file.png +0 -0
  61. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/sphinx/searchtools.js +568 -0
  62. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/js/underscore.js +23 -0
  63. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/search.erb +29 -0
  64. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/search_index.erb +1 -0
  65. package/doc-src/templates/flasky_sphinx_guide/fulldoc/html/setup.rb +75 -0
  66. package/doc-src/templates/flasky_sphinx_guide/layout/html/layout.erb +93 -0
  67. package/doc-src/templates/flasky_sphinx_guide/layout/html/setup.rb +9 -0
  68. package/doc-src/templates/flasky_sphinx_guide/layout/html/sidebar.erb +45 -0
  69. package/doc-src/templates/flasky_sphinx_guide/onefile/html/layout.erb +51 -0
  70. package/doc-src/templates/flasky_sphinx_guide/onefile/html/setup.rb +1 -0
  71. package/eslint-rules/no-require-in-service.js +10 -0
  72. package/features/autoscaling/autoscaling.feature +21 -0
  73. package/features/autoscaling/step_definitions/autoscaling.js +49 -0
  74. package/features/cloudformation/cloudformation.feature +22 -0
  75. package/features/cloudformation/step_definitions/cloudformation.js +26 -0
  76. package/features/cloudfront/cloudfront.feature +28 -0
  77. package/features/cloudfront/step_definitions/cloudfront-latest.js +54 -0
  78. package/features/cloudfront/step_definitions/cloudfront.js +21 -0
  79. package/features/cloudsearch/cloudsearch.feature +34 -0
  80. package/features/cloudsearch/step_definitions/cloudsearch.js +42 -0
  81. package/features/cloudtrail/cloudtrail.feature +17 -0
  82. package/features/cloudtrail/step_definitions/cloudtrail.js +14 -0
  83. package/features/cloudwatch/cloudwatch.feature +15 -0
  84. package/features/cloudwatch/step_definitions/cloudwatch.js +48 -0
  85. package/features/datapipeline/datapipeline.feature +23 -0
  86. package/features/datapipeline/step_definitions/datapipeline.js +79 -0
  87. package/features/directconnect/directconnect.feature +20 -0
  88. package/features/directconnect/step_definitions/directconnect.js +44 -0
  89. package/features/dynamodb/crc32.feature +18 -0
  90. package/features/dynamodb/step_definitions/dynamodb.js +154 -0
  91. package/features/dynamodb/tables.feature +50 -0
  92. package/features/ec2/ec2.feature +28 -0
  93. package/features/ec2/step_definitions/ec2.js +65 -0
  94. package/features/elasticache/elasticache.feature +20 -0
  95. package/features/elasticache/step_definitions/elasticache.js +34 -0
  96. package/features/elasticbeanstalk/elasticbeanstalk.feature +22 -0
  97. package/features/elasticbeanstalk/step_definitions/elasticbeanstalk.js +38 -0
  98. package/features/elastictranscoder/elastictranscoder.feature +24 -0
  99. package/features/elastictranscoder/step_definitions/elastictranscoder.js +56 -0
  100. package/features/elb/elb.feature +19 -0
  101. package/features/elb/step_definitions/elb.js +37 -0
  102. package/features/emr/emr.feature +16 -0
  103. package/features/emr/step_definitions/emr.js +45 -0
  104. package/features/extra/assertions.js +29 -0
  105. package/features/extra/dummy.feature +0 -0
  106. package/features/extra/fixtures/testfile.txt +1 -0
  107. package/features/extra/helpers.js +113 -0
  108. package/features/extra/hooks.js +107 -0
  109. package/features/extra/world.js +12 -0
  110. package/features/glacier/glacier.feature +47 -0
  111. package/features/glacier/step_definitions/glacier.js +112 -0
  112. package/features/iam/iam.feature +24 -0
  113. package/features/iam/step_definitions/iam.js +66 -0
  114. package/features/importexport/importexport.feature +53 -0
  115. package/features/importexport/step_definitions/importexport.js +42 -0
  116. package/features/kinesis/kinesis.feature +9 -0
  117. package/features/kinesis/step_definitions/kinesis.js +10 -0
  118. package/features/opsworks/opsworks.feature +26 -0
  119. package/features/opsworks/step_definitions/opsworks.js +42 -0
  120. package/features/rds/rds.feature +32 -0
  121. package/features/rds/step_definitions/rds.js +72 -0
  122. package/features/redshift/redshift.feature +20 -0
  123. package/features/redshift/step_definitions/redshift.js +33 -0
  124. package/features/route53/route53.feature +41 -0
  125. package/features/route53/step_definitions/route53.js +97 -0
  126. package/features/s3/buckets.feature +40 -0
  127. package/features/s3/objects.feature +122 -0
  128. package/features/s3/step_definitions/buckets.js +136 -0
  129. package/features/s3/step_definitions/hooks.js +39 -0
  130. package/features/s3/step_definitions/objects.js +204 -0
  131. package/features/s3/step_definitions/proxy.js +44 -0
  132. package/features/ses/ses.feature +20 -0
  133. package/features/ses/step_definitions/ses.js +22 -0
  134. package/features/simpledb/simpledb.feature +29 -0
  135. package/features/simpledb/step_definitions/simpledb.js +46 -0
  136. package/features/sns/sns.feature +15 -0
  137. package/features/sns/step_definitions/sns.js +33 -0
  138. package/features/sqs/messages.feature +21 -0
  139. package/features/sqs/queues.feature +18 -0
  140. package/features/sqs/step_definitions/messages.js +46 -0
  141. package/features/sqs/step_definitions/queues.js +33 -0
  142. package/features/sqs/step_definitions/sqs.js +7 -0
  143. package/features/storagegateway/step_definitions/storagegateway.js +16 -0
  144. package/features/storagegateway/storagegateway.feature +13 -0
  145. package/features/sts/step_definitions/sts.js +35 -0
  146. package/features/sts/sts.feature +29 -0
  147. package/features/support/step_definitions/support.js +35 -0
  148. package/features/support/support.feature +18 -0
  149. package/features/swf/step_definitions/swf.js +38 -0
  150. package/features/swf/swf.feature +15 -0
  151. package/index.js +2 -0
  152. package/lib/core.js +2 -2
  153. package/lib/credentials/shared_ini_file_credentials.js +0 -1
  154. package/lib/event_listeners.js +13 -1
  155. package/lib/http/node.js +19 -30
  156. package/lib/model/resource_waiter.js +0 -4
  157. package/lib/model/shape.js +2 -1
  158. package/lib/protocol/rest_xml.js +1 -1
  159. package/lib/region_config.js +31 -0
  160. package/lib/region_config.json +56 -0
  161. package/lib/request.js +37 -45
  162. package/lib/sequential_executor.js +17 -34
  163. package/lib/service.js +17 -44
  164. package/lib/services/cloudsearchdomain.js +69 -0
  165. package/lib/services/route53.js +0 -12
  166. package/lib/services/s3.js +3 -19
  167. package/lib/signers/v4.js +2 -1
  168. package/lib/util.js +28 -3
  169. package/package.json +3 -3
  170. package/scripts/console +11 -3
  171. package/scripts/coverage +126 -0
  172. package/tasks/apis.rake +122 -0
  173. package/tasks/browser.rake +89 -0
  174. package/tasks/docs.rake +36 -0
  175. package/tasks/lib/cucumber_generator.rb +40 -0
  176. package/tasks/util.rake +33 -0
  177. package/test/browser/js/jasmine-1.3.1.js +2600 -0
  178. package/test/browser/js/jasmine-html.js +681 -0
  179. package/test/browser/runner.html +109 -0
  180. package/test/browser/runner.js +92 -0
  181. package/test/browser/sample/appinfo.sample.js +15 -0
  182. package/test/browser/sample/console.html +429 -0
  183. package/test/browser/sample/css/smoothness/images/animated-overlay.gif +0 -0
  184. package/test/browser/sample/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  185. package/test/browser/sample/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  186. package/test/browser/sample/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  187. package/test/browser/sample/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  188. package/test/browser/sample/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  189. package/test/browser/sample/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  190. package/test/browser/sample/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  191. package/test/browser/sample/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  192. package/test/browser/sample/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  193. package/test/browser/sample/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  194. package/test/browser/sample/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  195. package/test/browser/sample/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  196. package/test/browser/sample/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  197. package/test/browser/sample/css/smoothness/jquery-ui-1.10.1.custom.css +1175 -0
  198. package/test/browser/sample/css/smoothness/jquery-ui-1.10.1.custom.min.css +5 -0
  199. package/test/browser/sample/img/loading.gif +0 -0
  200. package/test/browser/sample/js/jquery-1.9.1.js +9597 -0
  201. package/test/browser/sample/js/jquery-ui-1.10.1.custom.js +14903 -0
  202. package/test/browser/sample/js/jquery-ui-1.10.1.custom.min.js +6 -0
  203. package/test/browser/sample/s3upload.html +111 -0
  204. package/test/browser.spec.coffee +207 -0
  205. package/test/config.spec.coffee +202 -0
  206. package/test/credential_provider_chain.spec.coffee +90 -0
  207. package/test/credentials.spec.coffee +452 -0
  208. package/test/endpoint.spec.coffee +80 -0
  209. package/test/event_listeners.spec.coffee +493 -0
  210. package/test/helpers.coffee +150 -0
  211. package/test/http_request.spec.coffee +55 -0
  212. package/test/json/builder.spec.coffee +129 -0
  213. package/test/json/parser.spec.coffee +108 -0
  214. package/test/metadata_service.spec.coffee +54 -0
  215. package/test/model/api.spec.coffee +67 -0
  216. package/test/model/shape.spec.coffee +23 -0
  217. package/test/node_http_client.spec.coffee +40 -0
  218. package/test/param_validator.spec.coffee +456 -0
  219. package/test/protocol/json.spec.coffee +167 -0
  220. package/test/protocol/query.spec.coffee +191 -0
  221. package/test/protocol/rest.spec.coffee +237 -0
  222. package/test/protocol/rest_json.spec.coffee +255 -0
  223. package/test/protocol/rest_xml.spec.coffee +329 -0
  224. package/test/query/query_param_serializer.spec.coffee +327 -0
  225. package/test/region_config.spec.coffee +50 -0
  226. package/test/request.spec.coffee +316 -0
  227. package/test/resource_waiter.spec.coffee +89 -0
  228. package/test/response.spec.coffee +81 -0
  229. package/test/sequential_executor.spec.coffee +118 -0
  230. package/test/service.spec.coffee +230 -0
  231. package/test/services/cloudfront.spec.coffee +44 -0
  232. package/test/services/cloudsearchdomain.spec.coffee +23 -0
  233. package/test/services/dynamodb.spec.coffee +32 -0
  234. package/test/services/ec2.spec.coffee +78 -0
  235. package/test/services/elastictranscoder.spec.coffee +43 -0
  236. package/test/services/glacier.spec.coffee +61 -0
  237. package/test/services/rds.spec.coffee +38 -0
  238. package/test/services/route53.spec.coffee +77 -0
  239. package/test/services/s3.spec.coffee +538 -0
  240. package/test/services/simpledb.spec.coffee +12 -0
  241. package/test/services/sqs.spec.coffee +130 -0
  242. package/test/services/sts.spec.coffee +72 -0
  243. package/test/services/swf.spec.coffee +6 -0
  244. package/test/signers/presign.spec.coffee +36 -0
  245. package/test/signers/s3.spec.coffee +297 -0
  246. package/test/signers/v2.spec.coffee +68 -0
  247. package/test/signers/v4.spec.coffee +135 -0
  248. package/test/util.spec.coffee +510 -0
  249. package/test/xml/builder.spec.coffee +529 -0
  250. package/test/xml/parser.spec.coffee +587 -0
  251. package/lib/services/simpledb.js +0 -15
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+
3
+ var fs = require('fs');
4
+ var path = require('path');
5
+
6
+ var FFI = require('node-ffi');
7
+ var libc = new FFI.Library(null, {'system': ['int32', ['string']]});
8
+ var exec = libc.system;
9
+
10
+ var jsRequire = require.extensions['.js'];
11
+ require.extensions['.js'] = function(module, filename) {
12
+ var baseFile = path.relative(path.join(__dirname, '..'), filename);
13
+ if (baseFile.match(/^lib\//)) {
14
+ filename = filename.replace(/\/lib\//, '/lib-cov/');
15
+ }
16
+ jsRequire(module, filename);
17
+ }
18
+
19
+ function printStats(file, covered, total) {
20
+ var maxFileLength = 26;
21
+ var pad = maxFileLength - file.length;
22
+ for (var i = 0; i < pad; i++) file += ' ';
23
+ console.log(file + ' ' +
24
+ (parseFloat(covered) / parseFloat(total) * 100).toFixed(2) + '%' +
25
+ ((covered != total) ? ' ' : ' ') +
26
+ '(' + covered + '/' + total + ')');
27
+ }
28
+
29
+ function cleanup() {
30
+ exec('rm -rf lib-cov');
31
+ }
32
+
33
+ process.on('uncaughtException', function(err) {
34
+ cleanup();
35
+ throw err;
36
+ });
37
+
38
+ process.on('exit', function() {
39
+ var out = 'NO COVERAGE';
40
+ if (typeof(_$jscoverage) !== 'undefined') {
41
+ var stats = {}
42
+ var entireCovered = 0;
43
+ var entireTotal = 0;
44
+ out = '';
45
+ var cov = _$jscoverage;
46
+ for (var file in cov) {
47
+ stats[file] = {covered: 0, total: 0};
48
+ var id = file.replace(/[\.\/]/, '_');
49
+ var total = cov[file].length;
50
+ var uncovered = 0;
51
+ for (var idx in cov[file]) {
52
+ if (cov[file][idx] === 0) uncovered++;
53
+ }
54
+ var covered = total - uncovered;
55
+ stats[file].covered = covered;
56
+ stats[file].total = total;
57
+ entireCovered += covered;
58
+ entireTotal += total;
59
+
60
+ out += '<h2>' + file + ' <small>(' + covered + '/' + total + ', ' +
61
+ (parseFloat(covered) / parseFloat(total) * 100).toFixed(2) +
62
+ '% covered) [<a href="#code_'+id+'" id="show_' + id + '">+</a>]</small></h2>\n';
63
+ var lineAccess = [];
64
+
65
+ out += "<table border='0' cellspacing='0' width='95%' style='display:none' id='code_"+id+"'>";
66
+ for (var lineNo in cov[file].source) {
67
+ lineNo = parseInt(lineNo);
68
+ out += "<tr class='count_"+cov[file][lineNo+1]+"'>";
69
+ out += "<td align='right'>"+(lineNo+1)+"</td><td width='60'></td><td>";
70
+ out += "<pre>" + cov[file].source[lineNo] + "</pre>";
71
+ out += "</td></tr>\n";
72
+ }
73
+ out += "\n</table>\n";
74
+ }
75
+ out += '<script>\n' +
76
+ 'function scriptToggleHandler(id) {\n' +
77
+ ' var link = document.getElementById("show_"+id);\n' +
78
+ ' var code = document.getElementById("code_"+id);\n' +
79
+ ' link.addEventListener("click", function() {\n' +
80
+ ' if (link.innerText == "+") {\n' +
81
+ ' link.innerText = "-";\n' +
82
+ ' code.style.display = "block";\n' +
83
+ ' } else if (link.innerText == "-") {\n' +
84
+ ' link.innerText = "+";\n' +
85
+ ' code.style.display = "none";\n' +
86
+ ' }\n' +
87
+ ' return false;\n' +
88
+ ' }, false);\n' +
89
+ '}\n';
90
+ for (var file in cov) {
91
+ var id = file.replace(/[\.\/]/, '_');
92
+ out += 'scriptToggleHandler("'+id+'");\n';
93
+ }
94
+ out += '\n</script>';
95
+ }
96
+ var head = "<style>tr { background: #ddffdd; }\ntr.count_undefined " +
97
+ "{ background: transparent; }\ntr.count_0 { background: #ffdddd; }\nh1 small { font-size: 0.6em; }</style>";
98
+ var body = out;
99
+ body = "<p>Total coverage: " + (parseFloat(entireCovered) / parseFloat(entireTotal) * 100).toFixed(2) + "%</p>\n" + body;
100
+ var page = "<html>\n<head>\n"+head+"\n</head>\n<body>\n"+body+"\n</body>\n</html>\n";
101
+ fs.writeFileSync('coverage.html', page);
102
+
103
+ console.log('Test coverage:\n');
104
+ var files = [];
105
+ for (var file in stats) {
106
+ files.push([file, stats[file]]);
107
+ }
108
+ files.sort(function(a, b) {
109
+ var aVal = parseFloat(a[1].covered) / parseFloat(a[1].total);
110
+ var bVal = parseFloat(b[1].covered) / parseFloat(b[1].total);
111
+ return (aVal > bVal ? -1 : 1);
112
+ });
113
+ for (var item in files) {
114
+ var file = files[item][0];
115
+ var stats = files[item][1];
116
+ printStats(file, stats.covered, stats.total)
117
+ }
118
+
119
+ console.log('');
120
+ printStats('Total', entireCovered, entireTotal);
121
+
122
+ cleanup();
123
+ });
124
+
125
+ exec('./node_modules/visionmedia-jscoverage/jscoverage lib lib-cov')
126
+ require(path.join(__dirname, '../node_modules/jasmine-node/lib/jasmine-node/cli.js'));
@@ -0,0 +1,122 @@
1
+ require 'fileutils'
2
+ require 'json'
3
+
4
+ require_relative './lib/cucumber_generator'
5
+
6
+ $apis = {}
7
+
8
+ def root
9
+ File.expand_path(File.dirname(__FILE__) + '/../')
10
+ end
11
+
12
+ def models_path
13
+ File.join(root, 'vendor', 'apis', 'apis')
14
+ end
15
+
16
+ def service_name(api)
17
+ name = api['metadata']['serviceAbbreviation'] || api['metadata']['serviceFullName']
18
+ name = name.gsub(/^Amazon|AWS\s*|\(.*|\s+|\W+/, '')
19
+
20
+ # Hack for special service names
21
+ case name
22
+ when 'ElasticLoadBalancing'; 'ELB'
23
+ else name
24
+ end
25
+ end
26
+
27
+ def add_tasks(model)
28
+ model_path = File.join(models_path, model)
29
+ api = JSON.parse(File.read(model_path), :max_nesting => false)
30
+ klass = service_name(api)
31
+ service = klass.downcase
32
+ version = api['metadata']['apiVersion']
33
+
34
+ namespace :api do
35
+ task :versions
36
+
37
+ namespace(service) do
38
+ task(:api) do
39
+ verbose(false) do
40
+ sh "#{root}/vendor/apis/scripts/translate-api #{model}"
41
+ end
42
+ end
43
+
44
+ task(:cucumber) do
45
+ unless File.exist?("#{root}/features/#{service}")
46
+ sh "mkdir -p #{root}/features/#{service}/step_definitions"
47
+ features = "#{root}/features/#{service}/#{service}.feature"
48
+ step_defns = "#{root}/features/#{service}/step_definitions/#{service}.js"
49
+ generator = CucumberGenerator.new(klass, service, api)
50
+
51
+ File.open(features, "w") do |file|
52
+ file.write(generator.features_file)
53
+ end
54
+
55
+ File.open(step_defns, "w") do |file|
56
+ file.write(generator.step_definitions_file)
57
+ end
58
+ end
59
+ end
60
+
61
+ task(:version) do
62
+ puts("%-40s\t%s" % [api['metadata']['serviceFullName'], version])
63
+ end
64
+
65
+ task(:'version:internal') do
66
+ ($apis[api['metadata']['serviceFullName']] ||= []) << [version, klass]
67
+ end
68
+
69
+ task(:'version:html') do
70
+ puts "<tr>\n <td>#{api['metadata']['serviceFullName']}</td>"
71
+ puts " <td>#{version}</td>\n <td>AWS.#{klass}</td>\n</tr>"
72
+ end
73
+
74
+ task(:'version:md') do
75
+ base = "http://docs.amazonwebservices.com/AWSJavaScriptSDK/latest/frames.html"
76
+ anchor = "#!AWS/#{klass}.html"
77
+ puts "* [AWS.#{klass}](#{base}#{anchor})"
78
+ end
79
+ end
80
+
81
+ desc "Builds the API for #{service}."
82
+ task service => [
83
+ "#{service}:api",
84
+ "#{service}:cucumber"
85
+ ]
86
+
87
+ task :api => "#{service}:api"
88
+ task :versions => ["api:#{service}:version"]
89
+ task :'versions:md' => ["api:#{service}:version:md"]
90
+ task :'versions:internal' => ["api:#{service}:version:internal"]
91
+
92
+ task :all => service
93
+ end
94
+ end
95
+
96
+ namespace :api do
97
+ task :'versions:html' => :'api:versions:internal' do
98
+ # 1 row per service (with rowspan to deal with multiple api versions)
99
+ rows = ''
100
+ $apis.sort_by{|svc,apis| svc.downcase }.each do |(svc,apis)|
101
+ rowspan = apis.length > 1 ? " rowspan=\"#{apis.length}\"" : ''
102
+ rows << "<tr>"
103
+ rows << "<td#{rowspan}>#{svc}</td>"
104
+ rows << "<td#{rowspan}>AWS.#{apis.first.last}</td>" if ENV['README']
105
+ rows << "<td>#{apis.first.first}</td>"
106
+ rows << "</tr>\n"
107
+ apis[1..-1].each do |api|
108
+ rows << "<tr>"
109
+ rows << "<td>#{api.first}</td>"
110
+ rows << "</tr>\n"
111
+ end
112
+ end
113
+ puts rows
114
+ end
115
+ end
116
+
117
+ desc 'Builds the API for each service.'
118
+ task :api => 'api:all'
119
+
120
+ Dir.glob(File.join(models_path, '*.api.json')).sort.each do |file|
121
+ add_tasks(File.basename(file))
122
+ end
@@ -0,0 +1,89 @@
1
+ require 'json'
2
+
3
+ def write_configuration
4
+ config = {}
5
+ if File.exist?('configuration')
6
+ config = JSON.parse(File.read('configuration'))
7
+ config['accessKeyId'] ||= ENV['AWS_ACCESS_KEY_ID']
8
+ config['secretAccessKey'] ||= ENV['AWS_SECRET_ACCESS_KEY']
9
+ end
10
+ File.open('test/configuration.js', 'w') do |f|
11
+ config_json = JSON.generate(config).inspect
12
+ f.puts "module.exports = JSON.parse(#{config_json});"
13
+ end
14
+ end
15
+
16
+ def sdk_version
17
+ JSON.parse(File.read('package.json'))['version']
18
+ end
19
+
20
+ namespace :browser do
21
+ $BUILDER = "./dist-tools/browser-builder.js"
22
+ $BROWSERIFY = "browserify"
23
+ $BROWSERIFY_DIST = "dist/aws-sdk.js"
24
+ $BROWSERIFY_TEST = "test/browser/build/tests.js"
25
+
26
+ task :all => [:build, :test]
27
+
28
+ task :setup_dist_tools do
29
+ unless File.directory?("dist-tools/node_modules")
30
+ sh "cd dist-tools && npm install --production"
31
+ end
32
+ end
33
+
34
+ desc 'Builds browser distributable (SERVICES=s3,dynamodb,...)'
35
+ task :build => :build_complete do
36
+ sh "MINIFY=1 #{$BUILDER} > #{$BROWSERIFY_DIST.sub('.js', '.min.js')}"
37
+ end
38
+
39
+ task :build_complete => [:setup_dist_tools, :dist_path] do
40
+ sh "MINIFY='' #{$BUILDER} > #{$BROWSERIFY_DIST}"
41
+ end
42
+
43
+ task :build_all => [:setup_dist_tools, :dist_path] do
44
+ sh "MINIFY='' #{$BUILDER} all > dist/aws-sdk-all.js"
45
+ end
46
+
47
+ desc 'Caches assets to the dist-tools build server'
48
+ task :build_server => [:setup_dist_tools] do
49
+ version = ENV['VERSION'].sub(/^v/, '')
50
+ raise "Missing version" unless version
51
+ root = "vendor/dist-server/sdks/v#{version}"
52
+ mkdir_p(root)
53
+ mkdir_p("#{root}/node_modules")
54
+ cp_r "lib", root
55
+ cp_r "node_modules/aws-sdk-apis", "#{root}/node_modules/aws-sdk-apis"
56
+ cp_r "node_modules/xmlbuilder", "#{root}/node_modules/xmlbuilder"
57
+ cp_r "node_modules/xml2js", "#{root}/node_modules/xml2js"
58
+ Dir.chdir("vendor/dist-server") do
59
+ sh "node setup-versions v#{version}"
60
+ end
61
+ end
62
+
63
+ desc 'Builds browser test harness and runner'
64
+ task :test => [:node10_only, :setup_dist_tools, :dist_path, :build_all] do
65
+ write_configuration
66
+ mkdir_p "test/browser/build"
67
+ cp "dist/aws-sdk-all.js", "test/browser/build/aws-sdk-all.js"
68
+ sh "coffee -c test/helpers.coffee"
69
+ sh "find test -name '*.coffee' | SERVICES=all xargs #{$BROWSERIFY} " +
70
+ "-t coffeeify -i domain > #{$BROWSERIFY_TEST}"
71
+ rm_f "test/helpers.js"
72
+ rm_f "test/configuration.js"
73
+ sh "open test/browser/runner.html" if ENV['OPEN']
74
+ sh "phantomjs test/browser/runner.js"
75
+ end
76
+
77
+ task :dist_path do
78
+ mkdir_p 'dist'
79
+ end
80
+
81
+ task :node10_only do
82
+ version = `node -v`.chomp
83
+ v = version.split('.')
84
+ if v[0] == 'v0' && v[1].to_i < 10
85
+ puts "Skipping task #{ARGV[0]} due to unmet Node version (#{version} < v0.10.x)."
86
+ exit 0
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,36 @@
1
+ namespace :docs do
2
+ task :directory do
3
+ mkdir_p "doc"
4
+ end
5
+
6
+ task :setup_apis do
7
+ unless File.directory?("vendor/apis")
8
+ sh "git clone git://github.com/aws/aws-sdk-js-apis vendor/apis"
9
+ end
10
+ end
11
+
12
+ desc "Build API documentation"
13
+ task :api => [:directory, :setup_apis] do
14
+ ENV['SITEMAP_BASEURL'] = 'http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/'
15
+
16
+ rm_rf "doc/latest"
17
+ args = ENV['ARGS'] ? ENV['ARGS'] : []
18
+ sh "bundle exec yard #{args.join(' ')}"
19
+ end
20
+
21
+ desc "Build guide documentation"
22
+ task :guide => :directory do
23
+ ENV['SITEMAP_BASEURL'] = 'http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/'
24
+
25
+ rm_rf "doc/guide"
26
+ args = %w(-q --yardopts .yardopts_guide)
27
+ args += ENV['ARGS'].split(/\s+/) if ENV['ARGS']
28
+ sh "bundle exec yard #{args.join(' ')}"
29
+ end
30
+
31
+ desc "Builds API and guide documentation"
32
+ task :all => [:api, :guide]
33
+ end
34
+
35
+ desc "Builds all documentation"
36
+ task :docs => ['docs:all']
@@ -0,0 +1,40 @@
1
+ # Generates features/service/* files
2
+ class CucumberGenerator
3
+ def initialize(klass, service, api)
4
+ @klass = klass
5
+ @service = service
6
+ @api = api
7
+ end
8
+
9
+ def features_file
10
+ <<-eof
11
+ # language: en
12
+ @#{@service}
13
+ Feature: #{@api['service_full_name']}
14
+
15
+ I want to use #{@api['service_full_name']}
16
+
17
+ Scenario: Feature
18
+ Given I create something with the service
19
+ Then the request should be successful
20
+ And I delete the thing I created
21
+
22
+ Scenario: Error handling
23
+ Given I do something with the service
24
+ Then the error code should be "ValidationError"
25
+ eof
26
+ end
27
+
28
+ def step_definitions_file
29
+ <<-eof
30
+ module.exports = function() {
31
+ this.Before("@#{@service}", function (callback) {
32
+ this.service = new this.AWS.#{@klass}();
33
+ callback();
34
+ });
35
+
36
+ // Add step definitions
37
+ };
38
+ eof
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ desc 'Install dependencies'
2
+ task :setup do
3
+ system "npm #{LOGLEVEL} install"
4
+ system "bundle install"
5
+ end
6
+
7
+ namespace :test do
8
+ desc "Runs all tests"
9
+ task :all => :build do
10
+ sh "npm #{LOGLEVEL} test"
11
+ end
12
+
13
+ desc "Runs unit tests"
14
+ task :unit => :build do
15
+ sh "npm #{LOGLEVEL} run-script unit"
16
+ end
17
+
18
+ desc "Runs integration tests"
19
+ task :integration => :build do
20
+ sh "npm #{LOGLEVEL} run-script integration"
21
+ end
22
+
23
+ end
24
+
25
+ desc 'Runs JSHint'
26
+ task :lint do
27
+ sh "npm #{LOGLEVEL} run-script lint"
28
+ end
29
+
30
+ desc 'Interactive console'
31
+ task :console do
32
+ system './scripts/console'
33
+ end