function build($argv) { $input = new lmbCliInput(); $input->setMinimumArguments(2); $input->read($argv, false); $arguments = $input->getArguments(); if (!($dest_file = array_pop($arguments))) { echo "Error: You must specify output file.\n"; return 1; } $src_files = array(); foreach ($arguments as $src_file) { $src_files[] = realpath($src_file); } if (empty($src_files)) { echo "Error: You must specify at least one input file.\n"; return 1; } $builder = new lmbJsPreprocessor(); try { $contents = $builder->processFiles($src_files); } catch (lmbException $e) { echo 'Build error: ' . $e->getMessage(); return 1; } lmbFs::safeWrite($dest_file, $contents); return 0; }
protected function _generateContent($code) { $url = $this->getVersionUrl(); $type = $this->has('type') ? $this->get('type') : 'echo'; if ($this->has('gzip_static_dir')) { $zlevel = $this->has('gzip_level') ? $this->get('gzip_level') : 3; $file_source = lmbFs::normalizePath($this->get('gzip_static_dir'), lmbFs::UNIX) . '/' . str_replace('/', '-', lmbFs::normalizePath($this->getFileUrl(), lmbFs::UNIX)); lmbFs::cp($this->getFilePath(), $this->getRootDir() . '/' . $file_source); $file_gz = $file_source . '.gz'; lmbFs::safeWrite($this->getRootDir() . '/' . $file_gz, gzencode(file_get_contents($this->getFilePath()), $zlevel, FORCE_DEFLATE)); $url = $this->addVersion($file_source); } switch ($type) { case 'echo': if ($this->has('to_var')) { $code->writePhp($this->get('to_var') . ' = \'' . addslashes($url) . '\';'); } else { $code->writeHTML(htmlspecialchars($url, 3)); } break; case 'js': $code->writeHTML('<script type="text/javascript" src="' . htmlspecialchars($url, 3) . '" ></script>'); break; case 'css': $code->writeHTML('<link rel="stylesheet" type="text/css" href="' . htmlspecialchars($url, 3) . '" />'); break; default: throw new lmbMacroException('Unknown type ' . $type); } }
protected function _writeFile() { if ($this->_file_writed) { return; } $this->_file_writed = true; $file = lmbFs::normalizePath($this->get('src'), lmbFs::UNIX); $abs_file = $this->getRootDir() . '/' . $file; if (!file_exists($abs_file)) { if ($this->getBool('safe', false)) { $this->_file_path = $abs_file; $this->_file_url = $this->get('src'); return; } else { throw new lmbMacroException('File ' . $abs_file . ' not found!'); } } $contents = file_get_contents($abs_file); $css_dir = dirname($file); if (preg_match_all('~url\\(([^\\)]+)\\)~', $contents, $matches)) { $replaces = array(); foreach ($matches[1] as $key => $match) { $match = trim($match, '\'" '); $replaces[$matches[0][$key]] = 'url(' . $this->addVersion(lmbFs::normalizePath($css_dir . '/' . $match, lmbFs::UNIX)) . ')'; } $contents = str_replace(array_keys($replaces), array_values($replaces), $contents); } $url = lmbFs::normalizePath(ltrim($this->get('dir') . '/' . str_replace('/', '-', $file), '/')); $path = $this->getRootDir() . '/' . $url; lmbFs::safeWrite($path, trim($contents)); $this->_file_path = $path; $this->_file_url = $url; }
protected function _writeFile() { if ($this->_file_writed) { return; } $files = array(); $join_contents = ''; foreach ($this->children as $child) { if ($child instanceof lmbJsRequireOnceMacroTag) { $file = $child->getFilePath(); if (!is_file($file) || !realpath($file) || null === ($content = file_get_contents($file))) { if ($child->getBool('safe')) { $join_contents .= "\n/* include " . basename($file) . " - NOT FOUND */\n"; continue; } else { throw new lmbMacroException('File "' . $file . '" not found in ' . $this->getRootDir() . ', src: "' . $child->get('src') . '"'); } } $file = lmbFs::normalizePath(realpath($file)); if (!in_array($file, $files)) { $files[] = $file; $join_contents .= "\n/* include " . basename($file) . " */\n" . $content; } } } sort($files, SORT_STRING); $url = lmbFs::normalizePath(ltrim($this->get('dir') . '/' . md5(implode("\n", $files)) . '.js', '/')); $path = $this->getRootDir() . '/' . $url; lmbFs::safeWrite($path, trim($join_contents)); $this->_file_path = $path; $this->_file_url = $url; $this->_file_writed = true; }
protected function _saveCache() { if (!$this->isCacheEnabled()) { return; } lmbFs::safeWrite($this->getCacheFile(), serialize($this->export())); }
function saveCache() { if (!$this->_changed) { return; } $content = serialize($this->_cached_paths); lmbFs::safeWrite($this->getCacheFile(), $content); }
function testOnceRender() { lmb_env_set('LIMB_DOCUMENT_ROOT', lmb_env_get('LIMB_VAR_DIR') . '/www'); lmbFs::safeWrite(lmb_env_get('LIMB_VAR_DIR') . '/www/js/main.js', 'function() { alert(1); }'); $template = '{{js:require_once src="js/main.js" }}{{js_once src="js/main.js" }}'; $page = $this->_createMacroTemplate($template, 'tpl.html'); $content = '<script type="text/javascript" src="' . $this->toolkit->addVersionToUrl('js/main.js') . '" ></script>'; $this->assertEqual($content, $page->render()); }
protected function _addFile($dir, $name, $content, $always_override = false) { $file = $dir . '/' . $name; if (!$always_override && !$this->_override_files && file_exists($file)) { if (!lmb_cli_ask_for_accept("Overwrite '{$file}'")) { return false; } } return lmbFs::safeWrite($file, $content); }
function save($cache, $contents) { $file = $this->_getFilePath($cache); $dir = dirname($file); //cache conflict if (basename($dir) == $this->cache_file) { return false; } lmbFs::mkdir($dir); lmbFs::safeWrite($file, $contents); }
function _createConfig($name = 'conf.php', $content = false) { if (!$content) { $content = <<<EOD <?php \$conf = array('foo' => 1, 'bar' => 2); EOD; } lmbFs::safeWrite($this->_getConfigPath($name), $content); return new lmbConf($this->_getConfigPath($name)); }
function set($key, $value, $ttl = false) { $key = $this->_resolveKey($key); $this->delete($key); if ($ttl) { $ttl_file = $this->_getCacheTtlFileName($key); lmbFs::safeWrite($ttl_file, (string) ($ttl + time())); } $file = $this->_getCacheFileName($key); lmbFs::safeWrite($file, $this->_createContainer($value)); return true; }
function testOnceRender() { $root = lmb_env_get('LIMB_VAR_DIR') . '/www/'; lmb_env_set('LIMB_DOCUMENT_ROOT', $root); lmbFs::safeWrite($root . 'style/main.css', 'body {background-url: url("../images/one.jpg");}'); lmbFs::safeWrite($root . 'images/one.jpg', 'simple content'); $template = '{{css_compiled src="style/main.css" dir="media/css" /}}'; $page = $this->_createMacroTemplate($template, 'tpl.html'); $content = $page->render(); $src = $this->toolkit->addVersionToUrl('media/css/style-main.css'); $this->assertEqual('<link rel="stylesheet" type="text/css" href="' . $src . '" />', $content); $compiled_file = $root . 'media/css/style-main.css'; $src = $this->toolkit->addVersionToUrl('images/one.jpg'); $this->assertEqual('body {background-url: url(' . $src . ');}', file_get_contents($compiled_file)); }
function testGzipStatic() { if (!function_exists('gzencode')) { return print "Skip: function gzencode not exists.\n"; } lmb_env_set('LIMB_DOCUMENT_ROOT', lmb_env_get('LIMB_VAR_DIR') . '/www/'); lmbFs::safeWrite(lmb_env_get('LIMB_VAR_DIR') . '/www/one.js', 'var window = {};'); $doc_root = lmb_env_get('LIMB_DOCUMENT_ROOT'); $template = '{{file:version src="one.js" gzip_static_dir="media/var/gz" gzip_level="9" }}'; $page = $this->_createMacroTemplate($template, 'tpl.html'); $content = $page->render(); $file = 'media/var/gz/one.js'; $this->assertEqual($content, $this->toolkit->addVersionToUrl($file, false)); $this->assertEqual('var window = {};', file_get_contents($doc_root . $file)); $gz_file = $doc_root . $file . '.gz'; $this->assertTrue(file_exists($gz_file)); $this->assertEqual(gzencode('var window = {};', 9, FORCE_DEFLATE), file_get_contents($gz_file)); }
function testNotFoundFile() { $root = lmb_env_get('LIMB_VAR_DIR') . '/www'; lmb_env_set('LIMB_DOCUMENT_ROOT', $root); lmbFs::rm($root); $template = '{{js_combined dir="media/"}}{{js_once src="js/main.js" }}{{/js_combined}}'; $page = $this->_createMacroTemplate($template, 'tpl.html'); try { $page->render(); $this->assertTrue(false); } catch (lmbException $e) { $this->assertTrue(true); } lmbFs::safeWrite($root . '/js/blog.js', 'function blog() {};'); $template = '{{js_combined dir="media"}}{{js_once src="js/main.js" safe="true" }}{{js_once src="js/blog.js" }}{{/js_combined}}'; $page = $this->_createMacroTemplate($template, 'tpl.html'); $page->render(); $file = array_shift(lmbFs::ls($root . '/media/')); $js_content = "/* include main.js - NOT FOUND */\n\n/* include blog.js */\nfunction blog() {};"; $this->assertEqual(file_get_contents($root . '/media/' . $file), $js_content); }
function testAddVersionToUrl() { $toolkit = lmbToolkit::merge(new lmbWebAppTools()); lmb_env_set('LIMB_DOCUMENT_ROOT', null); try { $toolkit->addVersionToUrl('js/main.js'); $this->assertTrue(false); } catch (lmbException $e) { $this->assertTrue(true); } lmb_env_set('LIMB_DOCUMENT_ROOT', lmb_env_get('LIMB_VAR_DIR') . '/www'); lmbFs::rm(lmb_env_get('LIMB_DOCUMENT_ROOT') . '/js/main.js'); try { $toolkit->addVersionToUrl('js/main.js'); $this->assertTrue(false); } catch (lmbException $e) { $this->assertTrue(true); } lmbFs::safeWrite(lmb_env_get('LIMB_DOCUMENT_ROOT') . '/js/main.js', '(function() {})()'); $url = $toolkit->addVersionToUrl('js/main.js'); $url_abs = $toolkit->addVersionToUrl(lmb_env_get('LIMB_HTTP_BASE_PATH') . 'js/main.js'); $this->assertEqual($url, $url_abs); }
protected function _writeToFileCache($db_info) { lmbFs::safeWrite($this->cache_file, serialize(new lmbSerializable($db_info))); }
protected function _saveCache() { lmbFs::safeWrite($this->getCacheFile(), serialize($this->export())); }
protected function _send($recipients, $content) { lmbFs::safeWrite(lmb_env_get('LIMB_VAR_DIR') . '/mail/' . (pow(2, 31) - time()) . '_' . $recipients . '_' . microtime(true) . '.txt', $content); }
protected function _saveCache() { $cache_file = $this->cache_dir . '/filters.cache'; lmbFs::safeWrite($cache_file, serialize($this->info)); }
function _saveCache() { if ($this->map_changed && $this->isCacheEnabled()) { lmbFs::safeWrite(lmb_env_get('LIMB_VAR_DIR') . '/locators/controller_action2tpl.cache', serialize($this->action_template_map)); } }
protected function _saveCache() { lmb_require('limb/fs/src/lmbFs.class.php'); $cache_file = $this->cache_dir . '/tags.cache'; lmbFs::safeWrite($cache_file, serialize($this->info)); }
function testGetYamlConf_WithPhpCodeInside() { $content = <<<YAML test: <?php for(\$i=1; \$i<4; \$i++){ ?> bar<?php echo \$i; ?>: <?php echo \$i*2; ?> #enshure that spase exists after closed php tag <?php } ?> YAML; lmbFs::safeWrite($this->package_configs_dir . '/php.yml', $content); $conf = $this->toolkit->getConf('php.yml'); if ($this->assertTrue($conf->has('test'))) { $test = $conf->get('test'); $this->assertEqual(count($test), 3); $this->assertEqual($test['bar1'], 2); $this->assertEqual($test['bar2'], 4); $this->assertEqual($test['bar3'], 6); $this->assertFalse(isset($test['bar4'])); } }
function testRemoveFile() { lmbFs::safeWrite($file = LIMB_VAR_DIR . '/test', 'test'); $this->assertTrue(lmbFs::rm($file)); $this->assertFalse(file_exists($file)); }