bixbite 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. data/LICENSE +20 -0
  2. data/README.markdown +49 -0
  3. data/VERSION +1 -0
  4. data/bin/bixbite +73 -0
  5. data/lib/bixbite.rb +13 -0
  6. data/lib/bixbite/command.rb +14 -0
  7. data/lib/bixbite/create.rb +76 -0
  8. data/template/Rakefile +25 -0
  9. data/template/assets/bixbite/Rakefile.rb +297 -0
  10. data/template/assets/naturaldocs/NaturalDocs/Config/Languages.txt +286 -0
  11. data/template/assets/naturaldocs/NaturalDocs/Config/Topics.txt +382 -0
  12. data/template/assets/naturaldocs/NaturalDocs/Help/customizinglanguages.html +52 -0
  13. data/template/assets/naturaldocs/NaturalDocs/Help/customizingtopics.html +74 -0
  14. data/template/assets/naturaldocs/NaturalDocs/Help/documenting.html +58 -0
  15. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/reference.html +146 -0
  16. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/walkthrough.html +180 -0
  17. data/template/assets/naturaldocs/NaturalDocs/Help/example/Default.css +528 -0
  18. data/template/assets/naturaldocs/NaturalDocs/Help/example/NaturalDocs.js +204 -0
  19. data/template/assets/naturaldocs/NaturalDocs/Help/examples.css +90 -0
  20. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/background.png +0 -0
  21. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/leftside.png +0 -0
  22. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/logo.png +0 -0
  23. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbody.png +0 -0
  24. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbodybg.png +0 -0
  25. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overleftmargin.png +0 -0
  26. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenu.png +0 -0
  27. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenubg.png +0 -0
  28. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/rightside.png +0 -0
  29. data/template/assets/naturaldocs/NaturalDocs/Help/images/logo.gif +0 -0
  30. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/about.png +0 -0
  31. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/background.png +0 -0
  32. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomleft.png +0 -0
  33. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomright.png +0 -0
  34. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/community.png +0 -0
  35. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/customizing.png +0 -0
  36. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/using.png +0 -0
  37. data/template/assets/naturaldocs/NaturalDocs/Help/index.html +9 -0
  38. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/BrowserStyles.js +77 -0
  39. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/PNGHandling.js +72 -0
  40. data/template/assets/naturaldocs/NaturalDocs/Help/keywords.html +38 -0
  41. data/template/assets/naturaldocs/NaturalDocs/Help/languages.html +32 -0
  42. data/template/assets/naturaldocs/NaturalDocs/Help/menu.html +79 -0
  43. data/template/assets/naturaldocs/NaturalDocs/Help/output.html +84 -0
  44. data/template/assets/naturaldocs/NaturalDocs/Help/running.html +40 -0
  45. data/template/assets/naturaldocs/NaturalDocs/Help/styles.css +290 -0
  46. data/template/assets/naturaldocs/NaturalDocs/Help/styles.html +52 -0
  47. data/template/assets/naturaldocs/NaturalDocs/Help/troubleshooting.html +18 -0
  48. data/template/assets/naturaldocs/NaturalDocs/Info/CSSGuide.txt +947 -0
  49. data/template/assets/naturaldocs/NaturalDocs/Info/File Parsing.txt +83 -0
  50. data/template/assets/naturaldocs/NaturalDocs/Info/HTMLTestCases.pm +269 -0
  51. data/template/assets/naturaldocs/NaturalDocs/Info/Languages.txt +107 -0
  52. data/template/assets/naturaldocs/NaturalDocs/Info/NDMarkup.txt +91 -0
  53. data/template/assets/naturaldocs/NaturalDocs/Info/Symbol Management.txt +59 -0
  54. data/template/assets/naturaldocs/NaturalDocs/Info/images/Logo.png +0 -0
  55. data/template/assets/naturaldocs/NaturalDocs/JavaScript/NaturalDocs.js +836 -0
  56. data/template/assets/naturaldocs/NaturalDocs/License-GPL.txt +341 -0
  57. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/BinaryFile.pm +294 -0
  58. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder.pm +280 -0
  59. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/Base.pm +348 -0
  60. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/FramedHTML.pm +345 -0
  61. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTML.pm +398 -0
  62. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTMLBase.pm +3693 -0
  63. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy.pm +860 -0
  64. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/Class.pm +412 -0
  65. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/File.pm +157 -0
  66. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ConfigFile.pm +497 -0
  67. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Constants.pm +165 -0
  68. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/DefineMembers.pm +100 -0
  69. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Error.pm +305 -0
  70. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/File.pm +540 -0
  71. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable.pm +383 -0
  72. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/Reference.pm +44 -0
  73. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/String.pm +110 -0
  74. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages.pm +1475 -0
  75. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/ActionScript.pm +1473 -0
  76. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Ada.pm +38 -0
  77. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced.pm +828 -0
  78. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/Scope.pm +95 -0
  79. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/ScopeChange.pm +70 -0
  80. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Base.pm +832 -0
  81. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/CSharp.pm +1484 -0
  82. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/PLSQL.pm +319 -0
  83. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Pascal.pm +143 -0
  84. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Perl.pm +1370 -0
  85. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype.pm +92 -0
  86. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype/Parameter.pm +87 -0
  87. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Simple.pm +503 -0
  88. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Tcl.pm +219 -0
  89. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu.pm +3406 -0
  90. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu/Entry.pm +201 -0
  91. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/NDMarkup.pm +76 -0
  92. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser.pm +1331 -0
  93. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/JavaDoc.pm +464 -0
  94. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/Native.pm +1060 -0
  95. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/ParsedTopic.pm +253 -0
  96. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project.pm +1402 -0
  97. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/ImageFile.pm +160 -0
  98. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/SourceFile.pm +113 -0
  99. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ReferenceString.pm +334 -0
  100. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings.pm +1418 -0
  101. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings/BuildTarget.pm +66 -0
  102. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB.pm +678 -0
  103. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Extension.pm +84 -0
  104. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/File.pm +129 -0
  105. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Item.pm +201 -0
  106. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/ItemDefinition.pm +45 -0
  107. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm +159 -0
  108. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/StatusMessage.pm +102 -0
  109. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolString.pm +212 -0
  110. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable.pm +1984 -0
  111. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/File.pm +186 -0
  112. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/IndexElement.pm +522 -0
  113. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Reference.pm +273 -0
  114. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/ReferenceTarget.pm +97 -0
  115. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Symbol.pm +428 -0
  116. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/SymbolDefinition.pm +96 -0
  117. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics.pm +1319 -0
  118. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics/Type.pm +151 -0
  119. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Version.pm +384 -0
  120. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs +400 -0
  121. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs.bat +17 -0
  122. data/template/assets/naturaldocs/NaturalDocs/Styles/Default.css +767 -0
  123. data/template/assets/naturaldocs/NaturalDocs/Styles/Roman.css +765 -0
  124. data/template/assets/naturaldocs/NaturalDocs/Styles/Small.css +763 -0
  125. data/template/assets/utilities/pngout +0 -0
  126. data/template/deploy/public_html/.htaccess +0 -0
  127. data/template/documentation/js/.htaccess +0 -0
  128. data/template/src/html/.htaccess +76 -0
  129. data/template/src/html/css/cmn/global.css +96 -0
  130. data/template/src/html/css/cmn/ie.css +15 -0
  131. data/template/src/html/css/cmn/ie6.css +15 -0
  132. data/template/src/html/images/cmn/.htaccess +0 -0
  133. data/template/src/html/images/tmp/.htaccess +0 -0
  134. data/template/src/html/includes/debug.inc +5 -0
  135. data/template/src/html/includes/footer.inc +52 -0
  136. data/template/src/html/includes/header.inc +61 -0
  137. data/template/src/html/includes/html.inc +3 -0
  138. data/template/src/html/includes/namespace.inc +19 -0
  139. data/template/src/html/includes/page.inc +151 -0
  140. data/template/src/html/index.html +35 -0
  141. data/template/src/html/js/cmn/bootstrap.js +74 -0
  142. data/template/src/html/js/cmn/global.js +142 -0
  143. data/template/src/html/js/cmn/lib/LAB.js +348 -0
  144. data/template/src/html/min/.htaccess +4 -0
  145. data/template/src/html/min/MinifyCLI.php +19 -0
  146. data/template/src/html/min/README.txt +132 -0
  147. data/template/src/html/min/builder/_index.js +242 -0
  148. data/template/src/html/min/builder/bm.js +36 -0
  149. data/template/src/html/min/builder/index.php +182 -0
  150. data/template/src/html/min/builder/ocCheck.php +36 -0
  151. data/template/src/html/min/builder/rewriteTest.js +1 -0
  152. data/template/src/html/min/config.php +187 -0
  153. data/template/src/html/min/groupsConfig.php +34 -0
  154. data/template/src/html/min/index.php +66 -0
  155. data/template/src/html/min/lib/FirePHP.php +1370 -0
  156. data/template/src/html/min/lib/HTTP/ConditionalGet.php +348 -0
  157. data/template/src/html/min/lib/HTTP/Encoder.php +326 -0
  158. data/template/src/html/min/lib/JSMin.php +314 -0
  159. data/template/src/html/min/lib/JSMinPlus.php +1872 -0
  160. data/template/src/html/min/lib/Minify.php +532 -0
  161. data/template/src/html/min/lib/Minify/Build.php +103 -0
  162. data/template/src/html/min/lib/Minify/CSS.php +83 -0
  163. data/template/src/html/min/lib/Minify/CSS/Compressor.php +250 -0
  164. data/template/src/html/min/lib/Minify/CSS/UriRewriter.php +270 -0
  165. data/template/src/html/min/lib/Minify/Cache/APC.php +130 -0
  166. data/template/src/html/min/lib/Minify/Cache/File.php +125 -0
  167. data/template/src/html/min/lib/Minify/Cache/Memcache.php +137 -0
  168. data/template/src/html/min/lib/Minify/ClosureCompiler.php +85 -0
  169. data/template/src/html/min/lib/Minify/CommentPreserver.php +90 -0
  170. data/template/src/html/min/lib/Minify/Controller/Base.php +202 -0
  171. data/template/src/html/min/lib/Minify/Controller/Files.php +78 -0
  172. data/template/src/html/min/lib/Minify/Controller/Groups.php +94 -0
  173. data/template/src/html/min/lib/Minify/Controller/MinApp.php +132 -0
  174. data/template/src/html/min/lib/Minify/Controller/Page.php +82 -0
  175. data/template/src/html/min/lib/Minify/Controller/Version1.php +118 -0
  176. data/template/src/html/min/lib/Minify/HTML.php +245 -0
  177. data/template/src/html/min/lib/Minify/ImportProcessor.php +157 -0
  178. data/template/src/html/min/lib/Minify/Lines.php +131 -0
  179. data/template/src/html/min/lib/Minify/Logger.php +45 -0
  180. data/template/src/html/min/lib/Minify/Packer.php +37 -0
  181. data/template/src/html/min/lib/Minify/Source.php +187 -0
  182. data/template/src/html/min/lib/Minify/YUICompressor.php +139 -0
  183. data/template/src/html/min/lib/Solar/Dir.php +199 -0
  184. data/template/src/html/min/lib/closure-compiler.jar +0 -0
  185. data/template/src/html/min/lib/yuicompressor-2.4.2.jar +0 -0
  186. data/template/src/html/min/utils.php +90 -0
  187. data/template/src/templates/css/template.css +7 -0
  188. data/template/src/templates/js/template.js +72 -0
  189. data/template/src/templates/template.html +18 -0
  190. data/template/src/yaml/config.yml +46 -0
  191. data/template/src/yaml/deploy.yml +35 -0
  192. data/test/bixbite_test.rb +7 -0
  193. data/test/test_helper.rb +10 -0
  194. metadata +278 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Richard Herrera
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,49 @@
1
+ # Bixbite Project Initializer
2
+
3
+ Bixbite creates a project structure optimal for client-side development.
4
+
5
+ * Downloads the latest versions of [Google Ajax API Libraries](http://code.google.com/apis/ajaxlibs/)
6
+ * Uses [LABjs](http://labjs.com/) for parallelized script management
7
+ * Allows full use of PHP includes for shared module management
8
+ * Bundles a customized [PHP Minify](http://code.google.com/p/minify/) package for on-the-fly compression tests
9
+ * Dynamic to static publishing eliminates server-side dependencies on delivery
10
+
11
+ Additionally, Bixbite includes rake tasks to automatically:
12
+
13
+ * Create new page templates & associated JS/CSS files
14
+ * Prepare files for deployment
15
+ * Generate NaturalDocs-compliant documentation
16
+ * Compress PNG files using [PNGout](http://advsys.net/ken/utils.htm)
17
+ * Gracefully degrade 24-bit PNG files for Internet Explorer 6
18
+ * Deliver compressed versions of CSS & JavaScript files
19
+ * Add new files, remove outdated files from Subversion
20
+ * Generate diff reports for each delivery
21
+
22
+ ## Links
23
+
24
+ * [Wiki](http://wiki.github.com/doctyper/bixbite)
25
+ * [Bugs](http://github.com/doctyper/bixbite/issues)
26
+
27
+ ## Installing
28
+
29
+ # Install the gem:
30
+ gem install bixbite
31
+
32
+ # Usage
33
+
34
+ # Generating a Bixbite template
35
+
36
+ Run the Bixbite gem to generate a new template:
37
+
38
+ bixbite "The Foo Project" FOO
39
+
40
+ This command will generate a template with a project name of "The Foo Project" and support files (JS/PHP) using the FOO namespace.
41
+
42
+ You may also specify arguments when invoked. Via `bixbite --help`:
43
+
44
+ * --js-lib [ARG]: use specified JavaScript library (options: jQuery, YUI, MooTools)
45
+ * --source-directory [ARG]: override bundled template with user-defined template
46
+
47
+ # Wiki
48
+
49
+ See the [Bixbite wiki](http://wiki.github.com/doctyper/bixbite) for details on how to utilize the generated template. It also contains details on how to use a customized template if you so wish.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bixbite"
4
+ require "optparse"
5
+ require "yaml"
6
+ require "fileutils"
7
+ require "net/http"
8
+ require "highline/import"
9
+
10
+ # Argument defaults
11
+ options = {
12
+ :source => File.expand_path(File.dirname(__FILE__) + "/../template/"),
13
+ :destination => File.expand_path(Dir.getwd),
14
+ :lib => 'jQuery'
15
+ }
16
+
17
+ USER_TEMPLATE = File.expand_path(File.dirname(__FILE__) + "/../user-defined-template")
18
+ options[:source] = USER_TEMPLATE if File.exists?(USER_TEMPLATE)
19
+
20
+ # Config YAML File
21
+ options[:config] = YAML.load_file(File.join(options[:source], "src", "yaml", "config.yml"));
22
+
23
+ # Get arguments
24
+ opts = OptionParser.new do |o|
25
+ o.banner = 'Usage: bixbite "Project Title" PROJECTNAMESPACE [source] [destination]'
26
+ o.separator ""
27
+
28
+ o.on("-l", "--js-lib [ARG]", "Use specified JavaScript library (options: jQuery, YUI, MooTools)") do |lib|
29
+ options[:lib] = lib
30
+ end
31
+
32
+ o.on_tail("-s", "--source-directory [ARG]", "Override bundled template with user-defined template") do |path|
33
+ override = ask("Override bundled template with #{File.expand_path(path)} (admin privileges required)? [Y/n] ")
34
+
35
+ if (override.downcase == "y")
36
+ system %(sudo rm -rf #{USER_TEMPLATE}) if File.exists?(USER_TEMPLATE)
37
+ system %(sudo cp -r #{File.expand_path(path)} #{USER_TEMPLATE})
38
+ end
39
+
40
+ exit
41
+ end
42
+
43
+ o.separator ""
44
+
45
+ # Help
46
+ o.on_tail("-h", "--help", "Show this message") do
47
+ puts opts
48
+ exit
49
+ end
50
+
51
+ o.separator ""
52
+
53
+ # Version
54
+ o.on_tail("-v", "--version", "Show version") do
55
+ puts "bixbite " + Bixbite.version
56
+ exit
57
+ end
58
+ end
59
+
60
+ opts.parse! # Parse arguments into `options` hash
61
+
62
+ # Get source and destintation from command line
63
+ if (ARGV.size >= 2)
64
+ options[:title] = ARGV[0]
65
+ options[:namespace] = ARGV[1]
66
+ options[:source] = ARGV[2] if ARGV[2]
67
+ options[:destination] = ARGV[3] if ARGV[3]
68
+ else
69
+ puts opts
70
+ exit
71
+ end
72
+
73
+ Bixbite::Command.new(options).run!
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'yaml'
4
+ require 'fileutils'
5
+
6
+ require 'bixbite/command'
7
+ require 'bixbite/create'
8
+
9
+ module Bixbite
10
+ def self.version
11
+ File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Bixbite
2
+ class Command
3
+ attr_accessor :options
4
+
5
+ def initialize options
6
+ @config = options[:config]
7
+ @options = options
8
+ end
9
+
10
+ def run!
11
+ Bixbite::Create.new(@options)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,76 @@
1
+ module Bixbite
2
+ class Create
3
+ attr_accessor :source, :destination, :options
4
+
5
+ def initialize options
6
+ @options = options
7
+ @config = @options[:config]
8
+
9
+ copy @options[:source], @options[:destination]
10
+ download @options[:lib], @options[:destination]
11
+ parse @config["parse"], @options[:destination], @options[:title], @options[:namespace]
12
+ end
13
+
14
+ def parse list, source, name, namespace
15
+ puts "Building project..."
16
+ list.each do |glob|
17
+ files = Dir[File.join(source, "template", glob)]
18
+ files.each do |file|
19
+ File.open(file, "r+") do |f|
20
+ lines = f.readlines
21
+ lines.each do |line|
22
+ line.gsub!(/__PROJECT_NAME__/, name);
23
+ line.gsub!(/__PROJECT_NAMESPACE__/, namespace);
24
+ line.gsub!(/__JS_LIB__/, @options[:lib]);
25
+ line.gsub!(/__JS_LIB_LOWERCASE__/, @options[:lib].downcase);
26
+ end
27
+ f.pos = 0
28
+ f.print lines
29
+ f.truncate(f.pos)
30
+ end unless File.directory?(file)
31
+
32
+ File.rename(file, file.gsub(/__PROJECT_NAME__/, name)) if file.match(/__PROJECT_NAME__/)
33
+ File.rename(file, file.gsub(/__JS_LIB_LOWERCASE__/, @options[:lib].downcase)) if file.match(/__JS_LIB_LOWERCASE__/)
34
+ end
35
+ end
36
+ puts "All done!"
37
+ end
38
+
39
+ def copy source, destination
40
+ puts "Copying to #{destination}..."
41
+ FileUtils.cp_r(source, destination)
42
+ puts "Done!"
43
+ end
44
+
45
+ def download lib, destination
46
+ require 'net/http'
47
+
48
+ def get domain, source, destination
49
+ Net::HTTP.start(domain) { |http|
50
+ resp = http.get(source)
51
+ open(destination, "wb") { |file|
52
+ file.write(resp.body)
53
+ puts "Done!"
54
+ }
55
+ }
56
+ end
57
+
58
+ google = 'ajax.googleapis.com'
59
+ file = '__JS_LIB_LOWERCASE__-latest.js'
60
+ dest = File.join(destination, "template", @config["directories"]["src"]["html"][0], "js/cmn/lib", file)
61
+
62
+ puts "Downloading #{lib} from #{google}"
63
+
64
+ case lib
65
+ when 'jQuery'
66
+ get google, '/ajax/libs/jquery/1/jquery.js', dest
67
+ when 'YUI'
68
+ get google, '/ajax/libs/yui/2/build/yuiloader/yuiloader.js', dest
69
+ when 'MooTools'
70
+ get google, '/ajax/libs/mootools/1.2/mootools.js', dest
71
+ else
72
+ end
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,25 @@
1
+ require 'assets/bixbite/Rakefile'
2
+
3
+ ###############################################################################
4
+ #
5
+ # __PROJECT_NAME__ Build Tasks
6
+ # See assets/bixbite/Rakefile for more information
7
+ #
8
+ # Tasks for pages:
9
+ # - Update deploy directory: rake prep
10
+ #
11
+ # How the delivery is assembled from source:
12
+ # - The source of the project is kept in src/html
13
+ # - The directory src/yaml contains a "deploy.yml" file
14
+ # - The deploy file contains arrays of global patterns for copying files
15
+ # (files:) and rendering files through the PHP command line interface (render:)
16
+ # - Run rake prep from the root of trunk.
17
+ # This will wipe out the existing files in the deploy
18
+ # folder before copying/rendering files back again. This allows you to
19
+ # run "svn status" to check to see if files were removed.
20
+ # - Committing the deploy folder lets you see how the stable, deploy-
21
+ # ready project changes over time, making changelogs easier to write
22
+ # - The task will also output/update NaturalDocs-compatible JavaScript documentation
23
+ # The documentation can be found in documentation/js
24
+ #
25
+ ###############################################################################
@@ -0,0 +1,297 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+ require "highline/import"
6
+
7
+ # YAML Files
8
+ @config = YAML.load_file(File.join("src", "yaml", "config.yml"))
9
+ @deploy = YAML.load_file(File.join("src", "yaml", "deploy.yml"))
10
+
11
+ @dirs = @config["directories"]
12
+ @project = File.expand_path(File.dirname(__FILE__)).split(@dirs["assets"]["root"][0])[0]
13
+
14
+ # Globals
15
+ @globs = {
16
+ :project => @project,
17
+ :utilities => @dirs["assets"]["utilities"][0],
18
+ :deploy => @dirs["deploy"]["public_html"]["root"][0],
19
+ :source => @dirs["src"][0],
20
+ :html => @dirs["src"]["html"][0],
21
+ :yaml => @dirs["src"]["yaml"][0],
22
+ :template_path => @dirs["src"]["templates"][0],
23
+ :name => @config["name"][0],
24
+ :namespace => @config["namespace"][0],
25
+ :natdocs => @dirs["assets"]["natural-docs"][0],
26
+ :jsdocs => @dirs["documentation"]["js-docs"][0]
27
+ }
28
+
29
+ @globs[:files] = Dir[File.join(@globs[:project], @globs[:template_path], "**/*.*")]
30
+
31
+ desc "Prep deploy files"
32
+ task :prep => ["files:generate", "documentation:generate", "svn:prep"] do
33
+ puts "Ready for commit!"
34
+ end
35
+
36
+ namespace :bixbite do
37
+
38
+ desc "Generates a new HTML page and its associated CSS/JS files"
39
+ task :page do
40
+
41
+ def make_new_files
42
+ name = @globs[:page_name]
43
+ fname = @globs[:page_filename]
44
+
45
+ @globs[:files].each do |file|
46
+ new_file = File.join(@globs[:html], file.split(@globs[:template_path])[1].gsub(/template/, fname))
47
+ dest = File.dirname(new_file)
48
+
49
+ puts "Creating #{new_file}"
50
+
51
+ FileUtils.mkpath(dest)
52
+ FileUtils.cp(file, new_file) unless File.directory?(file)
53
+
54
+ caps = name.split(" ").each{|word| word.capitalize!}.join(" ")
55
+ File.open(new_file, "r+") do |f|
56
+ lines = f.readlines
57
+ lines.each do |line|
58
+ line.gsub!(/__PAGE_TEMPLATE_UPPERCASE__/, fname.upcase);
59
+ line.gsub!(/__PAGE_TEMPLATE_LOWERCASE__/, fname.downcase);
60
+ line.gsub!(/__PAGE_TEMPLATE_CAPITALIZE__/, fname.capitalize);
61
+ line.gsub!(/__PAGE_NAME_CAPITALIZE__/, caps);
62
+ line.gsub!(/__PROJECT_NAME__/, @globs[:name]);
63
+ line.gsub!(/__PROJECT_NAMESPACE__/, @globs[:namespace]);
64
+ end
65
+ f.pos = 0
66
+ f.print lines
67
+ f.truncate(f.pos)
68
+ end
69
+ end
70
+
71
+ puts "Done!"
72
+ end
73
+
74
+ @globs[:page_name] = ask('Name of page? (i.e. "Foo Page") ')
75
+ @globs[:page_filename] = ask('Page file name? (i.e. foo-page) ')
76
+
77
+ make_new_files
78
+ end
79
+ end
80
+
81
+ namespace :svn do
82
+
83
+ desc "Prepares directory for svn commit"
84
+ task :prep => [:add, :remove, :diff]
85
+
86
+ desc "Adds files with an svn status flag of '?'"
87
+ task :add do
88
+ puts "Adding new files to version control..."
89
+ system %(svn status | awk '/\\?/ {print $2}' | xargs svn add)
90
+ end
91
+
92
+ desc "Removes files with an svn status flag of '!'"
93
+ task :remove do
94
+ puts "Removing missing files from version control..."
95
+ system %(svn status | awk '/\\!/ {print $2}' | xargs svn remove)
96
+ end
97
+
98
+ desc "Generates diff file with current committed revision"
99
+ task :diff do
100
+ puts "Generating diff..."
101
+ diff = File.join(@globs[:deploy], @globs[:name] + ".diff")
102
+ system %(svn diff -r COMMITTED #{@globs[:deploy]} > '#{diff}')
103
+ end
104
+ end
105
+
106
+ namespace :documentation do
107
+ desc "Render NaturalDocs documentation"
108
+ task :generate do
109
+ def render_documentation(executable, input, output, project_path)
110
+ system %(#{executable} -i #{input} -o HTML #{output} -p #{project_path})
111
+ end
112
+
113
+ puts "Parsing JavaScript documentation..."
114
+ render_documentation File.join(@globs[:natdocs], "NaturalDocs", "NaturalDocs"), File.join(@globs[:deploy], "js"), @globs[:jsdocs], @globs[:natdocs]
115
+ end
116
+ end
117
+
118
+ namespace :png do
119
+ desc "Compresses PNGs with pngout"
120
+ task :compress do
121
+ pngs = Dir[File.join(@globs[:html], "**/*.png")]
122
+ original_total = new_total = 0
123
+ pngs.each do |png|
124
+ original = File.size(png)
125
+ original_total += original
126
+ system %(#{File.join(@globs[:utilities], "pngout")} #{png} -kbKGD -y)
127
+ new_size = File.size(png)
128
+ new_total += new_size
129
+ puts "\n"
130
+ end
131
+ puts %(Original Size: #{original_total})
132
+ puts %(New Size: #{new_total})
133
+ puts %(Change: #{original_total - new_total})
134
+ end
135
+
136
+ desc "Adds a white background fallback for < IE 6 support. Files render with full transparency in all other browsers."
137
+ task :ie6 do
138
+ error = "This task requires ImageMagick. Download at http://www.imagemagick.org/"
139
+ pngs = Dir[File.join(@globs[:html], "**/*.png")]
140
+ pngs.each do |png|
141
+ result = system "convert #{png} -background 'rgb(255,255,255)' #{png}"
142
+ if result
143
+ puts "Converted #{png}"
144
+ else
145
+ raise Exception.new(error)
146
+ end
147
+ end
148
+
149
+ puts "All PNGs converted."
150
+ end
151
+ end
152
+
153
+ namespace :files do
154
+
155
+ desc "Generate files for delivery"
156
+ task :generate => [:empty, :copy, :render] do
157
+ puts "All files generated!"
158
+ end
159
+
160
+ desc "Copy files"
161
+ task :copy do
162
+ puts "Copying static files..."
163
+
164
+ def copy_files list, parent, from, to
165
+ list.each do |glob|
166
+ filelist = Dir[File.join(parent, from, glob)]
167
+
168
+ filelist.each do |file|
169
+ new_file = parent + to + file.split(from)[1];
170
+ dest = File.dirname(new_file)
171
+ FileUtils.mkpath(dest)
172
+ FileUtils.cp file, new_file unless File.directory?(file)
173
+ end
174
+ end unless !list
175
+ end
176
+
177
+ copy_files @deploy["files"], @globs[:project], @globs[:html], @globs[:deploy]
178
+
179
+ end
180
+
181
+ desc "Render files"
182
+ task :render do
183
+ puts "Rendering dynamic files..."
184
+
185
+ def render_php_file file, output
186
+ system %(php -f #{file} true > #{output})
187
+ end
188
+
189
+ def render_files list, from, to
190
+ list.each do |glob|
191
+ filelist = Dir[File.join(from, glob)]
192
+
193
+ filelist.each do |file|
194
+ new_file = to + file.gsub(from, "");
195
+ dest = File.dirname(new_file)
196
+
197
+ FileUtils.mkpath(dest)
198
+ render_php_file file, new_file unless File.directory?(file)
199
+ end
200
+ end unless !list
201
+ end
202
+
203
+ render_files @deploy["render"], @globs[:html], @globs[:deploy]
204
+
205
+ end
206
+
207
+ desc "Empty folders"
208
+ task :empty do
209
+ puts "Emptying delivery folder..."
210
+
211
+ def remove_files directory
212
+ all = Dir[File.join(directory, "**/**")]
213
+ all.each do |entry|
214
+ unless File.directory?(entry)
215
+ FileUtils.rm entry
216
+ end
217
+ end
218
+
219
+ end
220
+
221
+ remove_files @globs[:deploy]
222
+ end
223
+
224
+ desc "Compress files"
225
+ task :compress do
226
+ require "closure-compiler"
227
+ require "yui/compressor"
228
+
229
+ JS_FILES = @deploy["compress"]["js"]
230
+ CSS_FILES = @deploy["compress"]["css"]
231
+
232
+ PUB = @dirs["deploy"]["public_html"]
233
+
234
+ JS_DIR = File.join(@globs[:deploy], JS_FILES["min-dir"][0]).sub(PUB["js"][0], "")
235
+ CSS_DIR = File.join(@globs[:deploy], CSS_FILES["min-dir"][0]).sub(PUB["css"][0], "")
236
+
237
+ JS_FILES.delete("min-dir")
238
+ CSS_FILES.delete("min-dir")
239
+
240
+ def minify parse
241
+ code = String.new
242
+ files = Dir[File.join(@globs[:deploy], parse)]
243
+ files.each do |file|
244
+ if file.include?(".js")
245
+ code << Closure::Compiler.new.compile(File.open(file, "r"))
246
+ else
247
+ code << YUI::CssCompressor.new.compress(File.open(file, "r"))
248
+ end
249
+ end
250
+ code
251
+ end
252
+
253
+ def combine files, destination
254
+ code = String.new
255
+ files.each do |file|
256
+ code << minify(file)
257
+ end
258
+ write code, destination
259
+ end
260
+
261
+ def write code, destination
262
+ FileUtils.mkpath(File.dirname(destination))
263
+ new_file = File.new(destination, "w")
264
+ new_file.puts(code)
265
+ puts "Compressed #{destination}"
266
+ end
267
+
268
+ def compress type, array, dir
269
+ array.each_pair do |key, value|
270
+ case key
271
+ when "standalone"
272
+ value.each do |parse|
273
+ files = Dir[File.join(@globs[:deploy], parse)]
274
+ files.each do |file|
275
+ if type.include?("js")
276
+ code = Closure::Compiler.new.compile(File.open(file, "r"))
277
+ else
278
+ code = YUI::CssCompressor.new.compress(File.open(file, "r"))
279
+ end
280
+
281
+ dest = File.join(PUB[type][0], dir, file.split(PUB[type][0])[1])
282
+ write code, dest
283
+ end
284
+ end
285
+ else combine value, File.join(PUB[type][0], dir, key)
286
+ end
287
+ end
288
+ end
289
+
290
+ puts "Compressing JavaScript files (might take a bit)"
291
+ compress "js", JS_FILES, JS_DIR
292
+
293
+ puts "Compressing CSS files"
294
+ compress "css", CSS_FILES, CSS_DIR
295
+
296
+ end
297
+ end