middleman-imgix 1.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.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.travis.yml +10 -0
- data/Gemfile +9 -0
- data/Rakefile +3 -0
- data/lib/middleman-imgix.rb +6 -0
- data/lib/middleman-imgix/extension.rb +78 -0
- data/middleman-imgix.gemspec +18 -0
- data/spec/features/imgix_spec.rb +153 -0
- data/spec/fixtures/app/source/images/test.gif +0 -0
- data/spec/fixtures/app/source/images/test.jpg +0 -0
- data/spec/fixtures/app/source/images/test.png +0 -0
- data/spec/fixtures/app/source/imgix.html.erb +3 -0
- data/spec/spec_helper.rb +28 -0
- metadata +99 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fbba5297726c9a3e3a325bfba635f9e3cd060bb3
|
4
|
+
data.tar.gz: 77c58e86e08c9ce123ee8d9b37082c92b996ba53
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dbd10bdb03066aa4b3d7d07d0be3a70171709d71c38503f36f771eeeb000a432e60c918c61e404b76ee8a214971641770440bac6e02ed6b6c1c8cbb7893b7d09
|
7
|
+
data.tar.gz: be4c53177182f57dfa062f919e30c40b0d112307c8438de2fea082b37eb06fc488cc5e1ac0813bab8eebe1083be667272cd45c7f9d7362c1fdf831a6c1208fc5
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'middleman-core'
|
2
|
+
|
3
|
+
class Middleman::Imgix < ::Middleman::Extension
|
4
|
+
option :host, nil, 'Your imgix host.', required: true
|
5
|
+
option :secure_url_token, nil, 'Your imgix secure_url_token.'
|
6
|
+
option :use_https, true, 'Whether to use http or https for imgix.'
|
7
|
+
option :shard_strategy, :crc, 'Your imgix shard strategy.'
|
8
|
+
option :include_library_param, true, 'Include the imgix library param in each URL.'
|
9
|
+
option :default_params, { auto: 'format' }, 'Default imgix params to use on all images.'
|
10
|
+
option :imgix_js_version, nil, 'Converts image_tags to support imgix.js version 2 or 3.'
|
11
|
+
option :exts, %w(.png .jpg .jpeg), 'List of file extensions that get converted to imgix URLs.'
|
12
|
+
option :sources, %w(.css .htm .html .js .php .xhtml), 'List of source extensions that are searched for imgix images.'
|
13
|
+
option :ignore, [], 'Regexes of filenames to skip adding imgix to.'
|
14
|
+
option :rewrite_ignore, [], 'Regexes of filenames to skip processing for path rewrites.'
|
15
|
+
|
16
|
+
expose_to_template imgix_options: :options
|
17
|
+
|
18
|
+
def initialize(app, options_hash={}, &block)
|
19
|
+
super
|
20
|
+
|
21
|
+
app.rewrite_inline_urls id: :imgix,
|
22
|
+
url_extensions: options.exts,
|
23
|
+
source_extensions: options.sources,
|
24
|
+
ignore: options.ignore,
|
25
|
+
rewrite_ignore: options.rewrite_ignore,
|
26
|
+
proc: method(:rewrite_url)
|
27
|
+
|
28
|
+
require 'imgix'
|
29
|
+
end
|
30
|
+
|
31
|
+
def rewrite_url(asset_path, dirpath, _request_path)
|
32
|
+
uri = URI.parse(asset_path)
|
33
|
+
|
34
|
+
if uri.relative?
|
35
|
+
params = CGI::parse(uri.query.to_s)
|
36
|
+
params = params.reverse_merge(options.default_params)
|
37
|
+
path = client.path(uri.path)
|
38
|
+
path.to_url(params)
|
39
|
+
else
|
40
|
+
asset_path
|
41
|
+
end
|
42
|
+
end
|
43
|
+
memoize :rewrite_url
|
44
|
+
|
45
|
+
helpers do
|
46
|
+
def image_tag(path, params={})
|
47
|
+
if imgix_options.imgix_js_version && imgix_image?(path)
|
48
|
+
version = imgix_options.imgix_js_version.to_i
|
49
|
+
params[:class] = 'imgix-fluid' if version == 2
|
50
|
+
src = version == 2 ? 'data-src=' : 'ix-src='
|
51
|
+
super(path, params).gsub('src=', src)
|
52
|
+
else
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def imgix_image?(path)
|
58
|
+
uri = URI.parse(path)
|
59
|
+
uri.relative? &&
|
60
|
+
imgix_options.exts.include?(::File.extname(uri.path)) &&
|
61
|
+
imgix_options.sources.include?(::File.extname(current_resource.path)) &&
|
62
|
+
imgix_options.ignore.none? { |r| ::Middleman::Util.should_ignore?(r, uri.path) } &&
|
63
|
+
imgix_options.rewrite_ignore.none? { |i| ::Middleman::Util.path_match(i, uri.path) }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def client
|
70
|
+
@client ||= Imgix::Client.new({
|
71
|
+
host: options.host,
|
72
|
+
secure_url_token: options.secure_url_token,
|
73
|
+
use_https: options.use_https,
|
74
|
+
shard_strategy: options.shard_strategy,
|
75
|
+
include_library_param: options.include_library_param
|
76
|
+
})
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'middleman-imgix'
|
5
|
+
gem.version = '1.0.1'
|
6
|
+
gem.licenses = ['MIT']
|
7
|
+
gem.authors = ['Big Cartel']
|
8
|
+
gem.email = ['dev@bigcartel.com']
|
9
|
+
gem.description = %q(Use imgix images in your Middleman site.)
|
10
|
+
gem.summary = %q(Run all of your images (or only some) through imgix for all sorts of fun features.)
|
11
|
+
gem.homepage = 'https://github.com/bigcartel/middleman-imgix'
|
12
|
+
|
13
|
+
gem.files = `git ls-files`.split($/)
|
14
|
+
gem.require_paths = ['lib']
|
15
|
+
|
16
|
+
gem.add_runtime_dependency 'middleman-core', '~> 4.1', '>= 4.1.8'
|
17
|
+
gem.add_runtime_dependency 'imgix', '~> 1.1', '>= 1.1.0'
|
18
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "middleman-imgix", type: :feature do
|
4
|
+
def visit_app(config='host: "images.example.com"')
|
5
|
+
app("activate :imgix, #{config}")
|
6
|
+
visit '/imgix.html'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "host" do
|
10
|
+
it "should raise an error if missing" do
|
11
|
+
expect { app('activate :imgix') }.to raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
it "can be set to a single host" do
|
15
|
+
visit_app
|
16
|
+
expect(page.body).to include('images.example.com')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can be set to multiple hosts" do
|
20
|
+
visit_app('host: ["images1.example.com", "images2.example.com"]')
|
21
|
+
expect(page.body).to include('images1.example.com')
|
22
|
+
expect(page.body).to include('images2.example.com')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "secure_url_token" do
|
27
|
+
it "should be nil by default" do
|
28
|
+
visit_app
|
29
|
+
expect(page.body).to_not include('&s=')
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should work when set" do
|
33
|
+
visit_app('host: "images.example.com", secure_url_token: "test"')
|
34
|
+
expect(page.body).to include('&s=c2708015f12eae21de4d0e6cc55f525e')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "use_https" do
|
39
|
+
it "should be true by default" do
|
40
|
+
visit_app
|
41
|
+
expect(page.body).to include('https://')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should work when false" do
|
45
|
+
visit_app('host: "images.example.com", use_https: false')
|
46
|
+
expect(page.body).to include('http://')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "shard_strategy" do
|
51
|
+
it "should be crc by default" do
|
52
|
+
visit_app('host: ["1.example.com", "2.example.com", "3.example.com"]')
|
53
|
+
expect(page.body).to eq(%{<img src="https://2.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="https://2.example.com/images/test.jpg?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="/images/test.gif" alt="Test" />\n})
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should work when cycle" do
|
57
|
+
visit_app('host: ["1.example.com", "2.example.com", "3.example.com"], shard_strategy: :cycle')
|
58
|
+
expect(page.body).to eq(%{<img src="https://1.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="https://2.example.com/images/test.jpg?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="/images/test.gif" alt="Test" />\n})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "include_library_param" do
|
63
|
+
it "should be true by default" do
|
64
|
+
visit_app
|
65
|
+
expect(page.body).to include('ixlib=rb-1.1.0')
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should work when set" do
|
69
|
+
visit_app('host: "images.example.com", include_library_param: false')
|
70
|
+
expect(page.body).to_not include('ixlib=rb-1.1.0')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "default_params" do
|
75
|
+
it "should be auto format by default" do
|
76
|
+
visit_app
|
77
|
+
expect(page.body).to include('auto=format')
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should work when customized" do
|
81
|
+
visit_app('host: "images.example.com", default_params: {fit:"max"}')
|
82
|
+
expect(page.body).to_not include('auto=format')
|
83
|
+
expect(page.body).to include('fit=max')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "imgix_js_version" do
|
88
|
+
it "should not use imgix.js default" do
|
89
|
+
visit_app
|
90
|
+
expect(page.body).to include(%{<img src="https://images.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />})
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should support imgix.js v2" do
|
94
|
+
visit_app('host: "images.example.com", imgix_js_version: 2')
|
95
|
+
expect(page.body).to include(%{<img data-src="https://images.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" class="imgix-fluid" alt="Test" />})
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should support imgix.js v3" do
|
99
|
+
visit_app('host: "images.example.com", imgix_js_version: 3')
|
100
|
+
expect(page.body).to include(%{<img ix-src="https://images.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />})
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "exts" do
|
105
|
+
it "should be pngs and jpgs by default" do
|
106
|
+
visit_app
|
107
|
+
expect(page.body).to eq(%{<img src="https://images.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="https://images.example.com/images/test.jpg?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="/images/test.gif" alt="Test" />\n})
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should work when customized" do
|
111
|
+
visit_app('host: "images.example.com", exts: %w(.png .jpg .jpeg .gif)')
|
112
|
+
expect(page.body).to eq(%{<img src="https://images.example.com/images/test.png?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="https://images.example.com/images/test.jpg?ixlib=rb-1.1.0&auto=format" alt="Test" />\n<img src="https://images.example.com/images/test.gif?ixlib=rb-1.1.0&auto=format" alt="Test" />\n})
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "sources" do
|
117
|
+
it "should be html, js, and css by default" do
|
118
|
+
visit_app
|
119
|
+
expect(page.body).to include(%'images.example.com')
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should work when customized" do
|
123
|
+
visit_app('host: "images.example.com", sources: %w(.css)')
|
124
|
+
expect(page.body).to_not include(%'images.example.com')
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "ignore" do
|
129
|
+
it "should not ignore anything by default" do
|
130
|
+
visit_app
|
131
|
+
expect(page.body).to include(%'images.example.com/images/test.png')
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should work when customized" do
|
135
|
+
visit_app('host: "images.example.com", ignore: %w(/images/test.png)')
|
136
|
+
expect(page.body).to_not include(%'images.example.com/images/test.png')
|
137
|
+
expect(page.body).to include(%'/images/test.png')
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "rewrite_ignore" do
|
142
|
+
it "should not ignore anything by default" do
|
143
|
+
visit_app
|
144
|
+
expect(page.body).to include(%'images.example.com/images/test.png')
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should work when customized" do
|
148
|
+
visit_app('host: "images.example.com", rewrite_ignore: %w(/imgix.html)')
|
149
|
+
expect(page.body).to_not include(%'images.example.com/images/test.png')
|
150
|
+
expect(page.body).to include(%'/images/test.png')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'capybara/rspec'
|
3
|
+
require 'middleman-core'
|
4
|
+
require 'middleman-core/rack'
|
5
|
+
require 'middleman-imgix'
|
6
|
+
|
7
|
+
def app(config_rb='')
|
8
|
+
ENV['MM_ROOT'] = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', 'app'))
|
9
|
+
ENV['MM_ENV'] = 'test'
|
10
|
+
|
11
|
+
config_path = File.join(ENV['MM_ROOT'], 'config.rb')
|
12
|
+
File.write(config_path, config_rb)
|
13
|
+
|
14
|
+
mm_app = ::Middleman::Application.new do
|
15
|
+
config[:watcher_disable] = true
|
16
|
+
end
|
17
|
+
|
18
|
+
Capybara.app = ::Middleman::Rack.new(mm_app).to_app
|
19
|
+
File.delete(config_path)
|
20
|
+
|
21
|
+
mm_app
|
22
|
+
end
|
23
|
+
|
24
|
+
RSpec.configure do |config|
|
25
|
+
config.color = true
|
26
|
+
config.tty = true
|
27
|
+
config.formatter = :documentation
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-imgix
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Big Cartel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: middleman-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.1'
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 4.1.8
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.1'
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 4.1.8
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: imgix
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.1'
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.1.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.1'
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.1.0
|
53
|
+
description: Use imgix images in your Middleman site.
|
54
|
+
email:
|
55
|
+
- dev@bigcartel.com
|
56
|
+
executables: []
|
57
|
+
extensions: []
|
58
|
+
extra_rdoc_files: []
|
59
|
+
files:
|
60
|
+
- .gitignore
|
61
|
+
- .travis.yml
|
62
|
+
- Gemfile
|
63
|
+
- Rakefile
|
64
|
+
- lib/middleman-imgix.rb
|
65
|
+
- lib/middleman-imgix/extension.rb
|
66
|
+
- middleman-imgix.gemspec
|
67
|
+
- spec/features/imgix_spec.rb
|
68
|
+
- spec/fixtures/app/source/images/test.gif
|
69
|
+
- spec/fixtures/app/source/images/test.jpg
|
70
|
+
- spec/fixtures/app/source/images/test.png
|
71
|
+
- spec/fixtures/app/source/imgix.html.erb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
homepage: https://github.com/bigcartel/middleman-imgix
|
74
|
+
licenses:
|
75
|
+
- MIT
|
76
|
+
metadata: {}
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 2.2.2
|
94
|
+
signing_key:
|
95
|
+
specification_version: 4
|
96
|
+
summary: Run all of your images (or only some) through imgix for all sorts of fun
|
97
|
+
features.
|
98
|
+
test_files: []
|
99
|
+
has_rdoc:
|