assetify 2.0.1 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +69 -57
- data/Rakefile +1 -50
- data/bin/assetify +4 -8
- data/lib/assetify.rb +11 -11
- data/lib/assetify/asset.rb +47 -64
- data/lib/assetify/asset/pathfix.rb +17 -19
- data/lib/assetify/asset/pkg.rb +16 -16
- data/lib/assetify/assetfile.rb +11 -10
- data/lib/assetify/cli.rb +47 -15
- data/lib/assetify/cli/colored.rb +20 -22
- data/lib/assetify/cli/term.rb +6 -4
- data/lib/assetify/constants.rb +4 -5
- data/lib/assetify/dsl.rb +35 -35
- data/lib/assetify/extensions/string.rb +6 -8
- data/lib/assetify/gui.rb +4 -4
- data/lib/assetify/gui/server.rb +2 -3
- data/lib/assetify/helpers.rb +15 -17
- data/lib/assetify/version.rb +1 -1
- metadata +110 -126
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b4005c1682c1cff55d0313f562b681e700c8cecb
|
4
|
+
data.tar.gz: f29115ecf527d63aef20aa751658b259e1d2c99b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b1aacdb842207167e97ff3601348b08a6a8980dcc19adc6de3e70fe007e7dff0e32ca1928cfd98ca495b161fdf0c8b6782363666a919f13c59cce3643eda4d0b
|
7
|
+
data.tar.gz: 8250e7adc718a62f4d87092782a248a8e57767620fa922dfafbf52d7eb25c9d312b25811cf3c6c28ba0e31ff147d89972837a9bdd9f419d75274224a05556398
|
data/README.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
|
2
|
+
```
|
3
|
+
░█▀▀█ █▀▀ █▀▀ █▀▀ ▀▀█▀▀ ░▀░ █▀▀ █░░█
|
4
|
+
▒█▄▄█ ▀▀█ ▀▀█ █▀▀ ░▒█░░ ▀█▀ █▀▀ █▄▄█
|
5
|
+
▒█░▒█ ▀▀▀ ▀▀▀ ▀▀▀ ░▒█░░ ▀▀▀ ▀░░ ▄▄▄█
|
6
|
+
```
|
7
|
+
|
8
|
+
[![Gem Version](https://badge.fury.io/rb/assetify.svg)](http://badge.fury.io/rb/assetify)
|
9
|
+
[![Code Climate](https://codeclimate.com/github/nofxx/assetify.svg)](https://codeclimate.com/github/nofxx/assetify)
|
10
|
+
[![Coverage Status](https://coveralls.io/repos/nofxx/assetify/badge.svg?branch=master)](https://coveralls.io/r/nofxx/assetify?branch=master)
|
11
|
+
[![Dependency Status](https://gemnasium.com/nofxx/assetify.svg)](https://gemnasium.com/nofxx/assetify)
|
12
|
+
[![Build Status](https://travis-ci.org/nofxx/assetify.svg?branch=master)](https://travis-ci.org/nofxx/assetify)
|
13
|
+
|
14
|
+
|
1
15
|
Assetify
|
2
16
|
========
|
3
17
|
|
@@ -29,36 +43,36 @@ Assetfile
|
|
29
43
|
Like a `Gemfile`, but with fewer chars. Only one actually.
|
30
44
|
|
31
45
|
|
32
|
-
Behold the
|
46
|
+
Behold the `a`
|
33
47
|
--------------
|
34
48
|
|
35
|
-
a
|
36
|
-
a
|
37
|
-
a
|
49
|
+
a 'tipsy', 'http://...tipsy.js'
|
50
|
+
a 'tipsy', 'http://...tipsy.css'
|
51
|
+
a 'video', 'http://...video.mpeg'
|
38
52
|
|
39
53
|
|
40
|
-
There's also an alias
|
54
|
+
There's also an alias `asset` for `a`, if you enjoy typing:
|
41
55
|
|
42
56
|
|
43
|
-
asset
|
57
|
+
asset 'tipsy', 'http://...tipsy.js'
|
44
58
|
|
45
59
|
|
46
60
|
|
47
61
|
You can choose the filetype (or extension) before too:
|
48
62
|
|
49
|
-
type
|
63
|
+
type 'name', 'url', <'version'> or <:options>
|
50
64
|
|
51
|
-
js
|
52
|
-
js
|
65
|
+
js 'jquery', 'http://code.jquery.com/jquery-{VERSION}.min.js', '1.6'
|
66
|
+
js 'tipsy', 'https://github.com/jaz303/tipsy/.../jquery.tipsy.js'
|
53
67
|
|
54
68
|
|
55
69
|
Stylesheets:
|
56
70
|
|
57
|
-
css
|
71
|
+
css 'tipsy', 'https://github.com/jaz303/tipsy/.../jquery.tipsy.css'
|
58
72
|
|
59
73
|
Any file:
|
60
74
|
|
61
|
-
mp3
|
75
|
+
mp3 'alert', 'http://link/to/audio'
|
62
76
|
|
63
77
|
|
64
78
|
Now just run `assetify` to make sure everything is installed/up-to-date.
|
@@ -69,20 +83,20 @@ Groups
|
|
69
83
|
|
70
84
|
Use groups/namespaces to group related assets together:
|
71
85
|
|
72
|
-
group
|
73
|
-
js
|
74
|
-
js
|
86
|
+
group 'forms' do
|
87
|
+
js 'validator', url
|
88
|
+
js 'textmask', url
|
75
89
|
end
|
76
90
|
|
77
91
|
|
78
|
-
This will install as
|
92
|
+
This will install as `vendor/assets/javascripts/forms/validator.js`
|
79
93
|
|
80
94
|
You can nest groups too:
|
81
95
|
|
82
|
-
group
|
83
|
-
js
|
84
|
-
group
|
85
|
-
js
|
96
|
+
group 'forms' do
|
97
|
+
js 'validator', url
|
98
|
+
group 'extra' do
|
99
|
+
js 'another', url
|
86
100
|
end
|
87
101
|
end
|
88
102
|
|
@@ -92,27 +106,26 @@ Pkgs
|
|
92
106
|
|
93
107
|
Big projects makes you download tons of files for some .min files and css.
|
94
108
|
|
95
|
-
pkg
|
96
|
-
js
|
97
|
-
css
|
109
|
+
pkg 'fancy', 'http://to.tgz.or.zip' do
|
110
|
+
js 'cool', 'internal/js/cool.js'
|
111
|
+
css 'cool', 'internal/css/cool.css'
|
98
112
|
end
|
99
113
|
|
100
|
-
This downloads and
|
101
|
-
Files will be written with the namespace
|
114
|
+
This downloads and "cherry picks" the files.
|
115
|
+
Files will be written with the namespace `fancy`:
|
102
116
|
|
103
117
|
/javascripts/fancy/cool.js
|
104
118
|
|
105
|
-
You can pass :
|
119
|
+
You can pass `shallow: true` to avoid the namespace:
|
106
120
|
|
107
|
-
pkg
|
121
|
+
pkg 'fancy', 'http://to.tgz.or.zip', shallow: true do
|
108
122
|
|
109
123
|
Results in:
|
110
124
|
|
111
125
|
/javascript/cool.js
|
112
126
|
|
113
127
|
|
114
|
-
Also, please check out the note about
|
115
|
-
|
128
|
+
Also, please check out the note about links inside pkgs below.
|
116
129
|
|
117
130
|
|
118
131
|
Dir
|
@@ -121,15 +134,15 @@ ___
|
|
121
134
|
You can resource a full directory of files, too. Very useful when
|
122
135
|
dealing with pkgs:
|
123
136
|
|
124
|
-
pkg
|
125
|
-
js
|
126
|
-
dir
|
137
|
+
pkg 'complexfw', 'link' do
|
138
|
+
js 'complex.min.js'
|
139
|
+
dir 'images/', to: 'images/complexfw'
|
127
140
|
# Another option, treat`em all as filetype:
|
128
|
-
dir
|
141
|
+
dir 'src/', as: :js
|
129
142
|
end
|
130
143
|
|
131
|
-
All files inside images will be copied to
|
132
|
-
all files in
|
144
|
+
All files inside images will be copied to `images/complexfw` and
|
145
|
+
all files in `src` to `javascripts` (or whatever else jspath is).
|
133
146
|
|
134
147
|
|
135
148
|
Note: Have in mind that the "link" inside dir/packages *is a regex*
|
@@ -151,10 +164,10 @@ And every path corrected to use the pipeline.
|
|
151
164
|
|
152
165
|
Jquery Mobile example:
|
153
166
|
|
154
|
-
pkg :mobile,
|
155
|
-
js
|
156
|
-
css
|
157
|
-
dir
|
167
|
+
pkg :mobile, 'http://code.jquery.com....zip', shallow: true do
|
168
|
+
js 'mobile', 'mobile.js'
|
169
|
+
css 'mobile', 'mobile.css', as: :sass
|
170
|
+
dir 'images/*'
|
158
171
|
end
|
159
172
|
|
160
173
|
You just need:
|
@@ -163,9 +176,8 @@ You just need:
|
|
163
176
|
|
164
177
|
On application.css and application.js.
|
165
178
|
|
166
|
-
Images will be in
|
167
|
-
mobile.css corrected to
|
168
|
-
choose erb.
|
179
|
+
Images will be in `vendor/assets/mobile/*`, and the paths inside
|
180
|
+
mobile.css corrected to `image-url(mobile/*)`, or `<%%>` if it's erb.
|
169
181
|
|
170
182
|
This means you can have any third party library in the format
|
171
183
|
you like, always up-to-date. Easy to copy and customize parts
|
@@ -177,12 +189,12 @@ foo2bar
|
|
177
189
|
|
178
190
|
You can convert your assets to coffescript, sass or scss:
|
179
191
|
|
180
|
-
js
|
181
|
-
css
|
182
|
-
css
|
192
|
+
js 'fulib', 'http....', as: :coffee
|
193
|
+
css '1140', 'http....', as: :sass
|
194
|
+
css '1140', 'http....', as: :scss
|
183
195
|
|
184
196
|
Note: You do need aditional stuff for this.
|
185
|
-
Gem
|
197
|
+
Gem `sass` and/or node's `js2coffee` (install via npm).
|
186
198
|
|
187
199
|
|
188
200
|
minimagick
|
@@ -191,10 +203,10 @@ minimagick
|
|
191
203
|
Preprocess images is also possible:
|
192
204
|
|
193
205
|
|
194
|
-
png
|
206
|
+
png 'logo', 'http....', as: :jpg, quality: 75
|
195
207
|
|
196
208
|
|
197
|
-
Note: Need to install
|
209
|
+
Note: Need to install `imagemagick` and `minimagick` gem for this.
|
198
210
|
|
199
211
|
Versions
|
200
212
|
--------
|
@@ -210,10 +222,10 @@ Other
|
|
210
222
|
Set a different location per file:
|
211
223
|
|
212
224
|
|
213
|
-
js
|
225
|
+
js 'other', 'http://lib.../other.js', to: 'different/path'
|
214
226
|
|
215
227
|
Filename will be: ./different/path/other.js
|
216
|
-
This works for namespaces too,
|
228
|
+
This works for namespaces too, use `ns` instead of `to`.
|
217
229
|
|
218
230
|
|
219
231
|
|
@@ -223,15 +235,15 @@ Options
|
|
223
235
|
Change some default settings:
|
224
236
|
|
225
237
|
newname true || false
|
226
|
-
javascripts
|
227
|
-
stylesheets
|
228
|
-
images
|
238
|
+
javascripts 'public/javascripts'
|
239
|
+
stylesheets 'public/stylesheets'
|
240
|
+
images 'public/images'
|
229
241
|
|
230
242
|
If newname is set to true (default) the file will be renamed. Ex:
|
231
243
|
|
232
|
-
js
|
244
|
+
js 'validator', 'http//.../jquery.validator.min.js'
|
233
245
|
|
234
|
-
Filename will be:
|
246
|
+
Filename will be: `validator.js`
|
235
247
|
|
236
248
|
|
237
249
|
|
@@ -265,6 +277,6 @@ Contributing
|
|
265
277
|
Copyright
|
266
278
|
---------
|
267
279
|
|
268
|
-
Copyright (c) 2011 Marcos Piccinini.
|
269
|
-
further details.
|
270
|
-
|
280
|
+
Copyright (c) 2011 Marcos Piccinini.
|
281
|
+
See LICENSE.txt for further details.
|
282
|
+
ASCII Art by [FSymbols](http://fsymbols.com/generators/tarty)
|
data/Rakefile
CHANGED
@@ -1,50 +1 @@
|
|
1
|
-
|
2
|
-
require 'bundler'
|
3
|
-
Bundler.setup
|
4
|
-
|
5
|
-
#require "rake"
|
6
|
-
# require "rdoc/task"
|
7
|
-
# require "rspec"
|
8
|
-
# require "rspec/core/rake_task"
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
11
|
-
require "assetify/version"
|
12
|
-
|
13
|
-
task :gem => :build
|
14
|
-
task :build do
|
15
|
-
system "gem build assetify.gemspec"
|
16
|
-
end
|
17
|
-
|
18
|
-
task :install => :build do
|
19
|
-
system "sudo gem install assetify-#{Assetify::VERSION}.gem"
|
20
|
-
end
|
21
|
-
|
22
|
-
task :release => :build do
|
23
|
-
system "git tag -a v#{Assetify::VERSION} -m 'Tagging #{Assetify::VERSION}'"
|
24
|
-
system "git push --tags"
|
25
|
-
system "gem push assetify-#{Assetify::VERSION}.gem"
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
# require 'rspec/core'
|
30
|
-
# require 'rspec/core/rake_task'
|
31
|
-
# RSpec::Core::RakeTask.new(:spec) do |spec|
|
32
|
-
# spec.pattern = FileList['spec/**/*_spec.rb']
|
33
|
-
# end
|
34
|
-
|
35
|
-
# RSpec::Core::RakeTask.new(:rcov) do |spec|
|
36
|
-
# spec.pattern = 'spec/**/*_spec.rb'
|
37
|
-
# spec.rcov = true
|
38
|
-
# end
|
39
|
-
|
40
|
-
# task :default => :spec
|
41
|
-
|
42
|
-
# require 'rdoc/task'
|
43
|
-
# RDoc::Task.new do |rdoc|
|
44
|
-
# version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
45
|
-
|
46
|
-
# rdoc.rdoc_dir = 'rdoc'
|
47
|
-
# rdoc.title = "assetify #{version}"
|
48
|
-
# rdoc.rdoc_files.include('README*')
|
49
|
-
# rdoc.rdoc_files.include('lib/**/*.rb')
|
50
|
-
# end
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/assetify
CHANGED
@@ -5,10 +5,10 @@ require 'optparse'
|
|
5
5
|
require 'assetify'
|
6
6
|
|
7
7
|
opt = OptionParser.new do |o|
|
8
|
-
|
8
|
+
o.banner = <<BANNER
|
9
9
|
This is Assetify! What we`re going to do?
|
10
10
|
|
11
|
-
Usage: #{File.basename($
|
11
|
+
Usage: #{File.basename($PROGRAM_NAME)} command [args]
|
12
12
|
|
13
13
|
Commands:
|
14
14
|
|
@@ -22,13 +22,11 @@ Options:
|
|
22
22
|
|
23
23
|
BANNER
|
24
24
|
|
25
|
-
|
26
|
-
o.on('-
|
27
|
-
o.on('-d', "Verbose (Debug)") { Assetify::Opt[:debug] = true }
|
25
|
+
o.on('-h', 'Show help') { puts o; exit }
|
26
|
+
o.on('-d', 'Verbose (Debug)') { Assetify::Opt[:debug] = true }
|
28
27
|
o.parse!
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
30
|
begin
|
33
31
|
Assetify.work!(ARGV)
|
34
32
|
rescue Interrupt => e
|
@@ -36,5 +34,3 @@ rescue Interrupt => e
|
|
36
34
|
puts e.backtrace.join("\n")
|
37
35
|
exit 1
|
38
36
|
end
|
39
|
-
|
40
|
-
|
data/lib/assetify.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
# Options/Constants
|
2
|
-
require
|
2
|
+
require 'assetify/constants'
|
3
3
|
|
4
4
|
# Ruby Extensions
|
5
|
-
require
|
5
|
+
require 'assetify/extensions/string'
|
6
6
|
|
7
7
|
# Core
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
8
|
+
require 'assetify/helpers'
|
9
|
+
require 'assetify/assetfile'
|
10
|
+
require 'assetify/asset'
|
11
|
+
require 'assetify/dsl'
|
12
12
|
|
13
13
|
# Text Interface
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
14
|
+
require 'assetify/cli/term'
|
15
|
+
require 'assetify/cli/colored'
|
16
|
+
require 'assetify/cli'
|
17
17
|
|
18
18
|
# Web Interface
|
19
|
-
require
|
20
|
-
require
|
19
|
+
require 'assetify/gui/server'
|
20
|
+
require 'assetify/gui'
|
data/lib/assetify/asset.rb
CHANGED
@@ -1,28 +1,33 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'net/http'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'assetify/asset/pkg'
|
4
|
+
require 'assetify/asset/pathfix'
|
5
5
|
|
6
6
|
module Assetify
|
7
|
-
|
7
|
+
#
|
8
|
+
# What's an Asset?
|
9
|
+
#
|
8
10
|
class Asset
|
9
11
|
include Helpers
|
10
12
|
attr_accessor :type, :name, :url, :ns, :pkg, :ver, :ext, :as
|
11
13
|
|
12
|
-
def initialize(type, name, url, ver = nil, params={})
|
13
|
-
raise
|
14
|
-
raise
|
15
|
-
raise
|
16
|
-
@type
|
14
|
+
def initialize(type, name, url, ver = nil, params = {})
|
15
|
+
raise 'NoType' unless type
|
16
|
+
raise 'NoName' unless name
|
17
|
+
raise 'NoURL' unless url
|
18
|
+
@type = type
|
19
|
+
@name = name.to_s
|
17
20
|
@url = (@ver = ver) ? url.gsub(/{VERSION}/, @ver) : url
|
18
21
|
if @name =~ /\./
|
19
|
-
@name, @ext = name.split(
|
22
|
+
@name, @ext = name.split('.')
|
20
23
|
else
|
21
24
|
@ext = @type == :img ? find_ext_for(url) : @type
|
22
25
|
end
|
23
26
|
|
24
|
-
@pkg
|
25
|
-
@
|
27
|
+
@pkg = params[:pkg]
|
28
|
+
@as = params[:as]
|
29
|
+
@ns = params[:ns]
|
30
|
+
@to = params[:to] || ''
|
26
31
|
end
|
27
32
|
|
28
33
|
def filename
|
@@ -32,14 +37,14 @@ module Assetify
|
|
32
37
|
@filename
|
33
38
|
end
|
34
39
|
|
35
|
-
def find_ext_for
|
36
|
-
file.split(
|
40
|
+
def find_ext_for(file)
|
41
|
+
file.split('.').last[0, 3]
|
37
42
|
end
|
38
43
|
|
39
44
|
#
|
40
45
|
# Find correct path to put me
|
41
46
|
#
|
42
|
-
def find_path_for
|
47
|
+
def find_path_for(txt)
|
43
48
|
case txt
|
44
49
|
when /js/ then :javascripts
|
45
50
|
when /css|style/ then :stylesheets
|
@@ -49,12 +54,12 @@ module Assetify
|
|
49
54
|
|
50
55
|
def path
|
51
56
|
args = if @to.empty?
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
57
|
+
tpath = Opt[find_path_for(type)]
|
58
|
+
raise "Don`t know where to put #{type} files..." unless tpath
|
59
|
+
[tpath, @ns ? @ns.to_s : '']
|
60
|
+
else
|
61
|
+
[Dir.pwd, @to]
|
62
|
+
end
|
58
63
|
@path = File.join(args)
|
59
64
|
end
|
60
65
|
|
@@ -63,7 +68,7 @@ module Assetify
|
|
63
68
|
end
|
64
69
|
|
65
70
|
def file_exists?
|
66
|
-
File.
|
71
|
+
File.exist? fullpath
|
67
72
|
end
|
68
73
|
|
69
74
|
def data
|
@@ -77,6 +82,17 @@ module Assetify
|
|
77
82
|
@data
|
78
83
|
end
|
79
84
|
|
85
|
+
def read_data
|
86
|
+
@data = File.read(fullpath)
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Prints info about the asset (TODO: move this to cli...)
|
91
|
+
#
|
92
|
+
def header
|
93
|
+
"-> #{name}.#{type}"
|
94
|
+
end
|
95
|
+
|
80
96
|
#
|
81
97
|
# Asset version
|
82
98
|
#
|
@@ -86,50 +102,20 @@ module Assetify
|
|
86
102
|
end
|
87
103
|
|
88
104
|
def print_version
|
89
|
-
return
|
105
|
+
return '' unless ver
|
106
|
+
# chop to only first 10 chars if it's big hash
|
90
107
|
ver_str = ver.size > 10 ? ver[0..10] : ver[0]
|
91
108
|
"v#{ver_str}"
|
92
109
|
end
|
93
110
|
|
94
|
-
#
|
95
|
-
# Prints info about the asset (TODO: move this to cli...)
|
96
|
-
#
|
97
|
-
def header
|
98
|
-
LINE.p "-> #{name}.#{type}"
|
99
|
-
end
|
100
|
-
|
101
|
-
def check!
|
102
|
-
header
|
103
|
-
if file_exists? # Return if file is on path
|
104
|
-
@data = File.read(fullpath)
|
105
|
-
LINE.f "#{print_version}Installed"
|
106
|
-
else
|
107
|
-
LINE.f "Not Found", :red
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
111
|
#
|
112
112
|
# Write down asset to disk
|
113
113
|
#
|
114
|
-
def install!(
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
120
|
-
begin
|
121
|
-
# Creates a thread to insert dots while downloading
|
122
|
-
points = Thread.new { loop do; LINE.p "."; sleep 1; end }
|
123
|
-
|
124
|
-
write data
|
125
|
-
LINE.f "#{print_version}ok"
|
126
|
-
rescue => e
|
127
|
-
LINE.f :FAIL, :red
|
128
|
-
p "Fail: #{e} #{e.backtrace}"
|
129
|
-
ensure
|
130
|
-
points.kill
|
131
|
-
end
|
132
|
-
|
114
|
+
def install!(_force = false)
|
115
|
+
write data
|
116
|
+
rescue => e
|
117
|
+
LINE.f :FAIL, :red
|
118
|
+
p "Fail: #{e} #{e.backtrace}"
|
133
119
|
end
|
134
120
|
|
135
121
|
class << self
|
@@ -140,15 +126,12 @@ module Assetify
|
|
140
126
|
@all ||= Assetfile.read
|
141
127
|
end
|
142
128
|
|
143
|
-
def filter
|
129
|
+
def filter(params)
|
144
130
|
all.select do |a|
|
145
131
|
blob = "#{a.name}#{a.pkg.name if a.pkg}"
|
146
132
|
blob.include? params
|
147
133
|
end
|
148
134
|
end
|
149
|
-
|
150
135
|
end
|
151
|
-
|
152
136
|
end
|
153
|
-
|
154
137
|
end
|