imgix 0.1.0 → 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/.travis.yml +8 -0
- data/Contributing.markdown +19 -0
- data/Rakefile +1 -1
- data/Readme.markdown +33 -8
- data/imgix.gemspec +5 -5
- data/lib/imgix.rb +1 -0
- data/lib/imgix/client.rb +9 -1
- data/lib/imgix/param_helpers.rb +16 -0
- data/lib/imgix/path.rb +91 -0
- data/lib/imgix/version.rb +1 -1
- data/test/units/path_test.rb +49 -0
- metadata +13 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7a5b61019c7034e4cab71bccb1506e50523b529
|
4
|
+
data.tar.gz: 1fd4f9a95023c58150c616885344659b44d804b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e60eccc4c267a7cc96fde4b251c5156b30539b8be3a7397785138902e389efcb08b52e4542926895c83b2feeb5764dfa7e44d59917500306fafb01a1333ca83b
|
7
|
+
data.tar.gz: 8fff63eb037dd4c223b2e4e6ec6e24c27a1cc398d7cc8bb79ebdb6b3249366b9d5bf7fa1464532e3cce5403bf1618117e88508839d19932f1300b5c9a8b5267f
|
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
## Submitting a Pull Request
|
2
|
+
|
3
|
+
1. [Fork the repository.][fork]
|
4
|
+
2. [Create a topic branch.][branch]
|
5
|
+
3. Add tests for your unimplemented feature or bug fix.
|
6
|
+
4. Run `bundle exec rake`. If your tests pass, return to step 3.
|
7
|
+
5. Implement your feature or bug fix.
|
8
|
+
6. Run `bundle exec rake`. If your tests fail, return to step 5.
|
9
|
+
7. Run `open coverage/index.html`. If your changes are not completely covered
|
10
|
+
by your tests, return to step 3.
|
11
|
+
8. Add documentation for your feature or bug fix.
|
12
|
+
9. Run `bundle exec rake doc`. If your changes are not 100% documented, go
|
13
|
+
back to step 8.
|
14
|
+
10. Add, commit, and push your changes.
|
15
|
+
11. [Submit a pull request.][pr]
|
16
|
+
|
17
|
+
[fork]: http://help.github.com/fork-a-repo/
|
18
|
+
[branch]: http://learn.github.com/p/branching.html
|
19
|
+
[pr]: http://help.github.com/send-pull-requests/
|
data/Rakefile
CHANGED
data/Readme.markdown
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Imgix
|
2
2
|
|
3
|
-
Ruby Gem for signing [imgix](http://imgix.com) URLs.
|
3
|
+
Unofficial Ruby Gem for signing [imgix](http://imgix.com) URLs.
|
4
|
+
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -16,18 +17,42 @@ Or install it yourself as:
|
|
16
17
|
|
17
18
|
$ gem install imgix
|
18
19
|
|
20
|
+
|
19
21
|
## Usage
|
20
22
|
|
23
|
+
Simply initialize a client with a host and your token. You can optionally generate secure URLs.
|
24
|
+
|
25
|
+
Now, if you have the URL ready to go, you can call `sign_path` to get the Imgix URL back. If you would like to manipulate the path parameters you can call `path` with the resource path to get an Imgix::Path object back.
|
26
|
+
|
21
27
|
``` ruby
|
22
|
-
client = Imgix::Client.new(host
|
28
|
+
client = Imgix::Client.new(:host => 'your-subdomain.imgix.net', :token => 'your-token', :secure => true)
|
29
|
+
|
23
30
|
client.sign_path('/images/demo.png?w=200')
|
24
|
-
#=>
|
31
|
+
#=> https://your-subdomain.imgix.net/images/demo.png?w=200&s=2eadddacaa9bba4b88900d245f03f51e
|
32
|
+
|
33
|
+
# OR
|
34
|
+
client.path('/images/demo.png').to_url(w: 200)
|
35
|
+
|
36
|
+
# OR
|
37
|
+
path = client.path('/images/demo.png')
|
38
|
+
path.width = 200
|
39
|
+
path.to_url
|
40
|
+
|
41
|
+
# OR
|
42
|
+
client.path('/images/demo.png').width(200).height(300).to_url
|
43
|
+
|
44
|
+
# Some other tricks
|
45
|
+
path.defaults.width(300).to_url # Resets parameters
|
46
|
+
path.rect(x: 0, y: 50, width: 200, height: 300).to_url # Rect helper
|
25
47
|
```
|
26
48
|
|
49
|
+
## Supported Ruby Versions
|
50
|
+
|
51
|
+
Imgix is tested under 1.9.2, 1.9.3, 2.0.0, JRuby 1.7.2 (1.9 mode), and Rubinius 2.0.0 (1.9 mode).
|
52
|
+
|
53
|
+
[![Build Status](https://travis-ci.org/soffes/imgix-rb.png?branch=master)](https://travis-ci.org/soffes/imgix-rb)
|
54
|
+
|
55
|
+
|
27
56
|
## Contributing
|
28
57
|
|
29
|
-
|
30
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
31
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
32
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
33
|
-
5. Create new Pull Request
|
58
|
+
See the [contributing guide](Contributing.markdown).
|
data/imgix.gemspec
CHANGED
@@ -6,11 +6,11 @@ require 'imgix/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'imgix'
|
8
8
|
spec.version = Imgix::VERSION
|
9
|
-
spec.authors = ['Sam Soffes']
|
10
|
-
spec.email = ['sam@soff.es']
|
9
|
+
spec.authors = ['Sam Soffes', 'Ryan LeFevre']
|
10
|
+
spec.email = ['sam@soff.es', 'ryan@layervault.com']
|
11
11
|
spec.description = 'Easily sign imgix URLs.'
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage = 'https://github.com/soffes/imgix'
|
12
|
+
spec.summary = 'Unofficial Ruby Gem for easily signing imgix URLs.'
|
13
|
+
spec.homepage = 'https://github.com/soffes/imgix-rb'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,6 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.required_ruby_version = '>= 1.
|
21
|
+
spec.required_ruby_version = '>= 1.9.0'
|
22
22
|
spec.add_dependency 'addressable'
|
23
23
|
end
|
data/lib/imgix.rb
CHANGED
data/lib/imgix/client.rb
CHANGED
@@ -6,7 +6,15 @@ module Imgix
|
|
6
6
|
def initialize(options = {})
|
7
7
|
@host = options[:host]
|
8
8
|
@token = options[:token]
|
9
|
-
@secure = options[:secure]
|
9
|
+
@secure = options[:secure] || false
|
10
|
+
end
|
11
|
+
|
12
|
+
def path(path)
|
13
|
+
Path.new(prefix, @token, path)
|
14
|
+
end
|
15
|
+
|
16
|
+
def prefix
|
17
|
+
"#{@secure ? 'https' : 'http'}://#{@host}"
|
10
18
|
end
|
11
19
|
|
12
20
|
def sign_path(path)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Imgix
|
2
|
+
module ParamHelpers
|
3
|
+
def rect(position)
|
4
|
+
@options[:rect] = position and return self if position.is_a?(String)
|
5
|
+
|
6
|
+
@options[:rect] = [
|
7
|
+
position[:x] || position[:left],
|
8
|
+
position[:y] || position[:top],
|
9
|
+
position[:width] || (position[:right] - position[:left]),
|
10
|
+
position[:height] || (position[:bottom] - position[:top])
|
11
|
+
].join(',')
|
12
|
+
|
13
|
+
return self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/imgix/path.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'imgix/param_helpers'
|
2
|
+
|
3
|
+
module Imgix
|
4
|
+
class Path
|
5
|
+
include ParamHelpers
|
6
|
+
|
7
|
+
ALIASES = {
|
8
|
+
width: :w,
|
9
|
+
height: :h,
|
10
|
+
rotation: :rot,
|
11
|
+
noise_reduction: :nr,
|
12
|
+
sharpness: :sharp,
|
13
|
+
exposure: :exp,
|
14
|
+
vibrance: :vib,
|
15
|
+
saturation: :sat,
|
16
|
+
brightness: :bri,
|
17
|
+
contrast: :con,
|
18
|
+
highlight: :high,
|
19
|
+
shadow: :shad,
|
20
|
+
gamma: :gam,
|
21
|
+
pixelate: :px,
|
22
|
+
halftone: :htn,
|
23
|
+
watermark: :mark,
|
24
|
+
text: :txt,
|
25
|
+
format: :fm,
|
26
|
+
quality: :q
|
27
|
+
}
|
28
|
+
|
29
|
+
def initialize(prefix, token, path = '/')
|
30
|
+
@prefix = prefix
|
31
|
+
@token = token
|
32
|
+
@path = path
|
33
|
+
@options = {}
|
34
|
+
|
35
|
+
@path = "/#{@path}" if @path[0] != '/'
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_url(opts={})
|
39
|
+
prev_options = @options.dup
|
40
|
+
@options.merge!(opts)
|
41
|
+
|
42
|
+
url = @prefix + path_and_params
|
43
|
+
url += (@options.length > 0 ? '&' : '') + "s=#{signature}"
|
44
|
+
|
45
|
+
@options = prev_options
|
46
|
+
return url
|
47
|
+
end
|
48
|
+
|
49
|
+
def defaults
|
50
|
+
@options = {}
|
51
|
+
return self
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_missing(method, *args, &block)
|
55
|
+
key = method.to_s.gsub('=', '')
|
56
|
+
if args.length == 0
|
57
|
+
return @options[key]
|
58
|
+
elsif args.first.nil? && @options.has_key?(key)
|
59
|
+
@options.delete(key) and return self
|
60
|
+
end
|
61
|
+
|
62
|
+
@options[key] = args.join(',')
|
63
|
+
return self
|
64
|
+
end
|
65
|
+
|
66
|
+
ALIASES.each do |from, to|
|
67
|
+
define_method from do |*args|
|
68
|
+
self.send(to, *args)
|
69
|
+
end
|
70
|
+
|
71
|
+
define_method "#{from}=" do |*args|
|
72
|
+
self.send("#{to}=", *args)
|
73
|
+
return self
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def signature
|
80
|
+
Digest::MD5.hexdigest(@token + @path + '?' + query)
|
81
|
+
end
|
82
|
+
|
83
|
+
def path_and_params
|
84
|
+
"#{@path}?#{query}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def query
|
88
|
+
@options.map { |k, v| "#{k.to_s}=#{v}" }.join('&')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/imgix/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UrlTest < Imgix::Test
|
4
|
+
def test_creating_a_path
|
5
|
+
path = client.path('/images/demo.png')
|
6
|
+
assert_equal 'http://demo.imgix.net/images/demo.png?s=3c1d676d4daf28c044dd83e8548f834a', path.to_url
|
7
|
+
|
8
|
+
path = client.path('images/demo.png')
|
9
|
+
assert_equal 'http://demo.imgix.net/images/demo.png?s=3c1d676d4daf28c044dd83e8548f834a', path.to_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_signing_path_with_param
|
13
|
+
url = 'http://demo.imgix.net/images/demo.png?w=200&s=da421114ca238d1f4a927b889f67c34e'
|
14
|
+
path = client.path('/images/demo.png')
|
15
|
+
path.width = 200
|
16
|
+
|
17
|
+
assert_equal url, path.to_url
|
18
|
+
|
19
|
+
path = client.path('/images/demo.png')
|
20
|
+
assert_equal url, path.to_url(w: 200)
|
21
|
+
|
22
|
+
path = client.path('/images/demo.png')
|
23
|
+
assert_equal url, path.width(200).to_url
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_resetting_defaults
|
27
|
+
url = 'http://demo.imgix.net/images/demo.png?w=200&s=da421114ca238d1f4a927b889f67c34e'
|
28
|
+
path = client.path('/images/demo.png')
|
29
|
+
path.height = 300
|
30
|
+
|
31
|
+
assert_equal url, path.defaults.to_url(w: 200)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_path_with_multiple_params
|
35
|
+
url = 'http://demo.imgix.net/images/demo.png?h=200&w=200&s=d570a1ecd765470f7b34a69b56718a7a'
|
36
|
+
path = client.path('/images/demo.png')
|
37
|
+
|
38
|
+
assert_equal url, path.to_url(h: 200, w: 200)
|
39
|
+
|
40
|
+
path = client.path('/images/demo.png')
|
41
|
+
assert_equal url, path.height(200).width(200).to_url
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def client
|
47
|
+
@client ||= Imgix::Client.new(:host => 'demo.imgix.net', :token => '10adc394')
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imgix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Soffes
|
8
|
+
- Ryan LeFevre
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: addressable
|
@@ -27,11 +28,14 @@ dependencies:
|
|
27
28
|
description: Easily sign imgix URLs.
|
28
29
|
email:
|
29
30
|
- sam@soff.es
|
31
|
+
- ryan@layervault.com
|
30
32
|
executables: []
|
31
33
|
extensions: []
|
32
34
|
extra_rdoc_files: []
|
33
35
|
files:
|
34
36
|
- .gitignore
|
37
|
+
- .travis.yml
|
38
|
+
- Contributing.markdown
|
35
39
|
- Gemfile
|
36
40
|
- LICENSE
|
37
41
|
- Rakefile
|
@@ -39,10 +43,13 @@ files:
|
|
39
43
|
- imgix.gemspec
|
40
44
|
- lib/imgix.rb
|
41
45
|
- lib/imgix/client.rb
|
46
|
+
- lib/imgix/param_helpers.rb
|
47
|
+
- lib/imgix/path.rb
|
42
48
|
- lib/imgix/version.rb
|
43
49
|
- test/test_helper.rb
|
50
|
+
- test/units/path_test.rb
|
44
51
|
- test/units/url_test.rb
|
45
|
-
homepage: https://github.com/soffes/imgix
|
52
|
+
homepage: https://github.com/soffes/imgix-rb
|
46
53
|
licenses:
|
47
54
|
- MIT
|
48
55
|
metadata: {}
|
@@ -54,7 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
61
|
requirements:
|
55
62
|
- - '>='
|
56
63
|
- !ruby/object:Gem::Version
|
57
|
-
version: 1.
|
64
|
+
version: 1.9.0
|
58
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
66
|
requirements:
|
60
67
|
- - '>='
|
@@ -65,7 +72,8 @@ rubyforge_project:
|
|
65
72
|
rubygems_version: 2.0.2
|
66
73
|
signing_key:
|
67
74
|
specification_version: 4
|
68
|
-
summary:
|
75
|
+
summary: Unofficial Ruby Gem for easily signing imgix URLs.
|
69
76
|
test_files:
|
70
77
|
- test/test_helper.rb
|
78
|
+
- test/units/path_test.rb
|
71
79
|
- test/units/url_test.rb
|