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
@@ -0,0 +1,130 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_APC
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * APC-based cache class for Minify
9
+ *
10
+ * <code>
11
+ * Minify::setCache(new Minify_Cache_APC());
12
+ * </code>
13
+ *
14
+ * @package Minify
15
+ * @author Chris Edwards
16
+ **/
17
+ class Minify_Cache_APC {
18
+
19
+ /**
20
+ * Create a Minify_Cache_APC object, to be passed to
21
+ * Minify::setCache().
22
+ *
23
+ *
24
+ * @param int $expire seconds until expiration (default = 0
25
+ * meaning the item will not get an expiration date)
26
+ *
27
+ * @return null
28
+ */
29
+ public function __construct($expire = 0)
30
+ {
31
+ $this->_exp = $expire;
32
+ }
33
+
34
+ /**
35
+ * Write data to cache.
36
+ *
37
+ * @param string $id cache id
38
+ *
39
+ * @param string $data
40
+ *
41
+ * @return bool success
42
+ */
43
+ public function store($id, $data)
44
+ {
45
+ return apc_store($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp);
46
+ }
47
+
48
+ /**
49
+ * Get the size of a cache entry
50
+ *
51
+ * @param string $id cache id
52
+ *
53
+ * @return int size in bytes
54
+ */
55
+ public function getSize($id)
56
+ {
57
+ return $this->_fetch($id)
58
+ ? strlen($this->_data)
59
+ : false;
60
+ }
61
+
62
+ /**
63
+ * Does a valid cache entry exist?
64
+ *
65
+ * @param string $id cache id
66
+ *
67
+ * @param int $srcMtime mtime of the original source file(s)
68
+ *
69
+ * @return bool exists
70
+ */
71
+ public function isValid($id, $srcMtime)
72
+ {
73
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
74
+ }
75
+
76
+ /**
77
+ * Send the cached content to output
78
+ *
79
+ * @param string $id cache id
80
+ */
81
+ public function display($id)
82
+ {
83
+ echo $this->_fetch($id)
84
+ ? $this->_data
85
+ : '';
86
+ }
87
+
88
+ /**
89
+ * Fetch the cached content
90
+ *
91
+ * @param string $id cache id
92
+ *
93
+ * @return string
94
+ */
95
+ public function fetch($id)
96
+ {
97
+ return $this->_fetch($id)
98
+ ? $this->_data
99
+ : '';
100
+ }
101
+
102
+ private $_exp = null;
103
+
104
+ // cache of most recently fetched id
105
+ private $_lm = null;
106
+ private $_data = null;
107
+ private $_id = null;
108
+
109
+ /**
110
+ * Fetch data and timestamp from apc, store in instance
111
+ *
112
+ * @param string $id
113
+ *
114
+ * @return bool success
115
+ */
116
+ private function _fetch($id)
117
+ {
118
+ if ($this->_id === $id) {
119
+ return true;
120
+ }
121
+ $ret = apc_fetch($id);
122
+ if (false === $ret) {
123
+ $this->_id = null;
124
+ return false;
125
+ }
126
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
127
+ $this->_id = $id;
128
+ return true;
129
+ }
130
+ }
@@ -0,0 +1,125 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_File
4
+ * @package Minify
5
+ */
6
+
7
+ class Minify_Cache_File {
8
+
9
+ public function __construct($path = '', $fileLocking = false)
10
+ {
11
+ if (! $path) {
12
+ require_once 'Solar/Dir.php';
13
+ $path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR);
14
+ }
15
+ $this->_locking = $fileLocking;
16
+ $this->_path = $path;
17
+ }
18
+
19
+ /**
20
+ * Write data to cache.
21
+ *
22
+ * @param string $id cache id (e.g. a filename)
23
+ *
24
+ * @param string $data
25
+ *
26
+ * @return bool success
27
+ */
28
+ public function store($id, $data)
29
+ {
30
+ $flag = $this->_locking
31
+ ? LOCK_EX
32
+ : null;
33
+ if (is_file($this->_path . '/' . $id)) {
34
+ @unlink($this->_path . '/' . $id);
35
+ }
36
+ if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
37
+ return false;
38
+ }
39
+ // write control
40
+ if ($data !== $this->fetch($id)) {
41
+ @unlink($file);
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+
47
+ /**
48
+ * Get the size of a cache entry
49
+ *
50
+ * @param string $id cache id (e.g. a filename)
51
+ *
52
+ * @return int size in bytes
53
+ */
54
+ public function getSize($id)
55
+ {
56
+ return filesize($this->_path . '/' . $id);
57
+ }
58
+
59
+ /**
60
+ * Does a valid cache entry exist?
61
+ *
62
+ * @param string $id cache id (e.g. a filename)
63
+ *
64
+ * @param int $srcMtime mtime of the original source file(s)
65
+ *
66
+ * @return bool exists
67
+ */
68
+ public function isValid($id, $srcMtime)
69
+ {
70
+ $file = $this->_path . '/' . $id;
71
+ return (is_file($file) && (filemtime($file) >= $srcMtime));
72
+ }
73
+
74
+ /**
75
+ * Send the cached content to output
76
+ *
77
+ * @param string $id cache id (e.g. a filename)
78
+ */
79
+ public function display($id)
80
+ {
81
+ if ($this->_locking) {
82
+ $fp = fopen($this->_path . '/' . $id, 'rb');
83
+ flock($fp, LOCK_SH);
84
+ fpassthru($fp);
85
+ flock($fp, LOCK_UN);
86
+ fclose($fp);
87
+ } else {
88
+ readfile($this->_path . '/' . $id);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Fetch the cached content
94
+ *
95
+ * @param string $id cache id (e.g. a filename)
96
+ *
97
+ * @return string
98
+ */
99
+ public function fetch($id)
100
+ {
101
+ if ($this->_locking) {
102
+ $fp = fopen($this->_path . '/' . $id, 'rb');
103
+ flock($fp, LOCK_SH);
104
+ $ret = stream_get_contents($fp);
105
+ flock($fp, LOCK_UN);
106
+ fclose($fp);
107
+ return $ret;
108
+ } else {
109
+ return file_get_contents($this->_path . '/' . $id);
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Fetch the cache path used
115
+ *
116
+ * @return string
117
+ */
118
+ public function getPath()
119
+ {
120
+ return $this->_path;
121
+ }
122
+
123
+ private $_path = null;
124
+ private $_locking = null;
125
+ }
@@ -0,0 +1,137 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_Memcache
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * Memcache-based cache class for Minify
9
+ *
10
+ * <code>
11
+ * // fall back to disk caching if memcache can't connect
12
+ * $memcache = new Memcache;
13
+ * if ($memcache->connect('localhost', 11211)) {
14
+ * Minify::setCache(new Minify_Cache_Memcache($memcache));
15
+ * } else {
16
+ * Minify::setCache();
17
+ * }
18
+ * </code>
19
+ **/
20
+ class Minify_Cache_Memcache {
21
+
22
+ /**
23
+ * Create a Minify_Cache_Memcache object, to be passed to
24
+ * Minify::setCache().
25
+ *
26
+ * @param Memcache $memcache already-connected instance
27
+ *
28
+ * @param int $expire seconds until expiration (default = 0
29
+ * meaning the item will not get an expiration date)
30
+ *
31
+ * @return null
32
+ */
33
+ public function __construct($memcache, $expire = 0)
34
+ {
35
+ $this->_mc = $memcache;
36
+ $this->_exp = $expire;
37
+ }
38
+
39
+ /**
40
+ * Write data to cache.
41
+ *
42
+ * @param string $id cache id
43
+ *
44
+ * @param string $data
45
+ *
46
+ * @return bool success
47
+ */
48
+ public function store($id, $data)
49
+ {
50
+ return $this->_mc->set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", 0, $this->_exp);
51
+ }
52
+
53
+
54
+ /**
55
+ * Get the size of a cache entry
56
+ *
57
+ * @param string $id cache id
58
+ *
59
+ * @return int size in bytes
60
+ */
61
+ public function getSize($id)
62
+ {
63
+ return $this->_fetch($id)
64
+ ? strlen($this->_data)
65
+ : false;
66
+ }
67
+
68
+ /**
69
+ * Does a valid cache entry exist?
70
+ *
71
+ * @param string $id cache id
72
+ *
73
+ * @param int $srcMtime mtime of the original source file(s)
74
+ *
75
+ * @return bool exists
76
+ */
77
+ public function isValid($id, $srcMtime)
78
+ {
79
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
80
+ }
81
+
82
+ /**
83
+ * Send the cached content to output
84
+ *
85
+ * @param string $id cache id
86
+ */
87
+ public function display($id)
88
+ {
89
+ echo $this->_fetch($id)
90
+ ? $this->_data
91
+ : '';
92
+ }
93
+
94
+ /**
95
+ * Fetch the cached content
96
+ *
97
+ * @param string $id cache id
98
+ *
99
+ * @return string
100
+ */
101
+ public function fetch($id)
102
+ {
103
+ return $this->_fetch($id)
104
+ ? $this->_data
105
+ : '';
106
+ }
107
+
108
+ private $_mc = null;
109
+ private $_exp = null;
110
+
111
+ // cache of most recently fetched id
112
+ private $_lm = null;
113
+ private $_data = null;
114
+ private $_id = null;
115
+
116
+ /**
117
+ * Fetch data and timestamp from memcache, store in instance
118
+ *
119
+ * @param string $id
120
+ *
121
+ * @return bool success
122
+ */
123
+ private function _fetch($id)
124
+ {
125
+ if ($this->_id === $id) {
126
+ return true;
127
+ }
128
+ $ret = $this->_mc->get($id);
129
+ if (false === $ret) {
130
+ $this->_id = null;
131
+ return false;
132
+ }
133
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
134
+ $this->_id = $id;
135
+ return true;
136
+ }
137
+ }
@@ -0,0 +1,85 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_ClosureCompiler
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * Compress Javascript using the Google Closure Compiler
9
+ *
10
+ * You must set $jarFile and $tempDir before calling the minify functions.
11
+ * Also, depending on your shell's environment, you may need to specify
12
+ * the full path to java in $javaExecutable or use putenv() to setup the
13
+ * Java environment.
14
+ *
15
+ * <code>
16
+ * Minify_ClosureCompiler::$jarFile = '/path/to/yuicompressor-2.3.5.jar';
17
+ * Minify_ClosureCompiler::$tempDir = '/tmp';
18
+ * $code = Minify_ClosureCompiler::minifyJs(
19
+ * $code
20
+ * ,array('nomunge' => true, 'line-break' => 1000)
21
+ * );
22
+ * </code>
23
+ *
24
+ * @package Minify
25
+ * @author Richard Herrera <rich@doctyper.com>
26
+ */
27
+ class Minify_ClosureCompiler {
28
+
29
+ /**
30
+ * Filepath of the Closure Compiler jar file. This must be set before
31
+ * calling minifyJs()
32
+ *
33
+ * @var string
34
+ */
35
+ public static $jarFile = null;
36
+
37
+ /**
38
+ * Writable temp directory. This must be set before calling minifyJs()
39
+ *
40
+ * @var string
41
+ */
42
+ public static $tempDir = null;
43
+
44
+ /**
45
+ * Filepath of "java" executable (may be needed if not in shell's PATH)
46
+ *
47
+ * @var string
48
+ */
49
+ public static $javaExecutable = 'java';
50
+
51
+ /**
52
+ * Minify a Javascript string
53
+ *
54
+ * @param string $content
55
+ *
56
+ * @param array $options (verbose is ignored)
57
+ *
58
+ * @return string
59
+ */
60
+ public static function minifyJs($content, $options = array())
61
+ {
62
+ self::_prepare();
63
+ if (!($tmpFile = tempnam(self::$tempDir, 'gc_'))) {
64
+ throw new Exception('Minify_ClosureCompiler : could not create temp file.');
65
+ }
66
+ file_put_contents($tmpFile, $content);
67
+ $output = exec(self::_getCmd($options, $tmpFile));
68
+ exec(self::_getCmd($options, $tmpFile), $output);
69
+ unlink($tmpFile);
70
+ return implode("", $output);
71
+ }
72
+
73
+ private static function _getCmd($userOptions, $tmpFile)
74
+ {
75
+ $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile);
76
+ return $cmd . ' --js ' . escapeshellarg($tmpFile);
77
+ }
78
+
79
+ private static function _prepare()
80
+ {
81
+ if (!is_file(self::$jarFile) || !is_dir(self::$tempDir) || !is_writable(self::$tempDir)) {
82
+ throw new Exception('Minify_ClosureCompiler : $jarFile and $tempDir must be set.');
83
+ }
84
+ }
85
+ }