image-resizer-rails 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -6
- data/app/assets/javascripts/image_resizer.js.erb +10 -10
- data/app/helpers/ir_helper/ir_helper.rb +12 -0
- data/lib/ir_helper.rb +92 -0
- data/lib/ir_helper/engine.rb +7 -0
- data/lib/ir_helper/helper.rb +149 -0
- data/lib/ir_helper/version.rb +3 -0
- metadata +25 -25
- data/app/helpers/image/resizer/rails/ir_helper.rb +0 -16
- data/lib/image/resizer/rails.rb +0 -94
- data/lib/image/resizer/rails/engine.rb +0 -11
- data/lib/image/resizer/rails/helper.rb +0 -153
- data/lib/image/resizer/rails/version.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acc2c0bea99f9a078dafeef5d1e11c6f550a5a3f
|
4
|
+
data.tar.gz: b7f9b743d92715f8e0986d46641a1c928b9247e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8132850457c9943e4420d9f34a70563bd7cc9517c00ce8e61f0bf58b8ed3f80817942cc93079829e92c26ffbd5b3796d4cb80a1548f31615ba33fe734b0eef3c
|
7
|
+
data.tar.gz: f0c74218e8402ae6e2be6e38032746ab152957c71d466861d8556afaafd0b4b9d7643dca516a34b08a9d3d28992ec08924b00fcadfc93cb46293e9f98b3d9d91
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# IrHelper
|
2
2
|
|
3
3
|
This gem includes helpers to build the appropriate URLs for images served via an [image-resizer](https://github.com/jimmynicol/image-resizer) instance.
|
4
4
|
|
@@ -19,7 +19,7 @@ Or install it yourself as:
|
|
19
19
|
## Configuration
|
20
20
|
Configuring this gem is done via:
|
21
21
|
|
22
|
-
|
22
|
+
IrHelper.configure do |config|
|
23
23
|
# add your configuration here...
|
24
24
|
end
|
25
25
|
|
@@ -83,13 +83,13 @@ Or just return the url as needed
|
|
83
83
|
|
84
84
|
The Javascript helper is generated from the config data as an `.erb` file on load. So all of the new modifiers or sources added will be reflected, as well as any aliases set.
|
85
85
|
|
86
|
-
The JS helper (`image_resizer.js`) is either attached as a global, or can be loaded via AMD or CommonJS if you are using those techniques. It has the same helper methods as the ruby helper.
|
86
|
+
The JS helper (`image_resizer.js`) is either attached as a global, or can be loaded via AMD or CommonJS if you are using those techniques. It has the same helper methods as the ruby helper.
|
87
87
|
|
88
88
|
<script>
|
89
89
|
var imgUrl = 'https://s3.amazonaws.com/sample.bucket/path/to/image.jpg';
|
90
|
-
$('#image-tag').append(
|
91
|
-
$('#image-bg').attr('style',
|
92
|
-
$('#image-url').text(
|
90
|
+
$('#image-tag').append(IR.irImageTag(imgUrl, {s:200}));
|
91
|
+
$('#image-bg').attr('style', IR.irBackground(imgUrl, {s:200}));
|
92
|
+
$('#image-url').text(IR.irImageTag(imgUrl, {s:200}));
|
93
93
|
</script>
|
94
94
|
<div id="image-tag"></div>
|
95
95
|
<div id="image-bg"></div>
|
@@ -18,7 +18,7 @@ Javascript helper for building `image-resizer` url endpoints
|
|
18
18
|
|
19
19
|
// Finally, as a browser global.
|
20
20
|
} else {
|
21
|
-
root.<%=
|
21
|
+
root.<%= IrHelper.js_class %> = factory(root);
|
22
22
|
}
|
23
23
|
|
24
24
|
}(this, function(root){
|
@@ -180,21 +180,21 @@ Javascript helper for building `image-resizer` url endpoints
|
|
180
180
|
};
|
181
181
|
|
182
182
|
// Public constants
|
183
|
-
IR.modifiers = <%=
|
183
|
+
IR.modifiers = <%= IrHelper.modifiers.to_json %>;
|
184
184
|
|
185
|
-
IR.CDN = <%=
|
185
|
+
IR.CDN = <%= IrHelper.cdn.to_json %>;
|
186
186
|
|
187
|
-
IR.VERSION = <%=
|
187
|
+
IR.VERSION = <%= IrHelper::VERSION.to_json %>;
|
188
188
|
|
189
189
|
// Alias any methods that have been listed in the config
|
190
|
-
<% unless
|
191
|
-
IR.<%=
|
190
|
+
<% unless IrHelper.js_image_tag.nil? %>
|
191
|
+
IR.<%= IrHelper.js_image_tag %> = IR.irImageTag;
|
192
192
|
<% end %>
|
193
|
-
<% unless
|
194
|
-
IR.<%=
|
193
|
+
<% unless IrHelper.js_background.nil? %>
|
194
|
+
IR.<%= IrHelper.js_background %> = IR.irBackground;
|
195
195
|
<% end %>
|
196
|
-
<% unless
|
197
|
-
IR.<%=
|
196
|
+
<% unless IrHelper.js_url.nil? %>
|
197
|
+
IR.<%= IrHelper.js_url %> = IR.irUrl;
|
198
198
|
<% end %>
|
199
199
|
|
200
200
|
return IR;
|
data/lib/ir_helper.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'ir_helper/version'
|
2
|
+
require 'ir_helper/helper'
|
3
|
+
require 'ir_helper/engine' if defined?(Rails)
|
4
|
+
|
5
|
+
module IrHelper
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :cdn
|
9
|
+
attr_reader :js_class, :js_image_tag, :js_background, :js_url
|
10
|
+
|
11
|
+
def configure(&block)
|
12
|
+
yield self
|
13
|
+
end
|
14
|
+
|
15
|
+
def reset_config
|
16
|
+
@cdn = nil
|
17
|
+
@ir_image_tag = nil
|
18
|
+
@ir_background = nil
|
19
|
+
@ir_url = nil
|
20
|
+
@js_class = 'ImageResizer'
|
21
|
+
@js_image_tag = nil
|
22
|
+
@js_background = nil
|
23
|
+
@js_url = nil
|
24
|
+
@modifiers = default_modifiers
|
25
|
+
end
|
26
|
+
|
27
|
+
def modifiers
|
28
|
+
@modifiers ||= default_modifiers
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_modifier(key, img_tag = '', values = [])
|
32
|
+
@modifiers[key.to_sym] = { alias: img_tag, values: values }
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_source(name, option)
|
36
|
+
@modifiers[:e][:values][name.to_sym] = option.to_sym
|
37
|
+
end
|
38
|
+
|
39
|
+
def js_class
|
40
|
+
@js_class ||= 'IR'
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_alias(type, name)
|
44
|
+
Helper.class_eval do |base|
|
45
|
+
base.send(:alias_method, name.to_sym, type.to_sym)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_js_alias(type, name)
|
50
|
+
instance_variable_set "@#{type.to_s}", name
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_hash
|
54
|
+
{
|
55
|
+
cdn: cdn,
|
56
|
+
ir_image_tag: ir_image_tag,
|
57
|
+
ir_background: ir_background,
|
58
|
+
ir_url: ir_url,
|
59
|
+
js_class: js_class,
|
60
|
+
js_image_tag: js_image_tag,
|
61
|
+
js_background: js_background,
|
62
|
+
js_url: js_url,
|
63
|
+
modifiers: modifiers
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def default_modifiers
|
70
|
+
{
|
71
|
+
w: { alias: :width }, h: { alias: :height },
|
72
|
+
s: { alias: :square },
|
73
|
+
c: { alias: :crop, values: %w(fit fill cut scale) },
|
74
|
+
g: { alias: :gravity, values: %w(c n s e w ne nw se sw) },
|
75
|
+
y: { alias: :top }, x: { alias: :left },
|
76
|
+
e: { alias: :external, values: default_sources },
|
77
|
+
f: { alias: :filter }
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def default_sources
|
82
|
+
{
|
83
|
+
facebook: :fb_uid,
|
84
|
+
twitter: :tw_uid,
|
85
|
+
youtube: :youtube_id,
|
86
|
+
vimeo: :vimeo_id
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module IrHelper
|
4
|
+
# Series of view helpers building url strings for image-resizer endpoints
|
5
|
+
module Helper
|
6
|
+
def ir_image_tag(*args)
|
7
|
+
src = generate_ir_endpoint(args)
|
8
|
+
return nil if src.nil?
|
9
|
+
if respond_to?(:image_tag)
|
10
|
+
image_tag src
|
11
|
+
else
|
12
|
+
"<img src='#{src}' />"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def ir_background(*args)
|
17
|
+
url = generate_ir_endpoint(args)
|
18
|
+
url ? "background-image:url(#{url})" : nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def ir_url(*args)
|
22
|
+
generate_ir_endpoint(args)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def parse_arguments(args)
|
28
|
+
if args[0].is_a?(String) || args[0].nil?
|
29
|
+
[args[0], args[1..-1]]
|
30
|
+
else
|
31
|
+
[nil, args]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def cdn
|
36
|
+
::IrHelper.cdn
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.img_tag_name
|
40
|
+
::IrHelper.image_tag_name
|
41
|
+
end
|
42
|
+
|
43
|
+
def mods
|
44
|
+
::IrHelper.modifiers
|
45
|
+
end
|
46
|
+
|
47
|
+
def mod_set(key)
|
48
|
+
mods.each do |k, v|
|
49
|
+
return v if key == k || v[:alias] == key
|
50
|
+
end
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
|
54
|
+
def sources
|
55
|
+
mods[:e][:values]
|
56
|
+
end
|
57
|
+
|
58
|
+
def source_option(key)
|
59
|
+
sources.each do |k, v|
|
60
|
+
return [k, v] if key == v
|
61
|
+
end
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
|
65
|
+
def generate_ir_endpoint(args)
|
66
|
+
fail NoCDNException if cdn.nil?
|
67
|
+
|
68
|
+
source, modifiers = parse_arguments(args)
|
69
|
+
uri = source ? URI(source) : nil
|
70
|
+
modifier_str = mod_str(uri, modifiers)
|
71
|
+
path = build_path(uri, modifiers)
|
72
|
+
|
73
|
+
if path
|
74
|
+
"#{cdn.gsub(/\/$/, '')}#{modifier_str}#{path}"
|
75
|
+
else
|
76
|
+
nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def mod_str(uri, modifiers)
|
81
|
+
mod_arr = []
|
82
|
+
unless modifiers.nil? || modifiers[0].nil?
|
83
|
+
mod_arr = build_mod_arr(modifiers)
|
84
|
+
end
|
85
|
+
mod_arr << 'efacebook' if uri && url_domain(uri.host) == :facebook
|
86
|
+
mod_arr.compact
|
87
|
+
mod_arr.length > 0 ? "/#{mod_arr.join('-')}" : ''
|
88
|
+
end
|
89
|
+
|
90
|
+
def build_mod_arr(modifiers)
|
91
|
+
modifiers[0].map do |k, v|
|
92
|
+
mset = mod_set(k)
|
93
|
+
src = source_option(k)
|
94
|
+
if mset
|
95
|
+
if mset.include? :values
|
96
|
+
mset[:values].include?(v) ? "#{k}#{v}" : nil
|
97
|
+
else
|
98
|
+
"#{k}#{v}"
|
99
|
+
end
|
100
|
+
elsif src
|
101
|
+
"e#{src.first}"
|
102
|
+
else
|
103
|
+
nil
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def build_path(uri, modifiers)
|
109
|
+
if uri
|
110
|
+
case url_domain(uri.host)
|
111
|
+
when :s3
|
112
|
+
s3_object uri
|
113
|
+
when :facebook
|
114
|
+
"/#{fb_uid(uri)}.jpg"
|
115
|
+
else
|
116
|
+
end
|
117
|
+
else
|
118
|
+
modifiers[0].each do |k, v|
|
119
|
+
return "/#{v}.jpg" if source_option(k)
|
120
|
+
end
|
121
|
+
nil
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def url_domain(host)
|
126
|
+
return :s3 if /s3.amazonaws.com/i =~ host
|
127
|
+
return :facebook if /facebook.com/i =~ host
|
128
|
+
:other
|
129
|
+
end
|
130
|
+
|
131
|
+
def s3_object(uri)
|
132
|
+
# test to see which type of s3 url we have
|
133
|
+
if uri.host == 's3.amazonaws.com'
|
134
|
+
# this version has the bucket at the first part of the path
|
135
|
+
"/#{uri.path.split('/')[2..-1].join('/')}"
|
136
|
+
else
|
137
|
+
# this version has the bucket included in the host
|
138
|
+
uri.path
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def fb_uid(uri)
|
143
|
+
uri.path.split('/')[1]
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
class NoCDNException < Exception; end
|
148
|
+
class NotS3SourceException < Exception; end
|
149
|
+
end
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image-resizer-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Nicol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: jasmine
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: guard-rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: awesome_print
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: Helpers for use with image-resizer service
|
@@ -115,14 +115,14 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- app/assets/javascripts/image_resizer.js.erb
|
119
|
-
- app/helpers/image/resizer/rails/ir_helper.rb
|
120
|
-
- lib/image/resizer/rails/engine.rb
|
121
|
-
- lib/image/resizer/rails/helper.rb
|
122
|
-
- lib/image/resizer/rails/version.rb
|
123
|
-
- lib/image/resizer/rails.rb
|
124
118
|
- LICENSE.txt
|
125
119
|
- README.md
|
120
|
+
- app/assets/javascripts/image_resizer.js.erb
|
121
|
+
- app/helpers/ir_helper/ir_helper.rb
|
122
|
+
- lib/ir_helper.rb
|
123
|
+
- lib/ir_helper/engine.rb
|
124
|
+
- lib/ir_helper/helper.rb
|
125
|
+
- lib/ir_helper/version.rb
|
126
126
|
homepage: https://github.com/jimmynicol/image-resizer-rails
|
127
127
|
licenses:
|
128
128
|
- MIT
|
@@ -133,17 +133,17 @@ require_paths:
|
|
133
133
|
- lib
|
134
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
|
-
- -
|
141
|
+
- - ">="
|
142
142
|
- !ruby/object:Gem::Version
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.2.2
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: View helpers and JS file
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'image/resizer/rails/helper'
|
2
|
-
|
3
|
-
module Image
|
4
|
-
module Resizer
|
5
|
-
module Rails
|
6
|
-
# Series of view helpers building url strings for image-resizer endpoints
|
7
|
-
module IrHelper
|
8
|
-
def self.included(base)
|
9
|
-
base.class_eval do
|
10
|
-
include ::Image::Resizer::Rails::Helper
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
data/lib/image/resizer/rails.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'image/resizer/rails/version'
|
2
|
-
require 'image/resizer/rails/helper'
|
3
|
-
require 'image/resizer/rails/engine' if defined?(Rails)
|
4
|
-
|
5
|
-
module Image
|
6
|
-
module Resizer
|
7
|
-
# Top-level module for the image-resizer code
|
8
|
-
module Rails
|
9
|
-
class << self
|
10
|
-
attr_accessor :cdn
|
11
|
-
attr_reader :js_class, :js_image_tag, :js_background, :js_url
|
12
|
-
|
13
|
-
def configure(&block)
|
14
|
-
yield self
|
15
|
-
end
|
16
|
-
|
17
|
-
def reset_config
|
18
|
-
@cdn = nil
|
19
|
-
@ir_image_tag = nil
|
20
|
-
@ir_background = nil
|
21
|
-
@ir_url = nil
|
22
|
-
@js_class = 'ImageResizer'
|
23
|
-
@js_image_tag = nil
|
24
|
-
@js_background = nil
|
25
|
-
@js_url = nil
|
26
|
-
@modifiers = default_modifiers
|
27
|
-
end
|
28
|
-
|
29
|
-
def modifiers
|
30
|
-
@modifiers ||= default_modifiers
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_modifier(key, img_tag = '', values = [])
|
34
|
-
@modifiers[key.to_sym] = { alias: img_tag, values: values }
|
35
|
-
end
|
36
|
-
|
37
|
-
def add_source(name, option)
|
38
|
-
@modifiers[:e][:values][name.to_sym] = option.to_sym
|
39
|
-
end
|
40
|
-
|
41
|
-
def js_class
|
42
|
-
@js_class ||= 'ImageResizer'
|
43
|
-
end
|
44
|
-
|
45
|
-
def add_alias(type, name)
|
46
|
-
Helper.class_eval do |base|
|
47
|
-
base.send(:alias_method, name.to_sym, type.to_sym)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def add_js_alias(type, name)
|
52
|
-
instance_variable_set "@#{type.to_s}", name
|
53
|
-
end
|
54
|
-
|
55
|
-
def to_hash
|
56
|
-
{
|
57
|
-
cdn: cdn,
|
58
|
-
ir_image_tag: ir_image_tag,
|
59
|
-
ir_background: ir_background,
|
60
|
-
ir_url: ir_url,
|
61
|
-
js_class: js_class,
|
62
|
-
js_image_tag: js_image_tag,
|
63
|
-
js_background: js_background,
|
64
|
-
js_url: js_url,
|
65
|
-
modifiers: modifiers
|
66
|
-
}
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def default_modifiers
|
72
|
-
{
|
73
|
-
w: { alias: :width }, h: { alias: :height },
|
74
|
-
s: { alias: :square },
|
75
|
-
c: { alias: :crop, values: %w(fit fill cut scale) },
|
76
|
-
g: { alias: :gravity, values: %w(c n s e w ne nw se sw) },
|
77
|
-
y: { alias: :top }, x: { alias: :left },
|
78
|
-
e: { alias: :external, values: default_sources },
|
79
|
-
f: { alias: :filter }
|
80
|
-
}
|
81
|
-
end
|
82
|
-
|
83
|
-
def default_sources
|
84
|
-
{
|
85
|
-
facebook: :fb_uid,
|
86
|
-
twitter: :tw_uid,
|
87
|
-
youtube: :youtube_id,
|
88
|
-
vimeo: :vimeo_id
|
89
|
-
}
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
require 'uri'
|
2
|
-
|
3
|
-
module Image
|
4
|
-
module Resizer
|
5
|
-
module Rails
|
6
|
-
# Series of view helpers building url strings for image-resizer endpoints
|
7
|
-
module Helper
|
8
|
-
def ir_image_tag(*args)
|
9
|
-
src = generate_ir_endpoint(args)
|
10
|
-
return nil if src.nil?
|
11
|
-
if respond_to?(:image_tag)
|
12
|
-
image_tag src
|
13
|
-
else
|
14
|
-
"<img src='#{src}' />"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def ir_background(*args)
|
19
|
-
url = generate_ir_endpoint(args)
|
20
|
-
url ? "background-image:url(#{url})" : nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def ir_url(*args)
|
24
|
-
generate_ir_endpoint(args)
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def parse_arguments(args)
|
30
|
-
if args[0].is_a?(String) || args[0].nil?
|
31
|
-
[args[0], args[1..-1]]
|
32
|
-
else
|
33
|
-
[nil, args]
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def cdn
|
38
|
-
::Image::Resizer::Rails.cdn
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.img_tag_name
|
42
|
-
::Image::Resizer::Rails.image_tag_name
|
43
|
-
end
|
44
|
-
|
45
|
-
def mods
|
46
|
-
::Image::Resizer::Rails.modifiers
|
47
|
-
end
|
48
|
-
|
49
|
-
def mod_set(key)
|
50
|
-
mods.each do |k, v|
|
51
|
-
return v if key == k || v[:alias] == key
|
52
|
-
end
|
53
|
-
nil
|
54
|
-
end
|
55
|
-
|
56
|
-
def sources
|
57
|
-
mods[:e][:values]
|
58
|
-
end
|
59
|
-
|
60
|
-
def source_option(key)
|
61
|
-
sources.each do |k, v|
|
62
|
-
return [k, v] if key == v
|
63
|
-
end
|
64
|
-
nil
|
65
|
-
end
|
66
|
-
|
67
|
-
def generate_ir_endpoint(args)
|
68
|
-
fail NoCDNException if cdn.nil?
|
69
|
-
|
70
|
-
source, modifiers = parse_arguments(args)
|
71
|
-
uri = source ? URI(source) : nil
|
72
|
-
modifier_str = mod_str(uri, modifiers)
|
73
|
-
path = build_path(uri, modifiers)
|
74
|
-
|
75
|
-
if path
|
76
|
-
"#{cdn.gsub(/\/$/, '')}#{modifier_str}#{path}"
|
77
|
-
else
|
78
|
-
nil
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def mod_str(uri, modifiers)
|
83
|
-
mod_arr = []
|
84
|
-
unless modifiers.nil? || modifiers[0].nil?
|
85
|
-
mod_arr = build_mod_arr(modifiers)
|
86
|
-
end
|
87
|
-
mod_arr << 'efacebook' if uri && url_domain(uri.host) == :facebook
|
88
|
-
mod_arr.compact
|
89
|
-
mod_arr.length > 0 ? "/#{mod_arr.join('-')}" : ''
|
90
|
-
end
|
91
|
-
|
92
|
-
def build_mod_arr(modifiers)
|
93
|
-
modifiers[0].map do |k, v|
|
94
|
-
mset = mod_set(k)
|
95
|
-
src = source_option(k)
|
96
|
-
if mset
|
97
|
-
if mset.include? :values
|
98
|
-
mset[:values].include?(v) ? "#{k}#{v}" : nil
|
99
|
-
else
|
100
|
-
"#{k}#{v}"
|
101
|
-
end
|
102
|
-
elsif src
|
103
|
-
"e#{src.first}"
|
104
|
-
else
|
105
|
-
nil
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def build_path(uri, modifiers)
|
111
|
-
if uri
|
112
|
-
case url_domain(uri.host)
|
113
|
-
when :s3
|
114
|
-
s3_object uri
|
115
|
-
when :facebook
|
116
|
-
"/#{fb_uid(uri)}.jpg"
|
117
|
-
else
|
118
|
-
end
|
119
|
-
else
|
120
|
-
modifiers[0].each do |k, v|
|
121
|
-
return "/#{v}.jpg" if source_option(k)
|
122
|
-
end
|
123
|
-
nil
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def url_domain(host)
|
128
|
-
return :s3 if /s3.amazonaws.com/i =~ host
|
129
|
-
return :facebook if /facebook.com/i =~ host
|
130
|
-
:other
|
131
|
-
end
|
132
|
-
|
133
|
-
def s3_object(uri)
|
134
|
-
# test to see which type of s3 url we have
|
135
|
-
if uri.host == 's3.amazonaws.com'
|
136
|
-
# this version has the bucket at the first part of the path
|
137
|
-
"/#{uri.path.split('/')[2..-1].join('/')}"
|
138
|
-
else
|
139
|
-
# this version has the bucket included in the host
|
140
|
-
uri.path
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
def fb_uid(uri)
|
145
|
-
uri.path.split('/')[1]
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
class NoCDNException < Exception; end
|
150
|
-
class NotS3SourceException < Exception; end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|