bixbite 0.1.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 (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