| @@ -3,8 +3,7 @@ Version 0.8.4c16 | |||||
| Thanks to @nud | Thanks to @nud | ||||
| * Bug Fix: Fix class name of `test_stylus` (Issue #97) | |||||
| * Bug Fix: Fix class name of `test_stylus` (Issue #97) | |||||
| Version 0.8.4c15 | Version 0.8.4c15 | ||||
| ============================================================ | ============================================================ | ||||
| @@ -15,11 +15,13 @@ class LessCSSPlugin(CLTransformer): | |||||
| The plugin class for less css | The plugin class for less css | ||||
| """ | """ | ||||
| default_app_path = "lessc" | |||||
| def __init__(self, site): | def __init__(self, site): | ||||
| super(LessCSSPlugin, self).__init__(site) | super(LessCSSPlugin, self).__init__(site) | ||||
| @property | |||||
| def executable_name(self): | |||||
| return "lessc" | |||||
| def begin_site(self): | def begin_site(self): | ||||
| """ | """ | ||||
| Find all the less css files and set their relative deploy path. | Find all the less css files and set their relative deploy path. | ||||
| @@ -11,11 +11,13 @@ class UglifyPlugin(CLTransformer): | |||||
| The plugin class for Uglify JS | The plugin class for Uglify JS | ||||
| """ | """ | ||||
| default_app_path = "uglifyjs" | |||||
| def __init__(self, site): | def __init__(self, site): | ||||
| super(UglifyPlugin, self).__init__(site) | super(UglifyPlugin, self).__init__(site) | ||||
| @property | |||||
| def executable_name(self): | |||||
| return "uglifyjs" | |||||
| @property | @property | ||||
| def plugin_name(self): | def plugin_name(self): | ||||
| """ | """ | ||||
| @@ -18,7 +18,6 @@ import re | |||||
| import subprocess | import subprocess | ||||
| import traceback | import traceback | ||||
| logger = getLoggerWithNullHandler('hyde.engine') | logger = getLoggerWithNullHandler('hyde.engine') | ||||
| class PluginProxy(object): | class PluginProxy(object): | ||||
| @@ -207,6 +206,8 @@ class CLTransformer(Plugin): | |||||
| def plugin_name(self): | def plugin_name(self): | ||||
| """ | """ | ||||
| The name of the plugin. Makes an intelligent guess. | The name of the plugin. Makes an intelligent guess. | ||||
| This is used to lookup the settings for the plugin. | |||||
| """ | """ | ||||
| return self.__class__.__name__.replace('Plugin', '').lower() | return self.__class__.__name__.replace('Plugin', '').lower() | ||||
| @@ -221,10 +222,11 @@ class CLTransformer(Plugin): | |||||
| return {} | return {} | ||||
| @property | @property | ||||
| def default_app_path(self): | |||||
| def executable_name(self): | |||||
| """ | """ | ||||
| Default command line application path. Can be overridden | |||||
| by specifying it in config. | |||||
| The executable name for the plugin. This can be overridden in the | |||||
| config. If a configuration option is not provided, this is used | |||||
| to guess the complete path of the executable. | |||||
| """ | """ | ||||
| return self.plugin_name | return self.plugin_name | ||||
| @@ -237,7 +239,10 @@ class CLTransformer(Plugin): | |||||
| return ("%(name)s executable path not configured properly. " | return ("%(name)s executable path not configured properly. " | ||||
| "This plugin expects `%(name)s.app` to point " | "This plugin expects `%(name)s.app` to point " | ||||
| "to the `%(name)s` executable." % {"name": self.plugin_name}) | |||||
| "to the full path of the `%(exec)s` executable." % | |||||
| { | |||||
| "name":self.plugin_name, "exec": self.executable_name | |||||
| }) | |||||
| @property | @property | ||||
| def settings(self): | def settings(self): | ||||
| @@ -256,12 +261,15 @@ class CLTransformer(Plugin): | |||||
| def app(self): | def app(self): | ||||
| """ | """ | ||||
| Gets the application path from the site configuration. | Gets the application path from the site configuration. | ||||
| If the path is not configured, attempts to guess the path | |||||
| from the sytem path environment variable. | |||||
| """ | """ | ||||
| try: | try: | ||||
| app_path = getattr(self.settings, 'app') | app_path = getattr(self.settings, 'app') | ||||
| except AttributeError: | except AttributeError: | ||||
| app_path = self.default_app_path | |||||
| app_path = self.executable_name | |||||
| # Honour the PATH environment variable. | # Honour the PATH environment variable. | ||||
| if app_path is not None and not os.path.isabs(app_path): | if app_path is not None and not os.path.isabs(app_path): | ||||
| @@ -29,10 +29,6 @@ class TestLess(object): | |||||
| def test_can_execute_less(self): | def test_can_execute_less(self): | ||||
| s = Site(TEST_SITE) | s = Site(TEST_SITE) | ||||
| s.config.plugins = ['hyde.ext.plugins.less.LessCSSPlugin'] | s.config.plugins = ['hyde.ext.plugins.less.LessCSSPlugin'] | ||||
| paths = ['/usr/local/share/npm/bin/lessc'] | |||||
| for path in paths: | |||||
| if File(path).exists: | |||||
| s.config.less = Expando(dict(app=path)) | |||||
| source = TEST_SITE.child('content/media/css/site.less') | source = TEST_SITE.child('content/media/css/site.less') | ||||
| target = File(Folder(s.config.deploy_root_path).child('media/css/site.css')) | target = File(Folder(s.config.deploy_root_path).child('media/css/site.css')) | ||||
| gen = Generator(s) | gen = Generator(s) | ||||
| @@ -22,7 +22,7 @@ class TestUglify(object): | |||||
| JS = TEST_SITE.child_folder('content/media/js') | JS = TEST_SITE.child_folder('content/media/js') | ||||
| JS.make() | JS.make() | ||||
| UGLIFY_SOURCE.copy_contents_to(JS) | UGLIFY_SOURCE.copy_contents_to(JS) | ||||
| def tearDown(self): | def tearDown(self): | ||||
| TEST_SITE.delete() | TEST_SITE.delete() | ||||
| @@ -31,10 +31,6 @@ class TestUglify(object): | |||||
| s = Site(TEST_SITE) | s = Site(TEST_SITE) | ||||
| s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | ||||
| s.config.mode = "production" | s.config.mode = "production" | ||||
| paths = ['/usr/local/share/npm/bin/uglifyjs'] | |||||
| for path in paths: | |||||
| if File(path).exists: | |||||
| s.config.uglify = Expando(dict(app=path)) | |||||
| source = TEST_SITE.child('content/media/js/jquery.js') | source = TEST_SITE.child('content/media/js/jquery.js') | ||||
| target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | ||||
| gen = Generator(s) | gen = Generator(s) | ||||
| @@ -49,14 +45,7 @@ class TestUglify(object): | |||||
| s = Site(TEST_SITE) | s = Site(TEST_SITE) | ||||
| s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | ||||
| s.config.mode = "production" | s.config.mode = "production" | ||||
| paths = ['/usr/local/share/npm/bin/uglifyjs', '~/local/bin/uglifyjs', | |||||
| '/usr/bin/uglifyjs', '~/bin/uglifyjs'] | |||||
| uglify = [path for path in paths if File(path).exists] | |||||
| if not uglify: | |||||
| assert False, "Cannot find the uglify executable" | |||||
| uglify = uglify[0] | |||||
| s.config.uglify = Expando(dict(app=uglify, args={"nc":""})) | |||||
| s.config.uglify = Expando(dict(args={"nc":""})) | |||||
| source = TEST_SITE.child('content/media/js/jquery.js') | source = TEST_SITE.child('content/media/js/jquery.js') | ||||
| target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | ||||
| gen = Generator(s) | gen = Generator(s) | ||||
| @@ -72,14 +61,6 @@ class TestUglify(object): | |||||
| s = Site(TEST_SITE) | s = Site(TEST_SITE) | ||||
| s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | s.config.plugins = ['hyde.ext.plugins.uglify.UglifyPlugin'] | ||||
| s.config.mode = "dev" | s.config.mode = "dev" | ||||
| paths = ['/usr/local/share/npm/bin/uglifyjs', '~/local/bin/uglifyjs', | |||||
| '/usr/bin/uglifyjs', '~/bin/uglifyjs'] | |||||
| uglify = [path for path in paths if File(path).exists] | |||||
| if not uglify: | |||||
| assert False, "Cannot find the uglify executable" | |||||
| uglify = uglify[0] | |||||
| s.config.uglify = Expando(dict(app=path)) | |||||
| source = TEST_SITE.child('content/media/js/jquery.js') | source = TEST_SITE.child('content/media/js/jquery.js') | ||||
| target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | target = File(Folder(s.config.deploy_root_path).child('media/js/jquery.js')) | ||||
| gen = Generator(s) | gen = Generator(s) | ||||
| @@ -133,4 +133,4 @@ def discover_executable(name): | |||||
| full_name = os.path.join(path, name) | full_name = os.path.join(path, name) | ||||
| if os.path.exists(full_name): | if os.path.exists(full_name): | ||||
| return full_name | return full_name | ||||
| return None | |||||
| return None | |||||