cjohansen-juicer 0.2.0 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +17 -5
- data/Manifest.txt +33 -15
- data/Rakefile +22 -1
- data/Readme.rdoc +68 -32
- data/bin/juicer +1 -0
- data/lib/juicer.rb +26 -1
- data/lib/juicer/binary.rb +173 -0
- data/lib/juicer/cache_buster.rb +45 -0
- data/lib/juicer/chainable.rb +1 -0
- data/lib/juicer/cli.rb +13 -8
- data/lib/juicer/command/install.rb +59 -0
- data/lib/juicer/command/list.rb +50 -0
- data/lib/juicer/command/merge.rb +130 -31
- data/lib/juicer/command/util.rb +32 -0
- data/lib/juicer/command/verify.rb +60 -0
- data/lib/juicer/core.rb +61 -0
- data/lib/juicer/css_cache_buster.rb +106 -0
- data/lib/juicer/install/base.rb +186 -0
- data/lib/juicer/install/jslint_installer.rb +51 -0
- data/lib/juicer/install/rhino_installer.rb +52 -0
- data/lib/juicer/install/yui_compressor_installer.rb +66 -0
- data/lib/juicer/jslint.rb +90 -0
- data/lib/juicer/merger/base.rb +74 -72
- data/lib/juicer/merger/dependency_resolver.rb +34 -16
- data/lib/juicer/merger/stylesheet_merger.rb +71 -1
- data/lib/juicer/minifyer/yui_compressor.rb +20 -43
- data/tasks/test/setup.rake +35 -0
- data/test/juicer/command/test_install.rb +53 -0
- data/test/juicer/command/test_list.rb +69 -0
- data/test/juicer/command/test_merge.rb +160 -0
- data/test/juicer/command/test_util.rb +54 -0
- data/test/juicer/command/test_verify.rb +33 -0
- data/test/juicer/install/test_installer_base.rb +195 -0
- data/test/juicer/install/test_jslint_installer.rb +54 -0
- data/test/juicer/install/test_rhino_installer.rb +57 -0
- data/test/juicer/install/test_yui_compressor_installer.rb +56 -0
- data/test/juicer/merger/test_base.rb +2 -3
- data/test/juicer/merger/test_css_dependency_resolver.rb +8 -4
- data/test/juicer/merger/test_javascript_dependency_resolver.rb +6 -7
- data/test/juicer/merger/test_javascript_merger.rb +1 -2
- data/test/juicer/merger/test_stylesheet_merger.rb +118 -2
- data/test/juicer/minifyer/test_yui_compressor.rb +109 -29
- data/test/juicer/test_cache_buster.rb +58 -0
- data/test/juicer/test_chainable.rb +7 -0
- data/test/juicer/test_core.rb +47 -0
- data/test/juicer/test_css_cache_buster.rb +91 -0
- data/test/juicer/test_jslint.rb +33 -0
- data/test/test_helper.rb +65 -196
- metadata +77 -26
- data/.gitignore +0 -2
- data/juicer.gemspec +0 -38
- data/lib/juicer/minifyer/compressor.rb +0 -125
- data/test/juicer/minifyer/test_compressor.rb +0 -36
data/.gitignore
DELETED
data/juicer.gemspec
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = %q{juicer}
|
3
|
-
s.version = "0.2.0"
|
4
|
-
|
5
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
-
s.authors = ["Christian Johansen"]
|
7
|
-
s.date = %q{2009-01-04}
|
8
|
-
s.default_executable = %q{juicer}
|
9
|
-
s.description = %q{Juicer is a command line tool aimed at easing JavaScript and CSS development. Currently it only provides a wrapper to YUI Compressor along with a module that can dynamically link together files, but there are plans for more functionality.}
|
10
|
-
s.email = %q{christian@cjohansen.no}
|
11
|
-
s.executables = ["juicer"]
|
12
|
-
s.extra_rdoc_files = ["History.txt", "Readme.rdoc", "bin/juicer", "test/data/Changelog.txt", "test/data/version-test.txt", "test/data/version.txt", "test/data/version2.txt"]
|
13
|
-
s.files = [".gitignore", "History.txt", "Manifest.txt", "Rakefile", "Readme.rdoc", "bin/juicer", "juicer.gemspec", "lib/juicer.rb", "lib/juicer/chainable.rb", "lib/juicer/cli.rb", "lib/juicer/command/merge.rb", "lib/juicer/merger/base.rb", "lib/juicer/merger/css_dependency_resolver.rb", "lib/juicer/merger/dependency_resolver.rb", "lib/juicer/merger/javascript_dependency_resolver.rb", "lib/juicer/merger/javascript_merger.rb", "lib/juicer/merger/stylesheet_merger.rb", "lib/juicer/minifyer/compressor.rb", "lib/juicer/minifyer/yui_compressor.rb", "test/data/Changelog.txt", "test/data/a.css", "test/data/a.js", "test/data/b.css", "test/data/b.js", "test/data/mappe/a.css", "test/data/mappe/c.css", "test/data/mappe/enda_en_mappe/a.css", "test/data/version-test.txt", "test/data/version.txt", "test/data/version2.txt", "test/juicer/merger/test_base.rb", "test/juicer/merger/test_css_dependency_resolver.rb", "test/juicer/merger/test_javascript_dependency_resolver.rb", "test/juicer/merger/test_javascript_merger.rb", "test/juicer/merger/test_stylesheet_merger.rb", "test/juicer/minifyer/test_compressor.rb", "test/juicer/minifyer/test_yui_compressor.rb", "test/juicer/test_chainable.rb", "test/test_helper.rb", "test/test_juicer.rb"]
|
14
|
-
s.has_rdoc = true
|
15
|
-
s.homepage = %q{http://www.cjohansen.no/en/projects/juicer}
|
16
|
-
s.rdoc_options = ["--main", "Readme.rdoc"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.rubyforge_project = %q{juicer}
|
19
|
-
s.rubygems_version = %q{1.2.0}
|
20
|
-
s.summary = %q{Juicer is a command line tool aimed at easing JavaScript and CSS development}
|
21
|
-
s.test_files = ["test/test_helper.rb", "test/juicer/test_chainable.rb", "test/juicer/merger/test_javascript_dependency_resolver.rb", "test/juicer/merger/test_css_dependency_resolver.rb", "test/juicer/merger/test_base.rb", "test/juicer/merger/test_javascript_merger.rb", "test/juicer/merger/test_stylesheet_merger.rb", "test/juicer/minifyer/test_compressor.rb", "test/juicer/minifyer/test_yui_compressor.rb", "test/test_juicer.rb"]
|
22
|
-
|
23
|
-
if s.respond_to? :specification_version then
|
24
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
-
s.specification_version = 2
|
26
|
-
|
27
|
-
if current_version >= 3 then
|
28
|
-
s.add_runtime_dependency(%q<cmdparse>, [">= 2.0.2"])
|
29
|
-
s.add_development_dependency(%q<bones>, [">= 2.2.0"])
|
30
|
-
else
|
31
|
-
s.add_dependency(%q<cmdparse>, [">= 2.0.2"])
|
32
|
-
s.add_dependency(%q<bones>, [">= 2.2.0"])
|
33
|
-
end
|
34
|
-
else
|
35
|
-
s.add_dependency(%q<cmdparse>, [">= 2.0.2"])
|
36
|
-
s.add_dependency(%q<bones>, [">= 2.2.0"])
|
37
|
-
end
|
38
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "..", "chainable"))
|
2
|
-
|
3
|
-
module Juicer
|
4
|
-
module Minifyer
|
5
|
-
|
6
|
-
# Juicer::Minifyer::Compressor defines an API for compressing CSS,
|
7
|
-
# JavaScript and others using either a third party compressor library, or by
|
8
|
-
# implementing compression routines in Ruby.
|
9
|
-
#
|
10
|
-
# The Compressor class itself is not able to do anything useful other than
|
11
|
-
# serving as a framework for concrete compressors to implement.
|
12
|
-
#
|
13
|
-
# Author:: Christian Johansen (christian@cjohansen.no)
|
14
|
-
# Copyright:: Copyright (c) 2008-2009 Christian Johansen
|
15
|
-
# License:: MIT
|
16
|
-
#
|
17
|
-
class Compressor
|
18
|
-
include Chainable
|
19
|
-
|
20
|
-
# Initialize compressor with options
|
21
|
-
# options = Hash of options, optional
|
22
|
-
#
|
23
|
-
def initialize(options = {})
|
24
|
-
@options = default_options.merge(options)
|
25
|
-
@opt_set = false
|
26
|
-
end
|
27
|
-
|
28
|
-
# Perform compression, should be implemented in subclasses
|
29
|
-
# file = The file to compress
|
30
|
-
# output = Output file or open output stream. If nil the original file is
|
31
|
-
# overwritten
|
32
|
-
# type = The type of file, js or css. If not provided this is guessed from
|
33
|
-
# the input filename
|
34
|
-
#
|
35
|
-
def save(file, output = nil, type = nil)
|
36
|
-
msg = "Unable to call compress on abstract class Compressor"
|
37
|
-
raise NotImplementedError.new(msg)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Return the value of a given option
|
41
|
-
# opt = The option to return value for
|
42
|
-
#
|
43
|
-
def get_opt(opt)
|
44
|
-
@options[opt] || nil
|
45
|
-
end
|
46
|
-
|
47
|
-
# Set an option. Important: you can only set options that are predefined by the
|
48
|
-
# implementing class
|
49
|
-
# opt = The option to set
|
50
|
-
# value = The value of the option
|
51
|
-
#
|
52
|
-
def set_opt(opt, value)
|
53
|
-
if @options.key?(opt)
|
54
|
-
@options[opt] = value
|
55
|
-
@opt_set = true
|
56
|
-
else
|
57
|
-
msg = 'Illegal option, specify one of: ' + @options.keys.join(', ')
|
58
|
-
raise ArgumentError.new(msg)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Performs simple parsing of a string of parameters. All recognized
|
63
|
-
# parameters are set, non-existent arguments raise an ArgumentErrror
|
64
|
-
#
|
65
|
-
def set_opts(options)
|
66
|
-
options = options.split " "
|
67
|
-
option = nil
|
68
|
-
regex = /^--([^=]*)(=(.*))?/
|
69
|
-
|
70
|
-
while word = options.shift
|
71
|
-
if word =~ regex
|
72
|
-
if option
|
73
|
-
set_opt option, true
|
74
|
-
end
|
75
|
-
|
76
|
-
if $3
|
77
|
-
set_opt $1, $3
|
78
|
-
else
|
79
|
-
option = $1
|
80
|
-
end
|
81
|
-
else
|
82
|
-
set_opt option, word
|
83
|
-
option = nil
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# Allows for options to be set and read directly on the object as though they were
|
89
|
-
# standard attributes. compressor.verbose translates to
|
90
|
-
# compressor.get_opt('verbose') and compressor.verbose = true to
|
91
|
-
# compressor.set_opt('verbose', true)
|
92
|
-
def method_missing(m, *args)
|
93
|
-
if @options.key?(m)
|
94
|
-
# Only hit method_missing once per option
|
95
|
-
self.class.send(:define_method, m) do
|
96
|
-
return get_opt(m)
|
97
|
-
end
|
98
|
-
|
99
|
-
return get_opt(m)
|
100
|
-
end
|
101
|
-
|
102
|
-
return super unless m.to_s =~ /=$/
|
103
|
-
|
104
|
-
opt = m.to_s.sub(/=$/, "").to_sym
|
105
|
-
|
106
|
-
if @options.key?(opt)
|
107
|
-
# Only hit method_missing once per option
|
108
|
-
self.class.send(:define_method, m) do
|
109
|
-
return set_opt(opt, args[0])
|
110
|
-
end
|
111
|
-
|
112
|
-
return set_opt(opt, args[0])
|
113
|
-
end
|
114
|
-
|
115
|
-
super
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
119
|
-
# May be overridden in subclasses. Provides default options
|
120
|
-
def default_options
|
121
|
-
{}
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. .. test_helper])) unless defined?(Juicer)
|
2
|
-
|
3
|
-
class TestCompressor < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@compressor = Juicer::Minifyer::Compressor.new({ :test_opt => '', :foo => '' })
|
7
|
-
@file_setup = Juicer::Test::FileSetup.new($DATA_DIR)
|
8
|
-
@file_setup.create!
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_get_opt
|
12
|
-
assert_equal '', @compressor.get_opt(:test_opt)
|
13
|
-
@compressor.set_opt(:test_opt, 'some_str')
|
14
|
-
assert_equal 'some_str', @compressor.get_opt(:test_opt)
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_set_opt
|
18
|
-
assert @compressor.set_opt(:test_opt, 'some_str')
|
19
|
-
assert_equal 'some_str', @compressor.get_opt(:test_opt)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_default_options
|
23
|
-
Juicer::Minifyer::Compressor.publicize_methods do
|
24
|
-
obj = {}
|
25
|
-
assert_equal obj, @compressor.default_options
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_method_missing
|
30
|
-
assert_not_equal 'bar', @compressor.get_opt(:foo)
|
31
|
-
assert_not_equal 'bar', @compressor.foo
|
32
|
-
assert @compressor.foo = 'bar'
|
33
|
-
assert_equal 'bar', @compressor.get_opt(:foo)
|
34
|
-
assert_equal 'bar', @compressor.foo
|
35
|
-
end
|
36
|
-
end
|