torba 0.3.0 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +21 -23
- data/lib/torba/css_url_to_erb_asset_path.rb +18 -11
- data/lib/torba.rb +2 -2
- data/test/acceptance_test.rb +4 -4
- data/test/css_url_to_erb_asset_path_test.rb +48 -0
- data/torba.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74c50af6fd600841ed420a3ffe0df1b6b471d97f
|
4
|
+
data.tar.gz: 976c74cdce2db8e851ae2e7c439bdc2ce7827b91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4c5a9cad8a21318f7dc823937bd046aec8cde1735831620580240b9b87d3c1dec258a009fe499e0bd639dfd43c89ccd1a1bf039c3550ed10dc19572617957a2
|
7
|
+
data.tar.gz: 73718d27fe6bf5ce7e204926397c76b40fa16487dc689554e93d2adb2838dce0fc4182f5b08fea2be211f9f0253dc6cc8a95691cc52257e507db996c9c01a5d6
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -21,24 +21,22 @@ Production ready.
|
|
21
21
|
|
22
22
|
## Why
|
23
23
|
|
24
|
-
De facto approach, i.e. wrapping JS and CSS libraries in a gem, requires
|
25
|
-
maintainer to constantly track changes in upstream repository. Even more, if
|
26
|
-
maintainer stops using
|
27
|
-
|
24
|
+
De facto approach, i.e. wrapping JS and CSS libraries in a gem, requires a
|
25
|
+
maintainer to constantly track changes in an upstream repository. Even more so, if a gem
|
26
|
+
maintainer stops using that specific library, the gem will eventually become abandoned.
|
27
|
+
Additionally, many libraries still have no gem wrappers.
|
28
28
|
|
29
|
-
|
29
|
+
Other alternatives:
|
30
30
|
|
31
|
-
* [rails-assets][rails-assets]
|
32
|
-
* [bower-rails][bower-rails]
|
31
|
+
* [rails-assets][rails-assets] relies on Bower *and* it is quite complex,
|
32
|
+
* [bower-rails][bower-rails] relies on Bower, see below for why this can be an issue.
|
33
33
|
|
34
34
|
Problems with the Bower:
|
35
35
|
|
36
|
-
* it is not a part of Ruby ecosystem,
|
37
|
-
* frontend JS libraries are usually standalone (except for jQuery dependency), so there's
|
38
|
-
no need for complex Bundler-like solution with tree-dependency resolution,
|
39
|
-
* often we can't use optimistic version constraints, because
|
40
|
-
fully grasp the idea of [Semver][semver]. By specifying strict versions we use Bower
|
41
|
-
as a complex facade for functionality that could be done by curl.
|
36
|
+
* it is not a part of the Ruby ecosystem,
|
37
|
+
* frontend JS libraries are usually standalone (except for a potential jQuery dependency), so there's
|
38
|
+
no need for a complex Bundler-like solution with tree-dependency resolution,
|
39
|
+
* often we can't use optimistic version constraints, because the JavaScript community does not consistenly apply the principles of [Semver][semver]. By specifying strict versions we use Bower as a complex facade for functionality that could be accomplished with curl.
|
42
40
|
|
43
41
|
## External dependencies
|
44
42
|
|
@@ -49,9 +47,9 @@ Problems with the Bower:
|
|
49
47
|
|
50
48
|
## Design limitations
|
51
49
|
|
52
|
-
* Torba doesn't do any version dependency resolution, it's up to you to specify correct version of
|
50
|
+
* Torba doesn't do any version dependency resolution, it's up to you to specify the correct version of
|
53
51
|
each asset package,
|
54
|
-
* Torba doesn't do any builds, use remote sources with pre-built assets.
|
52
|
+
* Torba doesn't do any builds, you should use remote sources with pre-built assets.
|
55
53
|
|
56
54
|
## Installation
|
57
55
|
|
@@ -183,16 +181,16 @@ When you run `torba pack` the following happens:
|
|
183
181
|
|
184
182
|
1. All remote sources are cached locally.
|
185
183
|
|
186
|
-
2. Archives are unpacked with top level directory removed. This is done for good
|
187
|
-
usually contains package version, e.g. "react-0.13.2", and you don't want to reference versions
|
184
|
+
2. Archives are unpacked with top level directory removed. This is done for good because it
|
185
|
+
usually contains the package version in the name, e.g. "react-0.13.2", and you don't want to have to reference versions
|
188
186
|
inside your application code (except Torbafile).
|
189
187
|
|
190
188
|
3. Remote source's content is copied as is to the `Torba.home_path` location with **package name used
|
191
189
|
as a namespace**.
|
192
190
|
|
193
|
-
This is also done for good in order to avoid name collisions (since many JS projects can have
|
194
|
-
assets with the same names and all packages are placed into
|
195
|
-
The downside is that you have to use
|
191
|
+
This is also done for good reason in order to avoid name collisions (since many JS projects can have
|
192
|
+
assets with the same names and all packages are placed into Sprockets' shared virtual filesystem).
|
193
|
+
The downside is that you have to use namespaces in each require directive, which can lead to
|
196
194
|
duplication:
|
197
195
|
|
198
196
|
```javascript
|
@@ -211,8 +209,8 @@ statements.
|
|
211
209
|
|
212
210
|
### :import option
|
213
211
|
|
214
|
-
Copying whole remote source's content has
|
215
|
-
require/import directives. For example, if an archive contains
|
212
|
+
Copying whole remote source's content has the disadvantage of using remote source specific paths in your
|
213
|
+
require/import directives. For example, if an archive contains files in the "dist/css" directory, you'll have
|
216
214
|
to mention it:
|
217
215
|
|
218
216
|
```css
|
@@ -220,7 +218,7 @@ to mention it:
|
|
220
218
|
@import 'lightslider/dist/css/lightslider';
|
221
219
|
```
|
222
220
|
|
223
|
-
To mitigate this you can cherry-pick files from the source via "import" option, for example:
|
221
|
+
To mitigate this you can cherry-pick files from the source via the "import" option, for example:
|
224
222
|
|
225
223
|
```
|
226
224
|
gh_release "lightslider", source: "sachinchoolur/lightslider", tag: "1.1.2", import: %w[
|
@@ -4,15 +4,22 @@ module Torba
|
|
4
4
|
class CssUrlToErbAssetPath
|
5
5
|
URL_RE =
|
6
6
|
/
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
( # $1
|
8
|
+
url\( # url(
|
9
|
+
\s* # optional space
|
10
|
+
(?!data) # no data URIs
|
11
|
+
['"]? # optional quote
|
12
|
+
(?!\/) # only relative location
|
13
|
+
)
|
14
|
+
( # $2
|
15
|
+
[^'"?#]+? # location
|
16
|
+
)
|
17
|
+
( # $3
|
18
|
+
([?#][^'"]+?)? # optional query or fragment
|
19
|
+
['"]? # optional quote
|
20
|
+
\s* # optional space
|
21
|
+
\) # )
|
22
|
+
)
|
16
23
|
/xm
|
17
24
|
|
18
25
|
# @return [String] CSS file content where image "url(...)" paths are replaced by ERB
|
@@ -42,9 +49,9 @@ module Torba
|
|
42
49
|
# }"
|
43
50
|
def self.call(content, file_path)
|
44
51
|
content.gsub(URL_RE) do
|
45
|
-
absolute_image_file_path = File.expand_path($
|
52
|
+
absolute_image_file_path = File.expand_path($2, File.dirname(file_path))
|
46
53
|
sprockets_file_path = yield absolute_image_file_path
|
47
|
-
"
|
54
|
+
"#{$1}<%= asset_path('#{sprockets_file_path}') %>#{$3}"
|
48
55
|
end
|
49
56
|
end
|
50
57
|
end
|
data/lib/torba.rb
CHANGED
@@ -86,8 +86,8 @@ module Torba
|
|
86
86
|
ui.suggest "Make sure that the path has trailing '/' if its a directory."
|
87
87
|
exit(false)
|
88
88
|
rescue Errors::AssetNotFound => e
|
89
|
-
ui.error "Couldn't
|
90
|
-
ui.suggest "Make sure that you've imported all image assets mentioned in a stylesheet(-s)."
|
89
|
+
ui.error "Couldn't find an asset with path '#{e.message}'."
|
90
|
+
ui.suggest "Make sure that you've imported all image/font assets mentioned in a stylesheet(-s)."
|
91
91
|
exit(false)
|
92
92
|
end
|
93
93
|
end
|
data/test/acceptance_test.rb
CHANGED
@@ -55,8 +55,8 @@ module Torba
|
|
55
55
|
assert_exists "trumbowyg/icons-2x.png"
|
56
56
|
|
57
57
|
css = read_path "trumbowyg/trumbowyg.css.erb"
|
58
|
-
assert_includes css,
|
59
|
-
assert_includes css,
|
58
|
+
assert_includes css, %[background: transparent url("<%= asset_path('trumbowyg/icons.png') %>") no-repeat;]
|
59
|
+
assert_includes css, %[background-image: url("<%= asset_path('trumbowyg/icons-2x.png') %>")]
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_targz
|
@@ -72,8 +72,8 @@ module Torba
|
|
72
72
|
assert_exists "trumbowyg-from-tar/images/icons-2x.png"
|
73
73
|
|
74
74
|
css = read_path "trumbowyg-from-tar/trumbowyg.css.erb"
|
75
|
-
assert_includes css,
|
76
|
-
assert_includes css,
|
75
|
+
assert_includes css, %[background: transparent url("<%= asset_path('trumbowyg-from-tar/images/icons.png') %>") no-repeat;]
|
76
|
+
assert_includes css, %[background-image: url("<%= asset_path('trumbowyg-from-tar/images/icons-2x.png') %>")]
|
77
77
|
end
|
78
78
|
|
79
79
|
def test_npm
|
@@ -71,5 +71,53 @@ module Torba
|
|
71
71
|
end
|
72
72
|
assert_equal "background-image: url('<%= asset_path('ui/images/icons.png') %>');", new_content
|
73
73
|
end
|
74
|
+
|
75
|
+
def test_url_with_iefix_query
|
76
|
+
current_file = "/home/dist/ui/stylesheet.css"
|
77
|
+
css = <<-CSS
|
78
|
+
@font-face {
|
79
|
+
font-family: "Material-Design-Icons";
|
80
|
+
src: url("../font/material-design-icons/Material-Design-Icons.eot?#iefix") format("embedded-opentype");
|
81
|
+
font-weight: normal;
|
82
|
+
font-style: normal; }
|
83
|
+
CSS
|
84
|
+
|
85
|
+
new_content = filter.call(css, current_file) do |image_full_url|
|
86
|
+
assert_equal "/home/dist/font/material-design-icons/Material-Design-Icons.eot", image_full_url
|
87
|
+
"material-design-icons/Material-Design-Icons.eot"
|
88
|
+
end
|
89
|
+
|
90
|
+
assert_equal <<-CSS, new_content
|
91
|
+
@font-face {
|
92
|
+
font-family: "Material-Design-Icons";
|
93
|
+
src: url("<%= asset_path('material-design-icons/Material-Design-Icons.eot') %>?#iefix") format("embedded-opentype");
|
94
|
+
font-weight: normal;
|
95
|
+
font-style: normal; }
|
96
|
+
CSS
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_url_with_svg_fragment
|
100
|
+
current_file = "/home/dist/ui/stylesheet.css"
|
101
|
+
css = <<-CSS
|
102
|
+
@font-face {
|
103
|
+
font-family: "Material-Design-Icons";
|
104
|
+
src: url("../font/material-design-icons/Material-Design-Icons.svg#Material-Design-Icons") format("svg");
|
105
|
+
font-weight: normal;
|
106
|
+
font-style: normal; }
|
107
|
+
CSS
|
108
|
+
|
109
|
+
new_content = filter.call(css, current_file) do |image_full_url|
|
110
|
+
assert_equal "/home/dist/font/material-design-icons/Material-Design-Icons.svg", image_full_url
|
111
|
+
"material-design-icons/Material-Design-Icons.svg"
|
112
|
+
end
|
113
|
+
|
114
|
+
assert_equal <<-CSS, new_content
|
115
|
+
@font-face {
|
116
|
+
font-family: "Material-Design-Icons";
|
117
|
+
src: url("<%= asset_path('material-design-icons/Material-Design-Icons.svg') %>#Material-Design-Icons") format("svg");
|
118
|
+
font-weight: normal;
|
119
|
+
font-style: normal; }
|
120
|
+
CSS
|
121
|
+
end
|
74
122
|
end
|
75
123
|
end
|
data/torba.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: torba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Malyshko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|