imgix 0.1.0 → 0.2.0
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/.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
|
+
[](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
|