zara4 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/zara4.rb +4 -0
- data/lib/zara4/api.rb +7 -0
- data/lib/zara4/api/client.rb +87 -0
- data/lib/zara4/api/communication.rb +8 -0
- data/lib/zara4/api/communication/access_token.rb +6 -0
- data/lib/zara4/api/communication/access_token/access_token.rb +46 -0
- data/lib/zara4/api/communication/access_token/refreshable_access_token.rb +30 -0
- data/lib/zara4/api/communication/access_token/reissuable_access_token.rb +29 -0
- data/lib/zara4/api/communication/authentication.rb +6 -0
- data/lib/zara4/api/communication/authentication/application_authenticator.rb +20 -0
- data/lib/zara4/api/communication/authentication/authenticator.rb +35 -0
- data/lib/zara4/api/communication/authentication/user_authenticator.rb +34 -0
- data/lib/zara4/api/communication/config.rb +37 -0
- data/lib/zara4/api/communication/grant.rb +7 -0
- data/lib/zara4/api/communication/grant/client_credentials_grant_request.rb +14 -0
- data/lib/zara4/api/communication/grant/grant_request.rb +72 -0
- data/lib/zara4/api/communication/grant/password_grant.rb +33 -0
- data/lib/zara4/api/communication/grant/refresh_token_grant.rb +31 -0
- data/lib/zara4/api/communication/util.rb +29 -0
- data/lib/zara4/api/image_processing.rb +12 -0
- data/lib/zara4/api/image_processing/colour_enhancement.rb +5 -0
- data/lib/zara4/api/image_processing/local_image_request.rb +19 -0
- data/lib/zara4/api/image_processing/optimisation_mode.rb +5 -0
- data/lib/zara4/api/image_processing/output_format.rb +5 -0
- data/lib/zara4/api/image_processing/processed_image.rb +57 -0
- data/lib/zara4/api/image_processing/remote_image_request.rb +19 -0
- data/lib/zara4/api/image_processing/request.rb +63 -0
- data/lib/zara4/api/image_processing/resize_mode.rb +6 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9d32423b639f5193d153d441806f19a314968b6b
|
4
|
+
data.tar.gz: de8634c5f3bcdd306c9254452b4cfa39b8bda8f9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c39686f4b9ca25ca50b75ba9c710d2ce96329633c9187ae8e9fd420c5e0f31b6d9837ba37243b09c8b28ce5ace090721b4ee673cde7f0cddeb91b5a0480129fa
|
7
|
+
data.tar.gz: 43135d4e0a880eb2a55e75109eb8e2a252b2bf10441a99331725b11dbe84f1d4a70afb9bdf1ed998c4ca1adca69fc0d38ead770bb109b5dc17983101a06279a0
|
data/lib/zara4.rb
ADDED
data/lib/zara4/api.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'httmultiparty'
|
4
|
+
|
5
|
+
module Zara4::API
|
6
|
+
class Client
|
7
|
+
include HTTMultiParty
|
8
|
+
|
9
|
+
attr_accessor :client_id, :client_secret
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# Application authenticated client.
|
14
|
+
#
|
15
|
+
def initialize(credentials)
|
16
|
+
@client_id = credentials.fetch('client_id')
|
17
|
+
@client_secret = credentials.fetch('client_secret')
|
18
|
+
|
19
|
+
if @client_id && @client_secret
|
20
|
+
authenticator = Zara4::API::Communication::Authentication::ApplicationAuthenticator.new(@client_id, @client_secret)
|
21
|
+
authenticator.with_image_processing().with_usage()
|
22
|
+
@access_token = authenticator.acquire_access_token()
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
#
|
28
|
+
# Process the given image processing Request.
|
29
|
+
#
|
30
|
+
# @param image_processing_request The request to be processed
|
31
|
+
#
|
32
|
+
def process_image(image_processing_request)
|
33
|
+
url = Zara4::API::Communication::Util::url('/v1/image-processing/request')
|
34
|
+
|
35
|
+
parameters = image_processing_request.generate_form_data
|
36
|
+
|
37
|
+
headers = {
|
38
|
+
'access_token' => @access_token.token
|
39
|
+
}
|
40
|
+
|
41
|
+
print parameters
|
42
|
+
|
43
|
+
response = self.class.post(url, {
|
44
|
+
query: parameters,
|
45
|
+
headers: headers,
|
46
|
+
detect_mime_type: true
|
47
|
+
})
|
48
|
+
|
49
|
+
|
50
|
+
# Check for API error response
|
51
|
+
if response.has_key?('error')
|
52
|
+
raise 'ERROR IS ' + response.fetch('error')
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
request_id = response['request-id']
|
57
|
+
generate_images_urls = response['generated-images']['urls']
|
58
|
+
bytes_original = response['compression']['bytes-original']
|
59
|
+
bytes_compressed = response['compression']['bytes-compressed']
|
60
|
+
|
61
|
+
return Zara4::API::ImageProcessing::ProcessedImage.new(image_processing_request, request_id, generate_images_urls, bytes_original, bytes_compressed)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
#
|
66
|
+
# Download the given ProcessedImage and save it to the given path.
|
67
|
+
#
|
68
|
+
# @param processed_image The ProcessedImage to be downloaded.
|
69
|
+
# @param save_path The path where the image should be saved.
|
70
|
+
#
|
71
|
+
def download_processed_image(processed_image, save_path)
|
72
|
+
|
73
|
+
url = processed_image.file_urls[0]
|
74
|
+
|
75
|
+
if @access_token
|
76
|
+
url += '?access_token' + @access_token.token()
|
77
|
+
end
|
78
|
+
|
79
|
+
File.open(save_path, "w") do |f|
|
80
|
+
IO.copy_stream(open(url), f)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module Zara4::API::Communication
|
2
|
+
end
|
3
|
+
|
4
|
+
require_relative './communication/config.rb'
|
5
|
+
require_relative './communication/util.rb'
|
6
|
+
require_relative './communication/access_token.rb'
|
7
|
+
require_relative './communication/authentication.rb'
|
8
|
+
require_relative './communication/grant.rb'
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Zara4::API::Communication::AccessToken
|
2
|
+
class AccessToken
|
3
|
+
|
4
|
+
attr_accessor :client_id, :client_secret, :access_token, :expires_at
|
5
|
+
|
6
|
+
|
7
|
+
#
|
8
|
+
# Constructor
|
9
|
+
#
|
10
|
+
def initialize(client_id, client_secret, access_token, expires_at)
|
11
|
+
@client_id = client_id
|
12
|
+
@client_secret = client_secret
|
13
|
+
@access_token = access_token;
|
14
|
+
@expires_at = expires_at
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
#
|
19
|
+
# Get the token
|
20
|
+
#
|
21
|
+
def token
|
22
|
+
if has_expired()
|
23
|
+
refresh()
|
24
|
+
end
|
25
|
+
return @access_token
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
#
|
30
|
+
# Refresh this AccessToken
|
31
|
+
#
|
32
|
+
def refresh
|
33
|
+
# Stub to be implemented
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
#
|
38
|
+
# Has this AccessToken expired?
|
39
|
+
#
|
40
|
+
def has_expired
|
41
|
+
return Time.now > @expires_at
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Zara4::API::Communication::AccessToken
|
2
|
+
class RefreshableAccessToken < AccessToken
|
3
|
+
|
4
|
+
attr_accessor :refresh_token
|
5
|
+
|
6
|
+
|
7
|
+
#
|
8
|
+
# Constructor
|
9
|
+
#
|
10
|
+
def initialize(client_id, client_secret, access_token, expires_at, refesh_token)
|
11
|
+
super(client_id, client_secret, access_token, expires_at)
|
12
|
+
@refresh_token = refresh_token
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Refresh this ReissuableAccessToken
|
18
|
+
#
|
19
|
+
def refresh
|
20
|
+
grant = RefreshTokenGrant.new(@client_id, @client_secret, @refresh_token, [])
|
21
|
+
tokens = grant.get_tokens()
|
22
|
+
|
23
|
+
@access_token = tokens['access_tokens']
|
24
|
+
@expires_at = ''
|
25
|
+
@refresh_token = tokens['refresh_token']
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Zara4::API::Communication::AccessToken
|
2
|
+
class ReissuableAccessToken < AccessToken
|
3
|
+
|
4
|
+
attr_accessor :scopes
|
5
|
+
|
6
|
+
|
7
|
+
#
|
8
|
+
# Constructor
|
9
|
+
#
|
10
|
+
def initialize(client_id, client_secret, access_token, expires_at, scopes)
|
11
|
+
super(client_id, client_secret, access_token, expires_at)
|
12
|
+
@scopes = scopes
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Refresh this ReissuableAccessToken
|
18
|
+
#
|
19
|
+
def refresh
|
20
|
+
grant = ClientCredentialsGrantRequest.new(@client_id, @client_secret, @scopes)
|
21
|
+
tokens = grant.get_tokens()
|
22
|
+
|
23
|
+
@access_token = tokens['access_token']
|
24
|
+
@expires_at = tokens['expires_in']
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Zara4::API::Communication::Authentication
|
2
|
+
class ApplicationAuthenticator < Authenticator
|
3
|
+
|
4
|
+
|
5
|
+
#
|
6
|
+
# Acquire an AccessToken using this ApplicationAuthenticator.
|
7
|
+
#
|
8
|
+
def acquire_access_token
|
9
|
+
grant = Zara4::API::Communication::Grant::ClientCredentialsGrantRequest.new(@client_id, @client_secret, @scopes)
|
10
|
+
tokens = grant.get_tokens()
|
11
|
+
|
12
|
+
access_token = tokens['access_token']
|
13
|
+
expires_at = Zara4::API::Communication::Util::calculate_expiry_time(tokens['expires_in'])
|
14
|
+
|
15
|
+
return Zara4::API::Communication::AccessToken::ReissuableAccessToken.new(@client_id, @client_secret, access_token, expires_at, @scopes)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Zara4::API::Communication::Authentication
|
2
|
+
class Authenticator
|
3
|
+
|
4
|
+
attr_accessor :client_id, :client_secret
|
5
|
+
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
9
|
+
def initialize(client_id, client_secret)
|
10
|
+
@client_id = client_id
|
11
|
+
@client_secret = client_secret
|
12
|
+
@scopes = [];
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Add image processing to the Authenticator scope.
|
18
|
+
#
|
19
|
+
def with_image_processing
|
20
|
+
@scopes.push('image-processing')
|
21
|
+
return self
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
#
|
26
|
+
# Add reading account usage to the Authenticator scope.
|
27
|
+
#
|
28
|
+
def with_usage
|
29
|
+
@scopes.push('usage')
|
30
|
+
return self
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Zara4::API::Communication::Authentication
|
2
|
+
class UserAuthenticator < Authenticator
|
3
|
+
|
4
|
+
|
5
|
+
attr_accessor :client_id, :client_secret, :username, :password
|
6
|
+
|
7
|
+
|
8
|
+
#
|
9
|
+
# Constructor
|
10
|
+
#
|
11
|
+
def initialize(client_id, client_secret, username, password)
|
12
|
+
super.initialize(client_id, client_secret)
|
13
|
+
@username = username
|
14
|
+
@password = password
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
#
|
19
|
+
# Acquire an AccessToken using this UserAuthenticator.
|
20
|
+
#
|
21
|
+
def acquire_access_token
|
22
|
+
grant = Zara4::API::Communication::Grant::ClientCredentialsGrantRequest.new(@client_id, @clint_secret, @scopes)
|
23
|
+
tokens = grant.getTokens()
|
24
|
+
|
25
|
+
access_token = tokens['access_token']
|
26
|
+
refresh_token = tokens['refresh_token']
|
27
|
+
expires_at = Zara4::API::Communication::Util::calculate_expiry_time(tokens['expires_in'])
|
28
|
+
|
29
|
+
return Zara4::API::Communication::AccessToken::RefreshableAccessToken.new(@client_id, @client_secret, access_token, expires_at, refresh_token)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Zara4::API::Communication
|
2
|
+
class Config
|
3
|
+
|
4
|
+
USER_AGENT = 'Zara 4 RUBY-SDK, Version-' + Zara4::API::VERSION
|
5
|
+
|
6
|
+
PRODUCTION_API_ENDPOINT = 'https://api.zara4.com'
|
7
|
+
DEVELOPMENT_API_ENDPOINT = 'http://api.zara4.dev'
|
8
|
+
|
9
|
+
@@BASE_URL = PRODUCTION_API_ENDPOINT
|
10
|
+
|
11
|
+
|
12
|
+
#
|
13
|
+
# Get the base url of the API endpoint.
|
14
|
+
#
|
15
|
+
def self.api_endpoint_url
|
16
|
+
return @@BASE_URL
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
#
|
21
|
+
# Configure production mode.
|
22
|
+
#
|
23
|
+
def self.enter_production_mode
|
24
|
+
@@BASE_URL = PRODUCTION_API_ENDPOINT
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
#
|
29
|
+
# Configure development mode.
|
30
|
+
#
|
31
|
+
def self.enter_development_mode
|
32
|
+
@@BASE_URL = DEVELOPMENT_API_ENDPOINT
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Zara4::API::Communication::Grant
|
2
|
+
class GrantRequest
|
3
|
+
include HTTParty
|
4
|
+
|
5
|
+
|
6
|
+
attr_accessor :client_id, :client_secret, :scopes
|
7
|
+
|
8
|
+
|
9
|
+
#
|
10
|
+
# Constructor
|
11
|
+
#
|
12
|
+
def initialize(client_id, client_secret, scopes)
|
13
|
+
@client_id = client_id
|
14
|
+
@client_secret = client_secret
|
15
|
+
@scopes = scopes
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
#
|
20
|
+
# Get tokens from the API
|
21
|
+
#
|
22
|
+
def get_tokens
|
23
|
+
|
24
|
+
url = Zara4::API::Communication::Util::url('/oauth/access_token')
|
25
|
+
|
26
|
+
parameters = {
|
27
|
+
'grant_type' => grant_type(),
|
28
|
+
'client_id' => @client_id,
|
29
|
+
'client_secret' => @client_secret,
|
30
|
+
'scope' => @scopes.join(','),
|
31
|
+
}
|
32
|
+
|
33
|
+
headers = {
|
34
|
+
'Content-Type' => 'application/json'
|
35
|
+
}
|
36
|
+
|
37
|
+
response = self.class.post(url, {
|
38
|
+
body: parameters.to_json,
|
39
|
+
headers: headers
|
40
|
+
})
|
41
|
+
|
42
|
+
|
43
|
+
# Check for API error response
|
44
|
+
if response.has_key?('error')
|
45
|
+
puts 'ERROR IS ' + response.fetch('error')
|
46
|
+
end
|
47
|
+
|
48
|
+
return {
|
49
|
+
'access_token' => response.fetch('access_token'),
|
50
|
+
'expires_in' => response.fetch('expires_in'),
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
#
|
56
|
+
# Add image processing to the request scope.
|
57
|
+
#
|
58
|
+
def with_image_processing
|
59
|
+
@scopes.push('image-processing')
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
#
|
64
|
+
# Add usage to the request scope.
|
65
|
+
#
|
66
|
+
def with_usage
|
67
|
+
@scopes.push('usage')
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Zara4::API::Communication::Grant
|
2
|
+
class PasswordGrant < GrantRequest
|
3
|
+
|
4
|
+
attr_accessor :username, :password
|
5
|
+
|
6
|
+
|
7
|
+
def initialize(client_id, client_secret, username, password, scopes)
|
8
|
+
super(client_id, client_secret, scopes)
|
9
|
+
@username = username
|
10
|
+
@password = password
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
#
|
15
|
+
# The type of this grant.
|
16
|
+
#
|
17
|
+
def grant_type
|
18
|
+
return 'password'
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
#
|
23
|
+
# Data to be sent when fetching grant tokens.
|
24
|
+
#
|
25
|
+
def data
|
26
|
+
data = super.data
|
27
|
+
data['username'] = @username
|
28
|
+
data['password'] = @password
|
29
|
+
return data
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Zara4::API::Communication::Grant
|
2
|
+
class RefreshTokenGrant < GrantRequest
|
3
|
+
|
4
|
+
attr_accessor :refresh_token
|
5
|
+
|
6
|
+
|
7
|
+
def initialize(client_id, client_secret, refresh_token, scopes)
|
8
|
+
super(client_id, client_secret, scopes)
|
9
|
+
@refresh_token = refresh_token
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
#
|
14
|
+
# The type of this grant.
|
15
|
+
#
|
16
|
+
def grant_type
|
17
|
+
return 'refresh_token'
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
#
|
22
|
+
# Data to be sent when fetching grant tokens.
|
23
|
+
#
|
24
|
+
def data
|
25
|
+
data = super.data()
|
26
|
+
data['refresh_token'] = @refresh_token
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Zara4::API::Communication
|
2
|
+
class Util
|
3
|
+
|
4
|
+
|
5
|
+
#
|
6
|
+
# Get the url to the given path.
|
7
|
+
#
|
8
|
+
def self.url(path)
|
9
|
+
return Zara4::API::Communication::Config::api_endpoint_url() + path
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
def post(target_url, data)
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
#
|
20
|
+
# Calculate the expiry time from the given lifetime time.
|
21
|
+
#
|
22
|
+
def self.calculate_expiry_time(expires_in_seconds)
|
23
|
+
expires_in_seconds = expires_in_seconds - 60
|
24
|
+
return Time.now + expires_in_seconds
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Zara4::API::ImageProcessing
|
2
|
+
end
|
3
|
+
|
4
|
+
require_relative './image_processing/colour_enhancement.rb'
|
5
|
+
require_relative './image_processing/optimisation_mode.rb'
|
6
|
+
require_relative './image_processing/output_format.rb'
|
7
|
+
require_relative './image_processing/resize_mode.rb'
|
8
|
+
|
9
|
+
require_relative './image_processing/request.rb'
|
10
|
+
require_relative './image_processing/remote_image_request.rb'
|
11
|
+
require_relative './image_processing/local_image_request.rb'
|
12
|
+
require_relative './image_processing/processed_image.rb'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Zara4::API::ImageProcessing
|
2
|
+
class LocalImageRequest < Request
|
3
|
+
|
4
|
+
|
5
|
+
def initialize(path_to_image, optimisation_mode=nil, output_format=nil, colour_enhancement=nil, resize_mode=nil, width=100, height=100)
|
6
|
+
super(optimisation_mode, output_format, colour_enhancement, resize_mode, width, height)
|
7
|
+
@path_to_image = path_to_image
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def generate_form_data
|
12
|
+
data = super
|
13
|
+
data['file'] = File.new(@path_to_image)
|
14
|
+
return data
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Zara4::API::ImageProcessing
|
2
|
+
class ProcessedImage
|
3
|
+
|
4
|
+
attr_accessor :request, :request_id, :file_urls, :original_file_size, :compressed_file_size
|
5
|
+
|
6
|
+
|
7
|
+
def initialize(request, request_id, file_urls, original_file_size, compressed_file_size)
|
8
|
+
@request = request
|
9
|
+
@request_id = request_id
|
10
|
+
@file_urls = file_urls
|
11
|
+
@original_file_size = original_file_size
|
12
|
+
@compressed_file_size = compressed_file_size
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
#
|
17
|
+
# Get the file size (in bytes) of the original uncompressed image.
|
18
|
+
#
|
19
|
+
def original_file_size
|
20
|
+
return @original_file_size
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
#
|
25
|
+
# Get the file size (in bytes) of the compressed image.
|
26
|
+
#
|
27
|
+
def compressed_file_size
|
28
|
+
return @compressed_file_size
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
#
|
33
|
+
# Get the ratio by which the image has been compressed.
|
34
|
+
#
|
35
|
+
def compression_ratio
|
36
|
+
return @compressed_file_size / @original_file_size
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
#
|
41
|
+
# The percentage compression achieved.
|
42
|
+
#
|
43
|
+
def percentage_saving
|
44
|
+
return (1 - compression_ratio()) * 100
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
#
|
49
|
+
# Was the original image compressed?
|
50
|
+
#
|
51
|
+
def compression_was_achieved
|
52
|
+
return compression_ratio() < 1
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Zara4::API::ImageProcessing
|
2
|
+
class RemoteImageRequest < Request
|
3
|
+
|
4
|
+
|
5
|
+
def initialize(url, optimisation_mode=nil, output_format=nil, colour_enhancement=nil, resize_mode=nil, width=100, height=100)
|
6
|
+
super(optimisation_mode, output_format, colour_enhancement, resize_mode, width, height)
|
7
|
+
@url = url
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def generate_form_data
|
12
|
+
data = super
|
13
|
+
data['url'] = @url
|
14
|
+
return data
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Zara4::API::ImageProcessing
|
2
|
+
class Request
|
3
|
+
|
4
|
+
attr_accessor :optimisation_mode, :output_format, :resize_mode, :colour_enhancement, :width, :height
|
5
|
+
|
6
|
+
#
|
7
|
+
# Constructor
|
8
|
+
#
|
9
|
+
def initialize(optimisation_mode=nil, output_format=nil, colour_enhancement=nil, resize_mode=nil, width=100, height=100)
|
10
|
+
|
11
|
+
if optimisation_mode != nil
|
12
|
+
@optimisation_mode = optimisation_mode
|
13
|
+
else
|
14
|
+
@optimisation_mode = Zara4::API::ImageProcessing::OptimisationMode::COMPROMISE
|
15
|
+
end
|
16
|
+
|
17
|
+
if output_format != nil
|
18
|
+
@output_format = output_format
|
19
|
+
else
|
20
|
+
@output_format = Zara4::API::ImageProcessing::OutputFormat::MATCH
|
21
|
+
end
|
22
|
+
|
23
|
+
if colour_enhancement != nil
|
24
|
+
@colour_enhancement = colour_enhancement
|
25
|
+
else
|
26
|
+
@colour_enhancement = Zara4::API::ImageProcessing::ColourEnhancement::NONE
|
27
|
+
end
|
28
|
+
|
29
|
+
if resize_mode != nil
|
30
|
+
@resize_mode = resize_mode
|
31
|
+
else
|
32
|
+
@resize_mode = Zara4::API::ImageProcessing::ResizeMode::NONE
|
33
|
+
end
|
34
|
+
|
35
|
+
@width = width
|
36
|
+
@height = height
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
#
|
42
|
+
# Generate the form data for this request
|
43
|
+
#
|
44
|
+
def generate_form_data
|
45
|
+
data = {
|
46
|
+
'optimisation-mode' => @optimisation_mode,
|
47
|
+
'output-format' => @output_format,
|
48
|
+
'colour-enhancement' => @colour_enhancement,
|
49
|
+
'resize-mode' => @resize_mode
|
50
|
+
}
|
51
|
+
|
52
|
+
# Only include width and height if resize requested
|
53
|
+
if @resize_mode != nil && @resize_mode != Zara4::API::ImageProcessing::ResizeMode::NONE
|
54
|
+
data['width'] = @width
|
55
|
+
data['height'] = @height
|
56
|
+
end
|
57
|
+
|
58
|
+
return data
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zara4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Colin Stannard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.8'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httmultiparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.13
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.13
|
41
|
+
description: Zara 4 compresses and optimizes your images
|
42
|
+
email:
|
43
|
+
- support@zara4.com
|
44
|
+
- colin.stannard@cbsindustries.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- lib/zara4.rb
|
50
|
+
- lib/zara4/api.rb
|
51
|
+
- lib/zara4/api/client.rb
|
52
|
+
- lib/zara4/api/communication.rb
|
53
|
+
- lib/zara4/api/communication/access_token.rb
|
54
|
+
- lib/zara4/api/communication/access_token/access_token.rb
|
55
|
+
- lib/zara4/api/communication/access_token/refreshable_access_token.rb
|
56
|
+
- lib/zara4/api/communication/access_token/reissuable_access_token.rb
|
57
|
+
- lib/zara4/api/communication/authentication.rb
|
58
|
+
- lib/zara4/api/communication/authentication/application_authenticator.rb
|
59
|
+
- lib/zara4/api/communication/authentication/authenticator.rb
|
60
|
+
- lib/zara4/api/communication/authentication/user_authenticator.rb
|
61
|
+
- lib/zara4/api/communication/config.rb
|
62
|
+
- lib/zara4/api/communication/grant.rb
|
63
|
+
- lib/zara4/api/communication/grant/client_credentials_grant_request.rb
|
64
|
+
- lib/zara4/api/communication/grant/grant_request.rb
|
65
|
+
- lib/zara4/api/communication/grant/password_grant.rb
|
66
|
+
- lib/zara4/api/communication/grant/refresh_token_grant.rb
|
67
|
+
- lib/zara4/api/communication/util.rb
|
68
|
+
- lib/zara4/api/image_processing.rb
|
69
|
+
- lib/zara4/api/image_processing/colour_enhancement.rb
|
70
|
+
- lib/zara4/api/image_processing/local_image_request.rb
|
71
|
+
- lib/zara4/api/image_processing/optimisation_mode.rb
|
72
|
+
- lib/zara4/api/image_processing/output_format.rb
|
73
|
+
- lib/zara4/api/image_processing/processed_image.rb
|
74
|
+
- lib/zara4/api/image_processing/remote_image_request.rb
|
75
|
+
- lib/zara4/api/image_processing/request.rb
|
76
|
+
- lib/zara4/api/image_processing/resize_mode.rb
|
77
|
+
homepage: https://github.com/zara-4/ruby-sdk
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.9.3
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.5.1
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Ruby SDK for the Zara 4 image compression API
|
101
|
+
test_files: []
|