spade-packager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. data/.gitignore +2 -0
  2. data/.gitmodules +6 -0
  3. data/bin/spadepkg +8 -0
  4. data/lib/libgems_ext.rb +8 -0
  5. data/lib/libgems_ext/config_file.rb +33 -0
  6. data/lib/libgems_ext/dependency_installer.rb +150 -0
  7. data/lib/libgems_ext/installer.rb +39 -0
  8. data/lib/libgems_ext/libgems.rb +39 -0
  9. data/lib/libgems_ext/spec_fetcher.rb +11 -0
  10. data/lib/spade-packager.rb +1 -0
  11. data/lib/spade/packager.rb +18 -0
  12. data/lib/spade/packager/cli.rb +9 -0
  13. data/lib/spade/packager/cli/base.rb +196 -0
  14. data/lib/spade/packager/cli/owner.rb +46 -0
  15. data/lib/spade/packager/cli/project_generator.rb +117 -0
  16. data/lib/spade/packager/credentials.rb +38 -0
  17. data/lib/spade/packager/local.rb +50 -0
  18. data/lib/spade/packager/package.rb +160 -0
  19. data/lib/spade/packager/remote.rb +98 -0
  20. data/lib/spade/packager/repository.rb +18 -0
  21. data/lib/spade/packager/version.rb +5 -0
  22. data/packages/coffee-script/.gitignore +8 -0
  23. data/packages/coffee-script/.npmignore +11 -0
  24. data/packages/coffee-script/Cakefile +229 -0
  25. data/packages/coffee-script/LICENSE +22 -0
  26. data/packages/coffee-script/README +47 -0
  27. data/packages/coffee-script/Rakefile +78 -0
  28. data/packages/coffee-script/bin/cake +7 -0
  29. data/packages/coffee-script/bin/coffee +7 -0
  30. data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
  31. data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
  32. data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
  33. data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
  34. data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
  35. data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
  36. data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
  37. data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
  38. data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
  39. data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
  40. data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
  41. data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
  42. data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
  43. data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
  44. data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
  45. data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
  46. data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
  47. data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
  48. data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
  49. data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
  50. data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
  51. data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
  52. data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
  53. data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
  54. data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
  55. data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
  56. data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
  57. data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
  58. data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
  59. data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
  60. data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
  61. data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
  62. data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
  63. data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
  64. data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
  65. data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
  66. data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
  67. data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
  68. data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
  69. data/packages/coffee-script/documentation/css/docs.css +374 -0
  70. data/packages/coffee-script/documentation/css/idle.css +64 -0
  71. data/packages/coffee-script/documentation/docs/browser.html +25 -0
  72. data/packages/coffee-script/documentation/docs/cake.html +43 -0
  73. data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
  74. data/packages/coffee-script/documentation/docs/command.html +161 -0
  75. data/packages/coffee-script/documentation/docs/docco.css +186 -0
  76. data/packages/coffee-script/documentation/docs/grammar.html +399 -0
  77. data/packages/coffee-script/documentation/docs/helpers.html +31 -0
  78. data/packages/coffee-script/documentation/docs/index.html +3 -0
  79. data/packages/coffee-script/documentation/docs/lexer.html +490 -0
  80. data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
  81. data/packages/coffee-script/documentation/docs/optparse.html +78 -0
  82. data/packages/coffee-script/documentation/docs/repl.html +24 -0
  83. data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
  84. data/packages/coffee-script/documentation/docs/scope.html +54 -0
  85. data/packages/coffee-script/documentation/docs/underscore.html +295 -0
  86. data/packages/coffee-script/documentation/images/background.png +0 -0
  87. data/packages/coffee-script/documentation/images/banding.png +0 -0
  88. data/packages/coffee-script/documentation/images/button_bg.png +0 -0
  89. data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
  90. data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
  91. data/packages/coffee-script/documentation/images/favicon.ico +0 -0
  92. data/packages/coffee-script/documentation/images/logo.png +0 -0
  93. data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
  94. data/packages/coffee-script/documentation/index.html.erb +1607 -0
  95. data/packages/coffee-script/documentation/js/aliases.js +17 -0
  96. data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
  97. data/packages/coffee-script/documentation/js/block_comment.js +4 -0
  98. data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
  99. data/packages/coffee-script/documentation/js/classes.js +44 -0
  100. data/packages/coffee-script/documentation/js/comparisons.js +3 -0
  101. data/packages/coffee-script/documentation/js/conditionals.js +12 -0
  102. data/packages/coffee-script/documentation/js/default_args.js +7 -0
  103. data/packages/coffee-script/documentation/js/do.js +10 -0
  104. data/packages/coffee-script/documentation/js/embedded.js +4 -0
  105. data/packages/coffee-script/documentation/js/existence.js +6 -0
  106. data/packages/coffee-script/documentation/js/expressions.js +15 -0
  107. data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
  108. data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
  109. data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
  110. data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
  111. data/packages/coffee-script/documentation/js/functions.js +7 -0
  112. data/packages/coffee-script/documentation/js/heredocs.js +2 -0
  113. data/packages/coffee-script/documentation/js/heregexes.js +2 -0
  114. data/packages/coffee-script/documentation/js/interpolation.js +4 -0
  115. data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
  116. data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
  117. data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
  118. data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
  119. data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
  120. data/packages/coffee-script/documentation/js/overview.js +35 -0
  121. data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
  122. data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
  123. data/packages/coffee-script/documentation/js/prototypes.js +3 -0
  124. data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
  125. data/packages/coffee-script/documentation/js/scope.js +8 -0
  126. data/packages/coffee-script/documentation/js/slices.js +4 -0
  127. data/packages/coffee-script/documentation/js/soaks.js +2 -0
  128. data/packages/coffee-script/documentation/js/splats.js +15 -0
  129. data/packages/coffee-script/documentation/js/splices.js +3 -0
  130. data/packages/coffee-script/documentation/js/strings.js +2 -0
  131. data/packages/coffee-script/documentation/js/switch.js +23 -0
  132. data/packages/coffee-script/documentation/js/try.js +8 -0
  133. data/packages/coffee-script/documentation/js/while.js +18 -0
  134. data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
  135. data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
  136. data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
  137. data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
  138. data/packages/coffee-script/examples/blocks.coffee +54 -0
  139. data/packages/coffee-script/examples/code.coffee +167 -0
  140. data/packages/coffee-script/examples/computer_science/README +4 -0
  141. data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
  142. data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
  143. data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
  144. data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
  145. data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
  146. data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
  147. data/packages/coffee-script/examples/poignant.coffee +181 -0
  148. data/packages/coffee-script/examples/potion.coffee +206 -0
  149. data/packages/coffee-script/examples/underscore.coffee +682 -0
  150. data/packages/coffee-script/examples/web_server.coffee +12 -0
  151. data/packages/coffee-script/extras/EXTRAS +7 -0
  152. data/packages/coffee-script/extras/coffee-script.js +8 -0
  153. data/packages/coffee-script/extras/jsl.conf +44 -0
  154. data/packages/coffee-script/index.html +2515 -0
  155. data/packages/coffee-script/lib/browser.js +52 -0
  156. data/packages/coffee-script/lib/cake.js +76 -0
  157. data/packages/coffee-script/lib/coffee-script.js +82 -0
  158. data/packages/coffee-script/lib/command.js +263 -0
  159. data/packages/coffee-script/lib/grammar.js +581 -0
  160. data/packages/coffee-script/lib/helpers.js +66 -0
  161. data/packages/coffee-script/lib/index.js +8 -0
  162. data/packages/coffee-script/lib/lexer.js +633 -0
  163. data/packages/coffee-script/lib/nodes.js +2165 -0
  164. data/packages/coffee-script/lib/optparse.js +111 -0
  165. data/packages/coffee-script/lib/parser.js +649 -0
  166. data/packages/coffee-script/lib/repl.js +42 -0
  167. data/packages/coffee-script/lib/rewriter.js +353 -0
  168. data/packages/coffee-script/lib/scope.js +120 -0
  169. data/packages/coffee-script/lib/spade-format.js +45 -0
  170. data/packages/coffee-script/package.json +26 -0
  171. data/packages/coffee-script/src/browser.coffee +43 -0
  172. data/packages/coffee-script/src/cake.coffee +69 -0
  173. data/packages/coffee-script/src/coffee-script.coffee +92 -0
  174. data/packages/coffee-script/src/command.coffee +214 -0
  175. data/packages/coffee-script/src/grammar.coffee +590 -0
  176. data/packages/coffee-script/src/helpers.coffee +56 -0
  177. data/packages/coffee-script/src/index.coffee +2 -0
  178. data/packages/coffee-script/src/lexer.coffee +653 -0
  179. data/packages/coffee-script/src/nodes.coffee +1754 -0
  180. data/packages/coffee-script/src/optparse.coffee +99 -0
  181. data/packages/coffee-script/src/repl.coffee +42 -0
  182. data/packages/coffee-script/src/rewriter.coffee +326 -0
  183. data/packages/coffee-script/src/scope.coffee +94 -0
  184. data/packages/coffee-script/test/arguments.coffee +127 -0
  185. data/packages/coffee-script/test/assignment.coffee +98 -0
  186. data/packages/coffee-script/test/break.coffee +18 -0
  187. data/packages/coffee-script/test/comments.coffee +201 -0
  188. data/packages/coffee-script/test/conditionals.coffee +181 -0
  189. data/packages/coffee-script/test/exception_handling.coffee +90 -0
  190. data/packages/coffee-script/test/helpers.coffee +96 -0
  191. data/packages/coffee-script/test/importing.coffee +18 -0
  192. data/packages/coffee-script/test/operators.coffee +225 -0
  193. data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
  194. data/packages/coffee-script/test/regular_expressions.coffee +56 -0
  195. data/packages/coffee-script/test/test.html +123 -0
  196. data/packages/coffee-script/test/test_chaining.coffee +77 -0
  197. data/packages/coffee-script/test/test_classes.coffee +372 -0
  198. data/packages/coffee-script/test/test_compilation.coffee +26 -0
  199. data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
  200. data/packages/coffee-script/test/test_existence.coffee +165 -0
  201. data/packages/coffee-script/test/test_functions.coffee +379 -0
  202. data/packages/coffee-script/test/test_heredocs.coffee +111 -0
  203. data/packages/coffee-script/test/test_literals.coffee +270 -0
  204. data/packages/coffee-script/test/test_option_parser.coffee +27 -0
  205. data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
  206. data/packages/coffee-script/test/test_returns.coffee +63 -0
  207. data/packages/coffee-script/test/test_splats.coffee +102 -0
  208. data/packages/coffee-script/test/test_strings.coffee +118 -0
  209. data/packages/coffee-script/test/test_switch.coffee +103 -0
  210. data/packages/coffee-script/test/test_while.coffee +71 -0
  211. data/packages/ivory/LICENSE.txt +1 -0
  212. data/packages/ivory/README.md +19 -0
  213. data/packages/ivory/lib/buffer.js +111 -0
  214. data/packages/ivory/lib/events.js +137 -0
  215. data/packages/ivory/lib/fs.js +266 -0
  216. data/packages/ivory/lib/main.js +13 -0
  217. data/packages/ivory/lib/path.js +158 -0
  218. data/packages/ivory/lib/ruby/buffer.rb +145 -0
  219. data/packages/ivory/lib/ruby/constants.rb +585 -0
  220. data/packages/ivory/lib/ruby/events.rb +32 -0
  221. data/packages/ivory/lib/ruby/fs.rb +245 -0
  222. data/packages/ivory/lib/ruby/process.rb +28 -0
  223. data/packages/ivory/lib/stream.js +115 -0
  224. data/packages/ivory/lib/util.js +414 -0
  225. data/packages/ivory/package.json +11 -0
  226. data/packages/ivory/spade-boot.js +78 -0
  227. data/packages/jquery/main.js +7179 -0
  228. data/packages/jquery/package.json +10 -0
  229. data/packages/json/lib/main.js +14 -0
  230. data/packages/json/package.json +8 -0
  231. data/packages/lproj/README.md +77 -0
  232. data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
  233. data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
  234. data/packages/lproj/examples/demo-app/index.html +8 -0
  235. data/packages/lproj/examples/demo-app/lib/main.js +7 -0
  236. data/packages/lproj/examples/demo-app/package.json +9 -0
  237. data/packages/lproj/lib/main.js +78 -0
  238. data/packages/lproj/lib/strings-format.js +6 -0
  239. data/packages/lproj/package.json +9 -0
  240. data/packages/optparse/README.md +161 -0
  241. data/packages/optparse/TODO +1 -0
  242. data/packages/optparse/examples/browser-test.html +75 -0
  243. data/packages/optparse/examples/nodejs-test.js +90 -0
  244. data/packages/optparse/lib/optparse.js +309 -0
  245. data/packages/optparse/package.json +13 -0
  246. data/packages/optparse/seed.yml +5 -0
  247. data/packages/text/lib/main.js +8 -0
  248. data/packages/text/package.json +9 -0
  249. data/packages/web-file/README.md +7 -0
  250. data/packages/web-file/lib/errors.js +32 -0
  251. data/packages/web-file/lib/file-reader.js +10 -0
  252. data/packages/web-file/lib/file-system.js +234 -0
  253. data/packages/web-file/lib/file-writer.js +10 -0
  254. data/packages/web-file/lib/file.js +9 -0
  255. data/packages/web-file/lib/main.js +34 -0
  256. data/packages/web-file/lib/platform.js +25 -0
  257. data/packages/web-file/lib/ruby/file.rb +252 -0
  258. data/packages/web-file/lib/ruby/file_reader.rb +69 -0
  259. data/packages/web-file/lib/ruby/file_system.rb +134 -0
  260. data/packages/web-file/lib/ruby/file_writer.rb +78 -0
  261. data/packages/web-file/package.json +12 -0
  262. data/packages/web-typed-array/README.md +7 -0
  263. data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
  264. data/packages/web-typed-array/lib/array-buffer.js +7 -0
  265. data/packages/web-typed-array/lib/main.js +33 -0
  266. data/packages/web-typed-array/lib/platform.js +20 -0
  267. data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
  268. data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
  269. data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
  270. data/packages/web-typed-array/lib/typed-array.js +26 -0
  271. data/packages/web-typed-array/package.json +9 -0
  272. data/spade-packager.gemspec +39 -0
  273. data/spec/cli/build_spec.rb +57 -0
  274. data/spec/cli/install_spec.rb +119 -0
  275. data/spec/cli/installed_spec.rb +55 -0
  276. data/spec/cli/list_spec.rb +74 -0
  277. data/spec/cli/login_spec.rb +75 -0
  278. data/spec/cli/new_spec.rb +5 -0
  279. data/spec/cli/owner_spec.rb +114 -0
  280. data/spec/cli/push_spec.rb +73 -0
  281. data/spec/cli/uninstall_spec.rb +58 -0
  282. data/spec/cli/unpack_spec.rb +72 -0
  283. data/spec/cli/unyank_spec.rb +73 -0
  284. data/spec/cli/yank_spec.rb +73 -0
  285. data/spec/credentials_spec.rb +23 -0
  286. data/spec/fixtures/badrake-0.8.7.spd +0 -0
  287. data/spec/fixtures/builder-3.0.0.spd +0 -0
  288. data/spec/fixtures/bundler-1.1.pre.spd +0 -0
  289. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  290. data/spec/fixtures/core-test-0.4.3.spd +0 -0
  291. data/spec/fixtures/core-test/bin/cot +3 -0
  292. data/spec/fixtures/core-test/lib/main.js +1 -0
  293. data/spec/fixtures/core-test/resources/runner.css +0 -0
  294. data/spec/fixtures/core-test/tests/test.js +1 -0
  295. data/spec/fixtures/highline-1.6.1.spd +0 -0
  296. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  297. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  298. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  299. data/spec/fixtures/package.json +30 -0
  300. data/spec/fixtures/rake-0.8.6.spd +0 -0
  301. data/spec/fixtures/rake-0.8.7.spd +0 -0
  302. data/spec/gauntlet_spec.rb +27 -0
  303. data/spec/package_spec.rb +267 -0
  304. data/spec/spec_helper.rb +32 -0
  305. data/spec/support/cli.rb +103 -0
  306. data/spec/support/fake.rb +48 -0
  307. data/spec/support/fake_gem_server.rb +67 -0
  308. data/spec/support/fake_gemcutter.rb +50 -0
  309. data/spec/support/matchers.rb +32 -0
  310. data/spec/support/path.rb +61 -0
  311. data/templates/project/LICENSE +19 -0
  312. data/templates/project/README.md +21 -0
  313. data/templates/project/lib/main.js +9 -0
  314. data/templates/project/project.json +31 -0
  315. data/templates/project/tests/main-test.js +8 -0
  316. metadata +484 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "jquery",
3
+ "version": "1.4.3",
4
+ "summary": "write less, do more",
5
+ "author": "The jQuery Team",
6
+ "homepage": "http://jquery.com",
7
+ "description": "jQuery library for easy DOM manipulation",
8
+ "platform": ["browser"],
9
+ "directories": { "lib": "." }
10
+ }
@@ -0,0 +1,14 @@
1
+
2
+ exports.compileFormat = function(json) {
3
+ return 'return '+json+';';
4
+ };
5
+
6
+ // TODO: make these work on browsers w/o JSON.
7
+
8
+ exports.parse = function(str) {
9
+ return JSON.parse(str);
10
+ };
11
+
12
+ exports.stringify = function(obj) {
13
+ return JSON.stringify(obj);
14
+ };
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "json",
3
+ "version": "1.0.0",
4
+
5
+ "plugin:formats": {
6
+ "json": "json/main"
7
+ }
8
+ }
@@ -0,0 +1,77 @@
1
+ This package provides infrastructure you need to localize your application.
2
+ You can use this package to automatically load the correct resources for your
3
+ application as well as to handle localizing strings.
4
+
5
+ # Activating Localization
6
+
7
+ To add localized resources to your application, just create folders in your
8
+ package named {LANG}.lproj where {LANG} is the two-letter language and region
9
+ code for your language, such as "en-US" or US english or just "en" for generic
10
+ english. Place all of your localized resources for the selected language inside of this directory.
11
+
12
+ To load resources in your application, first you must load lproj and have it
13
+ modify the require() function in your module to make it localization aware.
14
+ You must put this line into any file that requires use of localization:
15
+
16
+ require('lproj');
17
+ var loc = lproj(require); // makes require localization aware
18
+
19
+ **IMPORTANT** You must assign the lproj require to the 'loc' property on
20
+ require. Otherwise calling loc will not locate your resource properly.
21
+
22
+
23
+ # Adding Localized Resources
24
+
25
+ Then, whenever you want to require a resource from your current language, just
26
+ use the require.loc() function:
27
+
28
+ require.loc('my-app/~lproj/hello');
29
+
30
+ The require.loc() function replaces the '~lproj' in your module path with a
31
+ reference to the proper localized resource. It will lookup the resource path
32
+ using the following algorithm:
33
+
34
+ * First it will look for the most specific current language (fr-FR.lproj)
35
+ * Then it will look for the generic language (fr.lproj)
36
+ * Then it will look in the default language (en.lproj)
37
+ * Finally it will look in the 'resources' directory (i.e. non-localized)
38
+
39
+ Note that in addition, require.async() and require.exists() are automatically
40
+ modified to support localization as well.
41
+
42
+ # Localizing Strings
43
+
44
+ In addition to localizing resources, lproj makes it easy to localize strings
45
+ as well. To localize a string, you just need to wrap it in a call to loc:
46
+
47
+ loc('Localize Me'); // returns a localized version
48
+
49
+ This will lookup the string in a strings file defined in the current package.
50
+ A strings file is a special file that appears in the .lproj directory of a
51
+ package mapping unlocalized strings to localized strings. The strings file
52
+ should appear in your lproj, named 'localized.strings' with each line having
53
+ the following format:
54
+
55
+ "Localize Me": "I am localized"
56
+
57
+ This will map the unlocalized string "Localize Me" to the localized string "I
58
+ am localized".
59
+
60
+ Note that the loc() method only works because it is uniquely generated for
61
+ EACH module that you load. This is important because it allows lproj to
62
+ lookup the proper resources for your package.
63
+
64
+ If you want to get the localized string relative to another module, you can
65
+ do so as well with the require.string() method (added when you run lproj()):
66
+
67
+ require.string("another-package", "Localize Me");
68
+ // returns the localized value of 'Localize Me' from another-package
69
+
70
+ You can also choose to localize a string using an alternate language by
71
+ passing the language as a second parameter:
72
+
73
+ loc('Localize Me', 'fr'); // localize into french from my package
74
+ require.string('another-package', 'Localize Me', 'fr');
75
+
76
+
77
+
@@ -0,0 +1,2 @@
1
+ "_Hello World": "Hello World"
2
+
@@ -0,0 +1,3 @@
1
+ "_Hello World": "Bonjour le monde"
2
+
3
+
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <script src="spade-boot.js" data-require="demo-app" ></script>
4
+ </head>
5
+ <body>
6
+ <h1>Loading</h1>
7
+ </body>
8
+ </html>
@@ -0,0 +1,7 @@
1
+ /*globals lproj */
2
+
3
+ require('lproj');
4
+ require('jquery');
5
+
6
+ var loc = lproj(require); // activate lproj
7
+ $('h1').text(loc('_Hello World'));
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "demo-app",
3
+ "description": "basic demo of the lproj project",
4
+
5
+ "dependencies": {
6
+ "lproj": "0.5.0",
7
+ "jquery": "1.4.3"
8
+ }
9
+ }
@@ -0,0 +1,78 @@
1
+ /*globals lproj ENV */
2
+
3
+ // NOTE: expects to be called with 'this' equal to require
4
+ function lookupString(moduleId, string, lang) {
5
+
6
+ // get the strings...
7
+ moduleId = moduleId ? this.normalize(moduleId) : this.id;
8
+ var packageId = moduleId.slice(0, moduleId.indexOf('/'));
9
+ var strings = this.loc(packageId+'/~lproj/localized', lang);
10
+
11
+ return strings && strings[string] ? strings[string] : string;
12
+ }
13
+
14
+ /**
15
+ Modifies the passed require function to support localization. Also
16
+ generates a 'loc' function, which can be used to localize strings.
17
+ */
18
+ lproj = function(req) {
19
+
20
+ if (req._lproj) return req._lproj; // make indempotent
21
+
22
+ var _exists = req.exists,
23
+ _async = req.async,
24
+ _normalize = req.normalize;
25
+
26
+ req.language = ENV.LANG || 'en-US';
27
+ req.defaultLanguage = 'en-US';
28
+
29
+ function locit(req, id, lang) {
30
+ var working, langs, ret, idx, len;
31
+
32
+ id = _normalize.call(req, id);
33
+ if (!id.match(/^[^\/]+\/~lproj\//)) return id; // nothing to do
34
+
35
+ if (!lang) lang = req.language ;
36
+ langs = [lang];
37
+ if (lang.indexOf('-')>=0) langs.push(lang.slice(0, lang.indexOf('-')));
38
+ if (req.defaultLanguage !== lang) {
39
+ lang = req.defaultLanguage;
40
+ langs.push(lang);
41
+ if (lang.indexOf('-')>=0) langs.push(lang.slice(0, lang.indexOf('-')));
42
+ }
43
+
44
+ len = langs.length;
45
+ for(idx=0;idx<len; idx++) {
46
+ working = id.replace('/~lproj', '/~'+langs[idx]+'.lproj');
47
+ if (_exists.call(req, working)) return working;
48
+ }
49
+
50
+ return id;
51
+ }
52
+
53
+ // upgrade require
54
+ req.loc = function(id,lang) { return this(locit(this, id, lang)); };
55
+
56
+ req.exists = function(id, lang) {
57
+ return _exists.call(this, locit(this, id, lang));
58
+ };
59
+
60
+ req.async = function(id, lang, callback) {
61
+ if (!callback && ('function' === typeof callback)) {
62
+ callback = lang;
63
+ lang = null;
64
+ }
65
+ return _async.call(this, locit(this, id, lang), callback);
66
+ };
67
+
68
+ req.normalize = function(id, lang) {
69
+ return locit(this, id, lang);
70
+ };
71
+
72
+ // add string support
73
+ req.string = lookupString;
74
+ req._lproj = function(str, lang) { return req.string(null, str, lang); };
75
+ return req._lproj;
76
+ };
77
+
78
+ return lproj;
@@ -0,0 +1,6 @@
1
+
2
+ exports.compileFormat = function(strings) {
3
+ // basically, the strings is like a simplified form of JSON.
4
+ // We should probably replace this with a real parser at some point.
5
+ return "return {"+strings+"};";
6
+ };
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "lproj",
3
+ "version": "0.5.0",
4
+ "description": "Localization support for spade packages",
5
+
6
+ "plugin:formats": {
7
+ "strings": "lproj/strings-format"
8
+ }
9
+ }
@@ -0,0 +1,161 @@
1
+ optparse-js
2
+ ===========
3
+
4
+ Optparse-js is a command line option parser for Javascript. It's slightly based on Ruby's implementation optparse but with some differences (different languages has different needs) such as custom parsers.
5
+
6
+ All examples in this readme is using [Node.js](http://nodejs.org/). How ever, the library works with all kinds of Javascript implementations.
7
+
8
+
9
+ QUICK START
10
+ -----------
11
+
12
+ The library defines one class, the OptionParser class. The class constructor takes one single argument, a list with a set of rules. Here is a quick example:
13
+
14
+ // Import the sys library
15
+ var sys = require('sys');
16
+
17
+ // Import the optparse library.
18
+ var optparse = require('optparse');
19
+
20
+ // Define an option called ´´help´´. We give it a quick alias named ´´-h´´
21
+ // and a quick help text.
22
+ var switches = [
23
+ ['-h', '--help', 'Shows help sections']
24
+ ];
25
+
26
+ // Create a new OptionParser.
27
+ var parser = new optparse.OptionParser(switches);
28
+
29
+ // Hook the help option. The callback will be executed when the OptionParser
30
+ // hits the switch ´´-h´´ or ´´--help´´. Each representatio
31
+ parser.on('help', function() {
32
+ sys.puts('Help');
33
+ });
34
+
35
+
36
+
37
+ DEFINING RULES
38
+ --------------
39
+ The OptionParser constructor takes an Array with rules. Each rule is represented by an array (tuple) of two or three values. A typical rule definition may look like this:
40
+
41
+ ['-h', '--help', 'Print this help']
42
+
43
+
44
+ The first value is optional, and represents an alias for the long-named switch (the second value, in this case ´´--help´´).
45
+
46
+ The second argument is the actual rule. The rule must start with a double dash followed by a switch name (in this case ´help´). The OptionParser also supports special option arguments. Define an option argument in the rule by adding a named argument after the leading double dash and switch name (E.G '--port-number PORT_NUMBER'). The argument is then parsed to the option handler. To define an optional option argument, just add a braces around argument in the rule (E.G '--port-number [PORT_NUMBER]). The OptionParser also supports filter. More on that in in the section called ´Option Filters´.
47
+
48
+ The third argument is an optional rule description.
49
+
50
+
51
+ OPTION FILTERS
52
+ --------------
53
+ Filters is a neat feature that let you filter option arguments. The OptionParser itself as already a set of built-in common filter's. These are:
54
+
55
+ - NUMBER, supports both decimal and hexadecimal numbers.
56
+ - DATE, filters arguments that matches YYYY-MM-DD.
57
+ - EMAIL, filters arguments that matches my@email.com.
58
+
59
+ It's simple to use any of the filter above in your rule-set. Here is a quick example how to filter number:
60
+
61
+ var rules = [
62
+ ['--first-option NUMBER', 'Takes a number as argument'],
63
+ ['--second-option [NUMBER]', 'Takes an optional number as argument']
64
+ ]
65
+
66
+ You can add your own set of filter by calling the *parser_instance.filter* method:
67
+
68
+ parser.filter('single_char', function(value) {
69
+ if(value.length != 1) throw "Filter mismatch.";
70
+ return value;
71
+ });
72
+
73
+
74
+ OPTION PARSER
75
+ -------------
76
+ The OptionParser class has the following properties and methods:
77
+
78
+ ### string banner
79
+ An optional usage banner. This text is included when calling ´´toString´´. Default value is: "Usage: [Options]".
80
+
81
+
82
+ ### string options_title
83
+ An optional title for the options list. This text is included when calling ´´toString´´. Default value is: "Available options:".
84
+
85
+
86
+ ### function on(switch_or_arg_index, callback)
87
+ Add's a callback for a switch or an argument (defined by index). Switch hooks MUST be typed witout the leading ´´--´´. This example show how to hook a switch:
88
+
89
+ parser.on('help', function(optional_argument) {
90
+ // Show help section
91
+ });
92
+
93
+ And this example show how to hook an argument (an option without the leading - or --):
94
+
95
+ parser.on(0, function(opt) {
96
+ puts('The first non-switch option is:' + opt);
97
+ });
98
+
99
+ It's also possible to define a default handler. The default handler is called when no rule's are meet. Here is an example how to add a ´default handler´:
100
+
101
+ parser.on(function(opt) {
102
+ puts('No handler was defined for option:' + opt);
103
+ });
104
+
105
+ Use the wildcard handler to build a custom ´´on´´ handler.
106
+
107
+ parser.on('*', function(opt, value) {
108
+ puts('option=' + opt + ', value=' + value);
109
+ });
110
+
111
+ ### function filter(name, callback)
112
+ Adds a new filter extension to the OptionParser instance. The first argument is the name of the filter (trigger). The second argument is the actual filter See the ´OPTION FILTERS´ section for more info.
113
+
114
+ It's possible to override the default filters by passing the value "_DEFAULT" to the ´´name´´ argument. The name of the filter is automatically transformed into
115
+ upper case.
116
+
117
+
118
+ ### function halt([callback])
119
+ Interrupt's further parsing. This function should be called from an ´on´ -callbacks, to cancel the parsing. This can be useful when the program should ignore all other arguments (when displaying help or version information).
120
+
121
+ The function also takes an optional callback argument. If the callback argument is specified, a ´halt´ callback will be added (instead of executing the ´halt´ command).
122
+
123
+ Here is an example how to add an ´on_halt´ callback:
124
+
125
+ parser.halt(function() {
126
+ puts('An option callback interupted the parser');
127
+ });
128
+
129
+
130
+ ### function parse(arguments)
131
+ Start's parsing of arguments. This should be the last thing you do.
132
+
133
+
134
+ ### function options()
135
+ Returns an Array with all defined option rules
136
+
137
+
138
+ ### function toString()
139
+ Returns a string representation of this OptionParser instance (a formatted help section).
140
+
141
+
142
+ MORE EXAMPLES
143
+ -------------
144
+ See examples/nodejs-test.js and examples/browser-test-html for more info how to
145
+ use the script.
146
+
147
+
148
+ SUGGESTIONS
149
+ -----------
150
+ All comments in how to improve this library is very welcome. Feel free post suggestions to the [Issue tracker](http://github.com/jfd/optparse-js/issues), or even better, fork the repository to implement your own features.
151
+
152
+
153
+ LICENSE
154
+ -------
155
+ Released under a MIT-style license.
156
+
157
+
158
+ COPYRIGHT
159
+ ---------
160
+ Copyright (c) 2009 Johan Dahlberg
161
+
@@ -0,0 +1 @@
1
+ - Support for Argument lists (for switches)
@@ -0,0 +1,75 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2
+ "http://www.w3.org/TR/html4/strict.dtd">
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6
+ <title>optparse.js example</title>
7
+ <script type="text/javascript" charset="utf-8" src="../src/optparse.js"></script>
8
+ <script>
9
+ // Arguments to be passed to the parser
10
+ var ARGS = ['-p', 'This is a message', '-i', 'test.html', '--debug'];
11
+
12
+ // Define some options
13
+ var SWITCHES = [
14
+ ['-i', '--include-file FILE', "Includes a file"],
15
+ ['-p', '--print [MESSAGE]', "Prints a message on screen"],
16
+ ['-d', '--debug', "Enables debug mode"],
17
+ ];
18
+
19
+ function puts(msg) {
20
+ var body = document.getElementById('body');
21
+ var pre = document.createElement('pre');
22
+ pre.innerHTML = msg;
23
+ body.appendChild(pre);
24
+ }
25
+
26
+ function onLoad() {
27
+ puts("optparse.js");
28
+
29
+ // Create a new OptionParser with defined switches
30
+ var parser = new optparse.OptionParser(SWITCHES);
31
+
32
+ // Internal variable to store options.
33
+ var options = {
34
+ debug: false,
35
+ files: []
36
+ };
37
+
38
+ // Handle the first argument (switches excluded)
39
+ parser.on(0, function(value) {
40
+ puts("First non-switch argument is: " + value);
41
+ });
42
+
43
+ // Handle the --include-file switch
44
+ parser.on('include-file', function(value) {
45
+ options.files.push(value);
46
+ });
47
+
48
+ // Handle the --print switch
49
+ parser.on('print', function(value) {
50
+ puts('PRINT: ' + value);
51
+ });
52
+
53
+ // Handle the --debug switch
54
+ parser.on('debug', function() {
55
+ options.debug = true;
56
+ });
57
+
58
+ // Parse command line arguments
59
+ parser.parse(ARGS);
60
+
61
+ // Output all files that was included.
62
+ puts("No of files to include: " + options.files.length);
63
+ for(var i = 0; i < options.files.length; i++) {
64
+ puts("File [" + (i + 1) + "]:" + options.files[i]);
65
+ }
66
+
67
+ // Is debug-mode enabled?
68
+ puts("Debug mode is set to: " + options.debug);
69
+ }
70
+ </script>
71
+ </head>
72
+ <body id="body" onload="onLoad()">
73
+
74
+ </body>
75
+ </html>