jim 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/Gemfile +10 -0
- data/Gemfile.lock +28 -0
- data/HISTORY +8 -3
- data/Rakefile +3 -2
- data/jim.gemspec +9 -4
- data/lib/jim.rb +7 -7
- data/lib/jim/bundler.rb +32 -24
- data/lib/jim/cli.rb +52 -49
- data/test/helper.rb +11 -10
- data/test/test_jim_cli.rb +18 -17
- metadata +27 -4
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
archive-tar-minitar (0.5.2)
|
5
|
+
downlow (0.1.3)
|
6
|
+
archive-tar-minitar (>= 0.5.2)
|
7
|
+
rubyzip (>= 0.9.4)
|
8
|
+
fakeweb (1.3.0)
|
9
|
+
leftright (0.9.0)
|
10
|
+
mocha (0.9.8)
|
11
|
+
rake
|
12
|
+
rake (0.8.7)
|
13
|
+
rubyzip (0.9.4)
|
14
|
+
shoulda (2.11.3)
|
15
|
+
version_sorter (1.1.0)
|
16
|
+
yajl-ruby (0.7.7)
|
17
|
+
|
18
|
+
PLATFORMS
|
19
|
+
ruby
|
20
|
+
|
21
|
+
DEPENDENCIES
|
22
|
+
downlow (~> 0.1.3)
|
23
|
+
fakeweb (>= 1.2.8)
|
24
|
+
leftright
|
25
|
+
mocha
|
26
|
+
shoulda
|
27
|
+
version_sorter (~> 1.1.0)
|
28
|
+
yajl-ruby
|
data/HISTORY
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 0.2.2 [09-10-10]
|
2
|
+
|
3
|
+
* Fixed issue where io's passed to bundle not closed properly before returning
|
4
|
+
resulting in truncated files
|
5
|
+
|
1
6
|
== 0.2.1 [07-06-10]
|
2
7
|
|
3
8
|
* Local (non JIMHOME) files specified in the Jimfiles are not copied into vendor
|
@@ -9,14 +14,14 @@
|
|
9
14
|
* Each file in a package is installed separately
|
10
15
|
* Each file is installed with a package.json file that describes the install
|
11
16
|
and is merged with any existing package.json files
|
12
|
-
* version parser was rewritten and handles many different formats
|
17
|
+
* version parser was rewritten and handles many different formats
|
13
18
|
* Existing JIMHOMEs are probably now invalid (SORRY!!)
|
14
19
|
* The install, specify, vendor, bundle workflow works from start to finish
|
15
20
|
* passing the -o option to bundle or compress outputs to STDOUT
|
16
21
|
* New commands:
|
17
22
|
* available
|
18
23
|
* pack
|
19
|
-
|
24
|
+
|
20
25
|
|
21
26
|
== 0.1.2 [02-21-10]
|
22
27
|
|
@@ -30,4 +35,4 @@
|
|
30
35
|
|
31
36
|
== 0.1.0 [02-19-10]
|
32
37
|
|
33
|
-
* Initial release
|
38
|
+
* Initial release
|
data/Rakefile
CHANGED
@@ -15,14 +15,15 @@ begin
|
|
15
15
|
gem.email = "aaron@quirkey.com"
|
16
16
|
gem.homepage = "http://github.com/quirkey/jim"
|
17
17
|
gem.authors = ["Aaron Quint"]
|
18
|
-
|
18
|
+
|
19
19
|
gem.add_dependency "downlow", ">= 0.1.3"
|
20
20
|
gem.add_dependency "yajl-ruby"
|
21
21
|
gem.add_dependency "version_sorter", ">= 1.1.0"
|
22
|
-
|
22
|
+
|
23
23
|
gem.add_development_dependency "shoulda", ">= 0"
|
24
24
|
gem.add_development_dependency "fakeweb", ">= 1.2.8"
|
25
25
|
gem.add_development_dependency "mocha"
|
26
|
+
gem.add_development_dependency "leftright"
|
26
27
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
27
28
|
end
|
28
29
|
Jeweler::GemcutterTasks.new
|
data/jim.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jim}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aaron Quint"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-10}
|
13
13
|
s.default_executable = %q{jim}
|
14
14
|
s.description = %q{jim is your friendly javascript library manager. He downloads, stores, bundles, vendors and compresses.}
|
15
15
|
s.email = %q{aaron@quirkey.com}
|
@@ -20,6 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".gitignore",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
23
25
|
"HISTORY",
|
24
26
|
"LICENSE",
|
25
27
|
"README.rdoc",
|
@@ -107,7 +109,7 @@ Gem::Specification.new do |s|
|
|
107
109
|
s.homepage = %q{http://github.com/quirkey/jim}
|
108
110
|
s.rdoc_options = ["--charset=UTF-8"]
|
109
111
|
s.require_paths = ["lib"]
|
110
|
-
s.rubygems_version = %q{1.3.
|
112
|
+
s.rubygems_version = %q{1.3.7}
|
111
113
|
s.summary = %q{jim is your friendly javascript library manager}
|
112
114
|
s.test_files = [
|
113
115
|
"test/fixtures/sammy-0.5.0/examples/backend/app.rb",
|
@@ -124,13 +126,14 @@ Gem::Specification.new do |s|
|
|
124
126
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
125
127
|
s.specification_version = 3
|
126
128
|
|
127
|
-
if Gem::Version.new(Gem::
|
129
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
128
130
|
s.add_runtime_dependency(%q<downlow>, [">= 0.1.3"])
|
129
131
|
s.add_runtime_dependency(%q<yajl-ruby>, [">= 0"])
|
130
132
|
s.add_runtime_dependency(%q<version_sorter>, [">= 1.1.0"])
|
131
133
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
132
134
|
s.add_development_dependency(%q<fakeweb>, [">= 1.2.8"])
|
133
135
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
136
|
+
s.add_development_dependency(%q<leftright>, [">= 0"])
|
134
137
|
else
|
135
138
|
s.add_dependency(%q<downlow>, [">= 0.1.3"])
|
136
139
|
s.add_dependency(%q<yajl-ruby>, [">= 0"])
|
@@ -138,6 +141,7 @@ Gem::Specification.new do |s|
|
|
138
141
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
139
142
|
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
140
143
|
s.add_dependency(%q<mocha>, [">= 0"])
|
144
|
+
s.add_dependency(%q<leftright>, [">= 0"])
|
141
145
|
end
|
142
146
|
else
|
143
147
|
s.add_dependency(%q<downlow>, [">= 0.1.3"])
|
@@ -146,6 +150,7 @@ Gem::Specification.new do |s|
|
|
146
150
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
147
151
|
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
148
152
|
s.add_dependency(%q<mocha>, [">= 0"])
|
153
|
+
s.add_dependency(%q<leftright>, [">= 0"])
|
149
154
|
end
|
150
155
|
end
|
151
156
|
|
data/lib/jim.rb
CHANGED
@@ -5,16 +5,16 @@ require 'version_sorter'
|
|
5
5
|
require 'digest/md5'
|
6
6
|
|
7
7
|
module Jim
|
8
|
-
VERSION = '0.2.
|
9
|
-
|
8
|
+
VERSION = '0.2.2'
|
9
|
+
|
10
10
|
class Error < RuntimeError; end
|
11
11
|
class InstallError < Error; end
|
12
12
|
class FileExists < Error; end
|
13
|
-
|
13
|
+
|
14
14
|
def self.logger=(logger)
|
15
15
|
@logger = logger
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def self.logger
|
19
19
|
@logger ||= LOGGER if defined?(LOGGER)
|
20
20
|
if !@logger
|
@@ -25,7 +25,7 @@ module Jim
|
|
25
25
|
end
|
26
26
|
@logger
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def self.each_path_in_directories(directories, ext, ignore_directories = [], &block)
|
30
30
|
ignore_regexp = ignore_directories.empty? ? false : /(\/|^)(#{ignore_directories.join('|')})\//
|
31
31
|
directories.each do |dir|
|
@@ -40,10 +40,10 @@ module Jim
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
autoload :Installer, 'jim/installer'
|
45
45
|
autoload :Index, 'jim/index'
|
46
46
|
autoload :Bundler, 'jim/bundler'
|
47
47
|
autoload :VersionParser, 'jim/version_parser'
|
48
48
|
autoload :CLI, 'jim/cli'
|
49
|
-
end
|
49
|
+
end
|
data/lib/jim/bundler.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Jim
|
2
|
-
# Bundler takes parses a Jimfile that specifies requirements as names and
|
2
|
+
# Bundler takes parses a Jimfile that specifies requirements as names and
|
3
3
|
# versions and then can bundle, compress, or copy those files into specific dirs
|
4
4
|
# or files.
|
5
5
|
#
|
@@ -15,12 +15,12 @@ module Jim
|
|
15
15
|
# jquery.color
|
16
16
|
# sammy 0.5.0
|
17
17
|
#
|
18
|
-
#
|
18
|
+
#
|
19
19
|
class Bundler
|
20
20
|
class MissingFile < Jim::Error; end
|
21
21
|
|
22
|
-
attr_accessor :jimfile, :index, :requirements, :paths, :options
|
23
|
-
|
22
|
+
attr_accessor :jimfile, :index, :requirements, :paths, :options
|
23
|
+
|
24
24
|
# create a new bundler instance passing in the Jimfile as a `Pathname` or a
|
25
25
|
# string. `index` is a Jim::Index
|
26
26
|
def initialize(jimfile, index = nil, extra_options = {})
|
@@ -33,7 +33,7 @@ module Jim
|
|
33
33
|
self.paths = []
|
34
34
|
if options[:vendor_dir]
|
35
35
|
logger.debug "adding vendor dir to index #{options[:vendor_dir]}"
|
36
|
-
self.index.add(options[:vendor_dir])
|
36
|
+
self.index.add(options[:vendor_dir])
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -43,7 +43,7 @@ module Jim
|
|
43
43
|
name, version = search.strip.split(/\s+/)
|
44
44
|
path = self.index.find(name, version)
|
45
45
|
if !path
|
46
|
-
raise(MissingFile,
|
46
|
+
raise(MissingFile,
|
47
47
|
"Could not find #{name} #{version} in any of these paths #{index.directories.join(':')}")
|
48
48
|
end
|
49
49
|
self.paths << [path, name, version]
|
@@ -55,24 +55,24 @@ module Jim
|
|
55
55
|
# path specified in the :bundled_path option
|
56
56
|
def bundle!(to = nil)
|
57
57
|
resolve! if paths.empty?
|
58
|
-
to = options[:bundled_path] if to.nil? && options[:bundled_path]
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
to = options[:bundled_path] if to.nil? && to != false && options[:bundled_path]
|
59
|
+
io_for_path(to) do |io|
|
60
|
+
logger.info "Bundling to #{to}" if to
|
61
|
+
paths.each do |path, name, version|
|
62
|
+
io << path.read << "\n"
|
63
|
+
end
|
63
64
|
end
|
64
|
-
io
|
65
65
|
end
|
66
66
|
|
67
|
-
# concatenate all the requirements into a single file then run through a JS
|
67
|
+
# concatenate all the requirements into a single file then run through a JS
|
68
68
|
# then write to `to` or to the path specified in the :bundled_path option.
|
69
69
|
# You can also use the YUI compressor by setting the option :compressor to 'yui'
|
70
70
|
def compress!(to = nil)
|
71
71
|
to = options[:compressed_path] if to.nil? && options[:compressed_path]
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
io_for_path(to) do |io|
|
73
|
+
logger.info "Compressing to #{to}"
|
74
|
+
io << compress_js(bundle!(false))
|
75
|
+
end
|
76
76
|
end
|
77
77
|
|
78
78
|
# copy each of the requirements into the dir specified with `dir` or the path
|
@@ -92,6 +92,10 @@ module Jim
|
|
92
92
|
# Run the uncompressed test through a JS compressor (closure-compiler) by
|
93
93
|
# default. Setting options[:compressor] == 'yui' will force the YUI JS Compressor
|
94
94
|
def compress_js(uncompressed)
|
95
|
+
# if uncompressed.is_a?(File) && uncompressed.closed?
|
96
|
+
# puts "uncompressed is a file"
|
97
|
+
# uncompressed = File.read(uncompressed.path)
|
98
|
+
# end
|
95
99
|
if options[:compressor] == 'yui'
|
96
100
|
begin
|
97
101
|
require "yui/compressor"
|
@@ -99,7 +103,7 @@ module Jim
|
|
99
103
|
raise "You must install the yui compressor gem to use the compressor\ngem install yui-compressor"
|
100
104
|
end
|
101
105
|
compressor = ::YUI::JavaScriptCompressor.new
|
102
|
-
else
|
106
|
+
else
|
103
107
|
begin
|
104
108
|
require 'closure-compiler'
|
105
109
|
rescue LoadError
|
@@ -111,18 +115,22 @@ module Jim
|
|
111
115
|
end
|
112
116
|
|
113
117
|
private
|
114
|
-
def io_for_path(to)
|
118
|
+
def io_for_path(to, &block)
|
115
119
|
case to
|
116
120
|
when IO
|
121
|
+
yield to
|
122
|
+
to.close
|
117
123
|
to
|
118
124
|
when Pathname
|
119
125
|
to.dirname.mkpath
|
120
|
-
to.open('w')
|
126
|
+
io = to.open('w') {|f| yield f }
|
121
127
|
when String
|
122
128
|
to = Pathname.new(to)
|
123
|
-
io_for_path(to)
|
129
|
+
io_for_path(to, &block)
|
124
130
|
else
|
125
|
-
""
|
131
|
+
io = ""
|
132
|
+
yield io
|
133
|
+
io
|
126
134
|
end
|
127
135
|
end
|
128
136
|
|
@@ -135,10 +143,10 @@ module Jim
|
|
135
143
|
end
|
136
144
|
end
|
137
145
|
end
|
138
|
-
|
146
|
+
|
139
147
|
def logger
|
140
148
|
Jim.logger
|
141
149
|
end
|
142
150
|
|
143
151
|
end
|
144
|
-
end
|
152
|
+
end
|
data/lib/jim/cli.rb
CHANGED
@@ -2,14 +2,14 @@ require 'optparse'
|
|
2
2
|
require 'readline'
|
3
3
|
|
4
4
|
module Jim
|
5
|
-
|
6
|
-
# CLI handles the command line interface for the `jim` binary.
|
7
|
-
# The layout is farily simple. Options are parsed using optparse.rb and
|
5
|
+
|
6
|
+
# CLI handles the command line interface for the `jim` binary.
|
7
|
+
# The layout is farily simple. Options are parsed using optparse.rb and
|
8
8
|
# the different public methods represent 1-1 the commands provided by the bin.
|
9
9
|
class CLI
|
10
|
-
|
10
|
+
|
11
11
|
attr_accessor :jimfile, :jimhome, :force, :stdout
|
12
|
-
|
12
|
+
|
13
13
|
# create a new instance with the args passed from the command line i.e. ARGV
|
14
14
|
def initialize(args)
|
15
15
|
@output = ""
|
@@ -20,33 +20,36 @@ module Jim
|
|
20
20
|
@args = parse_options(args)
|
21
21
|
## try to run based on args
|
22
22
|
end
|
23
|
-
|
24
|
-
# method called by the bin directly after initialization.
|
25
|
-
def run
|
23
|
+
|
24
|
+
# method called by the bin directly after initialization.
|
25
|
+
def run(reraise = false)
|
26
26
|
command = @args.shift
|
27
27
|
if command && respond_to?(command)
|
28
28
|
self.send(command, *@args)
|
29
29
|
elsif command.nil? || command.strip == ''
|
30
30
|
cheat
|
31
|
-
else
|
31
|
+
else
|
32
32
|
@output << "No action found for #{command}. Run -h for help."
|
33
33
|
end
|
34
34
|
@output
|
35
35
|
rescue ArgumentError => e
|
36
36
|
@output << "#{e.message} for #{command}"
|
37
|
+
raise e if reraise
|
37
38
|
rescue Jim::FileExists => e
|
38
39
|
@output << "#{e.message} already exists, bailing. Use --force if you're sure"
|
40
|
+
raise e if reraise
|
39
41
|
rescue => e
|
40
42
|
@output << e.message + " (#{e.class})"
|
43
|
+
raise e if reraise
|
41
44
|
end
|
42
|
-
|
45
|
+
|
43
46
|
# list the possible commands to the logger
|
44
47
|
def commands
|
45
48
|
logger.info "Usage: jim [options] [command] [args]\n"
|
46
49
|
logger.info "Commands:"
|
47
50
|
logger.info template('commands')
|
48
51
|
end
|
49
|
-
|
52
|
+
|
50
53
|
# list the possible commands without detailed descriptions
|
51
54
|
def cheat
|
52
55
|
logger.info "Usage: jim [options] [command] [args]\n"
|
@@ -55,7 +58,7 @@ module Jim
|
|
55
58
|
logger.info "run commands for details"
|
56
59
|
end
|
57
60
|
alias :help :cheat
|
58
|
-
|
61
|
+
|
59
62
|
# initialize the current dir with a new Jimfile
|
60
63
|
def init(dir = nil)
|
61
64
|
dir = Pathname.new(dir || '')
|
@@ -69,31 +72,31 @@ module Jim
|
|
69
72
|
logger.info "wrote Jimfile to #{jimfile_path}"
|
70
73
|
end
|
71
74
|
end
|
72
|
-
|
75
|
+
|
73
76
|
# install the file/project `url` into `jimhome`
|
74
77
|
def install(url, name = false, version = false)
|
75
78
|
Jim::Installer.new(url, jimhome, :force => force, :name => name, :version => version).install
|
76
79
|
end
|
77
|
-
|
80
|
+
|
78
81
|
# bundle the files specified in Jimfile into `to`
|
79
82
|
def bundle(to = nil)
|
80
83
|
to = STDOUT if stdout
|
81
|
-
|
82
|
-
logger.info "Wrote #{File.size(path) / 1024}kb"
|
84
|
+
io = bundler.bundle!(to)
|
85
|
+
logger.info "Wrote #{File.size(io.path) / 1024}kb" if io.respond_to? :path
|
83
86
|
end
|
84
|
-
|
87
|
+
|
85
88
|
# compress the files specified in Jimfile into `to`
|
86
89
|
def compress(to = nil)
|
87
90
|
to = STDOUT if stdout
|
88
|
-
|
89
|
-
logger.info "Wrote #{File.size(path) / 1024}kb"
|
91
|
+
io = bundler.compress!(to)
|
92
|
+
logger.info "Wrote #{File.size(io.path) / 1024}kb" if io.respond_to? :path
|
90
93
|
end
|
91
|
-
|
94
|
+
|
92
95
|
# copy/vendor all the files specified in Jimfile to `dir`
|
93
96
|
def vendor(dir = nil)
|
94
97
|
bundler.vendor!(dir, force)
|
95
98
|
end
|
96
|
-
|
99
|
+
|
97
100
|
# list the only the _installed_ projects and versions.
|
98
101
|
# Match names against `search` if supplied.
|
99
102
|
def list(search = nil)
|
@@ -104,9 +107,9 @@ module Jim
|
|
104
107
|
print_version_list(list)
|
105
108
|
end
|
106
109
|
alias :installed :list
|
107
|
-
|
108
|
-
# list all available projects and versions including those in the local path, or
|
109
|
-
# paths specified in a Jimfile.
|
110
|
+
|
111
|
+
# list all available projects and versions including those in the local path, or
|
112
|
+
# paths specified in a Jimfile.
|
110
113
|
# Match names against `search` if supplied.
|
111
114
|
def available(search = nil)
|
112
115
|
logger.info "Getting list of all available files in\n#{index.directories.join("\n")}"
|
@@ -115,7 +118,7 @@ module Jim
|
|
115
118
|
logger.info "Available:"
|
116
119
|
print_version_list(list)
|
117
120
|
end
|
118
|
-
|
121
|
+
|
119
122
|
# Iterates over matching files and prompts for removal
|
120
123
|
def remove(name, version = nil)
|
121
124
|
logger.info "Looking for files matching #{name} #{version}"
|
@@ -129,17 +132,17 @@ module Jim
|
|
129
132
|
logger.info "Removing #{filename}"
|
130
133
|
filename.delete
|
131
134
|
removed += 1
|
132
|
-
else
|
135
|
+
else
|
133
136
|
logger.info "Skipping #{filename}"
|
134
137
|
end
|
135
138
|
end
|
136
139
|
logger.info "Removed #{removed} files."
|
137
|
-
else
|
140
|
+
else
|
138
141
|
logger.info "No installed files matched."
|
139
142
|
end
|
140
143
|
end
|
141
144
|
alias :uninstall :remove
|
142
|
-
|
145
|
+
|
143
146
|
# list the files and their resolved paths specified in the Jimfile
|
144
147
|
def resolve
|
145
148
|
resolved = bundler.resolve!
|
@@ -149,7 +152,7 @@ module Jim
|
|
149
152
|
end
|
150
153
|
resolved
|
151
154
|
end
|
152
|
-
|
155
|
+
|
153
156
|
# vendor to dir, then bundle and compress the Jimfile contents
|
154
157
|
def pack(dir = nil)
|
155
158
|
logger.info "packing the Jimfile for this project"
|
@@ -157,7 +160,7 @@ module Jim
|
|
157
160
|
bundle
|
158
161
|
compress
|
159
162
|
end
|
160
|
-
|
163
|
+
|
161
164
|
private
|
162
165
|
def parse_options(runtime_args)
|
163
166
|
OptionParser.new("", 24, ' ') do |opts|
|
@@ -165,34 +168,34 @@ module Jim
|
|
165
168
|
|
166
169
|
opts.separator ""
|
167
170
|
opts.separator "jim options:"
|
168
|
-
|
169
|
-
opts.on("--jimhome path/to/home", "set the install path/JIMHOME dir (default ~/.jim)") {|h|
|
171
|
+
|
172
|
+
opts.on("--jimhome path/to/home", "set the install path/JIMHOME dir (default ~/.jim)") {|h|
|
170
173
|
self.jimhome = Pathname.new(h)
|
171
174
|
}
|
172
175
|
|
173
176
|
opts.on("-j", "--jimfile path/to/jimfile", "load specific Jimfile at path (default ./Jimfile)") { |j|
|
174
177
|
self.jimfile = Pathname.new(j)
|
175
178
|
}
|
176
|
-
|
179
|
+
|
177
180
|
opts.on("-f", "--force", "force file creation/overwrite") {|f|
|
178
181
|
self.force = true
|
179
182
|
}
|
180
|
-
|
183
|
+
|
181
184
|
opts.on("-d", "--debug", "set log level to debug") {|d|
|
182
185
|
logger.level = Logger::DEBUG
|
183
186
|
}
|
184
|
-
|
185
|
-
opts.on("-o", "--stdout", "write output of commands (like bundle and compress to STDOUT)") {|o|
|
187
|
+
|
188
|
+
opts.on("-o", "--stdout", "write output of commands (like bundle and compress to STDOUT)") {|o|
|
186
189
|
logger.level = Logger::ERROR
|
187
190
|
self.stdout = true
|
188
191
|
}
|
189
|
-
|
192
|
+
|
190
193
|
opts.on("-v", "--version", "print version") {|d|
|
191
194
|
puts "jim #{Jim::VERSION}"
|
192
195
|
exit
|
193
196
|
}
|
194
|
-
|
195
|
-
|
197
|
+
|
198
|
+
|
196
199
|
opts.on_tail("-h", "--help", "Show this message. Run jim commands for list of commands.") do
|
197
200
|
puts opts.help
|
198
201
|
exit
|
@@ -203,36 +206,36 @@ module Jim
|
|
203
206
|
logger.warn "#{e}, run -h for options"
|
204
207
|
exit
|
205
208
|
end
|
206
|
-
|
209
|
+
|
207
210
|
def index
|
208
211
|
@index ||= Jim::Index.new(install_dir, Dir.pwd)
|
209
212
|
end
|
210
|
-
|
211
|
-
def installed_index
|
213
|
+
|
214
|
+
def installed_index
|
212
215
|
@installed_index ||= Jim::Index.new(install_dir)
|
213
216
|
end
|
214
|
-
|
217
|
+
|
215
218
|
def bundler
|
216
219
|
@bundler ||= Jim::Bundler.new(jimfile, index)
|
217
220
|
end
|
218
|
-
|
221
|
+
|
219
222
|
def install_dir
|
220
223
|
jimhome + 'lib'
|
221
224
|
end
|
222
|
-
|
225
|
+
|
223
226
|
def template(path)
|
224
227
|
(Pathname.new(__FILE__).dirname + 'templates' + path).read
|
225
228
|
end
|
226
|
-
|
229
|
+
|
227
230
|
def logger
|
228
231
|
Jim.logger
|
229
232
|
end
|
230
|
-
|
233
|
+
|
231
234
|
def print_version_list(list)
|
232
235
|
list.each do |file, versions|
|
233
236
|
logger.info "#{file} (#{VersionSorter.rsort(versions.collect {|v| v[0] }).join(', ')})"
|
234
237
|
end
|
235
238
|
end
|
236
|
-
|
239
|
+
|
237
240
|
end
|
238
|
-
end
|
241
|
+
end
|
data/test/helper.rb
CHANGED
@@ -3,6 +3,7 @@ require 'test/unit'
|
|
3
3
|
require 'shoulda'
|
4
4
|
require 'fakeweb'
|
5
5
|
require 'mocha'
|
6
|
+
require 'leftright'
|
6
7
|
# require 'test_benchmark'
|
7
8
|
|
8
9
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -10,8 +11,8 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
10
11
|
require 'jim'
|
11
12
|
|
12
13
|
unless !!ENV['PRINT']
|
13
|
-
Jim.logger = Logger.new('/dev/null')
|
14
|
-
else
|
14
|
+
Jim.logger = Logger.new('/dev/null')
|
15
|
+
else
|
15
16
|
logger = Logger.new(STDOUT)
|
16
17
|
logger.level = Logger::DEBUG
|
17
18
|
logger.formatter = Proc.new {|s, t, n, msg| "\n* #{s}: #{msg}\n"}
|
@@ -22,38 +23,38 @@ JIM_TMP_ROOT = File.join(File.dirname(__FILE__), 'tmp', 'jimtmproot')
|
|
22
23
|
Jim::Installer.tmp_root = JIM_TMP_ROOT
|
23
24
|
|
24
25
|
class Test::Unit::TestCase
|
25
|
-
|
26
|
+
|
26
27
|
def fixture_path(path)
|
27
28
|
full_path = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', path))
|
28
29
|
end
|
29
|
-
|
30
|
+
|
30
31
|
def fixture(path)
|
31
32
|
File.read(fixture_path(path))
|
32
33
|
end
|
33
|
-
|
34
|
+
|
34
35
|
def tmp_path
|
35
36
|
Pathname.new(File.join(File.dirname(__FILE__), 'tmp')).expand_path
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
def assert_readable(*args)
|
39
40
|
full_path = File.join(*args)
|
40
41
|
assert File.readable?(full_path), "Expected #{full_path} to be a readable file"
|
41
42
|
end
|
42
|
-
|
43
|
+
|
43
44
|
def assert_file_contents(match, *args)
|
44
45
|
full_path = File.join(*args)
|
45
46
|
file_contents = File.read(full_path)
|
46
47
|
assert_match(match, file_contents, "Expected file at #{full_path} with content #{file_contents} to match #{match.inspect}")
|
47
48
|
end
|
48
|
-
|
49
|
+
|
49
50
|
def assert_dir(*args)
|
50
51
|
full_path = File.join(*args)
|
51
52
|
assert File.directory?(full_path), "Expected #{full_path} to be a directory"
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
def assert_not_readable(*args)
|
55
56
|
full_path = File.join(*args)
|
56
57
|
assert !File.readable?(full_path), "Expected #{full_path} to not be a readable file"
|
57
58
|
end
|
58
|
-
|
59
|
+
|
59
60
|
end
|
data/test/test_jim_cli.rb
CHANGED
@@ -10,53 +10,54 @@ class TestJimCLI < Test::Unit::TestCase
|
|
10
10
|
Jim::Installer.new(fixture_path('infoincomments.js'), tmp_path).install
|
11
11
|
Jim::Installer.new(fixture_path('jquery-1.4.1.js'), tmp_path).install
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
context "init" do
|
15
15
|
should "write Jimfile to path" do
|
16
16
|
run_cli("init", tmp_path)
|
17
17
|
assert_readable tmp_path, "Jimfile"
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
context "pack" do
|
22
22
|
should "run vendor, bundle, compress" do
|
23
|
+
Jim::CLI.any_instance.expects(:compress).once
|
23
24
|
Jim::Bundler.any_instance.stubs(:compress_js).returns("compressed.js")
|
24
25
|
run_cli("pack", "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
25
26
|
assert_readable tmp_path, 'public', 'javascripts', 'vendor', 'jquery-1.4.1.js'
|
26
27
|
assert_readable tmp_path, 'public', 'javascripts', 'vendor', 'myproject-1.2.2.js'
|
27
28
|
assert_readable tmp_path, 'public', 'javascripts', 'bundled.js'
|
28
|
-
assert_readable tmp_path, 'public', 'javascripts', 'compressed.js'
|
29
|
+
# assert_readable tmp_path, 'public', 'javascripts', 'compressed.js'
|
29
30
|
end
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
context "bundle" do
|
33
34
|
should "write bundled Jimfile to path" do
|
34
35
|
run_cli("bundle", tmp_path + 'bundle.js', "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
35
36
|
assert_readable tmp_path + 'bundle.js'
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
should "write to bundled_path if no path provided" do
|
39
40
|
run_cli("bundle", "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
40
41
|
assert_readable tmp_path, 'public', 'javascripts', 'bundled.js'
|
41
42
|
end
|
42
43
|
end
|
43
|
-
|
44
|
+
|
44
45
|
context "compress" do
|
45
46
|
setup do
|
46
47
|
Jim::Bundler.any_instance.stubs(:compress_js).returns("compressed.js")
|
47
48
|
end
|
48
|
-
|
49
|
+
|
49
50
|
should "compress Jimfile to path" do
|
50
51
|
run_cli("compress", tmp_path + 'compressed.js', "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
51
52
|
assert_readable tmp_path + 'compressed.js'
|
52
53
|
end
|
53
|
-
|
54
|
+
|
54
55
|
should "compress to compressed_path if no path provided" do
|
55
56
|
run_cli("compress", "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
56
57
|
assert_readable tmp_path, 'public', 'javascripts', 'compressed.js'
|
57
58
|
end
|
58
59
|
end
|
59
|
-
|
60
|
+
|
60
61
|
context "vendor" do
|
61
62
|
should "vendor Jimfile to vendor dir" do
|
62
63
|
run_cli("vendor", "-j", fixture_path('Jimfile'), "--jimhome", tmp_path)
|
@@ -64,21 +65,21 @@ class TestJimCLI < Test::Unit::TestCase
|
|
64
65
|
assert_readable tmp_path, 'public', 'javascripts', 'vendor', 'myproject-1.2.2.js'
|
65
66
|
end
|
66
67
|
end
|
67
|
-
|
68
|
+
|
68
69
|
context "install" do
|
69
|
-
should "install url to jim home" do
|
70
|
+
should "install url to jim home" do
|
70
71
|
run_cli("install", fixture_path('jquery-1.4.1.js'), "--jimhome", tmp_path)
|
71
72
|
install_path = File.join(tmp_path, 'lib', 'jquery-1.4.1')
|
72
73
|
assert_dir install_path
|
73
74
|
assert_readable install_path, 'jquery.js'
|
74
75
|
assert_equal fixture('jquery-1.4.1.js'), File.read(File.join(install_path, 'jquery.js'))
|
75
|
-
end
|
76
|
+
end
|
76
77
|
end
|
77
|
-
|
78
|
+
|
78
79
|
end
|
79
|
-
|
80
|
+
|
80
81
|
def run_cli(*args)
|
81
|
-
Jim::CLI.new(args.collect {|a| a.to_s }).run
|
82
|
+
Jim::CLI.new(args.collect {|a| a.to_s }).run(true)
|
82
83
|
end
|
83
|
-
|
84
|
-
end
|
84
|
+
|
85
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 2
|
9
|
+
version: 0.2.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Aaron Quint
|
@@ -14,13 +14,14 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-09-10 00:00:00 -07:00
|
18
18
|
default_executable: jim
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: downlow
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
@@ -35,6 +36,7 @@ dependencies:
|
|
35
36
|
name: yajl-ruby
|
36
37
|
prerelease: false
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
38
40
|
requirements:
|
39
41
|
- - ">="
|
40
42
|
- !ruby/object:Gem::Version
|
@@ -47,6 +49,7 @@ dependencies:
|
|
47
49
|
name: version_sorter
|
48
50
|
prerelease: false
|
49
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
50
53
|
requirements:
|
51
54
|
- - ">="
|
52
55
|
- !ruby/object:Gem::Version
|
@@ -61,6 +64,7 @@ dependencies:
|
|
61
64
|
name: shoulda
|
62
65
|
prerelease: false
|
63
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
64
68
|
requirements:
|
65
69
|
- - ">="
|
66
70
|
- !ruby/object:Gem::Version
|
@@ -73,6 +77,7 @@ dependencies:
|
|
73
77
|
name: fakeweb
|
74
78
|
prerelease: false
|
75
79
|
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
76
81
|
requirements:
|
77
82
|
- - ">="
|
78
83
|
- !ruby/object:Gem::Version
|
@@ -87,6 +92,7 @@ dependencies:
|
|
87
92
|
name: mocha
|
88
93
|
prerelease: false
|
89
94
|
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
90
96
|
requirements:
|
91
97
|
- - ">="
|
92
98
|
- !ruby/object:Gem::Version
|
@@ -95,6 +101,19 @@ dependencies:
|
|
95
101
|
version: "0"
|
96
102
|
type: :development
|
97
103
|
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: leftright
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
type: :development
|
116
|
+
version_requirements: *id007
|
98
117
|
description: jim is your friendly javascript library manager. He downloads, stores, bundles, vendors and compresses.
|
99
118
|
email: aaron@quirkey.com
|
100
119
|
executables:
|
@@ -106,6 +125,8 @@ extra_rdoc_files:
|
|
106
125
|
- README.rdoc
|
107
126
|
files:
|
108
127
|
- .gitignore
|
128
|
+
- Gemfile
|
129
|
+
- Gemfile.lock
|
109
130
|
- HISTORY
|
110
131
|
- LICENSE
|
111
132
|
- README.rdoc
|
@@ -199,6 +220,7 @@ rdoc_options:
|
|
199
220
|
require_paths:
|
200
221
|
- lib
|
201
222
|
required_ruby_version: !ruby/object:Gem::Requirement
|
223
|
+
none: false
|
202
224
|
requirements:
|
203
225
|
- - ">="
|
204
226
|
- !ruby/object:Gem::Version
|
@@ -206,6 +228,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
228
|
- 0
|
207
229
|
version: "0"
|
208
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
|
+
none: false
|
209
232
|
requirements:
|
210
233
|
- - ">="
|
211
234
|
- !ruby/object:Gem::Version
|
@@ -215,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
238
|
requirements: []
|
216
239
|
|
217
240
|
rubyforge_project:
|
218
|
-
rubygems_version: 1.3.
|
241
|
+
rubygems_version: 1.3.7
|
219
242
|
signing_key:
|
220
243
|
specification_version: 3
|
221
244
|
summary: jim is your friendly javascript library manager
|