jax 1.0.1 → 1.1.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. data/.gitmodules +3 -0
  2. data/.travis.yml +32 -0
  3. data/CHANGELOG +126 -0
  4. data/README.md +1 -1
  5. data/Rakefile +125 -19
  6. data/bin/jax +1 -1
  7. data/builtin/{shaders → app/shaders}/basic/common.ejs +0 -0
  8. data/builtin/{shaders → app/shaders}/basic/fragment.ejs +0 -0
  9. data/builtin/{shaders → app/shaders}/basic/vertex.ejs +0 -0
  10. data/builtin/{shaders → app/shaders}/depthmap/common.ejs +0 -0
  11. data/builtin/{shaders → app/shaders}/depthmap/fragment.ejs +0 -0
  12. data/builtin/{shaders → app/shaders}/depthmap/material.js +0 -0
  13. data/builtin/{shaders → app/shaders}/depthmap/vertex.ejs +0 -0
  14. data/builtin/{shaders → app/shaders}/fog/common.ejs +0 -0
  15. data/builtin/{shaders → app/shaders}/fog/fragment.ejs +0 -0
  16. data/builtin/{shaders → app/shaders}/fog/manifest.yml +0 -0
  17. data/builtin/{shaders → app/shaders}/fog/material.js +0 -0
  18. data/builtin/{shaders → app/shaders}/fog/vertex.ejs +0 -0
  19. data/builtin/{shaders → app/shaders}/functions/depth_map.ejs +0 -0
  20. data/builtin/{shaders → app/shaders}/functions/lights.ejs +0 -0
  21. data/builtin/{shaders → app/shaders}/functions/noise.ejs +0 -0
  22. data/builtin/{shaders → app/shaders}/lighting/common.ejs +0 -0
  23. data/builtin/{shaders → app/shaders}/lighting/fragment.ejs +0 -0
  24. data/builtin/{shaders → app/shaders}/lighting/manifest.yml +0 -0
  25. data/builtin/{shaders → app/shaders}/lighting/material.js +0 -0
  26. data/builtin/{shaders → app/shaders}/lighting/vertex.ejs +0 -0
  27. data/builtin/{shaders → app/shaders}/normal_map/common.ejs +0 -0
  28. data/builtin/{shaders → app/shaders}/normal_map/fragment.ejs +0 -0
  29. data/builtin/{shaders → app/shaders}/normal_map/manifest.yml +0 -0
  30. data/builtin/{shaders → app/shaders}/normal_map/material.js +0 -0
  31. data/builtin/{shaders → app/shaders}/normal_map/vertex.ejs +0 -0
  32. data/builtin/{shaders → app/shaders}/paraboloid/common.ejs +0 -0
  33. data/builtin/{shaders → app/shaders}/paraboloid/fragment.ejs +0 -0
  34. data/builtin/{shaders → app/shaders}/paraboloid/manifest.yml +0 -0
  35. data/builtin/{shaders → app/shaders}/paraboloid/material.js +0 -0
  36. data/builtin/{shaders → app/shaders}/paraboloid/vertex.ejs +0 -0
  37. data/builtin/{shaders → app/shaders}/picking/common.ejs +0 -0
  38. data/builtin/{shaders → app/shaders}/picking/fragment.ejs +0 -0
  39. data/builtin/{shaders → app/shaders}/picking/material.js +0 -0
  40. data/builtin/{shaders → app/shaders}/picking/vertex.ejs +0 -0
  41. data/builtin/{shaders → app/shaders}/shadow_map/common.ejs +0 -0
  42. data/builtin/{shaders → app/shaders}/shadow_map/fragment.ejs +0 -0
  43. data/builtin/{shaders → app/shaders}/shadow_map/manifest.yml +0 -0
  44. data/builtin/{shaders → app/shaders}/shadow_map/material.js +0 -0
  45. data/builtin/{shaders → app/shaders}/shadow_map/vertex.ejs +0 -0
  46. data/builtin/{shaders → app/shaders}/texture/common.ejs +0 -0
  47. data/builtin/{shaders → app/shaders}/texture/fragment.ejs +0 -0
  48. data/builtin/{shaders → app/shaders}/texture/manifest.yml +0 -0
  49. data/builtin/{shaders → app/shaders}/texture/material.js +0 -0
  50. data/builtin/{shaders → app/shaders}/texture/vertex.ejs +0 -0
  51. data/jax.gems +1 -1
  52. data/jax.gemspec +9 -7
  53. data/lib/jax.rb +23 -9
  54. data/lib/jax/application.rb +118 -60
  55. data/lib/jax/application/builtin.rb +12 -0
  56. data/lib/jax/application/builtin/configurable.rb +5 -0
  57. data/lib/jax/application/builtin/configuration.rb +5 -0
  58. data/lib/jax/application/configurable.rb +19 -0
  59. data/lib/jax/application/configuration.rb +46 -13
  60. data/lib/jax/application/railties.rb +26 -0
  61. data/lib/jax/core_ext/kernel.rb +7 -0
  62. data/lib/jax/engine.rb +64 -0
  63. data/lib/jax/engine/configurable.rb +19 -0
  64. data/lib/jax/engine/configuration.rb +49 -0
  65. data/lib/jax/generators/app.rb +3 -2
  66. data/lib/jax/generators/app/app_generator.rb +9 -2
  67. data/lib/jax/generators/app/templates/config/environment.rb.tt +5 -0
  68. data/lib/jax/generators/app/templates/public/index.html.tt +26 -0
  69. data/lib/jax/generators/app/templates/public/javascripts/jax.js +8726 -1
  70. data/lib/jax/generators/app/templates/public/stylesheets/%file_name%.css.tt +11 -0
  71. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +1 -1
  72. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +1 -0
  73. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_environment_helper.js +13 -5
  74. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +6 -10
  75. data/lib/jax/generators/commands.rb +168 -42
  76. data/lib/jax/generators/controller/controller_generator.rb +9 -2
  77. data/lib/jax/generators/interactions.rb +56 -0
  78. data/lib/jax/generators/light_source/light_source_generator.rb +1 -2
  79. data/lib/jax/generators/material/material_generator.rb +1 -2
  80. data/lib/jax/generators/model/model_generator.rb +1 -3
  81. data/lib/jax/generators/packager/package_generator.rb +32 -0
  82. data/lib/jax/generators/plugin/USAGE +4 -0
  83. data/lib/jax/generators/plugin/all.rb +113 -0
  84. data/lib/jax/generators/plugin/credentials.rb +108 -0
  85. data/lib/jax/generators/plugin/plugin_generator.rb +72 -0
  86. data/lib/jax/generators/plugin/plugin_manager.rb +254 -0
  87. data/lib/jax/generators/plugin/templates/new_plugin/app/controllers/.empty_directory +0 -0
  88. data/lib/jax/generators/plugin/templates/new_plugin/app/helpers/.empty_directory +0 -0
  89. data/lib/jax/generators/plugin/templates/new_plugin/app/models/.empty_directory +0 -0
  90. data/lib/jax/generators/plugin/templates/new_plugin/app/resources/.empty_directory +0 -0
  91. data/lib/jax/generators/plugin/templates/new_plugin/app/views/.empty_directory +0 -0
  92. data/lib/jax/generators/plugin/templates/new_plugin/config/routes.rb +3 -0
  93. data/lib/jax/generators/plugin/templates/new_plugin/init.rb +1 -0
  94. data/lib/jax/generators/plugin/templates/new_plugin/install.rb +2 -0
  95. data/lib/jax/generators/plugin/templates/new_plugin/public/.empty_directory +0 -0
  96. data/lib/jax/generators/plugin/templates/new_plugin/spec/.empty_directory +0 -0
  97. data/lib/jax/generators/plugin/templates/new_plugin/uninstall.rb +2 -0
  98. data/lib/jax/generators/script_jax_loader.rb +17 -0
  99. data/lib/jax/generators/shader/shader_generator.rb +2 -3
  100. data/lib/jax/monkeypatch/jasmine/config.rb +25 -1
  101. data/lib/jax/monkeypatch/jasmine/server.rb +1 -1
  102. data/lib/jax/packager.rb +12 -11
  103. data/lib/jax/packager/sprockets_template.rb +15 -6
  104. data/lib/jax/plugin.rb +49 -0
  105. data/lib/jax/plugin/manifest.rb +71 -0
  106. data/lib/jax/resource_compiler.rb +24 -14
  107. data/lib/jax/routes.rb +1 -0
  108. data/lib/jax/shader.rb +16 -1
  109. data/lib/jax/tasks/rake.rb +1 -1
  110. data/lib/jax/version.rb +3 -3
  111. data/spec/benchmark.htm +93 -0
  112. data/spec/fixtures/web/plugins/404.http +39 -0
  113. data/spec/fixtures/web/plugins/all.xml +106 -0
  114. data/spec/fixtures/web/plugins/author/create_account.xml.http +20 -0
  115. data/spec/fixtures/web/plugins/author/create_new_plugin.xml.http +27 -0
  116. data/spec/fixtures/web/plugins/author/login_existing_account.xml.http +19 -0
  117. data/spec/fixtures/web/plugins/author/login_not_found.xml.http +14 -0
  118. data/spec/fixtures/web/plugins/author/login_password_invalid.xml.http +12 -0
  119. data/spec/fixtures/web/plugins/clouds.xml +51 -0
  120. data/spec/fixtures/web/plugins/example.tgz.http +0 -0
  121. data/spec/fixtures/web/plugins/example.tgz.http.old +0 -0
  122. data/spec/fixtures/web/plugins/none.http +13 -0
  123. data/spec/fixtures/web/plugins/vert.xml +68 -0
  124. data/spec/fixtures/web/plugins/vertex-blob.xml +37 -0
  125. data/spec/fixtures/web/plugins/vertex-height-map.xml +44 -0
  126. data/spec/generators/app_generator_test.rb +42 -0
  127. data/spec/generators/controller_generator_test.rb +47 -0
  128. data/spec/generators/light_generator_test.rb +37 -0
  129. data/spec/generators/material_generator_test.rb +22 -0
  130. data/spec/generators/model_generator_test.rb +26 -0
  131. data/spec/generators/plugin_generator_test.rb +114 -0
  132. data/spec/generators/plugin_manager/push_test.rb +59 -0
  133. data/spec/generators/plugin_manager_test.rb +192 -0
  134. data/spec/generators/shader_generator_test.rb +38 -0
  135. data/spec/lib/jax/application_test.rb +18 -0
  136. data/spec/lib/jax/generators/plugin/credentials_test.rb +72 -0
  137. data/spec/lib/jax/packager_test.rb +87 -0
  138. data/spec/lib/jax/plugin_test.rb +27 -0
  139. data/spec/lib/jax/reloading_test.rb +23 -0
  140. data/spec/lib/jax/routes_test.rb +28 -0
  141. data/spec/lib/jax/shader_test.rb +29 -0
  142. data/spec/lib/jax/tasks/jax_rake_test.rb +85 -0
  143. data/spec/support/bases/generator_test_case.rb +108 -0
  144. data/spec/support/bases/isolated_test_case.rb +148 -0
  145. data/spec/support/fixtures_helper.rb +21 -0
  146. data/spec/support/spec_shell.rb +14 -1
  147. data/spec/test_app.rb +3 -0
  148. data/spec/test_helper.rb +55 -0
  149. metadata +200 -92
  150. data/spec/generators/app_generator_spec.rb +0 -47
  151. data/spec/generators/controller_generator_spec.rb +0 -68
  152. data/spec/generators/light_generator_spec.rb +0 -51
  153. data/spec/generators/material_generator_spec.rb +0 -35
  154. data/spec/generators/model_generator_spec.rb +0 -43
  155. data/spec/lib/jax/routes_spec.rb +0 -24
  156. data/spec/lib/jax/shader_spec.rb +0 -57
  157. data/spec/lib/jax/tasks/jax_rake_spec.rb +0 -92
  158. data/spec/spec_helper.rb +0 -11
data/.gitmodules CHANGED
@@ -1,3 +1,6 @@
1
1
  [submodule "vendor/pdoc"]
2
2
  path = vendor/pdoc
3
3
  url = git://github.com/tobie/pdoc.git
4
+ [submodule "vendor/jasmine"]
5
+ path = vendor/jasmine
6
+ url = git://github.com/pivotal/jasmine.git
data/.travis.yml ADDED
@@ -0,0 +1,32 @@
1
+ # Passes arguments to bundle install (http://gembundler.com/man/bundle-install.1.html)
2
+ # bundler_args: --binstubs
3
+
4
+ # Specify which versions of Ruby to run the tests on; each version will be used
5
+ rvm:
6
+ - 1.8.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"
11
+
12
+ # Define tasks to be completed before and after tests run. Will allow folding of content on frontend
13
+ # 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
29
+
30
+ # Disable email notifications
31
+ # notifications:
32
+ # disabled: true
data/CHANGELOG CHANGED
@@ -1,3 +1,126 @@
1
+ * 1.1.0 *
2
+
3
+ * If a mesh #init method does not specify any vertex normals for the mesh, and
4
+ Jax.Mesh#getNormalBuffer() is called, Jax.Mesh will automatically calculate
5
+ vertex normals for the mesh. This is a relatively expensive operation (though
6
+ only for the first frame or so), so you should still strive to give your own set
7
+ of normals when possible.
8
+
9
+ * Jax.Mesh#setColor now accepts the color as a single RGBA array or as 4 separate R, G, B, A
10
+ arguments.
11
+
12
+ * Added Jax.Geometry.Triangle, and exposed Jax.Mesh#getTriangles(). This class comes
13
+ complete with triangle/triangle, triangle/ray, triangle/sphere, and triangle/point
14
+ intersection tests! See API documentation. Jax.Geometry.Triangle can also return
15
+ its face normal.
16
+
17
+ * Added Jax.DataRegion, Jax.DataSegment, and Jax.DataBuffer, all of which are now used
18
+ internally by Jax.Mesh to manage its mesh data. This has cut memory usage for any
19
+ given Jax.Mesh in half, makes the additional memory footprint of Jax.Geometry.Triangle
20
+ negligible, and even nets a minor performance gain. Moreover, altering vertex data
21
+ in the Jax.Mesh is now immediately reflected in Jax.Geometry.Triangle and
22
+ Jax.Geometry.Plane, since they are sharing the same region of memory.
23
+
24
+ * Made most instance methods of Jax.Geometry.Plane faster and more memory efficient. Also
25
+ altered Jax.Geometry.Plane to take advantage of Jax.DataSegment for further memory gains.
26
+
27
+ * Exposed Jax.Mesh#validate(), which makes sure the mesh has been built and builds it
28
+ immediately if it hasn't, or if it is out of date.
29
+
30
+ * Thoroughly documented all Jax-specific extensions to the glMatrix library.
31
+
32
+ * Exposed and improved Jax.Mesh#getBounds() to calculate an axis-aligned bounding box
33
+ (AABB) in object space, and to handle meshes with no vertices (in which case all values
34
+ are set to zero).
35
+
36
+ * Added lib/**/*.js to the generated jasmine.yml file. (New applications only.)
37
+
38
+ * Exposed Jax.Camera#frustum to the API. Improved Jax.Frustum and thoroughly documented
39
+ its use.
40
+
41
+ * Vastly simplified usage of built-in Perlin noise. Replace all previous code with:
42
+
43
+ Jax.noise.bind(context, uniforms);
44
+
45
+ Previous code is still compatible, but should be considered deprecated.
46
+
47
+ * Helpers can optionally be defined as arrays, rather than as functions which return
48
+ arrays. For example, the following two lines are equivalent to one another:
49
+
50
+ helpers: [ UserInputHelper ]
51
+ helpers: function() { return [ UserInputHelper]; }
52
+
53
+ This addition is purely to reduce typing. Use the old, function-based approach to defer
54
+ execution until runtime; use the array-based approach if you don't care.
55
+
56
+ * Jax.Camera now uses quaternions instead of calculating the transform matrix directly.
57
+ This nets some potential performance improvements, but since the matrix still has to
58
+ eventually be calculated, it's more for internal efficiency and code maintenence than
59
+ anything. Using quaternions does significantly reduce the Jax.Camera memory footprint,
60
+ however.
61
+
62
+ * Jax.Camera now uses a fixed yaw axis by default. Use Jax.Camera#setFixedYawAxis(false)
63
+ to disable. The new default represents the standard camera orientation, as in first-person
64
+ and third-person demos. Disabling fixed yaw axis will result in a more "flight simulator"
65
+ type of camera.
66
+
67
+ * Some minor movement-related bugfixes for Jax.Camera.
68
+
69
+ * Renamed Jax.IDENTITY_MATRIX to mat4.IDENTITY for clarity and consistency.
70
+
71
+ * Temporarily disabled calls to Jax.Context#checkForRenderErrors() in development under
72
+ Chrome, because the calls have proven far too detrimental to performance. When the
73
+ issue is fixed in Chrome, I'll re-enable this. In the meantime, do performance testing
74
+ in Chrome, but expect an overall more robust development cycle using Firefox.
75
+
76
+ * App generator: added a default but customizable stylesheet and index.html used when
77
+ packaging apps. Affects new applications only.
78
+
79
+ * Jax JavaScript library is no longer minified; this is left for developers to do after
80
+ packaging an application for production. This change makes it much simpler to track
81
+ errors in the field. May consider auto-minifying the entire package when
82
+ `rake package` is executed, but I'm not ready to do that yet.
83
+
84
+ * New error handling API lets developers hook directly into (and recover gracefully
85
+ from) otherwise catastrophic errors
86
+
87
+ * Developers can hook into "webgl not supported" errors to customize the framework's
88
+ response. By default, Jax redirects to an error page as per v1.0.0.
89
+
90
+ * Added Rails as a dependency; Jax now internally takes advantage of Railtie
91
+ to implement a highly modular application structure; Jax::Plugin and
92
+ Jax::Application both inherit from Railtie. This is not to be confused with
93
+ support for or integration with Ruby on Rails.
94
+
95
+ * Controller generator now accepts the `--root` option to automatically make it the
96
+ root controller
97
+
98
+ * Improved the light source API so that developers can replace this:
99
+ this.world.addLightSource(LightSource.find("sun"));
100
+ with:
101
+ this.world.addLightSource("sun");
102
+
103
+ * Jax now supports both Ruby 1.9.2 and Ruby 1.8.7.
104
+
105
+ * Added a benchmark script. Internal use only, but it also demonstrates a bare-bones,
106
+ JavaScript-only [no Ruby counterpart] Jax application. Check it out:
107
+ https://github.com/sinisterchipmunk/jax/blob/1-1-stable/spec/benchmark.htm
108
+
109
+ * Tons of documentation for the JavaScript API
110
+
111
+ * Plugin generator to create new plugins
112
+
113
+ * Plugin manager to search for, install, publish and remove plugins
114
+
115
+ * Plugin Repository (http://plugins.jaxgl.com)
116
+
117
+ * Plugin Guide (http://guides.jaxgl.com/plugins.html)
118
+
119
+ * Jax.Context now Unregisters event handlers upon disposal
120
+
121
+ * If a Jax.Context has been disposed, it will no longer render or update.
122
+
123
+
1
124
  * 1.0.1 *
2
125
 
3
126
  * If a render error is encountered while generating shadow maps, the corresponding
@@ -7,6 +130,9 @@
7
130
  a fatal error. Note that this condition is only triggered by a hard error during
8
131
  shadowmap generation; soft errors like drastically low framerates are not handled.
9
132
 
133
+ * Driver bug workaround: avoid early returning from void functions. Apparently some
134
+ drivers crash when void functions encounter a `return` statement. See issue #20:
135
+ https://github.com/sinisterchipmunk/jax/issues/20
10
136
 
11
137
 
12
138
  * 1.0.0 *
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ## JAX
1
+ ## JAX [![Build Status](http://travis-ci.org/sinisterchipmunk/jax.png)](http://travis-ci.org/sinisterchipmunk/jax)
2
2
 
3
3
  Jax is a framework for developing rich WebGL-enabled applications using JavaScript and Ruby.
4
4
 
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ rescue LoadError
10
10
  puts " *** You don't seem to have Bundler installed. ***"
11
11
  puts " Please run the following command:"
12
12
  puts
13
- puts " gem install bundler --version=1.0.14"
13
+ puts " gem install bundler --version=1.0.15"
14
14
  exit
15
15
  end
16
16
 
@@ -59,20 +59,25 @@ task :compile do
59
59
  :load_path => ["src"],
60
60
  :source_files => ["src/jax.js", "builtin/**/*.js"]
61
61
  )
62
- rm_rf "dist"
63
- mkdir_p "dist"
64
- secretary.concatenation.save_to "dist/jax.js"
62
+ jax_root = File.expand_path(File.dirname(__FILE__))
63
+ rm_rf File.join(jax_root, "dist")
64
+ mkdir_p File.join(jax_root, "dist")
65
+ secretary.concatenation.save_to File.join(jax_root, "dist/jax.js")
66
+
67
+ mkdir_p File.join(jax_root, "tmp") unless File.directory?(File.join(jax_root, "tmp"))
65
68
 
66
69
  # generate the built-in shaders for testing against (these are not added to the real jax dist because they are
67
70
  # regenerated in the user's app)
68
- rm File.join(File.dirname(__FILE__), "tmp/shaders.js")
69
- File.open(File.join(File.dirname(__FILE__), "tmp/shaders.js"), "w") do |f|
71
+ rm File.join(jax_root, "tmp/shaders.js") if File.file?(File.join(jax_root, "tmp/shaders.js"))
72
+ File.open(File.join(jax_root, "tmp/shaders.js"), "w") do |f|
70
73
  Jax.application.shaders.each { |shader| shader.save_to f }
71
74
  end
72
75
 
73
- puts "generated #{File.expand_path "dist/jax.js", '.'}"
74
- cp File.join(File.dirname(__FILE__), "dist/jax.js"),
75
- File.join(File.dirname(__FILE__), "lib/jax/generators/app/templates/public/javascripts/jax.js")
76
+ puts "generated #{File.join(jax_root, "dist/jax.js")}"
77
+
78
+ # make sure the app generator copies the correct jax
79
+ cp File.join(jax_root, "dist/jax.js"),
80
+ File.join(jax_root, "lib/jax/generators/app/templates/public/javascripts/jax.js")
76
81
 
77
82
  puts "(project built)"
78
83
  end
@@ -81,17 +86,85 @@ desc "compile and minify Jax into dist/jax.js and dist/jax-min.js"
81
86
  task :minify => :compile do
82
87
  puts "(minifying...)"
83
88
  if system("java", "-jar", File.join(File.dirname(__FILE__), "vendor/yuicompressor-2.4.2.jar"), "dist/jax.js", "-o", "dist/jax-min.js")
84
- cp File.join(File.dirname(__FILE__), "dist/jax-min.js"),
85
- File.join(File.dirname(__FILE__), "lib/jax/generators/app/templates/public/javascripts/jax.js")
86
- puts "(done.)"
89
+ puts "(done. saved to: dist/jax-min.js)"
87
90
  else
88
91
  puts "(Error while minifying!)"
89
92
  end
90
93
  end
91
94
 
95
+ ### HACK to add redcloth support to pdoc without changing pdoc itself
96
+ class PDoc::Generators::Html::Website < PDoc::Generators::AbstractGenerator
97
+ alias _set_markdown_parser set_markdown_parser
98
+
99
+ def set_markdown_parser(parser = nil)
100
+ if parser && parser.to_sym == :redcloth
101
+ require 'redcloth'
102
+ self.class.markdown_parser = RedCloth
103
+ else
104
+ _set_markdown_parser(parser)
105
+ end
106
+ end
107
+ end
108
+
92
109
  namespace :doc do
110
+ desc "check for common pdoc typos"
111
+ task :check do
112
+ candidates = [
113
+ /\/\*\*(.*?)\*\*\//m,
114
+ /\s*\*.*?\)\s+:/, # * - object (Jax.Model) : description
115
+ /\s*\*\s*\-.*?\)\s*\-/, # * - object (Jax.Model) - description
116
+ /\s*\*\s*\-[^\n]*?\n\s*\*\*\//m, # * - object (Jax.Model): description\n **/
117
+ ]
118
+
119
+ errors = false
120
+
121
+ Dir[File.expand_path("src/**/*.js", File.dirname(__FILE__))].each do |fi|
122
+ next unless File.file?(fi)
123
+ lfi = fi.sub(/^#{Regexp::escape File.expand_path("src/", File.dirname(__FILE__))}\/?/, '')
124
+ candidates.each do |candidate|
125
+ if candidate.multiline?
126
+ content = File.read(fi)
127
+ offset = 0
128
+ lineno = 1
129
+ while m = candidate.match(content[offset...content.length])
130
+ offset += m.offset(0)[1]
131
+ lineno += $`.lines.to_a.length
132
+
133
+ if candidate == candidates.first
134
+ full = $~[0]
135
+ # special case -- we're looking for parameters followed by an empty line. If it's missing,
136
+ # pdoc will not correctly parse the params.
137
+ inner = $~[1]
138
+
139
+ if inner =~ /^\s*\*\s*\-.*/m
140
+ lineno += $`.lines.to_a.length
141
+ inner = $~[0]
142
+ if inner !~ /\*\s*(\*|$)/m
143
+ errors = true
144
+ puts "#{lfi}:#{lineno} >\n#{full}"
145
+ end
146
+ end
147
+ else
148
+ errors = true
149
+ puts "#{lfi}:#{lineno} >\n#{$~[0]}"
150
+ end
151
+ end
152
+ else
153
+ File.read(fi).lines.each_with_index do |line,no|
154
+ if line =~ candidate
155
+ errors = true
156
+ puts "#{lfi}:#{no+1} > #{$~[0]}"
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ exit if errors
164
+ end
165
+
93
166
  desc "build the Jax JavaScript documentation"
94
- task :js do
167
+ task :js => 'doc:check' do
95
168
  require 'erb'
96
169
  FileUtils.rm_rf 'doc'
97
170
 
@@ -105,7 +178,8 @@ namespace :doc do
105
178
  :destination => "doc",
106
179
  # :index_page => 'src/README.markdown',
107
180
  :syntax_highlighter => 'coderay',
108
- :markdown_parser => :bluecloth,
181
+ :markdown_parser => :redcloth,
182
+ # :markdown_parser => :bluecloth,
109
183
  :src_code_text => "View source on GitHub &rarr;",
110
184
  :src_code_href => proc { |obj|
111
185
  "https://github.com/sinisterchipmunk/jax/tree/master/#{obj.file}#L#{obj.line_number}"
@@ -156,14 +230,46 @@ namespace :guides do
156
230
  end
157
231
  end
158
232
 
233
+ desc "Run javascript tests using node.js"
234
+ task :node => :compile do
235
+ system("node", "spec/javascripts/node_helper.js")
236
+ end
237
+
238
+ FileUtils.rm_rf File.expand_path("spec/fixtures/tmp", File.dirname(__FILE__))
239
+ require 'rake/testtask'
240
+ desc "Run ruby tests using Test::Unit"
241
+ # NOT WORKING due to isolation tests failing. Use test:isolated instead.
242
+ Rake::TestTask.new("test_unit") do |t|
243
+ t.pattern = "{test,spec}/**/*_test.rb"
244
+ t.libs = ["./test", "./spec"].collect { |f| File.expand_path(f) }.select { |f| File.directory?(f) }
245
+ # t.verbose = true
246
+ # t.warning = true
247
+ end
248
+
249
+ namespace :test do
250
+ task :isolated do
251
+ dir = ENV["TEST_DIR"] || "**"
252
+ ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME'))
253
+ ENV['DO_NOT_ISOLATE'] = '1'
254
+ if ENV['TEST']
255
+ sh(ruby, '-Ispec', ENV['TEST'])
256
+ else
257
+ Dir["spec/#{dir}/*_test.rb"].each do |file|
258
+ next true if file.include?("fixtures")
259
+ sh(ruby, '-Ispec', File.expand_path(file, File.dirname(__FILE__)))
260
+ end
261
+ end
262
+ end
263
+ end
264
+
265
+
159
266
  # 'Guides' tasks & code borrowed from Railties.
160
267
  desc 'Generate guides (for authors), use ONLY=foo to process just "foo.textile"'
161
268
  task :guides => 'guides:generate'
162
269
 
163
270
  task :jasmine => :compile
164
- task :build => [:compile, :minify]
165
- task :default => :compile
271
+ # task :build => [:compile, :minify] # make sure to minify the JS code before going to release
272
+ task :build => :compile
166
273
 
167
- # we should do this before v0.0.1 but will make issues harder to track,
168
- # so let's hold off while in prerelease :
169
- # task :release => :minify
274
+ # disabled node tests for now, since Jax.DataRegion and friends break it. Rake jasmine instead.
275
+ task :default => ['test:isolated']#, :node]
data/bin/jax CHANGED
@@ -8,4 +8,4 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "../lib/jax/generato
8
8
  Jax::Generators::ScriptJaxLoader.exec_script_jax! # this uses exec so, if found, the rest of this file won't load
9
9
 
10
10
  require File.join(File.expand_path(File.dirname(__FILE__)), "../lib/jax/generators/app")
11
- JaxGenerator.start
11
+ JaxAppGenerator.start
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes