jax 1.1.1 → 2.0.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 (473) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +2 -3
  3. data/.travis.yml +8 -22
  4. data/README.md +2 -2
  5. data/Rakefile +128 -96
  6. data/app/assets/javascripts/jax/controller-list.js.coffee +22 -0
  7. data/app/assets/javascripts/jax/dom-helpers.js.coffee +17 -0
  8. data/app/assets/javascripts/jax/jasmine_runner.js +177 -0
  9. data/app/assets/javascripts/jax/runtime.js +6 -0
  10. data/app/assets/javascripts/jax/shader_editor.js.coffee +33 -0
  11. data/app/assets/stylesheets/jax/controller-list.css +5 -0
  12. data/app/assets/stylesheets/jax/jasmine.css +16 -0
  13. data/app/assets/stylesheets/jax/nav.css +41 -0
  14. data/app/assets/stylesheets/jax/runtime.css +47 -0
  15. data/app/assets/stylesheets/jax/shader_editor.css +3 -0
  16. data/app/assets/stylesheets/jax/suite.css +82 -0
  17. data/app/controllers/jax/suite_controller.rb +48 -0
  18. data/app/views/jax/suite/jasmine.html.erb +38 -0
  19. data/app/views/jax/suite/run_webgl.html.erb +49 -0
  20. data/app/views/jax/suite/shader_editor.html.erb +24 -0
  21. data/app/views/layouts/jax.html.erb +40 -0
  22. data/bin/jax +8 -4
  23. data/config/routes.rb +2 -0
  24. data/config.ru +5 -0
  25. data/features/rails/resources.feature +45 -0
  26. data/features/rails/shaders.feature +13 -0
  27. data/features/rails/specs.feature +24 -0
  28. data/features/runtime.feature +15 -0
  29. data/features/step_definitions/environment_steps.rb +15 -0
  30. data/features/step_definitions/response_steps.rb +13 -0
  31. data/features/step_definitions/runtime.rb +11 -0
  32. data/features/step_definitions/web_steps.rb +223 -0
  33. data/features/support/env.rb +75 -0
  34. data/features/support/paths.rb +30 -0
  35. data/features/support/rails_environment.rb +3 -0
  36. data/features/support/selectors.rb +39 -0
  37. data/features/support/setup.rb +17 -0
  38. data/jax.gemspec +22 -16
  39. data/lib/assets/javascripts/jax/anim_frame.js +64 -0
  40. data/lib/assets/javascripts/jax/application.js +16 -0
  41. data/lib/assets/javascripts/jax/builtin/all.js +21 -0
  42. data/lib/assets/javascripts/jax/builtin/meshes/cube.js +83 -0
  43. data/lib/assets/javascripts/jax/builtin/meshes/plane.js +67 -0
  44. data/lib/assets/javascripts/jax/builtin/meshes/quad.js +89 -0
  45. data/lib/assets/javascripts/jax/builtin/meshes/sphere.js +65 -0
  46. data/lib/assets/javascripts/jax/builtin/meshes/teapot.js +48 -0
  47. data/lib/assets/javascripts/jax/builtin/meshes/torus.js +64 -0
  48. data/lib/assets/javascripts/jax/compatibility.js +312 -0
  49. data/lib/assets/javascripts/jax/context.js +741 -0
  50. data/lib/assets/javascripts/jax/core/base.js +69 -0
  51. data/lib/assets/javascripts/jax/core/glMatrix_ext/mat3.js +20 -0
  52. data/lib/assets/javascripts/jax/core/glMatrix_ext/mat4.js +10 -0
  53. data/lib/assets/javascripts/jax/core/glMatrix_ext/quat4.js +148 -0
  54. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec2.js +25 -0
  55. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec3.js +86 -0
  56. data/lib/assets/javascripts/jax/core/glMatrix_ext/vec4.js +28 -0
  57. data/lib/assets/javascripts/jax/core/helper.js +44 -0
  58. data/lib/assets/javascripts/jax/core/math.js +61 -0
  59. data/lib/assets/javascripts/jax/core/matrix_stack.js +310 -0
  60. data/lib/assets/javascripts/jax/core/util.js +271 -0
  61. data/lib/assets/javascripts/jax/core.js +43 -0
  62. data/lib/assets/javascripts/jax/events.js +304 -0
  63. data/lib/assets/javascripts/jax/geometry/line.js +185 -0
  64. data/lib/assets/javascripts/jax/geometry/plane.js +371 -0
  65. data/lib/assets/javascripts/jax/geometry/triangle/inliner.rb +94 -0
  66. data/lib/assets/javascripts/jax/geometry/triangle/slow_tri_tri_intersect.js +20 -0
  67. data/lib/assets/javascripts/jax/geometry/triangle/tri_tri_intersect.js +281 -0
  68. data/lib/assets/javascripts/jax/geometry/triangle/tri_tri_intersect_optimized.js +564 -0
  69. data/lib/assets/javascripts/jax/geometry/triangle.js +311 -0
  70. data/lib/assets/javascripts/jax/geometry.js +14 -0
  71. data/lib/assets/javascripts/jax/mvc/controller.js +188 -0
  72. data/lib/assets/javascripts/jax/mvc/model.js +302 -0
  73. data/lib/assets/javascripts/jax/mvc/route_set.js +148 -0
  74. data/lib/assets/javascripts/jax/mvc/view.js +43 -0
  75. data/lib/assets/javascripts/jax/mvc/view_manager.js +65 -0
  76. data/lib/assets/javascripts/jax/noise.js +251 -0
  77. data/lib/assets/javascripts/jax/prototype/class.js +81 -0
  78. data/lib/assets/javascripts/jax/prototype/core.js +112 -0
  79. data/lib/assets/javascripts/jax/prototype/extensions.js +142 -0
  80. data/lib/assets/javascripts/jax/vendor/ejs.js +1 -0
  81. data/lib/assets/javascripts/jax/vendor/glMatrix.js +7 -0
  82. data/lib/assets/javascripts/jax/webgl/camera.js +697 -0
  83. data/lib/assets/javascripts/jax/webgl/cleanup.js +1 -0
  84. data/lib/assets/javascripts/jax/webgl/core/buffer.js +292 -0
  85. data/lib/assets/javascripts/jax/webgl/core/data_region.js +184 -0
  86. data/lib/assets/javascripts/jax/webgl/core/data_segment.js +255 -0
  87. data/lib/assets/javascripts/jax/webgl/core/events.js +99 -0
  88. data/lib/assets/javascripts/jax/webgl/core/framebuffer.js +316 -0
  89. data/lib/assets/javascripts/jax/webgl/core.js +6 -0
  90. data/lib/assets/javascripts/jax/webgl/material.js +381 -0
  91. data/lib/assets/javascripts/jax/webgl/mesh/normals.js +37 -0
  92. data/lib/assets/javascripts/jax/webgl/mesh/support.js +104 -0
  93. data/lib/assets/javascripts/jax/webgl/mesh/tangent_space.js +111 -0
  94. data/lib/assets/javascripts/jax/webgl/mesh.js +440 -0
  95. data/lib/assets/javascripts/jax/webgl/scene/frustum.js +422 -0
  96. data/lib/assets/javascripts/jax/webgl/scene/light_manager.js +141 -0
  97. data/lib/assets/javascripts/jax/webgl/scene/light_source.js +300 -0
  98. data/lib/assets/javascripts/jax/webgl/scene.js +16 -0
  99. data/lib/assets/javascripts/jax/webgl/shader/delegator/attribute.js +53 -0
  100. data/lib/assets/javascripts/jax/webgl/shader/delegator/uniform.js +71 -0
  101. data/lib/assets/javascripts/jax/webgl/shader/delegator.js +13 -0
  102. data/lib/assets/javascripts/jax/webgl/shader/manifest.js +70 -0
  103. data/lib/assets/javascripts/jax/webgl/shader/program.js +138 -0
  104. data/lib/assets/javascripts/jax/webgl/shader.js +299 -0
  105. data/lib/assets/javascripts/jax/webgl/shader_chain.js +267 -0
  106. data/lib/assets/javascripts/jax/webgl/texture.js +506 -0
  107. data/lib/assets/javascripts/jax/webgl/world.js +279 -0
  108. data/lib/assets/javascripts/jax/webgl.js +109 -0
  109. data/lib/assets/javascripts/jax.js +136 -0
  110. data/{builtin/app/shaders/basic/common.ejs → lib/assets/javascripts/shaders/basic/common.glsl} +0 -0
  111. data/{builtin/app/shaders/basic/fragment.ejs → lib/assets/javascripts/shaders/basic/fragment.glsl} +0 -0
  112. data/{builtin/app/shaders/basic/vertex.ejs → lib/assets/javascripts/shaders/basic/vertex.glsl} +1 -1
  113. data/{builtin/app/shaders/depthmap/common.ejs → lib/assets/javascripts/shaders/depthmap/common.glsl} +0 -0
  114. data/{builtin/app/shaders/depthmap/fragment.ejs → lib/assets/javascripts/shaders/depthmap/fragment.glsl} +1 -1
  115. data/{builtin/app → lib/assets/javascripts}/shaders/depthmap/material.js +0 -0
  116. data/{builtin/app/shaders/depthmap/vertex.ejs → lib/assets/javascripts/shaders/depthmap/vertex.glsl} +0 -0
  117. data/{builtin/app/shaders/fog/common.ejs → lib/assets/javascripts/shaders/fog/common.glsl} +0 -0
  118. data/{builtin/app/shaders/fog/fragment.ejs → lib/assets/javascripts/shaders/fog/fragment.glsl} +0 -0
  119. data/{builtin/app → lib/assets/javascripts}/shaders/fog/manifest.yml +0 -0
  120. data/{builtin/app → lib/assets/javascripts}/shaders/fog/material.js +6 -8
  121. data/{builtin/app/shaders/fog/vertex.ejs → lib/assets/javascripts/shaders/fog/vertex.glsl} +0 -0
  122. data/{builtin/app/shaders/functions/depth_map.ejs → lib/assets/javascripts/shaders/functions/depth_map.glsl} +0 -0
  123. data/{builtin/app/shaders/functions/lights.ejs → lib/assets/javascripts/shaders/functions/lights.glsl} +0 -0
  124. data/{builtin/app/shaders/functions/noise.ejs → lib/assets/javascripts/shaders/functions/noise.glsl} +0 -0
  125. data/lib/assets/javascripts/shaders/lighting/common.glsl +5 -0
  126. data/{builtin/app/shaders/lighting/fragment.ejs → lib/assets/javascripts/shaders/lighting/fragment.glsl} +0 -0
  127. data/{builtin/app → lib/assets/javascripts}/shaders/lighting/manifest.yml +0 -0
  128. data/{builtin/app → lib/assets/javascripts}/shaders/lighting/material.js +2 -4
  129. data/{builtin/app/shaders/lighting/vertex.ejs → lib/assets/javascripts/shaders/lighting/vertex.glsl} +0 -0
  130. data/{builtin/app/shaders/normal_map/common.ejs → lib/assets/javascripts/shaders/normal_map/common.glsl} +1 -1
  131. data/{builtin/app/shaders/normal_map/fragment.ejs → lib/assets/javascripts/shaders/normal_map/fragment.glsl} +0 -0
  132. data/{builtin/app → lib/assets/javascripts}/shaders/normal_map/manifest.yml +0 -0
  133. data/lib/assets/javascripts/shaders/normal_map/material.js +11 -0
  134. data/{builtin/app/shaders/normal_map/vertex.ejs → lib/assets/javascripts/shaders/normal_map/vertex.glsl} +0 -0
  135. data/{builtin/app/shaders/paraboloid/common.ejs → lib/assets/javascripts/shaders/paraboloid/common.glsl} +0 -0
  136. data/{builtin/app/shaders/paraboloid/fragment.ejs → lib/assets/javascripts/shaders/paraboloid/fragment.glsl} +0 -0
  137. data/{builtin/app → lib/assets/javascripts}/shaders/paraboloid/manifest.yml +0 -0
  138. data/{builtin/app → lib/assets/javascripts}/shaders/paraboloid/material.js +2 -4
  139. data/{builtin/app/shaders/paraboloid/vertex.ejs → lib/assets/javascripts/shaders/paraboloid/vertex.glsl} +0 -0
  140. data/{builtin/app/shaders/picking/common.ejs → lib/assets/javascripts/shaders/picking/common.glsl} +0 -0
  141. data/{builtin/app/shaders/picking/fragment.ejs → lib/assets/javascripts/shaders/picking/fragment.glsl} +0 -0
  142. data/{builtin/app → lib/assets/javascripts}/shaders/picking/material.js +2 -4
  143. data/{builtin/app/shaders/picking/vertex.ejs → lib/assets/javascripts/shaders/picking/vertex.glsl} +0 -0
  144. data/{builtin/app/shaders/shadow_map/common.ejs → lib/assets/javascripts/shaders/shadow_map/common.glsl} +2 -1
  145. data/{builtin/app/shaders/shadow_map/fragment.ejs → lib/assets/javascripts/shaders/shadow_map/fragment.glsl} +1 -1
  146. data/{builtin/app → lib/assets/javascripts}/shaders/shadow_map/manifest.yml +0 -0
  147. data/{builtin/app → lib/assets/javascripts}/shaders/shadow_map/material.js +4 -6
  148. data/{builtin/app/shaders/shadow_map/vertex.ejs → lib/assets/javascripts/shaders/shadow_map/vertex.glsl} +0 -0
  149. data/{builtin/app/shaders/texture/common.ejs → lib/assets/javascripts/shaders/texture/common.glsl} +0 -0
  150. data/{builtin/app/shaders/texture/fragment.ejs → lib/assets/javascripts/shaders/texture/fragment.glsl} +0 -0
  151. data/{builtin/app → lib/assets/javascripts}/shaders/texture/manifest.yml +0 -0
  152. data/lib/assets/javascripts/shaders/texture/material.js +17 -0
  153. data/{builtin/app/shaders/texture/vertex.ejs → lib/assets/javascripts/shaders/texture/vertex.glsl} +0 -0
  154. data/lib/generators/jax/all.rb +16 -0
  155. data/lib/generators/jax/application/application_generator.rb +48 -0
  156. data/lib/generators/jax/base/actions.rb +52 -0
  157. data/lib/generators/jax/base/coffee_generator.rb +30 -0
  158. data/lib/generators/jax/base/named_base.rb +17 -0
  159. data/lib/generators/jax/base/plugin_base.rb +108 -0
  160. data/lib/generators/jax/base/plugin_credentials.rb +99 -0
  161. data/lib/generators/jax/base/plugin_manifest.rb +75 -0
  162. data/lib/generators/jax/base/rails_base.rb +30 -0
  163. data/lib/generators/jax/base/source_root.rb +5 -0
  164. data/lib/generators/jax/controller/controller_generator.rb +37 -0
  165. data/lib/generators/jax/helper/helper_generator.rb +30 -0
  166. data/lib/generators/jax/install/install_generator.rb +27 -0
  167. data/lib/generators/jax/jax_generator.rb +13 -0
  168. data/lib/generators/jax/light/light_generator.rb +23 -0
  169. data/lib/{jax/generators → generators/jax}/material/USAGE +4 -8
  170. data/lib/generators/jax/material/material_generator.rb +112 -0
  171. data/lib/generators/jax/model/model_generator.rb +24 -0
  172. data/lib/generators/jax/plugin/plugin_generator.rb +72 -0
  173. data/lib/generators/jax/scaffold/scaffold_generator.rb +35 -0
  174. data/lib/generators/jax/shader/shader_generator.rb +38 -0
  175. data/lib/jax/commands/plugin_manager.rb +240 -0
  176. data/lib/jax/commands.rb +69 -0
  177. data/lib/jax/configuration.rb +64 -0
  178. data/lib/jax/directive_processor.rb +53 -0
  179. data/lib/jax/engine.rb +38 -54
  180. data/lib/jax/helper_methods.rb +3 -0
  181. data/lib/jax/rails/application.rb +34 -0
  182. data/lib/jax/resource_file.rb +29 -0
  183. data/lib/jax/script_loader.rb +68 -0
  184. data/lib/jax/server.rb +87 -0
  185. data/lib/jax/shader.rb +70 -172
  186. data/lib/jax/testing/rails_environment.rb +94 -0
  187. data/lib/jax/util/tar.rb +75 -0
  188. data/lib/jax/util.rb +3 -0
  189. data/lib/jax/version.rb +7 -8
  190. data/lib/jax.rb +23 -41
  191. data/spec/bin/jax_spec.rb +149 -0
  192. data/{lib/jax/generators/app/templates/app/models/.empty_directory → spec/fixtures/public/favicon.ico} +0 -0
  193. data/spec/fixtures/public/textures/brickwall.jpg +0 -0
  194. data/spec/fixtures/public/textures/jacks.jpg +0 -0
  195. data/spec/fixtures/public/textures/normal_map.jpg +0 -0
  196. data/spec/fixtures/public/textures/rock.png +0 -0
  197. data/spec/fixtures/public/textures/rock_normal.png +0 -0
  198. data/spec/fixtures/public/textures/rss.png +0 -0
  199. data/spec/generators/jax/application_generator_spec.rb +18 -0
  200. data/spec/generators/jax/controller_generator_spec.rb +102 -0
  201. data/spec/generators/jax/helper_generator_spec.rb +55 -0
  202. data/spec/generators/jax/install_generator_spec.rb +30 -0
  203. data/spec/generators/jax/jax_generator_spec.rb +21 -0
  204. data/spec/generators/jax/light_generator_spec.rb +27 -0
  205. data/spec/generators/jax/material_generator_spec.rb +62 -0
  206. data/spec/generators/jax/model_generator_spec.rb +72 -0
  207. data/spec/generators/jax/plugin_generator_spec.rb +143 -0
  208. data/spec/generators/jax/scaffold_generator_spec.rb +35 -0
  209. data/spec/generators/jax/shader_generator_spec.rb +37 -0
  210. data/spec/javascripts/helpers/jasmine_webgl_helper.js +13 -0
  211. data/{lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers → spec/javascripts/helpers}/jax_spec_environment_helper.js +7 -2
  212. data/{lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers → spec/javascripts/helpers}/jax_spec_helper.js +0 -0
  213. data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
  214. data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
  215. data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
  216. data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
  217. data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
  218. data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
  219. data/spec/javascripts/jax/compatibility_spec.js +46 -0
  220. data/spec/javascripts/jax/context_events_spec.js +212 -0
  221. data/spec/javascripts/jax/context_spec.js +305 -0
  222. data/spec/javascripts/jax/core/data_region_spec.js +118 -0
  223. data/spec/javascripts/jax/core/data_segment_spec.js +96 -0
  224. data/spec/javascripts/jax/core/delegation_spec.js +48 -0
  225. data/spec/javascripts/jax/core/events_spec.js +17 -0
  226. data/spec/javascripts/jax/core/glMatrix_extensions_spec.js +8 -0
  227. data/spec/javascripts/jax/core/helper_spec.js +61 -0
  228. data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
  229. data/spec/javascripts/jax/core/utils_spec.js +275 -0
  230. data/spec/javascripts/jax/geometry/line_spec.js +20 -0
  231. data/spec/javascripts/jax/geometry/plane_spec.js +181 -0
  232. data/spec/javascripts/jax/geometry/triangle_spec.js +105 -0
  233. data/spec/javascripts/jax/mvc/controller_spec.js +156 -0
  234. data/spec/javascripts/jax/mvc/model_spec.js +93 -0
  235. data/spec/javascripts/jax/mvc/route_set_spec.js +49 -0
  236. data/spec/javascripts/jax/mvc/view_manager_spec.js +17 -0
  237. data/spec/javascripts/jax/noise_spec.js +50 -0
  238. data/spec/javascripts/jax/optimizations/material_limitations_spec.js +85 -0
  239. data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +65 -0
  240. data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
  241. data/spec/javascripts/jax/webgl/camera_spec.js +237 -0
  242. data/spec/javascripts/jax/webgl/core/events_spec.js +47 -0
  243. data/spec/javascripts/jax/webgl/framebuffer_spec.js +44 -0
  244. data/spec/javascripts/jax/webgl/lighting_spec.js +108 -0
  245. data/spec/javascripts/jax/webgl/material_spec.js +117 -0
  246. data/spec/javascripts/jax/webgl/mesh_spec.js +228 -0
  247. data/spec/javascripts/jax/webgl/shader/manifest_spec.js +57 -0
  248. data/spec/javascripts/jax/webgl/shader_chain_spec.js +211 -0
  249. data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
  250. data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
  251. data/spec/javascripts/jax/webgl/texture_spec.js +159 -0
  252. data/spec/javascripts/jax/webgl_spec.js +5 -0
  253. data/spec/javascripts/jax/world_spec.js +175 -0
  254. data/spec/javascripts/jax_spec.js +14 -0
  255. data/spec/javascripts/node/mocks/webgl.js +159 -0
  256. data/spec/javascripts/node_helper.js +51 -0
  257. data/spec/javascripts/shaders/core_materials_spec.js +38 -0
  258. data/spec/javascripts/shaders/fog_spec.js +15 -0
  259. data/spec/javascripts/shaders/lighting_spec.js +15 -0
  260. data/spec/javascripts/shaders/normal_map_spec.js +15 -0
  261. data/spec/javascripts/shaders/paraboloid_spec.js +33 -0
  262. data/spec/javascripts/shaders/preprocessor_spec.js +45 -0
  263. data/spec/javascripts/shaders/shadow_map_spec.js +15 -0
  264. data/spec/javascripts/shaders/texture_spec.js +37 -0
  265. data/spec/javascripts/suite/controller_select_spec.js.coffee +24 -0
  266. data/spec/lib/jax/commands/plugin_manager/credentials_spec.rb +56 -0
  267. data/spec/lib/jax/commands/plugin_manager/push_spec.rb +62 -0
  268. data/spec/lib/jax/commands/plugin_manager_spec.rb +204 -0
  269. data/spec/lib/jax/rails/application_spec.rb +23 -0
  270. data/spec/lib/jax/shader_spec.rb +67 -0
  271. data/spec/lib/jax/util/tar_spec.rb +26 -0
  272. data/spec/{test_helper.rb → spec_helper.rb} +37 -28
  273. data/spec/support/test_model_generator.rb +14 -0
  274. data/templates/app/Gemfile.tt +17 -0
  275. data/templates/app/Rakefile +4 -0
  276. data/templates/app/config/application.rb +16 -0
  277. data/{lib/jax/generators/app/templates → templates/app}/config/boot.rb +0 -0
  278. data/templates/app/config/environment.rb +5 -0
  279. data/templates/app/config/environments/production.rb +4 -0
  280. data/templates/app/config.ru +6 -0
  281. data/{lib/jax/generators/app/templates/app/resources → templates/app/public}/.empty_directory +0 -0
  282. data/templates/app/script/jax +8 -0
  283. data/{lib/jax/generators/app/templates/app/views → templates/app/spec}/.empty_directory +0 -0
  284. data/templates/application_controller.js.coffee.erb +3 -0
  285. data/templates/application_controller.js.erb +6 -0
  286. data/templates/application_helper.js.coffee.erb +3 -0
  287. data/templates/application_helper.js.erb +3 -0
  288. data/templates/controller.js.coffee.erb +9 -0
  289. data/templates/controller.js.erb +15 -0
  290. data/templates/controller_spec.js.coffee.erb +9 -0
  291. data/templates/controller_spec.js.erb +12 -0
  292. data/templates/helper.js.coffee.erb +2 -0
  293. data/templates/helper.js.erb +3 -0
  294. data/templates/helper_spec.js.coffee.erb +8 -0
  295. data/templates/helper_spec.js.erb +12 -0
  296. data/{lib/jax/generators/light_source/templates/light.yml.tt → templates/light_source.resource.erb} +3 -3
  297. data/{lib/jax/generators/material/templates/material.yml.tt → templates/material.resource.erb} +0 -9
  298. data/templates/model.js.coffee.erb +3 -0
  299. data/templates/model.js.erb +5 -0
  300. data/templates/model_defaults.resource.erb +5 -0
  301. data/templates/model_spec.js.coffee.erb +16 -0
  302. data/templates/model_spec.js.erb +18 -0
  303. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/controllers/.empty_directory +0 -0
  304. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/helpers/.empty_directory +0 -0
  305. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/models/.empty_directory +0 -0
  306. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/resources/.empty_directory +0 -0
  307. data/{lib/jax/generators/plugin/templates/new_plugin/app → templates/new_plugin/app/assets/jax}/views/.empty_directory +0 -0
  308. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/init.rb +0 -0
  309. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/install.rb +0 -0
  310. data/{lib/jax/generators/plugin/templates/new_plugin/public → templates/new_plugin/spec}/.empty_directory +0 -0
  311. data/{lib/jax/generators/plugin/templates → templates}/new_plugin/uninstall.rb +0 -0
  312. data/{lib/jax/generators/shader/templates/common.ejs.tt → templates/shader_common.glsl.erb} +0 -0
  313. data/{lib/jax/generators/shader/templates/fragment.ejs.tt → templates/shader_fragment.glsl.erb} +0 -0
  314. data/{lib/jax/generators/shader/templates/manifest.yml.tt → templates/shader_manifest.yml.erb} +0 -0
  315. data/templates/shader_material.js.coffee.erb +22 -0
  316. data/{lib/jax/generators/shader/templates/material.js.tt → templates/shader_material.js.erb} +0 -0
  317. data/templates/shader_spec.js.coffee.erb +16 -0
  318. data/{lib/jax/generators/shader/templates/spec.js.tt → templates/shader_spec.js.erb} +1 -1
  319. data/{lib/jax/generators/shader/templates/vertex.ejs.tt → templates/shader_vertex.glsl.erb} +0 -0
  320. data/templates/view.js.coffee.erb +3 -0
  321. data/{lib/jax/generators/controller/templates/view.js.tt → templates/view.js.erb} +1 -1
  322. data/vendor/assets/javascripts/ejs.js +505 -0
  323. data/vendor/assets/javascripts/glMatrix.js +1772 -0
  324. data/vendor/assets/javascripts/jasmine.js +2476 -0
  325. data/vendor/assets/stylesheets/jasmine.css +166 -0
  326. data/vendor/pdoc_template/html/assets/images/pdoc/alias.png +0 -0
  327. data/vendor/pdoc_template/html/assets/images/pdoc/class.png +0 -0
  328. data/vendor/pdoc_template/html/assets/images/pdoc/class_deprecated.png +0 -0
  329. data/vendor/pdoc_template/html/assets/images/pdoc/class_method.png +0 -0
  330. data/vendor/pdoc_template/html/assets/images/pdoc/class_property.png +0 -0
  331. data/vendor/pdoc_template/html/assets/images/pdoc/constant.png +0 -0
  332. data/vendor/pdoc_template/html/assets/images/pdoc/constructor.png +0 -0
  333. data/vendor/pdoc_template/html/assets/images/pdoc/deprecated.png +0 -0
  334. data/vendor/pdoc_template/html/assets/images/pdoc/description.png +0 -0
  335. data/vendor/pdoc_template/html/assets/images/pdoc/information.png +0 -0
  336. data/vendor/pdoc_template/html/assets/images/pdoc/instance_method.png +0 -0
  337. data/vendor/pdoc_template/html/assets/images/pdoc/instance_property.png +0 -0
  338. data/vendor/pdoc_template/html/assets/images/pdoc/method.png +0 -0
  339. data/vendor/pdoc_template/html/assets/images/pdoc/method_deprecated.png +0 -0
  340. data/vendor/pdoc_template/html/assets/images/pdoc/mixin.png +0 -0
  341. data/vendor/pdoc_template/html/assets/images/pdoc/namespace.png +0 -0
  342. data/vendor/pdoc_template/html/assets/images/pdoc/property.png +0 -0
  343. data/vendor/pdoc_template/html/assets/images/pdoc/related_to.png +0 -0
  344. data/vendor/pdoc_template/html/assets/images/pdoc/search-background.png +0 -0
  345. data/vendor/pdoc_template/html/assets/images/pdoc/section-background.png +0 -0
  346. data/vendor/pdoc_template/html/assets/images/pdoc/section.png +0 -0
  347. data/vendor/pdoc_template/html/assets/images/pdoc/selected-section-background.png +0 -0
  348. data/vendor/pdoc_template/html/assets/images/pdoc/subclass.png +0 -0
  349. data/vendor/pdoc_template/html/assets/images/pdoc/superclass.png +0 -0
  350. data/vendor/pdoc_template/html/assets/images/pdoc/utility.png +0 -0
  351. data/vendor/pdoc_template/html/assets/javascripts/pdoc/application.js +478 -0
  352. data/vendor/pdoc_template/html/assets/javascripts/pdoc/prototype.js +4874 -0
  353. data/vendor/pdoc_template/html/assets/javascripts/pdoc/tabs.js +506 -0
  354. data/vendor/pdoc_template/html/assets/stylesheets/jax.css +30 -0
  355. data/vendor/pdoc_template/html/assets/stylesheets/pdoc/api.css +681 -0
  356. data/vendor/pdoc_template/html/assets/stylesheets/pdoc/pygments.css +62 -0
  357. data/vendor/pdoc_template/html/helpers.rb +35 -0
  358. data/vendor/pdoc_template/html/index.erb +18 -0
  359. data/vendor/pdoc_template/html/item_index.js.erb +6 -0
  360. data/vendor/pdoc_template/html/layout.erb +67 -0
  361. data/vendor/pdoc_template/html/leaf.erb +22 -0
  362. data/vendor/pdoc_template/html/node.erb +30 -0
  363. data/vendor/pdoc_template/html/partials/class_relationships.erb +19 -0
  364. data/vendor/pdoc_template/html/partials/classes.erb +7 -0
  365. data/vendor/pdoc_template/html/partials/constructor.erb +5 -0
  366. data/vendor/pdoc_template/html/partials/description.erb +5 -0
  367. data/vendor/pdoc_template/html/partials/link_list.erb +1 -0
  368. data/vendor/pdoc_template/html/partials/method_signatures.erb +14 -0
  369. data/vendor/pdoc_template/html/partials/methodized_note.erb +9 -0
  370. data/vendor/pdoc_template/html/partials/mixins.erb +7 -0
  371. data/vendor/pdoc_template/html/partials/namespaces.erb +7 -0
  372. data/vendor/pdoc_template/html/partials/related_utilities.erb +5 -0
  373. data/vendor/pdoc_template/html/partials/relationships.erb +11 -0
  374. data/vendor/pdoc_template/html/partials/short_description_list.erb +7 -0
  375. data/vendor/pdoc_template/html/partials/title.erb +24 -0
  376. data/vendor/pdoc_template/html/section.erb +18 -0
  377. metadata +635 -332
  378. data/builtin/app/shaders/lighting/common.ejs +0 -5
  379. data/builtin/app/shaders/normal_map/material.js +0 -16
  380. data/builtin/app/shaders/texture/material.js +0 -18
  381. data/jax.gems +0 -1
  382. data/lib/jax/application/builtin/configurable.rb +0 -5
  383. data/lib/jax/application/builtin/configuration.rb +0 -5
  384. data/lib/jax/application/builtin.rb +0 -12
  385. data/lib/jax/application/configurable.rb +0 -19
  386. data/lib/jax/application/configuration.rb +0 -60
  387. data/lib/jax/application/railties.rb +0 -26
  388. data/lib/jax/application.rb +0 -149
  389. data/lib/jax/core_ext/kernel.rb +0 -7
  390. data/lib/jax/engine/configurable.rb +0 -19
  391. data/lib/jax/engine/configuration.rb +0 -49
  392. data/lib/jax/generators/app/app_generator.rb +0 -96
  393. data/lib/jax/generators/app/templates/Gemfile.tt +0 -3
  394. data/lib/jax/generators/app/templates/Rakefile +0 -6
  395. data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +0 -5
  396. data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +0 -3
  397. data/lib/jax/generators/app/templates/config/application.rb.tt +0 -6
  398. data/lib/jax/generators/app/templates/config/environment.rb.tt +0 -5
  399. data/lib/jax/generators/app/templates/config/routes.rb.tt +0 -5
  400. data/lib/jax/generators/app/templates/public/index.html.tt +0 -26
  401. data/lib/jax/generators/app/templates/public/javascripts/jax.js +0 -9462
  402. data/lib/jax/generators/app/templates/public/stylesheets/%file_name%.css.tt +0 -11
  403. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +0 -26
  404. data/lib/jax/generators/app/templates/script/jax +0 -7
  405. data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +0 -11
  406. data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +0 -12
  407. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +0 -91
  408. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +0 -23
  409. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +0 -32
  410. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +0 -104
  411. data/lib/jax/generators/app.rb +0 -18
  412. data/lib/jax/generators/commands.rb +0 -220
  413. data/lib/jax/generators/controller/USAGE +0 -9
  414. data/lib/jax/generators/controller/controller_generator.rb +0 -66
  415. data/lib/jax/generators/controller/templates/controller_source.js.tt +0 -16
  416. data/lib/jax/generators/controller/templates/controller_test.js.tt +0 -11
  417. data/lib/jax/generators/controller/templates/helper.js.tt +0 -3
  418. data/lib/jax/generators/controller/templates/helper_test.js.tt +0 -12
  419. data/lib/jax/generators/interactions.rb +0 -56
  420. data/lib/jax/generators/light_source/USAGE +0 -14
  421. data/lib/jax/generators/light_source/light_source_generator.rb +0 -46
  422. data/lib/jax/generators/material/material_generator.rb +0 -80
  423. data/lib/jax/generators/material/templates/append.yml.tt +0 -7
  424. data/lib/jax/generators/model/USAGE +0 -5
  425. data/lib/jax/generators/model/model_generator.rb +0 -40
  426. data/lib/jax/generators/model/templates/model.js.tt +0 -11
  427. data/lib/jax/generators/model/templates/test.js.tt +0 -11
  428. data/lib/jax/generators/packager/package_generator.rb +0 -32
  429. data/lib/jax/generators/plugin/USAGE +0 -4
  430. data/lib/jax/generators/plugin/all.rb +0 -113
  431. data/lib/jax/generators/plugin/credentials.rb +0 -108
  432. data/lib/jax/generators/plugin/plugin_generator.rb +0 -72
  433. data/lib/jax/generators/plugin/plugin_manager.rb +0 -254
  434. data/lib/jax/generators/plugin/templates/new_plugin/config/routes.rb +0 -3
  435. data/lib/jax/generators/plugin/templates/new_plugin/spec/.empty_directory +0 -0
  436. data/lib/jax/generators/script_jax_loader.rb +0 -49
  437. data/lib/jax/generators/shader/USAGE +0 -4
  438. data/lib/jax/generators/shader/shader_generator.rb +0 -70
  439. data/lib/jax/monkeypatch/jasmine/config.rb +0 -45
  440. data/lib/jax/monkeypatch/jasmine/server.rb +0 -50
  441. data/lib/jax/monkeypatch/jasmine.rb +0 -3
  442. data/lib/jax/packager/sprockets_template.rb +0 -77
  443. data/lib/jax/packager.rb +0 -59
  444. data/lib/jax/plugin/manifest.rb +0 -71
  445. data/lib/jax/plugin.rb +0 -49
  446. data/lib/jax/resource_compiler.rb +0 -60
  447. data/lib/jax/routes.rb +0 -62
  448. data/lib/jax/tasks/rake.rb +0 -38
  449. data/spec/benchmark.htm +0 -93
  450. data/spec/generators/app_generator_test.rb +0 -42
  451. data/spec/generators/controller_generator_test.rb +0 -47
  452. data/spec/generators/light_generator_test.rb +0 -37
  453. data/spec/generators/material_generator_test.rb +0 -22
  454. data/spec/generators/model_generator_test.rb +0 -26
  455. data/spec/generators/plugin_generator_test.rb +0 -114
  456. data/spec/generators/plugin_manager/push_test.rb +0 -59
  457. data/spec/generators/plugin_manager_test.rb +0 -192
  458. data/spec/generators/shader_generator_test.rb +0 -38
  459. data/spec/javascripts/support/jasmine.yml +0 -85
  460. data/spec/javascripts/support/jasmine_runner.rb +0 -32
  461. data/spec/lib/jax/application_test.rb +0 -18
  462. data/spec/lib/jax/generators/plugin/credentials_test.rb +0 -72
  463. data/spec/lib/jax/packager_test.rb +0 -87
  464. data/spec/lib/jax/plugin_test.rb +0 -27
  465. data/spec/lib/jax/reloading_test.rb +0 -23
  466. data/spec/lib/jax/routes_test.rb +0 -28
  467. data/spec/lib/jax/shader_test.rb +0 -29
  468. data/spec/lib/jax/tasks/jax_rake_test.rb +0 -85
  469. data/spec/support/bases/generator_test_case.rb +0 -108
  470. data/spec/support/bases/isolated_test_case.rb +0 -148
  471. data/spec/support/file_exist_matcher.rb +0 -23
  472. data/spec/support/spec_shell.rb +0 -110
  473. data/spec/test_app.rb +0 -3
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ features/rerun.txt
1
2
  *.gem
2
3
  .bundle
3
4
  Gemfile.lock
@@ -10,3 +11,6 @@ doc
10
11
  tmp/
11
12
  guides/output
12
13
  /pkg/
14
+ _lib
15
+ _spec
16
+ .rbx
data/.rvmrc CHANGED
@@ -1,7 +1,6 @@
1
- rvm use --create --install 1.9.2@webgl 2>&1
1
+ rvm use --create --install 1.9.2@jax 2>&1
2
2
 
3
- # Bundle is available, non-custom config.
4
- if command -v bundle >/dev/null && ! [ -e .bundle ] ; then
3
+ if ! [ -e .bundle ] ; then
5
4
  bundle install
6
5
  mkdir .bundle
7
6
  fi
data/.travis.yml CHANGED
@@ -5,28 +5,14 @@
5
5
  rvm:
6
6
  - 1.8.7
7
7
  - 1.9.2
8
-
9
- # Define how to run the tests (defaults to `bundle exec rake` or `rake` depending on whether you have a `Gemfile`)
10
- # script: "bundle exec rake rspec node"
8
+ - 1.9.3
9
+ - ree
10
+ # - jruby
11
+ - ruby-head
12
+ - rbx-2.0
11
13
 
12
- # Define tasks to be completed before and after tests run. Will allow folding of content on frontend
14
+
13
15
  # before_script:
14
- # - command_1
15
- # - command_2
16
-
17
- # after_script:
18
- # - command_1
19
- # - command_2
20
-
21
- # Specify an ENV variable to run before: 'bundle install' and 'rake' (or your defined 'script')
22
- # env: "RAILS_ENV='test' "
23
-
24
- # Specify the recipients for email notification
25
- # notifications:
26
- # recipients:
27
- # - email-address-1
28
- # - email-address-2
16
+ # - sh -e /etc/init.d/xvfb start
29
17
 
30
- # Disable email notifications
31
- # notifications:
32
- # disabled: true
18
+ env: "SKIP_WEBGL=1 "
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- ## JAX [![Build Status](http://travis-ci.org/sinisterchipmunk/jax.png)](http://travis-ci.org/sinisterchipmunk/jax)
1
+ ## Jax [![Build Status](http://travis-ci.org/sinisterchipmunk/jax.png)](http://travis-ci.org/sinisterchipmunk/jax)
2
2
 
3
- Jax is a framework for developing rich WebGL-enabled applications using JavaScript and Ruby.
3
+ Jax is a framework for developing rich WebGL-enabled applications using JavaScript and Ruby. It can be used within a Ruby on Rails application, or as a completely stand-alone WebGL development environment.
4
4
 
5
5
  ## Live Demos
6
6
 
data/Rakefile CHANGED
@@ -1,7 +1,3 @@
1
- # used to flag auto-compile. Just makes my life easier.
2
- $JAX_DEVELOPMENT = true
3
- $JAX_RAKE = true
4
-
5
1
  begin
6
2
  require 'bundler'
7
3
  Bundler::GemHelper.install_tasks
@@ -10,20 +6,33 @@ rescue LoadError
10
6
  puts " *** You don't seem to have Bundler installed. ***"
11
7
  puts " Please run the following command:"
12
8
  puts
13
- puts " gem install bundler --version=1.0.15"
9
+ puts " gem install bundler"
14
10
  exit
15
- end
16
-
17
- DEPENDENCIES = %w(jasmine sprockets treetop bluecloth)
18
- DEPENDENCIES.each do |dep|
19
- begin
20
- require dep
21
- rescue LoadError
11
+ rescue Bundler::GemNotFound
12
+ # this runs recursively forever under jruby, so special case failure for that.
13
+ if ENV['NO_MORE_ATTEMPTS'] || RUBY_PLATFORM == "java"
14
+ raise
15
+ else
16
+ ENV['NO_MORE_ATTEMPTS'] = '1'
22
17
  system("bundle", "install")
23
18
  exec("bundle", "exec", "rake", *ARGV)
24
19
  end
25
20
  end
26
21
 
22
+ require 'cucumber/rake/task'
23
+ Cucumber::Rake::Task.new(:cucumber) do |t|
24
+ t.cucumber_opts = ["-f", "pretty", "-f", "rerun", "-o", "features/rerun.txt", "-t", "~@wip"]
25
+ unless ENV['FEATURE']
26
+ if !ENV['ALL'] &&
27
+ File.file?(rerun = File.expand_path("features/rerun.txt", File.dirname(__FILE__))) &&
28
+ (rerun = File.read(rerun).strip).length > 0
29
+ t.cucumber_opts << rerun.split(/\s/)
30
+ else
31
+ t.cucumber_opts << "features"
32
+ end
33
+ end
34
+ end
35
+
27
36
  # pdoc is a different beast because the released gem seems to be quite dated,
28
37
  # and is incompatible with Ruby 1.9.2. We'll grab the latest from git, instead.
29
38
  begin
@@ -37,15 +46,8 @@ rescue LoadError
37
46
  require File.join(File.dirname(__FILE__), 'vendor/pdoc/lib/pdoc')
38
47
  end
39
48
 
40
- load 'jasmine/tasks/jasmine.rake'
41
- require File.expand_path("lib/jax/monkeypatch/jasmine", File.dirname(__FILE__))
42
-
43
49
  require File.join(File.dirname(__FILE__), "lib/jax")
44
50
  JAX_ROOT = File.dirname(__FILE__)
45
- # put a dummy Application in place
46
- class Development < Jax::Application
47
- end
48
-
49
51
 
50
52
  desc "list all TODO items"
51
53
  task :todo do
@@ -81,51 +83,6 @@ task :flagged do
81
83
  Rake::Task['hacks'].invoke
82
84
  end
83
85
 
84
- desc "compile Jax"
85
- task :compile do
86
- # generate constants file
87
- erb = ERB.new(File.read(File.join(File.dirname(__FILE__), "src/constants.yml.erb")))
88
- File.open(File.join(File.dirname(__FILE__), "src/constants.yml"), "w") { |f| f.puts erb.result(binding) }
89
-
90
- secretary = Sprockets::Secretary.new(
91
- :root => File.dirname(__FILE__),
92
- :asset_root => "public",
93
- :load_path => ["src"],
94
- :source_files => ["src/jax.js", "builtin/**/*.js"]
95
- )
96
- jax_root = File.expand_path(File.dirname(__FILE__))
97
- rm_rf File.join(jax_root, "dist")
98
- mkdir_p File.join(jax_root, "dist")
99
- secretary.concatenation.save_to File.join(jax_root, "dist/jax.js")
100
-
101
- mkdir_p File.join(jax_root, "tmp") unless File.directory?(File.join(jax_root, "tmp"))
102
-
103
- # generate the built-in shaders for testing against (these are not added to the real jax dist because they are
104
- # regenerated in the user's app)
105
- rm File.join(jax_root, "tmp/shaders.js") if File.file?(File.join(jax_root, "tmp/shaders.js"))
106
- File.open(File.join(jax_root, "tmp/shaders.js"), "w") do |f|
107
- Jax.application.shaders.each { |shader| shader.save_to f }
108
- end
109
-
110
- puts "generated #{File.join(jax_root, "dist/jax.js")}"
111
-
112
- # make sure the app generator copies the correct jax
113
- cp File.join(jax_root, "dist/jax.js"),
114
- File.join(jax_root, "lib/jax/generators/app/templates/public/javascripts/jax.js")
115
-
116
- puts "(project built)"
117
- end
118
-
119
- desc "compile and minify Jax into dist/jax.js and dist/jax-min.js"
120
- task :minify => :compile do
121
- puts "(minifying...)"
122
- if system("java", "-jar", File.join(File.dirname(__FILE__), "vendor/yuicompressor-2.4.2.jar"), "dist/jax.js", "-o", "dist/jax-min.js")
123
- puts "(done. saved to: dist/jax-min.js)"
124
- else
125
- puts "(Error while minifying!)"
126
- end
127
- end
128
-
129
86
  ### HACK to add redcloth support to pdoc without changing pdoc itself
130
87
  class PDoc::Generators::Html::Website < PDoc::Generators::AbstractGenerator
131
88
  alias _set_markdown_parser set_markdown_parser
@@ -194,7 +151,8 @@ namespace :doc do
194
151
  end
195
152
  end
196
153
 
197
- exit if errors
154
+ exit 1 if errors
155
+ puts "\e[32mdocumentation looks good\e[0m"
198
156
  end
199
157
 
200
158
  desc "build the Jax JavaScript documentation"
@@ -206,9 +164,9 @@ namespace :doc do
206
164
  @hide_links_to_api_docs = true
207
165
  header = ERB.new(File.read(File.expand_path("guides/partials/_top_nav.html.erb", File.dirname(__FILE__)))).result(binding)
208
166
  PDoc.run({
209
- :source_files => (['src/jax.js', 'vendor/glmatrix/glMatrix.js'] +
167
+ :source_files => (['lib/assets/javascripts/jax.js', 'vendor/assets/javascripts/glMatrix.js'] +
210
168
  # Dir['vendor/ejs/src/**/*.js'] +
211
- Dir['src/jax/**/*.js']),
169
+ Dir['lib/assets/javascripts/jax/**/*.js']),
212
170
  :destination => "doc",
213
171
  # :index_page => 'src/README.markdown',
214
172
  :syntax_highlighter => 'coderay',
@@ -264,46 +222,120 @@ namespace :guides do
264
222
  end
265
223
  end
266
224
 
225
+ desc "Compile jax to tmp/jax.js"
226
+ task :compile do
227
+ require 'jax'
228
+ require 'jax/rails/application'
229
+ Jax::Rails::Application.initialize!
230
+ ::Rails.application.assets['jax/application.js'].write_to("tmp/jax.js")
231
+ end
232
+
233
+ desc "Start the Jax dev server"
234
+ task :server do
235
+ require 'jax'
236
+ require 'jax/rails/application'
237
+ # moved public into spec to a) emphasize that it's for testing and b) avoid
238
+ # conflicting with normal 'public' dirs in current or future Rails versions.
239
+ Jax::Rails::Application.config.paths['public'] = "spec/fixtures/public"
240
+ Jax::Rails::Application.initialize!
241
+ server = Jax::Server.new *(ENV['quiet'] ? ["--quiet"] : [])
242
+ server.start
243
+ end
244
+
267
245
  desc "Run javascript tests using node.js"
268
- task :node => :compile do
269
- system("node", "spec/javascripts/node_helper.js")
246
+ task :node do
247
+ unless ENV['SKIP_COMPILE']
248
+ Rake::Task['compile'].invoke
249
+ end
250
+
251
+ unless system("node_modules/jasmine-node/bin/jasmine-node", "spec/javascripts")
252
+ raise "node specs failed"
253
+ end
270
254
  end
271
255
 
272
- FileUtils.rm_rf File.expand_path("spec/fixtures/tmp", File.dirname(__FILE__))
273
- require 'rake/testtask'
274
- desc "Run ruby tests using Test::Unit"
275
- # NOT WORKING due to isolation tests failing. Use test:isolated instead.
276
- Rake::TestTask.new("test_unit") do |t|
277
- t.pattern = "{test,spec}/**/*_test.rb"
278
- t.libs = ["./test", "./spec"].collect { |f| File.expand_path(f) }.select { |f| File.directory?(f) }
279
- # t.verbose = true
280
- # t.warning = true
256
+ desc "Run test suite using selenium under Travis-CI"
257
+ task :travis do
258
+ ENV['DISPLAY'] = ':99.0'
259
+ Rake::Task['jasmine'].invoke unless ENV["SKIP_WEBGL"]
281
260
  end
282
261
 
283
- namespace :test do
284
- task :isolated do
285
- dir = ENV["TEST_DIR"] || "**"
286
- ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME'))
287
- ENV['DO_NOT_ISOLATE'] = '1'
288
- if ENV['TEST']
289
- sh(ruby, '-Ispec', ENV['TEST'])
290
- else
291
- Dir["spec/#{dir}/*_test.rb"].each do |file|
292
- next true if file.include?("fixtures")
293
- sh(ruby, '-Ispec', File.expand_path(file, File.dirname(__FILE__)))
294
- end
262
+ desc "Run jasmine specs in browser"
263
+ task :jasmine do
264
+ begin
265
+ server = nil
266
+ result = {}
267
+ th = Thread.new do
268
+ ENV['quiet'] = '1'
269
+ Rake::Task['server'].execute
270
+ end
271
+
272
+ require 'selenium-webdriver'
273
+ driver = Selenium::WebDriver.for :firefox
274
+ driver.navigate.to "http://localhost:3000/jasmine"
275
+
276
+ puts driver.title if ENV["DEBUG"]
277
+ if driver.title =~ /Exception/ # Rails exception occurred
278
+ puts driver.page_source
279
+ raise "Rails error occurred requesting jasmine specs"
280
+ end
281
+
282
+ execjs = proc do |js|
283
+ puts "eval js: #{js}" if ENV['DEBUG']
284
+ result = driver.execute_script js
285
+ puts " => #{result.inspect}" if ENV['DEBUG']
286
+ result
295
287
  end
288
+
289
+ until execjs.call("return jsApiReporter && jsApiReporter.finished") == true
290
+ sleep 0.1
291
+ end
292
+
293
+ result = execjs.call(<<-end_code)
294
+ var result = jsApiReporter.results();
295
+ var failures = new Array();
296
+ var results = { };
297
+ for (var i in result) {
298
+ for (var j = 0; j < result[i].messages.length; j++) {
299
+ var msg = result[i].messages[j];
300
+ msg.toString = msg.toString();
301
+ msg.passed = msg.passed();
302
+ if (!msg.passed)
303
+ failures.push(msg);
304
+ }
305
+ results[result[i].result] = results[result[i].result] || 0;
306
+ results[result[i].result]++;
307
+ }
308
+ return { results: results, failure_messages: failures };
309
+ end_code
310
+ ensure
311
+ driver.quit if driver and driver.respond_to?(:quit)
312
+ # server.stop if server
296
313
  end
297
- end
298
314
 
315
+ passed = result["results"]["passed"].to_i
316
+ failed = result["results"]["failed"].to_i
317
+ total = passed + failed
318
+ green, red = "\e[32m", "\e[31m"
319
+ color = failed > 0 ? red : green
320
+ puts "#{color}#{total} jasmine specs: #{passed} passed, #{failed} failed\e[0m"
321
+ unless (failure_messages = result["failure_messages"]).empty?
322
+ failure_messages.each do |message|
323
+ puts message["message"]
324
+ puts
325
+ puts message["trace"]["stack"].split(/\n/).collect { |line|
326
+ line['@'] ? line.sub(/^.*\@/, '') : line }.reject { |line|
327
+ line['/jasmine.js?'] }.join("\n")
328
+ end
329
+ raise "jasmine specs failed"
330
+ end
331
+ end
332
+
333
+ require 'rspec/core/rake_task'
334
+ RSpec::Core::RakeTask.new
299
335
 
300
336
  # 'Guides' tasks & code borrowed from Railties.
301
337
  desc 'Generate guides (for authors), use ONLY=foo to process just "foo.textile"'
302
338
  task :guides => 'guides:generate'
303
339
 
304
- task :jasmine => :compile
305
- # task :build => [:compile, :minify] # make sure to minify the JS code before going to release
306
- task :build => :compile
307
-
308
340
  # disabled node tests for now, since Jax.DataRegion and friends break it. Rake jasmine instead.
309
- task :default => ['test:isolated']#, :node]
341
+ task :default => ['spec', 'cucumber', 'travis', 'guides']
@@ -0,0 +1,22 @@
1
+ #= require "./dom-helpers"
2
+
3
+ {div, link} = Suite
4
+ context = null
5
+
6
+ controller = (name) ->
7
+ div link name, ->
8
+ context or= new Jax.Context "webgl"
9
+ # jax doesn't unload redirects to the same controller.
10
+ # Within a single app this is probably expected behavior.
11
+ # But, in this particular context, user most likely wants
12
+ # to reload the controller entirely. So we need to manually
13
+ # kick off the cleanup procedure.
14
+ context.unloadScene()
15
+ context.redirectTo name
16
+ false
17
+
18
+ $(document).ready ->
19
+ controller_list = $("#controller-list")[0]
20
+
21
+ for controller_name in Jax.routes.getControllerNames()
22
+ $(controller_list).append controller(controller_name)
@@ -0,0 +1,17 @@
1
+ window.Suite = {}
2
+
3
+ Suite.text = (caption) ->
4
+ document.createTextNode caption
5
+
6
+ Suite.link = (caption, callback) ->
7
+ _link = document.createElement 'a'
8
+ _link.setAttribute 'href', '#'
9
+ $(_link).append Suite.text(caption)
10
+ $(_link).click callback
11
+ _link
12
+
13
+ Suite.div = (inner) ->
14
+ _div = document.createElement 'div'
15
+ $(_div).append inner
16
+ _div
17
+
@@ -0,0 +1,177 @@
1
+ jasmine.TrivialReporter = function(doc) {
2
+ this.document = doc || document;
3
+ this.suiteDivs = {};
4
+ this.logRunningSpecs = false;
5
+ };
6
+
7
+ jasmine.TrivialReporter.prototype.createDom = function(type, attrs, childrenVarArgs) {
8
+ var el = document.createElement(type);
9
+
10
+ for (var i = 2; i < arguments.length; i++) {
11
+ var child = arguments[i];
12
+
13
+ if (typeof child === 'string') {
14
+ el.appendChild(document.createTextNode(child));
15
+ } else {
16
+ if (child) { el.appendChild(child); }
17
+ }
18
+ }
19
+
20
+ for (var attr in attrs) {
21
+ if (attr == "className") {
22
+ el[attr] = attrs[attr];
23
+ } else {
24
+ el.setAttribute(attr, attrs[attr]);
25
+ }
26
+ }
27
+
28
+ return el;
29
+ };
30
+
31
+ jasmine.TrivialReporter.prototype.reportRunnerStarting = function(runner) {
32
+ var showPassed, showSkipped;
33
+
34
+ showPassed = document.getElementById("__jasmine_TrivialReporter_showPassed__");
35
+ showSkipped = document.getElementById("__jasmine_TrivialReporter_showSkipped__");
36
+
37
+ this.outerDiv = document.getElementById('outer');
38
+ this.runnerMessageSpan = document.getElementById('runnerMessageSpan');
39
+ this.finishedAtSpan = document.getElementById('finishedAtSpan');
40
+ this.runnerDiv = document.getElementById('runner');
41
+ document.getElementById('jasmine-version').innerHTML = runner.env.versionString();
42
+
43
+ var suites = runner.suites();
44
+ for (var i = 0; i < suites.length; i++) {
45
+ var suite = suites[i];
46
+ var suiteDiv = this.createDom('div', { className: 'suite' },
47
+ this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, "run"),
48
+ this.createDom('a', { className: 'description', href: '?spec=' + encodeURIComponent(suite.getFullName()) }, suite.description));
49
+ this.suiteDivs[suite.id] = suiteDiv;
50
+ var parentDiv = this.outerDiv;
51
+ if (suite.parentSuite) {
52
+ parentDiv = this.suiteDivs[suite.parentSuite.id];
53
+ }
54
+ parentDiv.appendChild(suiteDiv);
55
+ }
56
+
57
+ this.startedAt = new Date();
58
+
59
+ var self = this;
60
+ showPassed.onclick = function(evt) {
61
+ if (showPassed.checked) {
62
+ self.outerDiv.className += ' show-passed';
63
+ } else {
64
+ self.outerDiv.className = self.outerDiv.className.replace(/ show-passed/, '');
65
+ }
66
+ };
67
+
68
+ showSkipped.onclick = function(evt) {
69
+ if (showSkipped.checked) {
70
+ self.outerDiv.className += ' show-skipped';
71
+ } else {
72
+ self.outerDiv.className = self.outerDiv.className.replace(/ show-skipped/, '');
73
+ }
74
+ };
75
+ };
76
+
77
+ jasmine.TrivialReporter.prototype.reportRunnerResults = function(runner) {
78
+ var results = runner.results();
79
+ var className = (results.failedCount > 0) ? "runner failed" : "runner passed";
80
+ this.runnerDiv.setAttribute("class", className);
81
+ //do it twice for IE
82
+ this.runnerDiv.setAttribute("className", className);
83
+ var specs = runner.specs();
84
+ var specCount = 0;
85
+ for (var i = 0; i < specs.length; i++) {
86
+ if (this.specFilter(specs[i])) {
87
+ specCount++;
88
+ }
89
+ }
90
+ var message = "" + specCount + " spec" + (specCount == 1 ? "" : "s" ) + ", " + results.failedCount + " failure" + ((results.failedCount == 1) ? "" : "s");
91
+ message += " in " + ((new Date().getTime() - this.startedAt.getTime()) / 1000) + "s";
92
+ this.runnerMessageSpan.replaceChild(this.createDom('a', { className: 'description', href: '?'}, message), this.runnerMessageSpan.firstChild);
93
+
94
+ this.finishedAtSpan.appendChild(document.createTextNode("Finished at " + new Date().toString()));
95
+ };
96
+
97
+ jasmine.TrivialReporter.prototype.reportSuiteResults = function(suite) {
98
+ var results = suite.results();
99
+ var status = results.passed() ? 'passed' : 'failed';
100
+ if (results.totalCount === 0) { // todo: change this to check results.skipped
101
+ status = 'skipped';
102
+ }
103
+ this.suiteDivs[suite.id].className += " " + status;
104
+ };
105
+
106
+ jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
107
+ if (this.logRunningSpecs) {
108
+ this.log('>> Jasmine Running ' + spec.suite.description + ' ' + spec.description + '...');
109
+ }
110
+ };
111
+
112
+ jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
113
+ var results = spec.results();
114
+ var status = results.passed() ? 'passed' : 'failed';
115
+ if (results.skipped) {
116
+ status = 'skipped';
117
+ }
118
+ var specDiv = this.createDom('div', { className: 'spec ' + status },
119
+ this.createDom('a', { className: 'run_spec', href: '?spec=' + encodeURIComponent(spec.getFullName()) }, "run"),
120
+ this.createDom('a', {
121
+ className: 'description',
122
+ href: '?spec=' + encodeURIComponent(spec.getFullName()),
123
+ title: spec.getFullName()
124
+ }, spec.description));
125
+
126
+
127
+ var resultItems = results.getItems();
128
+ var messagesDiv = this.createDom('div', { className: 'messages' });
129
+ for (var i = 0; i < resultItems.length; i++) {
130
+ var result = resultItems[i];
131
+
132
+ if (result.type == 'log') {
133
+ messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
134
+ } else if (result.type == 'expect' && result.passed && !result.passed()) {
135
+ messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
136
+
137
+ if (result.trace.stack) {
138
+ messagesDiv.appendChild(this.createDom('div', {className: 'stackTrace'}, result.trace.stack));
139
+ }
140
+ }
141
+ }
142
+
143
+ if (messagesDiv.childNodes.length > 0) {
144
+ specDiv.appendChild(messagesDiv);
145
+ }
146
+
147
+ this.suiteDivs[spec.suite.id].appendChild(specDiv);
148
+ };
149
+
150
+ jasmine.TrivialReporter.prototype.log = function() {
151
+ var console = jasmine.getGlobal().console;
152
+ if (console && console.log) {
153
+ if (console.log.apply) {
154
+ console.log.apply(console, arguments);
155
+ } else {
156
+ console.log(arguments); // ie fix: console.log.apply doesn't exist on ie
157
+ }
158
+ }
159
+ };
160
+
161
+ jasmine.TrivialReporter.prototype.getLocation = function() {
162
+ return this.document.location;
163
+ };
164
+
165
+ jasmine.TrivialReporter.prototype.specFilter = function(spec) {
166
+ var paramMap = {};
167
+ var params = this.getLocation().search.substring(1).split('&');
168
+ for (var i = 0; i < params.length; i++) {
169
+ var p = params[i].split('=');
170
+ paramMap[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
171
+ }
172
+
173
+ if (!paramMap.spec) {
174
+ return true;
175
+ }
176
+ return spec.getFullName().indexOf(paramMap.spec) === 0;
177
+ };
@@ -0,0 +1,6 @@
1
+ function toggleCustomizationHelp() {
2
+ style = $('#how-to-customize')[0].style;
3
+ if (style.display == 'block')
4
+ style.display = 'none';
5
+ else style.display = 'block';
6
+ }
@@ -0,0 +1,33 @@
1
+ #= require "./dom-helpers"
2
+
3
+ {div, link} = Suite
4
+
5
+ setup_preview = ->
6
+ Jax.Controller.create "jax_suite",
7
+ index: ->
8
+ @object = new Jax.Model mesh: new Jax.Mesh.Sphere, position: [0,0,-3]
9
+ @world.addObject @object
10
+ mouse_dragged: (m) ->
11
+ @object.camera.pitch m.diffy * -0.01
12
+ @object.camera.yaw m.diffx * 0.01
13
+ update: -> @object.mesh.material = @material
14
+
15
+ canvas = $("#preview")[0]
16
+ canvas.context = new Jax.Context canvas, root:"jax_suite"
17
+
18
+ controller = -> $("#preview")[0].context.current_controller
19
+
20
+ material = (name) ->
21
+ div link(name, ->
22
+ controller().material = name
23
+ false
24
+ )
25
+
26
+ $(document).ready ->
27
+ for material_name in Jax.Material.all()
28
+ $("#material-list").append material(material_name)
29
+
30
+ setup_preview()
31
+
32
+ $("#mesh").change ->
33
+ controller().object.mesh = eval("new #{@options[@selectedIndex].value}()");
@@ -0,0 +1,5 @@
1
+ #controller-select {
2
+ display: block;
3
+ min-width: 100%;
4
+ height: 470px;
5
+ }
@@ -0,0 +1,16 @@
1
+ /*= require "jasmine.css" */
2
+
3
+ /* uses monospace and pre so that shader error traces are more readable */
4
+ .resultMessage.fail {
5
+ font-family: monospace;
6
+ white-space: pre-line;
7
+ padding-top: 1em;
8
+ }
9
+
10
+ .jasmine_reporter {
11
+ margin-top: 1em;
12
+ }
13
+
14
+ .jasmine_reporter .banner {
15
+ border: 1px solid #bbb;
16
+ }
@@ -0,0 +1,41 @@
1
+ #nav {
2
+ display: block;
3
+ background-color: #ccc;
4
+ border: 1px solid #999;
5
+ height: 1em;
6
+ padding: 0;
7
+ padding-left: 1in;
8
+ padding-right: 1in;
9
+ }
10
+
11
+ #nav ul {
12
+ margin: 0;
13
+ padding: 0;
14
+ margin-bottom: 1em;
15
+ }
16
+
17
+ #nav li {
18
+ padding-top: 0.5em;
19
+ padding-bottom: 0.25em;
20
+ padding-left: 1em;
21
+ padding-right: 1em;
22
+ position: relative;
23
+
24
+ margin-right: 0px;
25
+ margin-bottom: 0;
26
+ display: inline;
27
+ font-size: 11pt;
28
+
29
+ border: 1px solid #999;
30
+ background-color: #ddd;
31
+ color: #fff;
32
+ }
33
+
34
+ #nav li:hover {
35
+ background-color: #eee;
36
+ }
37
+
38
+ #nav li.selected {
39
+ background-color: #eef;
40
+ color: #000;
41
+ }