libpixel 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +11 -0
- data/README.md +90 -2
- data/Rakefile +0 -1
- data/lib/libpixel.rb +18 -0
- data/lib/libpixel/client.rb +36 -5
- data/lib/libpixel/railtie.rb +10 -0
- data/lib/libpixel/version.rb +1 -1
- data/lib/libpixel/view_helpers.rb +35 -0
- data/libpixel.gemspec +5 -4
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +32 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/minitest_helper.rb +5 -0
- data/test/test_client.rb +43 -0
- data/test/test_helper.rb +18 -0
- data/test/test_rails.rb +93 -0
- metadata +109 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8920757faf3f137c4b288deaf5dbd740dde38d5b
|
4
|
+
data.tar.gz: ef94228a86b9cde78f6da8c2f3d0a4d4b73fa8e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28dd2bc72c9f6ba10daefde005cff93130d3bf2d4277a730d4d65db58ab29a3adac3d6987f34e4832463bf2ab32bd05130e8035e682be389b903fd72bd29a1aa
|
7
|
+
data.tar.gz: 7ec30753b454d2dfb4ed97d5b2d66d0fcc3e4917d4f0121f47de1494a76732fc02f5bf4c59dab331351fbb6826439d5a01144d9c09989082ab0eeea22a296143
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
4
|
|
5
|
+
## [1.2.0] - 2015-09-19
|
6
|
+
### Added
|
7
|
+
- Add `libpixel_image_tag` Rails view helper.
|
8
|
+
- Add `https` option to `LibPixel::Client.url`.
|
9
|
+
- Set host automatically in clients from `LIBPIXEL_HOST` env var.
|
10
|
+
- Set secret automatically in clients from `LIBPIXEL_SECRET` env var.
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- `LibPixel::Client.url` raises an exception if host is undefined.
|
14
|
+
- `LibPixel::Client.sign` raises an exception if secret is undefined.
|
15
|
+
|
5
16
|
## [1.1.0] - 2015-08-12
|
6
17
|
### Changed
|
7
18
|
- Make path optional in LibPixel::Client#url [@matiaskorhonen](https://github.com/matiaskorhonen).
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/libpixel/libpixel-ruby.svg?branch=master)](https://travis-ci.org/libpixel/libpixel-ruby)
|
4
4
|
|
5
|
-
Ruby library to generate and sign LibPixel URLs.
|
5
|
+
Ruby library and Rails plugin to generate and sign LibPixel URLs.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -29,9 +29,12 @@ LibPixel.setup do |config|
|
|
29
29
|
config.host = "test.libpx.com" # Your LibPixel domain. Required.
|
30
30
|
config.https = true # Generates HTTPS URLs. Optional. Default is false.
|
31
31
|
config.secret = "..." # Auth secret for your LibPixel account. Required for signing requests.
|
32
|
+
config.default_source = "us-east-1/source" # optional source to be used, can be overriden
|
32
33
|
end
|
33
34
|
```
|
34
35
|
|
36
|
+
The configuration for host and secret will be automatically set from the environment variables LIBPIXEL_HOST and LIBPIXEL_SECRET if they are present.
|
37
|
+
|
35
38
|
### Sign URLs
|
36
39
|
|
37
40
|
You can sign an existing URL using the `sign` function:
|
@@ -45,7 +48,7 @@ url = LibPixel.sign("http://test.libpx.com/images/1.jpg?width=400")
|
|
45
48
|
You can also generate and sign URLs at the same time with the `url` function:
|
46
49
|
|
47
50
|
```ruby
|
48
|
-
url = LibPixel.url("/images/1.jpg", height: 400, blur: 20, saturation: -80)
|
51
|
+
url = LibPixel.url("/us-east-1/images/1.jpg", height: 400, blur: 20, saturation: -80)
|
49
52
|
```
|
50
53
|
|
51
54
|
If you're using the `src` parameter, you can skip the path:
|
@@ -54,6 +57,31 @@ If you're using the `src` parameter, you can skip the path:
|
|
54
57
|
url = LibPixel.url(src: "http://...", width: 300)
|
55
58
|
```
|
56
59
|
|
60
|
+
But even simpler, if the library sees a url beginning with http or https it knows what to do:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
url = LibPixel.url("http://...", width: 300)
|
64
|
+
```
|
65
|
+
|
66
|
+
You can specify whether you what an http or https url in your call:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
url = LibPixel.url("/us-east-1/images/1.jpg", height: 400, blur: 20, saturation: -80, https: true)
|
70
|
+
```
|
71
|
+
|
72
|
+
If you are using a default_source, you don't need to specify it in the path:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
url = LibPixel.url("1.jpg", height: 400, blur: 20, saturation: -80)
|
76
|
+
```
|
77
|
+
|
78
|
+
But you can override it with the source parameter:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
url = LibPixel.url("1.jpg", height: 400, blur: 20, saturation: -80, source: "us-west-1/source2")
|
82
|
+
```
|
83
|
+
|
84
|
+
|
57
85
|
### Multiple clients
|
58
86
|
|
59
87
|
It's also possible to have multiple instances of LibPixel clients (e.g. when dealing with multiple accounts):
|
@@ -64,6 +92,66 @@ client = LibPixel::Client.new(host: "test.libpx.com", https: true, secret: "..."
|
|
64
92
|
|
65
93
|
You may then call the `#url` and `#sign` methods on the client object.
|
66
94
|
|
95
|
+
## Ruby on Rails
|
96
|
+
|
97
|
+
The LibPixel gem includes a Rails plugin that provides a view helper that you can use in place of normal calls to `image_tag`. The libpixel host and libpixel secret settings should be set in an initializer, or will be automatically picked up from the environment variables `LIBPIXEL_HOST` and `LIBPIXEL_SECRET`.
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
libpixel_image_tag("eu-west-1/source/foo.jpg")
|
101
|
+
=> "<img src=\"http://example.libpx.com/eu-west-1/source/foo.jpg\" alt=\"Foo\" />"
|
102
|
+
```
|
103
|
+
|
104
|
+
You specify the libpixel processing parameters in a hash within the normal options hash, denoted by the key `:libpixel`.
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
libpixel_image_tag("eu-west-1/source/foo.jpg", libpixel: {width: 300})
|
108
|
+
```
|
109
|
+
|
110
|
+
The normal parameters that Rails uses will also work.
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
libpixel_image_tag("eu-west-1/source/foo.jpg", libpixel: {width: 300, dpr: 2}, size: "300x250")
|
114
|
+
```
|
115
|
+
|
116
|
+
If all your images are from the same source, it's helpful to configure a `default_source` in an initializer.
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
LibPixel.default_source = "eu-west-1/source"
|
120
|
+
```
|
121
|
+
|
122
|
+
Then you can omit the source in your tags.
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
libpixel_image_tag("foo.jpg", libpixel: {width: 300, dpr: 2}, size: "300x250")
|
126
|
+
```
|
127
|
+
|
128
|
+
If you need to override the default source, you can do that using the source parameter.
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
libpixel_image_tag("foo.jpg", libpixel: {width: 300, dpr: 2, source: "eu-west-1/source2"}, size: "300x250")
|
132
|
+
```
|
133
|
+
|
134
|
+
Referring to an image outside of your configured sources is also possible.
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
libpixel_image_tag("http://example.com/images/foo.jpg", libpixel: {width: 300, dpr: 2}, size: "300x250")
|
138
|
+
```
|
139
|
+
|
140
|
+
You can configure your generated image src urls to use https or http in your initializer.
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
LibPixel.https = true # default is false
|
144
|
+
```
|
145
|
+
|
146
|
+
And you can specify it on a per-tag basis.
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
libpixel_image_tag("us-east-1/source/foo.jpg", libpixel: {https: true})
|
150
|
+
=> "<img src=\"https://example.libpx.com/us-east-1/source/foo.jpg\" alt=\"Foo\" />"
|
151
|
+
```
|
152
|
+
|
153
|
+
|
154
|
+
|
67
155
|
## License
|
68
156
|
|
69
157
|
[MIT](LICENSE)
|
data/Rakefile
CHANGED
data/lib/libpixel.rb
CHANGED
@@ -9,6 +9,22 @@ module LibPixel
|
|
9
9
|
yield @@default_client
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.host=(host)
|
13
|
+
@@default_client.host = host
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.secret=(secret)
|
17
|
+
@@default_client.secret = secret
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.https=(https)
|
21
|
+
@@default_client.https = https
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.default_source=(default_source)
|
25
|
+
@@default_client.default_source = default_source
|
26
|
+
end
|
27
|
+
|
12
28
|
def self.sign(uri)
|
13
29
|
@@default_client.sign(uri)
|
14
30
|
end
|
@@ -18,3 +34,5 @@ module LibPixel
|
|
18
34
|
end
|
19
35
|
|
20
36
|
end
|
37
|
+
|
38
|
+
require 'libpixel/railtie' if defined?(Rails)
|
data/lib/libpixel/client.rb
CHANGED
@@ -3,15 +3,22 @@ require "uri"
|
|
3
3
|
|
4
4
|
module LibPixel
|
5
5
|
class Client
|
6
|
-
attr_accessor :host, :secret, :https
|
6
|
+
attr_accessor :host, :secret, :https, :default_source
|
7
7
|
|
8
8
|
def initialize(options={})
|
9
9
|
options.each do |key, value|
|
10
10
|
send("#{key}=", value)
|
11
11
|
end
|
12
|
+
|
13
|
+
self.host ||= ENV["LIBPIXEL_HOST"]
|
14
|
+
self.secret ||= ENV["LIBPIXEL_SECRET"]
|
12
15
|
end
|
13
16
|
|
14
17
|
def sign(uri)
|
18
|
+
if secret.nil?
|
19
|
+
raise "Your LibPixel secret must be defined (e.g. LibPixel.secret = 'SECRET')"
|
20
|
+
end
|
21
|
+
|
15
22
|
uri = URI.parse(uri) unless uri.kind_of?(URI::Generic)
|
16
23
|
|
17
24
|
query = uri.query
|
@@ -30,22 +37,46 @@ module LibPixel
|
|
30
37
|
|
31
38
|
def url(path_or_options, options={})
|
32
39
|
path = nil
|
40
|
+
|
41
|
+
if host.nil?
|
42
|
+
raise "Your LibPixel host name must be defined (e.g. LibPixel.host = 'example.libpx.com')"
|
43
|
+
end
|
33
44
|
|
34
45
|
if path_or_options.respond_to? :fetch
|
35
46
|
options = path_or_options
|
36
|
-
|
37
|
-
|
47
|
+
elsif !path_or_options.nil?
|
48
|
+
uri = URI(path_or_options)
|
49
|
+
if uri.scheme == "http" || uri.scheme == "https"
|
50
|
+
options[:src] = path_or_options
|
51
|
+
else
|
52
|
+
path = path_or_options
|
53
|
+
end
|
38
54
|
end
|
39
55
|
|
40
|
-
|
56
|
+
source = options.fetch(:source) {default_source}
|
57
|
+
options = options.reject {|k| k == :source}
|
58
|
+
|
59
|
+
use_https = options.fetch(:https) {https}
|
60
|
+
options = options.reject {|k| k == :https}
|
61
|
+
|
41
62
|
query = options.map { |k,v| "#{k}=#{URI.encode_www_form_component(v)}" }.join("&")
|
42
63
|
|
43
64
|
if query == ""
|
44
65
|
query = nil
|
45
66
|
end
|
67
|
+
|
68
|
+
if !source.nil? && !source.empty?
|
69
|
+
source_clean = source.gsub(/^\//, "").gsub(/\/$/, "")
|
70
|
+
path_clean = (path || "").gsub(/^\//, "")
|
71
|
+
path = "/#{source_clean}/#{path_clean}"
|
72
|
+
else
|
73
|
+
if path.nil? || path !~ /^\//
|
74
|
+
path = "/#{path}"
|
75
|
+
end
|
76
|
+
end
|
46
77
|
|
47
78
|
uri = URI::Generic.new(
|
48
|
-
(
|
79
|
+
(use_https ? "https" : "http"), nil, host, nil, nil, path, nil, query, nil
|
49
80
|
)
|
50
81
|
|
51
82
|
if secret
|
data/lib/libpixel/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
module LibPixel
|
2
|
+
module ViewHelpers
|
3
|
+
#
|
4
|
+
# libpixel_image_tag("http://example.com/image.jpg", :width=>200, :libpixel=>{:width=>200, :dpr=>2, :source=>"images"})
|
5
|
+
# => <img width="200" alt="image" src="http://example.libpx.com/images/?width=200&dpr=2&src=http%3A%2F%2Fexample.com%2Fimage.jpg" />
|
6
|
+
#
|
7
|
+
# LibPixel.default_source = "source"
|
8
|
+
# libpixel_image_tag("image.jpg", :libpixel=>{:width=>200})
|
9
|
+
# => <img alt="image" src="http://example.libpx.com/source/image.jpg?width=200" />
|
10
|
+
#
|
11
|
+
def libpixel_image_tag(source, options = {})
|
12
|
+
image_tag_options = nil
|
13
|
+
|
14
|
+
if source.respond_to? :fetch
|
15
|
+
libpixel_url = LibPixel.url(source[:libpixel])
|
16
|
+
image_tag_options = source.reject {|k| k == :libpixel}
|
17
|
+
else
|
18
|
+
source = URI::escape(source)
|
19
|
+
libpixel_url = LibPixel.url(source, options.fetch(:libpixel) {{}})
|
20
|
+
image_tag_options = options.reject {|k| k == :libpixel}
|
21
|
+
end
|
22
|
+
|
23
|
+
uri = URI(libpixel_url)
|
24
|
+
if uri.query
|
25
|
+
query_items = CGI.parse(uri.query)
|
26
|
+
src = query_items["src"].first
|
27
|
+
if src
|
28
|
+
image_tag_options[:alt] = image_tag_options.fetch(:alt) {image_alt(src)}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
image_tag(libpixel_url.html_safe, image_tag_options)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/libpixel.gemspec
CHANGED
@@ -6,9 +6,9 @@ require 'libpixel/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "libpixel"
|
8
8
|
spec.version = LibPixel::VERSION
|
9
|
-
spec.authors = ["Joao Carlos"]
|
10
|
-
spec.email = ["
|
11
|
-
spec.summary = %q{Ruby library to generate and sign LibPixel URLs.}
|
9
|
+
spec.authors = ["Joao Carlos", "Stephen Sykes"]
|
10
|
+
spec.email = ["support@libpixel.com"]
|
11
|
+
spec.summary = %q{Ruby library and Rails plugin to generate and sign LibPixel URLs.}
|
12
12
|
spec.homepage = "https://github.com/libpixel/libpixel-ruby"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
@@ -19,5 +19,6 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency "bundler", "~> 1.7"
|
21
21
|
spec.add_development_dependency "rake", "~> 10.0"
|
22
|
-
spec.add_development_dependency "minitest"
|
22
|
+
spec.add_development_dependency "minitest", "~> 5.8.0"
|
23
|
+
spec.add_development_dependency "rails", "~> 4.2.3"
|
23
24
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/test/dummy/Rakefile
ADDED
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
+
* file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|