cdnjs-command 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY.md +10 -0
- data/bin/cdnjs +49 -184
- data/lib/cdnjs_command.rb +12 -0
- data/lib/cdnjs_command/fetcher.rb +39 -0
- data/lib/cdnjs_command/helpers.rb +38 -0
- data/lib/cdnjs_command/package.rb +47 -0
- data/lib/cdnjs_command/params.rb +7 -0
- metadata +37 -48
data/HISTORY.md
CHANGED
data/bin/cdnjs
CHANGED
@@ -1,194 +1,60 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'open-uri'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'json'
|
5
2
|
|
6
|
-
|
3
|
+
require File.expand_path('../../lib/cdnjs_command', __FILE__)
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def self.[](*what) what.extend Params; end
|
12
|
-
def ===(argv) argv.first_is(self); end
|
13
|
-
end
|
5
|
+
Package = CdnjsCommand::Package
|
6
|
+
Fetcher = CdnjsCommand::Fetcher
|
7
|
+
Params = CdnjsCommand::Params
|
14
8
|
|
9
|
+
extend CdnjsCommand::Helpers
|
15
10
|
ARGV.extend Params
|
16
11
|
|
17
12
|
# ============================================================================
|
13
|
+
# Controller
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def self.fetch(url)
|
23
|
-
return cache_for(url) if cached?(url)
|
24
|
-
|
25
|
-
tip "Fetching #{url}..."
|
26
|
-
output = open(url).read
|
27
|
-
|
28
|
-
FileUtils.mkdir_p File.expand_path(CACHE_PATH)
|
29
|
-
File.open(cache_path_for(url), 'w') { |f| f.write output }
|
30
|
-
output
|
31
|
-
rescue => e
|
32
|
-
tip "Unable to fetch (#{e.class.name}: #{e.message})."
|
33
|
-
exit
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.purge
|
37
|
-
FileUtils.rm_rf File.expand_path(CACHE_PATH)
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.cached?(url)
|
41
|
-
File.file? cache_path_for(url)
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.cache_path_for(url)
|
45
|
-
File.expand_path slug(url), CACHE_PATH
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.cache_for(url)
|
49
|
-
File.open(cache_path_for(url)) { |f| f.read }
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.slug(url)
|
53
|
-
url.gsub(/[\/:]/, '_')
|
54
|
-
end
|
55
|
-
end
|
15
|
+
case ARGV
|
16
|
+
when Params['-h', '--help']
|
17
|
+
show_help
|
56
18
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
attr_reader :data, :name, :version, :description, :homepage,
|
61
|
-
:maintainers, :repositories
|
62
|
-
|
63
|
-
def initialize(hash)
|
64
|
-
@data = hash
|
65
|
-
@name = hash['name'].gsub(/\.js$/, '')
|
66
|
-
@version = hash['version']
|
67
|
-
@description = hash['description']
|
68
|
-
@homepage = hash['homepage']
|
69
|
-
@filename = hash['filename']
|
70
|
-
@maintainers = hash['maintainers']
|
71
|
-
@repositories = hash['repositories']
|
72
|
-
end
|
19
|
+
when Params['-v', '--version']
|
20
|
+
puts "cdnjs-command #{CDNJS_VERSION}"
|
73
21
|
|
74
|
-
|
75
|
-
|
76
|
-
|
22
|
+
when Params['list', 'l']
|
23
|
+
Package.all.each { |pkg|
|
24
|
+
puts "%-20s %s" % [ pkg.name + " (" + pkg.version + ")", ""]
|
25
|
+
}
|
77
26
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
else
|
82
|
-
"http://ajax.cdnjs.com/ajax/libs/#{data['name']}/#{version}/#{@filename}"
|
83
|
-
end
|
84
|
-
end
|
27
|
+
when Params['html', 'h']
|
28
|
+
name = ARGV.shift or invalid_usage("cdnjs html NAME")
|
29
|
+
pkg = get_package(name)
|
85
30
|
|
86
|
-
|
87
|
-
def self.all
|
88
|
-
packages = JSON.parse(fetch(INDEX_URL))['packages']
|
89
|
-
packages.delete(Hash.new)
|
90
|
-
packages
|
91
|
-
.map { |hash| Package.new(hash) }
|
92
|
-
.sort_by { |pkg| pkg.name }
|
93
|
-
end
|
31
|
+
puts "<script src='#{pkg.url}'></script>"
|
94
32
|
|
95
|
-
|
96
|
-
|
97
|
-
|
33
|
+
when Params['url', 'u']
|
34
|
+
name = ARGV.shift or invalid_usage("cdnjs url NAME")
|
35
|
+
puts get_package(name).url
|
98
36
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
end
|
37
|
+
when Params['info', 'i']
|
38
|
+
name = ARGV.shift or invalid_usage("cdnjs info NAME")
|
39
|
+
pkg = get_package(name)
|
104
40
|
|
105
|
-
|
106
|
-
|
41
|
+
puts "%s (%s)" % [ pkg.name, pkg.version ]
|
42
|
+
puts ""
|
43
|
+
puts "%-10s %s" % [ "URL:", pkg.url ]
|
44
|
+
puts "%-10s %s" % [ "Homepage:", pkg.homepage ]
|
45
|
+
puts ""
|
46
|
+
puts pkg.description
|
47
|
+
puts ""
|
48
|
+
puts "<!-- Include this library in your project with: -->"
|
49
|
+
puts "<script src='#{pkg.url}'></script>"
|
107
50
|
|
108
|
-
|
109
|
-
$stderr.write "#{message}\n"
|
110
|
-
end
|
111
|
-
|
112
|
-
def invalid_usage(usage="cdnjs --help")
|
113
|
-
puts "Invalid usage."
|
114
|
-
puts "Try: #{usage.gsub(/^cdnjs/, File.basename($0))}"
|
115
|
-
exit
|
116
|
-
end
|
117
|
-
|
118
|
-
def get_package(id)
|
119
|
-
Package[id] or begin
|
120
|
-
tip "Package not found."
|
121
|
-
tip "For a list of all packages, see: cdnjs list"
|
122
|
-
exit
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
def show_help
|
127
|
-
tip "Usage:"
|
128
|
-
tip " cdnjs NAME - Download specific package"
|
129
|
-
tip ""
|
130
|
-
tip "Other commands:"
|
131
|
-
tip " cdnjs list - List available packages"
|
132
|
-
tip " cdnjs info NAME - Show package info"
|
133
|
-
tip " cdnjs html NAME - Show HTML snippet to include given package"
|
134
|
-
tip " cdnjs url NAME - Show the URL for the given package"
|
135
|
-
tip " cdnjs update - Updates the package cache"
|
136
|
-
tip ""
|
137
|
-
tip "You may also use the first letters of each command; e.g., `cdnjs i jquery`."
|
138
|
-
tip "Here are some common examples:"
|
139
|
-
tip ""
|
140
|
-
tip " $ cdnjs jquery"
|
141
|
-
tip " $ echo `cdnjs h underscore` >> index.html"
|
142
|
-
tip ""
|
143
|
-
end
|
144
|
-
|
145
|
-
# ============================================================================
|
146
|
-
# Le controller
|
147
|
-
|
148
|
-
if __FILE__ == $0
|
149
|
-
case ARGV
|
150
|
-
when Params['-h', '--help']
|
151
|
-
show_help
|
152
|
-
|
153
|
-
when Params['-v', '--version']
|
154
|
-
puts "cdnjs-command #{CDNJS_VERSION}"
|
155
|
-
|
156
|
-
when Params['list', 'l']
|
157
|
-
Package.all.each { |pkg|
|
158
|
-
puts "%-20s %s" % [ pkg.name + " (" + pkg.version + ")", ""]
|
159
|
-
}
|
160
|
-
|
161
|
-
when Params['html', 'h']
|
162
|
-
name = ARGV.shift or invalid_usage("cdnjs html NAME")
|
163
|
-
pkg = get_package(name)
|
164
|
-
|
165
|
-
puts "<script src='#{pkg.url}'></script>"
|
166
|
-
|
167
|
-
when Params['url', 'u']
|
168
|
-
name = ARGV.shift or invalid_usage("cdnjs url NAME")
|
169
|
-
puts get_package(name).url
|
170
|
-
|
171
|
-
when Params['info', 'i']
|
172
|
-
name = ARGV.shift or invalid_usage("cdnjs info NAME")
|
173
|
-
pkg = get_package(name)
|
174
|
-
|
175
|
-
puts "%s (%s)" % [ pkg.name, pkg.version ]
|
51
|
+
if pkg.url =~ /^https/
|
176
52
|
puts ""
|
177
|
-
puts "
|
178
|
-
|
179
|
-
puts ""
|
180
|
-
puts pkg.description
|
181
|
-
puts ""
|
182
|
-
puts "<!-- Include this library in your project with: -->"
|
183
|
-
puts "<script src='#{pkg.url}'></script>"
|
184
|
-
|
185
|
-
if pkg.url =~ /^https/
|
186
|
-
puts ""
|
187
|
-
puts "<!-- (You may need to replace 'https' with 'http'.) -->"
|
188
|
-
end
|
53
|
+
puts "<!-- (You may need to replace 'https' with 'http'.) -->"
|
54
|
+
end
|
189
55
|
|
190
56
|
|
191
|
-
|
57
|
+
p pkg if ARGV.delete('-v')
|
192
58
|
|
193
59
|
when Params['update']
|
194
60
|
Fetcher.purge
|
@@ -198,19 +64,18 @@ if __FILE__ == $0
|
|
198
64
|
else
|
199
65
|
name = ARGV.shift or (show_help; exit)
|
200
66
|
pkg = Package[name] or begin
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
end
|
206
|
-
puts "For a list of all packages: cdnjs list"
|
207
|
-
puts "For more help: cdnjs --help"
|
208
|
-
exit
|
67
|
+
if ARGV.empty?
|
68
|
+
puts "Invalid package name."
|
69
|
+
else
|
70
|
+
puts "Invalid usage."
|
209
71
|
end
|
72
|
+
puts "For a list of all packages: cdnjs list"
|
73
|
+
puts "For more help: cdnjs --help"
|
74
|
+
exit
|
75
|
+
end
|
210
76
|
|
211
|
-
|
212
|
-
|
77
|
+
data = Fetcher.fetch(pkg.url)
|
78
|
+
File.open(pkg.basename, 'w') { |f| f.write data }
|
213
79
|
|
214
|
-
|
215
|
-
end
|
80
|
+
tip "Created #{pkg.basename}."
|
216
81
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
CDNJS_VERSION = "0.0.5"
|
6
|
+
|
7
|
+
module CdnjsCommand
|
8
|
+
autoload :Params, File.expand_path('../cdnjs_command/params', __FILE__)
|
9
|
+
autoload :Fetcher, File.expand_path('../cdnjs_command/fetcher', __FILE__)
|
10
|
+
autoload :Package, File.expand_path('../cdnjs_command/package', __FILE__)
|
11
|
+
autoload :Helpers, File.expand_path('../cdnjs_command/helpers', __FILE__)
|
12
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module CdnjsCommand::Fetcher
|
2
|
+
CACHE_PATH = "~/.cache/cdnjs"
|
3
|
+
|
4
|
+
extend CdnjsCommand::Helpers
|
5
|
+
|
6
|
+
def self.fetch(url)
|
7
|
+
return cache_for(url) if cached?(url)
|
8
|
+
|
9
|
+
tip "Fetching #{url}..."
|
10
|
+
output = open(url).read
|
11
|
+
|
12
|
+
FileUtils.mkdir_p File.expand_path(CACHE_PATH)
|
13
|
+
File.open(cache_path_for(url), 'w') { |f| f.write output }
|
14
|
+
output
|
15
|
+
rescue => e
|
16
|
+
tip "Unable to fetch (#{e.class.name}: #{e.message})."
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.purge
|
21
|
+
FileUtils.rm_rf File.expand_path(CACHE_PATH)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.cached?(url)
|
25
|
+
File.file? cache_path_for(url)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.cache_path_for(url)
|
29
|
+
File.expand_path slug(url), CACHE_PATH
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.cache_for(url)
|
33
|
+
File.open(cache_path_for(url)) { |f| f.read }
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.slug(url)
|
37
|
+
url.gsub(/[\/:]/, '_')
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CdnjsCommand::Helpers
|
2
|
+
def tip(message)
|
3
|
+
$stderr.write "#{message}\n"
|
4
|
+
end
|
5
|
+
|
6
|
+
def invalid_usage(usage="cdnjs --help")
|
7
|
+
puts "Invalid usage."
|
8
|
+
puts "Try: #{usage.gsub(/^cdnjs/, File.basename($0))}"
|
9
|
+
exit
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_package(id)
|
13
|
+
Package[id] or begin
|
14
|
+
tip "Package not found."
|
15
|
+
tip "For a list of all packages, see: cdnjs list"
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_help
|
21
|
+
tip "Usage:"
|
22
|
+
tip " cdnjs NAME - Download specific package"
|
23
|
+
tip ""
|
24
|
+
tip "Other commands:"
|
25
|
+
tip " cdnjs list - List available packages"
|
26
|
+
tip " cdnjs info NAME - Show package info"
|
27
|
+
tip " cdnjs html NAME - Show HTML snippet to include given package"
|
28
|
+
tip " cdnjs url NAME - Show the URL for the given package"
|
29
|
+
tip " cdnjs update - Updates the package cache"
|
30
|
+
tip ""
|
31
|
+
tip "You may also use the first letters of each command; e.g., `cdnjs i jquery`."
|
32
|
+
tip "Here are some common examples:"
|
33
|
+
tip ""
|
34
|
+
tip " $ cdnjs jquery"
|
35
|
+
tip " $ echo `cdnjs h underscore` >> index.html"
|
36
|
+
tip ""
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class CdnjsCommand::Package
|
2
|
+
INDEX_URL = 'http://cdnjs.com/packages.json'
|
3
|
+
|
4
|
+
attr_reader :data, :name, :version, :description, :homepage,
|
5
|
+
:maintainers, :repositories
|
6
|
+
|
7
|
+
def initialize(hash)
|
8
|
+
@data = hash
|
9
|
+
@name = hash['name'].gsub(/\.js$/, '')
|
10
|
+
@version = hash['version']
|
11
|
+
@description = hash['description']
|
12
|
+
@homepage = hash['homepage']
|
13
|
+
@filename = hash['filename']
|
14
|
+
@maintainers = hash['maintainers']
|
15
|
+
@repositories = hash['repositories']
|
16
|
+
end
|
17
|
+
|
18
|
+
def basename
|
19
|
+
"#{name}-#{version}.js"
|
20
|
+
end
|
21
|
+
|
22
|
+
def url
|
23
|
+
if @filename =~ /^http/
|
24
|
+
@filename
|
25
|
+
else
|
26
|
+
"http://cdnjs.cloudflare.com/ajax/libs/#{data['name']}/#{version}/#{@filename}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return Array of {Package}s
|
31
|
+
def self.all
|
32
|
+
packages = JSON.parse(fetch(INDEX_URL))['packages']
|
33
|
+
packages.delete(Hash.new)
|
34
|
+
packages
|
35
|
+
.map { |hash| Package.new(hash) }
|
36
|
+
.sort_by { |pkg| pkg.name }
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.fetch(url)
|
40
|
+
Fetcher.fetch(INDEX_URL).force_encoding('utf-8')
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.[](id)
|
44
|
+
all.detect { |pkg| pkg.name == id } ||
|
45
|
+
all.detect { |pkg| pkg.name[0...id.size] == id }
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,79 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cdnjs-command
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
version: 0.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Rico Sta. Cruz
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2011-04-16 00:00:00 +08:00
|
12
|
+
date: 2011-07-24 00:00:00.000000000 +08:00
|
18
13
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
21
16
|
name: json
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2165491960 !ruby/object:Gem::Requirement
|
24
18
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :runtime
|
32
|
-
|
33
|
-
|
34
|
-
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *2165491960
|
26
|
+
description: This package lets you download the popular JavaScript packages with one
|
27
|
+
command, thanks to www.cdnjs.com.
|
28
|
+
email:
|
35
29
|
- rico@sinefunc.com
|
36
|
-
executables:
|
30
|
+
executables:
|
37
31
|
- cdnjs
|
38
32
|
extensions: []
|
39
|
-
|
40
33
|
extra_rdoc_files: []
|
41
|
-
|
42
|
-
files:
|
34
|
+
files:
|
43
35
|
- bin/cdnjs
|
36
|
+
- lib/cdnjs_command/fetcher.rb
|
37
|
+
- lib/cdnjs_command/helpers.rb
|
38
|
+
- lib/cdnjs_command/package.rb
|
39
|
+
- lib/cdnjs_command/params.rb
|
40
|
+
- lib/cdnjs_command.rb
|
44
41
|
- HISTORY.md
|
45
42
|
- README.md
|
46
43
|
has_rdoc: true
|
47
44
|
homepage: http://github.com/rstacruz/cdnjs-command
|
48
45
|
licenses: []
|
49
|
-
|
50
46
|
post_install_message:
|
51
47
|
rdoc_options: []
|
52
|
-
|
53
|
-
require_paths:
|
48
|
+
require_paths:
|
54
49
|
- lib
|
55
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
51
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
version: "0"
|
63
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
57
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
- 0
|
70
|
-
version: "0"
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
71
62
|
requirements: []
|
72
|
-
|
73
63
|
rubyforge_project:
|
74
|
-
rubygems_version: 1.
|
64
|
+
rubygems_version: 1.6.2
|
75
65
|
signing_key:
|
76
66
|
specification_version: 3
|
77
67
|
summary: Command line helper for cdnjs.com.
|
78
68
|
test_files: []
|
79
|
-
|