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.
Files changed (53) hide show
  1. data/History.txt +17 -5
  2. data/Manifest.txt +33 -15
  3. data/Rakefile +22 -1
  4. data/Readme.rdoc +68 -32
  5. data/bin/juicer +1 -0
  6. data/lib/juicer.rb +26 -1
  7. data/lib/juicer/binary.rb +173 -0
  8. data/lib/juicer/cache_buster.rb +45 -0
  9. data/lib/juicer/chainable.rb +1 -0
  10. data/lib/juicer/cli.rb +13 -8
  11. data/lib/juicer/command/install.rb +59 -0
  12. data/lib/juicer/command/list.rb +50 -0
  13. data/lib/juicer/command/merge.rb +130 -31
  14. data/lib/juicer/command/util.rb +32 -0
  15. data/lib/juicer/command/verify.rb +60 -0
  16. data/lib/juicer/core.rb +61 -0
  17. data/lib/juicer/css_cache_buster.rb +106 -0
  18. data/lib/juicer/install/base.rb +186 -0
  19. data/lib/juicer/install/jslint_installer.rb +51 -0
  20. data/lib/juicer/install/rhino_installer.rb +52 -0
  21. data/lib/juicer/install/yui_compressor_installer.rb +66 -0
  22. data/lib/juicer/jslint.rb +90 -0
  23. data/lib/juicer/merger/base.rb +74 -72
  24. data/lib/juicer/merger/dependency_resolver.rb +34 -16
  25. data/lib/juicer/merger/stylesheet_merger.rb +71 -1
  26. data/lib/juicer/minifyer/yui_compressor.rb +20 -43
  27. data/tasks/test/setup.rake +35 -0
  28. data/test/juicer/command/test_install.rb +53 -0
  29. data/test/juicer/command/test_list.rb +69 -0
  30. data/test/juicer/command/test_merge.rb +160 -0
  31. data/test/juicer/command/test_util.rb +54 -0
  32. data/test/juicer/command/test_verify.rb +33 -0
  33. data/test/juicer/install/test_installer_base.rb +195 -0
  34. data/test/juicer/install/test_jslint_installer.rb +54 -0
  35. data/test/juicer/install/test_rhino_installer.rb +57 -0
  36. data/test/juicer/install/test_yui_compressor_installer.rb +56 -0
  37. data/test/juicer/merger/test_base.rb +2 -3
  38. data/test/juicer/merger/test_css_dependency_resolver.rb +8 -4
  39. data/test/juicer/merger/test_javascript_dependency_resolver.rb +6 -7
  40. data/test/juicer/merger/test_javascript_merger.rb +1 -2
  41. data/test/juicer/merger/test_stylesheet_merger.rb +118 -2
  42. data/test/juicer/minifyer/test_yui_compressor.rb +109 -29
  43. data/test/juicer/test_cache_buster.rb +58 -0
  44. data/test/juicer/test_chainable.rb +7 -0
  45. data/test/juicer/test_core.rb +47 -0
  46. data/test/juicer/test_css_cache_buster.rb +91 -0
  47. data/test/juicer/test_jslint.rb +33 -0
  48. data/test/test_helper.rb +65 -196
  49. metadata +77 -26
  50. data/.gitignore +0 -2
  51. data/juicer.gemspec +0 -38
  52. data/lib/juicer/minifyer/compressor.rb +0 -125
  53. data/test/juicer/minifyer/test_compressor.rb +0 -36
data/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- *~
2
- test/data
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