zara4 1.0.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 +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: []
|