akeneo 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2587eb09691ebb7e543ef907edfc47c4296b62fe3c2c84654bb1316723f116c2
4
- data.tar.gz: 04df15b3d09324a723e656a55b4e6843ec5fcf45a0a0ce9eb3fc3a53bfc604cb
3
+ metadata.gz: 9f33e2c01c30f133a7a579f0f25bd8e2480cf395becaa2f579388fda468f521b
4
+ data.tar.gz: 1f12002433db6e9e192dd7b531c7d3049e2b11bbbbd1fd7bcf72b213b1f05017
5
5
  SHA512:
6
- metadata.gz: fd5db20c91e190e41fbb52136e93dbf5810e990284b525269d0075d3c38fe36f3508083ac9cdd3b55747a5e4c76b7f78e0eae3a69ecd8c59a2198b1e34c253e0
7
- data.tar.gz: deb5f602b4c0c3366d3e27dae7cdb0ce2505f56239e92216183fbf3a108ad883e8db100445e9ccfcdfdfa43ac07e38818929cb74055d875e189a85ed4109fa23
6
+ metadata.gz: c13cb2bdce4e8f4312b5e000e04ec9d3867e728301583245f2c6539a6c1eb1f297f642ae142b0c77a2f23b4fe29ce244d2ebff26b18c030184a6dad58842fdf1
7
+ data.tar.gz: 36065cd2c7051728716caa913dfb8369cfc4db7c5c446e5666ef6dc3b56b7014194958fe688b577d9cb51a9c82364d9571ff21a101242f7572eb761482a26a14
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
10
11
 
11
12
  # rspec failure tracking
12
13
  .rspec_status
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- akeneo (1.1.0)
4
+ akeneo (1.2.0)
5
5
  httparty
6
6
  redis
7
7
  semantic_logger
data/akeneo.gemspec CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'akeneo'
8
- spec.version = '1.2.0'
8
+ spec.version = '1.3.0'
9
9
  spec.authors = ['AWN Dev Team']
10
10
  spec.email = ['edv@awn.de']
11
11
 
data/lib/akeneo/api.rb CHANGED
@@ -48,6 +48,12 @@ module Akeneo
48
48
  image_service.find(code)
49
49
  end
50
50
 
51
+ def upload_image(code:, file:, filename:, options: {})
52
+ locale = options.delete(:locale) || 'no-locale'
53
+ image_service.create_asset(code, options)
54
+ image_service.create_reference(code, locale, file, filename)
55
+ end
56
+
51
57
  def download_image(code)
52
58
  image_service.download(code)
53
59
  end
@@ -1,12 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'base64'
4
- require 'stringio'
4
+ require 'json'
5
+ require 'mime/types'
6
+ require 'net/http'
7
+ require 'uri'
5
8
 
6
9
  require_relative './service_base.rb'
7
10
 
8
11
  module Akeneo
9
12
  class ImageService < ServiceBase
13
+ BOUNDARY = 'AwesomeBoundary'
14
+
10
15
  def find(code)
11
16
  response = get_request("/assets/#{code}")
12
17
 
@@ -17,8 +22,49 @@ module Akeneo
17
22
  download_request(code)
18
23
  end
19
24
 
25
+ def create_asset(code, options = {})
26
+ body = { code: code }.merge(options)
27
+ post_request('/assets', body.to_json)
28
+ end
29
+
30
+ def create_reference(code, locale, file, filename)
31
+ uri = reference_uri(code, locale)
32
+ http = Net::HTTP.new(uri.host, uri.port)
33
+ http.use_ssl = true
34
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
35
+ request = Net::HTTP::Post.new(uri.request_uri, reference_header)
36
+ request.body = reference_body(file, filename)
37
+ http.request(request)
38
+ end
39
+
20
40
  private
21
41
 
42
+ def reference_header
43
+ authorization_headers.merge("Content-Type": "multipart/form-data; boundary=#{BOUNDARY}")
44
+ end
45
+
46
+ def reference_body(file, filename)
47
+ body = []
48
+ body << "--#{BOUNDARY}\r\n"
49
+ body << "Content-Disposition: form-data; name=\"file\"; filename=\"#{filename}\"\r\n"
50
+ body << "Content-Type: #{MIME::Types.type_for(filename)}\r\n\r\n"
51
+ body << file
52
+ body << "\r\n\r\n--#{BOUNDARY}--\r\n"
53
+ body.join
54
+ end
55
+
56
+ def reference_uri(code, locale)
57
+ URI.parse("#{@url}/api/rest/v1/assets/#{code}/reference-files/#{locale}")
58
+ end
59
+
60
+ def post_request(path, body)
61
+ HTTParty.post(
62
+ "#{@url}/api/rest/v1#{path}",
63
+ headers: default_request_headers,
64
+ body: body
65
+ )
66
+ end
67
+
22
68
  def download_request(code)
23
69
  response = get_request("/assets/#{code}/reference-files/no-locale/download")
24
70
 
@@ -23,8 +23,12 @@ module Akeneo
23
23
  { 'Content-Type' => 'application/json' }
24
24
  end
25
25
 
26
+ def authorization_headers
27
+ { 'Authorization' => "Bearer #{@access_token}" }
28
+ end
29
+
26
30
  def default_request_headers
27
- { 'Authorization' => "Bearer #{@access_token}" }.merge(json_headers)
31
+ authorization_headers.merge(json_headers)
28
32
  end
29
33
 
30
34
  def get_request(path, options = {})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akeneo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AWN Dev Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-09 00:00:00.000000000 Z
11
+ date: 2019-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake