ir_helper 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/app/assets/javascripts/image_resizer.js.erb +76 -1
- data/lib/ir_helper/helper.rb +60 -1
- data/lib/ir_helper/version.rb +1 -1
- data/lib/ir_helper.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a4d7140747ce0fd13a2ac7ada02ddbb5ec65f72
|
4
|
+
data.tar.gz: 26f00987d59e1f968bda514cb3047c33c43484ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c89b42fdc67710de9731b235aa30b5f1822e4064da179fb8be0d43e8804527b223592f3b63da7befb997ea3bf9b9ae7227f61d65540844b6b6d2082fd2bd9941
|
7
|
+
data.tar.gz: f85378405c8d84fb71d0e393d12ecc8daa677a87280d142977a1637ee190293655b78ceb17cd8725c355f4cbe0d5a1f4638d0b909878aa98167265cdb8342c14
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ This gem includes helpers to build the appropriate URLs for images served via an
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem '
|
9
|
+
gem 'ir_helper'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -14,7 +14,7 @@ And then execute:
|
|
14
14
|
|
15
15
|
Or install it yourself as:
|
16
16
|
|
17
|
-
$ gem install
|
17
|
+
$ gem install ir_helper
|
18
18
|
|
19
19
|
## Configuration
|
20
20
|
Configuring this gem is done via:
|
@@ -76,6 +76,8 @@ Javascript helper for building `image-resizer` url endpoints
|
|
76
76
|
if (uri && urlDomain(uri.hostname) === 'facebook'){
|
77
77
|
modArr.push('efacebook');
|
78
78
|
}
|
79
|
+
modArr = cdnModArr(uri, modArr);
|
80
|
+
modArr = modArr.sort();
|
79
81
|
return modArr.length > 0 ? '/' + modArr.join('-') : '';
|
80
82
|
};
|
81
83
|
|
@@ -103,9 +105,40 @@ Javascript helper for building `image-resizer` url endpoints
|
|
103
105
|
return modArr;
|
104
106
|
};
|
105
107
|
|
108
|
+
function cdnModArr(uri, modArr){
|
109
|
+
var modStr, mods, i;
|
110
|
+
|
111
|
+
if (uri && urlDomain(uri.host) === 'cdn'){
|
112
|
+
modStr = uri.pathname.split('/')[1];
|
113
|
+
if (hasModifierStr(modStr)){
|
114
|
+
mods = modStr.split('-');
|
115
|
+
|
116
|
+
// if no mods are specified then use those from the existing url
|
117
|
+
if (modArr.length === 0){
|
118
|
+
modArr = mods;
|
119
|
+
}
|
120
|
+
|
121
|
+
// if there are mods specified then only add any existing external
|
122
|
+
// source or filter modifiers
|
123
|
+
else {
|
124
|
+
for (i=0; i < mods.length; i++){
|
125
|
+
if (mods[i][0] === 'e' || mods[i][0] === 'f'){
|
126
|
+
modArr.push(mods[i]);
|
127
|
+
}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
return modArr;
|
134
|
+
};
|
135
|
+
|
106
136
|
function buildPath(uri, modifiers){
|
107
137
|
if(uri){
|
108
138
|
switch(urlDomain(uri.hostname)){
|
139
|
+
case 'cdn':
|
140
|
+
return cdnObject(uri);
|
141
|
+
break
|
109
142
|
case 's3':
|
110
143
|
return s3Object(uri);
|
111
144
|
break;
|
@@ -125,7 +158,11 @@ Javascript helper for building `image-resizer` url endpoints
|
|
125
158
|
};
|
126
159
|
|
127
160
|
function urlDomain(host){
|
128
|
-
var domain = 'other'
|
161
|
+
var domain = 'other',
|
162
|
+
cdnRe = new RegExp(URI(IR.CDN).hostname, 'i');
|
163
|
+
if (cdnRe.test(host)){
|
164
|
+
domain = 'cdn';
|
165
|
+
}
|
129
166
|
if (/s3.amazonaws.com/i.test(host)){
|
130
167
|
domain = 's3';
|
131
168
|
}
|
@@ -135,6 +172,44 @@ Javascript helper for building `image-resizer` url endpoints
|
|
135
172
|
return domain;
|
136
173
|
};
|
137
174
|
|
175
|
+
// Get the path of an already IR'd url, basically make sure we remove the
|
176
|
+
// modifier string if it is present
|
177
|
+
function cdnObject(uri){
|
178
|
+
var parts = uri.pathname.split('/');
|
179
|
+
|
180
|
+
// test to see if there is an existing modifier string in place
|
181
|
+
if (hasModifierStr(parts[1])){
|
182
|
+
return '/' + parts.slice(2).join('/');
|
183
|
+
}
|
184
|
+
|
185
|
+
return uri.pathname;
|
186
|
+
};
|
187
|
+
|
188
|
+
function hasModifierStr(part){
|
189
|
+
var items, i, item, key, value, flag, v;
|
190
|
+
|
191
|
+
items = part.split('-');
|
192
|
+
for (i in items){
|
193
|
+
item = items[i];
|
194
|
+
key = item[0];
|
195
|
+
value = item.slice(1);
|
196
|
+
flag = false;
|
197
|
+
v = modSet(key);
|
198
|
+
if (v){
|
199
|
+
if (v.values){
|
200
|
+
flag = true;
|
201
|
+
} else {
|
202
|
+
flag = 1 * value > 0;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
if (flag){
|
206
|
+
return true;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
|
210
|
+
return false;
|
211
|
+
};
|
212
|
+
|
138
213
|
function s3Object(uri){
|
139
214
|
if (uri.hostname === 's3.amazonaws.com'){
|
140
215
|
return '/' + uri.pathname.split('/').slice(2).join('/');
|
data/lib/ir_helper/helper.rb
CHANGED
@@ -46,7 +46,7 @@ module IrHelper
|
|
46
46
|
|
47
47
|
def mod_set(key)
|
48
48
|
mods.each do |k, v|
|
49
|
-
return v if key == k || v[:alias] == key
|
49
|
+
return v if key.to_sym == k || v[:alias] == key
|
50
50
|
end
|
51
51
|
nil
|
52
52
|
end
|
@@ -84,6 +84,8 @@ module IrHelper
|
|
84
84
|
end
|
85
85
|
mod_arr << 'efacebook' if uri && url_domain(uri.host) == :facebook
|
86
86
|
mod_arr.compact
|
87
|
+
mod_arr = cdn_mod_arr(uri, mod_arr)
|
88
|
+
mod_arr = mod_arr.sort
|
87
89
|
mod_arr.length > 0 ? "/#{mod_arr.join('-')}" : ''
|
88
90
|
end
|
89
91
|
|
@@ -105,9 +107,33 @@ module IrHelper
|
|
105
107
|
end
|
106
108
|
end
|
107
109
|
|
110
|
+
def cdn_mod_arr(uri, mod_arr)
|
111
|
+
if uri && url_domain(uri.host) == :cdn
|
112
|
+
mod = uri.path.split('/')[1]
|
113
|
+
if has_modifier_str(mod)
|
114
|
+
mods = mod.split('-')
|
115
|
+
# if no mods are specified then use those from the existing url
|
116
|
+
if mod_arr.length == 0
|
117
|
+
mod_arr = mods
|
118
|
+
|
119
|
+
# if there are mods specified then only add any existing external
|
120
|
+
# source or filter modifiers
|
121
|
+
else
|
122
|
+
mods.each do |m|
|
123
|
+
mod_arr << m if ['e','f'].include?(m[0])
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
mod_arr
|
130
|
+
end
|
131
|
+
|
108
132
|
def build_path(uri, modifiers)
|
109
133
|
if uri
|
110
134
|
case url_domain(uri.host)
|
135
|
+
when :cdn
|
136
|
+
cdn_object uri
|
111
137
|
when :s3
|
112
138
|
s3_object uri
|
113
139
|
when :facebook
|
@@ -123,11 +149,44 @@ module IrHelper
|
|
123
149
|
end
|
124
150
|
|
125
151
|
def url_domain(host)
|
152
|
+
return :cdn if /#{URI(cdn).host}/i =~ host
|
126
153
|
return :s3 if /s3.amazonaws.com/i =~ host
|
127
154
|
return :facebook if /facebook.com/i =~ host
|
128
155
|
:other
|
129
156
|
end
|
130
157
|
|
158
|
+
# Get the path of an already IR'd url, basically make sure we remove the
|
159
|
+
# modifier string if it is present
|
160
|
+
def cdn_object(uri)
|
161
|
+
parts = uri.path.split('/')
|
162
|
+
|
163
|
+
# test to see if there is an existing modifier string in place
|
164
|
+
if has_modifier_str(parts[1])
|
165
|
+
"/#{parts[2..-1].join('/')}"
|
166
|
+
else
|
167
|
+
uri.path
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def has_modifier_str(part)
|
172
|
+
part.split('-').each do |item|
|
173
|
+
key = item[0]
|
174
|
+
value = item[1..-1]
|
175
|
+
flag = if v = mod_set(key)
|
176
|
+
if v.include?(:values)
|
177
|
+
v[:values].include?(value)
|
178
|
+
else
|
179
|
+
value.to_i > 0
|
180
|
+
end
|
181
|
+
else
|
182
|
+
false
|
183
|
+
end
|
184
|
+
return true if flag
|
185
|
+
end
|
186
|
+
|
187
|
+
false
|
188
|
+
end
|
189
|
+
|
131
190
|
def s3_object(uri)
|
132
191
|
# test to see which type of s3 url we have
|
133
192
|
if uri.host == 's3.amazonaws.com'
|
data/lib/ir_helper/version.rb
CHANGED
data/lib/ir_helper.rb
CHANGED