cdnjs-command 0.0.1
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/README.md +44 -0
- data/bin/cdnjs +215 -0
- metadata +68 -0
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# cdnjs-command
|
2
|
+
#### Command line helper for cdnjs.com.
|
3
|
+
|
4
|
+
This makes including JS files in your project easy-peasy. To add a JS libary
|
5
|
+
to your project:
|
6
|
+
|
7
|
+
$ cdnjs jquery
|
8
|
+
Created jquery-1.5.1.js.
|
9
|
+
|
10
|
+
You probably want to link the online version as well:
|
11
|
+
|
12
|
+
$ cdnjs html jquery
|
13
|
+
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'></script>
|
14
|
+
|
15
|
+
Or you may want just the URL:
|
16
|
+
|
17
|
+
$ cdnjs url underscore
|
18
|
+
http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js
|
19
|
+
|
20
|
+
## Installation
|
21
|
+
|
22
|
+
Copy `bin/cdnjs` into your PATH somewhere, or use `gem install cdnjs-command`.
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
Usage:
|
27
|
+
cdnjs NAME - Download specific package
|
28
|
+
|
29
|
+
Other commands:
|
30
|
+
cdnjs list - List available packages
|
31
|
+
cdnjs info NAME - Show package info
|
32
|
+
cdnjs html NAME - Show HTML snippet to include given package
|
33
|
+
cdnjs url NAME - Show the URL for the given package
|
34
|
+
cdnjs update - Updates the package cache
|
35
|
+
|
36
|
+
You may also use the first letters of each command; e.g., `cdnjs i jquery`.
|
37
|
+
Here are some common examples:
|
38
|
+
|
39
|
+
$ cdnjs jquery
|
40
|
+
$ echo `cdnjs h underscore` >> index.html
|
41
|
+
|
42
|
+
## Acknowledgements
|
43
|
+
|
44
|
+
* [www.cdnjs.com](http://cdnjs.com)
|
data/bin/cdnjs
ADDED
@@ -0,0 +1,215 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'open-uri'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
CDNJS_VERSION = "0.0.1"
|
7
|
+
|
8
|
+
module Params;
|
9
|
+
def extract(what) i = index(what) and slice!(i, 2)[1] end;
|
10
|
+
def first_is(what) shift if what.include?(self.first); end
|
11
|
+
def self.[](*what) what.extend Params; end
|
12
|
+
def ===(argv) argv.first_is(self); end
|
13
|
+
end
|
14
|
+
|
15
|
+
ARGV.extend Params
|
16
|
+
|
17
|
+
# ============================================================================
|
18
|
+
|
19
|
+
module Fetcher
|
20
|
+
CACHE_PATH = "~/.cache/cdnjs"
|
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
|
56
|
+
|
57
|
+
class Package
|
58
|
+
INDEX_URL = 'http://cdnjs.com/packages.json'
|
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
|
73
|
+
|
74
|
+
def basename
|
75
|
+
"#{name}-#{version}.js"
|
76
|
+
end
|
77
|
+
|
78
|
+
def url
|
79
|
+
if @filename =~ /^http/
|
80
|
+
@filename
|
81
|
+
else
|
82
|
+
"http://ajax.cdnjs.com/ajax/libs/#{data['name']}/#{version}/#{@filename}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return Array of {Package}s
|
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
|
94
|
+
|
95
|
+
def self.fetch(url)
|
96
|
+
Fetcher.fetch(INDEX_URL).force_encoding('utf-8')
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.[](id)
|
100
|
+
all.detect { |pkg| pkg.name == id } ||
|
101
|
+
all.detect { |pkg| pkg.name[0...id.size] == id }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# ============================================================================
|
106
|
+
# Helpers
|
107
|
+
|
108
|
+
def tip(message)
|
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
|
+
puts pkg.url
|
169
|
+
|
170
|
+
when Params['info', 'i']
|
171
|
+
name = ARGV.shift or invalid_usage("cdnjs info NAME")
|
172
|
+
pkg = get_package(name)
|
173
|
+
|
174
|
+
puts "%s (%s)" % [ pkg.name, pkg.version ]
|
175
|
+
puts ""
|
176
|
+
puts "%-10s %s" % [ "URL:", pkg.url ]
|
177
|
+
puts "%-10s %s" % [ "Homepage:", pkg.homepage ]
|
178
|
+
puts ""
|
179
|
+
puts pkg.description
|
180
|
+
puts ""
|
181
|
+
puts "<!-- Include this library in your project with: -->"
|
182
|
+
puts "<script src='#{pkg.url}'></script>"
|
183
|
+
|
184
|
+
if pkg.url =~ /^https/
|
185
|
+
puts ""
|
186
|
+
puts "<!-- (You may need to replace 'https' with 'http'.) -->"
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
p pkg if ARGV.delete('-v')
|
191
|
+
|
192
|
+
when Params['update']
|
193
|
+
Fetcher.purge
|
194
|
+
Package.all
|
195
|
+
tip "Done."
|
196
|
+
|
197
|
+
else
|
198
|
+
name = ARGV.shift or (show_help; exit)
|
199
|
+
pkg = Package[name] or begin
|
200
|
+
if ARGV.empty?
|
201
|
+
puts "Invalid package name."
|
202
|
+
else
|
203
|
+
puts "Invalid usage."
|
204
|
+
end
|
205
|
+
puts "For a list of all packages: cdnjs list"
|
206
|
+
puts "For more help: cdnjs --help"
|
207
|
+
exit
|
208
|
+
end
|
209
|
+
|
210
|
+
data = Fetcher.fetch(pkg.url)
|
211
|
+
File.open(pkg.basename, 'w') { |f| f.write data }
|
212
|
+
|
213
|
+
tip "Created #{pkg.basename}."
|
214
|
+
end
|
215
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cdnjs-command
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Rico Sta. Cruz
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-27 00:00:00 +08:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: json
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description: This package lets you download the popular JavaScript packages with one command, thanks to www.cdnjs.com.
|
28
|
+
email:
|
29
|
+
- rico@sinefunc.com
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- bin/cdnjs
|
38
|
+
- README.md
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: http://github.com/rstacruz/cdnjs-command
|
41
|
+
licenses: []
|
42
|
+
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
requirements: []
|
61
|
+
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 1.5.0
|
64
|
+
signing_key:
|
65
|
+
specification_version: 3
|
66
|
+
summary: Command line helper for cdnjs.com.
|
67
|
+
test_files: []
|
68
|
+
|