commercelayer-cli 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 893e42e85db4eb83f1ee5d18f5aa2913a541b927f023282753f1a9ac1fb5e802
4
- data.tar.gz: 42a3a09446d9e19fe9dd73e0b94d30a3889e04b6795c9378a6c0cda7493efe6b
3
+ metadata.gz: 8b11154ba609b7e3f7a56f5a8d0904780c6b2f4d6088fd2debab2a053c7000dc
4
+ data.tar.gz: 309871f46db434adaae8ff20c826045f2c112321f35c3e16b32dc31f211c21a8
5
5
  SHA512:
6
- metadata.gz: '08490ceb2ec22da8f1257d583d4faebfdb1206518bab254de0a8f1515fdf7e45e5da8a614ab1972b9576db450933c06da9c227f757d09fc2db3b18413f29e804'
7
- data.tar.gz: 62f7de5f347ad19282c4118d9833632f0b474384f2cd77f09c2a615f821513a6e0f17009bbbdd3d870d24844dd6b5c7278071c51f7160c62248ce46ff36dfdce
6
+ metadata.gz: 8d23eb152cd1ecb6edafee0150f91b8fe370e87b7575b465a31c787ec9292dfe8f79d4b1f60c32b6e552d400ae9aba9762305a91b8e8d0ce9863916db0fe19e0
7
+ data.tar.gz: bc2b07c689fe2fd0d7f8ebcdc31aa75382fad08801377cb7de75895f53c399fd7df93894ba02180db91ca2735cafbe37545311e03ce4edfa97236c9e30b90db7
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- commercelayer-cli (0.2.2)
4
+ commercelayer-cli (0.2.4)
5
5
  commercelayer
6
6
  contentful-management
7
7
  dato
@@ -143,4 +143,4 @@ DEPENDENCIES
143
143
  rspec (~> 3.0)
144
144
 
145
145
  BUNDLED WITH
146
- 1.16.4
146
+ 1.16.5
@@ -6,6 +6,7 @@ require 'contentful/management'
6
6
  require "commercelayer/cli/version"
7
7
  require "commercelayer/cli/helpers"
8
8
  require "commercelayer/cli/bootstrappers"
9
+ require "commercelayer/cli/exporters"
9
10
 
10
11
  module Commercelayer
11
12
  module CLI
@@ -13,6 +14,7 @@ module Commercelayer
13
14
 
14
15
  include Helpers
15
16
  include Bootstrappers
17
+ include Exporters
16
18
  include Thor::Actions
17
19
 
18
20
  desc "init", "Create a config file under $HOME/.commercelayer-cli.yml"
@@ -28,6 +30,13 @@ module Commercelayer
28
30
  bootstrap_data!(destination)
29
31
  end
30
32
 
33
+ desc "export DESTINATION", "Exports data from Commerce Layer to a destination"
34
+ def export(destination)
35
+ destination ||= ask "What is your destination?", limited_to: ["contentful", "datocms", "csv"]
36
+ export_data!(destination)
37
+ end
38
+
39
+
31
40
  end
32
41
  end
33
42
  end
@@ -0,0 +1,24 @@
1
+ require_relative "exporters/contentful"
2
+
3
+ module Commercelayer
4
+ module CLI
5
+ module Exporters
6
+
7
+ def export_data!(destination)
8
+ commercelayer_client.authorize!
9
+ case destination
10
+ when "contentful"
11
+ if yes? "Warning: this will export your SKUs to Contentful. Continue?", :yellow
12
+ say "Exporting SKUs to Contentful...", :blue
13
+ Contentful.new.export!
14
+ else
15
+ say "Nothing to do here. Bye!", :blue
16
+ end
17
+ else
18
+ say "coming soon...", :yellow
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,93 @@
1
+ module Commercelayer
2
+ module CLI
3
+ module Exporters
4
+ class Contentful
5
+
6
+ include Helpers
7
+
8
+ def export!
9
+ last_product_reference = nil
10
+ last_product_id = nil
11
+ last_product_variants = []
12
+ Commercelayer::Sku.order(:reference).all.each_total do |sku|
13
+ puts "> #{sku.code}"
14
+ if sku.reference != last_product_reference
15
+ if last_product_id
16
+ product = master.entries.find(last_product_id)
17
+ product.update({
18
+ reference: last_product_reference,
19
+ variants: last_product_variants
20
+ })
21
+ product.publish
22
+ last_product_variants = []
23
+ end
24
+
25
+ begin
26
+ product = product_model.entries.create({
27
+ reference: sku.reference,
28
+ variants: []
29
+ })
30
+ last_product_reference = sku.reference
31
+ last_product_id = product.id
32
+ rescue => e
33
+ puts e.inspect
34
+ break
35
+ end
36
+ end
37
+
38
+ begin
39
+ variant = variant_model.entries.create({
40
+ code: sku.code,
41
+ name: sku.name,
42
+ description: sku.description,
43
+ image: image(sku)
44
+ })
45
+ variant.publish
46
+ last_product_variants << variant
47
+ rescue => e
48
+ puts e.inspect
49
+ break
50
+ end
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def client
57
+ ::Contentful::Management::Client.new(config_data[:contentful][:access_token])
58
+ end
59
+
60
+ def environments
61
+ @environments ||= client.environments(config_data[:contentful][:space]).all
62
+ end
63
+
64
+ def master
65
+ @master ||= environments.find('master').first
66
+ end
67
+
68
+ def product_model
69
+ @product_model ||= master.content_types.find('product')
70
+ end
71
+
72
+ def variant_model
73
+ @variant_model ||= master.content_types.find('variant')
74
+ end
75
+
76
+ def image(sku, options={})
77
+ unless sku.image_url.blank?
78
+ image_file = ::Contentful::Management::File.new
79
+ image_file.properties[:contentType] = "image/jpeg"
80
+ image_file.properties[:fileName] = "#{sku.code}.jpg"
81
+ image_file.properties[:upload] = sku.image_url
82
+ image_file
83
+ image_asset = master.assets.create(title: sku.name, file: image_file)
84
+ image_asset.process_file
85
+ image_asset.publish
86
+ image_asset
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+ end
93
+ end
@@ -11,15 +11,14 @@ module Commercelayer
11
11
  "commercelayer" => {
12
12
  "site" => "https://<subdomain>.commercelayer.io",
13
13
  "client_id" => "YOUR-COMMERCELAYER-CLIENT-ID",
14
- "client_secret" => "YOUR-COMMERCELAYER-CLIENT-SECRET",
15
- "scope" => "market:<market_id>",
16
- },
17
- "dato" => {
18
- "api_key" => "YOUR-DATOCMS-APIKEY"
14
+ "client_secret" => "YOUR-COMMERCELAYER-CLIENT-SECRET"
19
15
  },
20
16
  "contentful" => {
21
17
  "space" => "YOUR-CONTENTFUL-SPACE-ID",
22
18
  "access_token" => "YOUR-CONTENTFUL-ACCESS-TOKEN"
19
+ },
20
+ "dato" => {
21
+ "api_key" => "YOUR-DATOCMS-APIKEY"
23
22
  }
24
23
  }.to_yaml
25
24
  end
@@ -32,7 +31,7 @@ module Commercelayer
32
31
  Commercelayer::Client.new(
33
32
  client_id: config_data[:commercelayer][:client_id],
34
33
  client_secret: config_data[:commercelayer][:client_secret],
35
- scope: config_data[:commercelayer][:scope],
34
+ # scope: config_data[:commercelayer][:scope],
36
35
  site: config_data[:commercelayer][:site]
37
36
  )
38
37
  end
@@ -1,5 +1,5 @@
1
1
  module Commercelayer
2
2
  module CLI
3
- VERSION = "0.2.4"
3
+ VERSION = "0.2.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: commercelayer-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Filippo Conforti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-12 00:00:00.000000000 Z
11
+ date: 2018-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -133,6 +133,8 @@ files:
133
133
  - lib/commercelayer/cli/bootstrappers.rb
134
134
  - lib/commercelayer/cli/bootstrappers/contentful.rb
135
135
  - lib/commercelayer/cli/bootstrappers/datocms.rb
136
+ - lib/commercelayer/cli/exporters.rb
137
+ - lib/commercelayer/cli/exporters/contentful.rb
136
138
  - lib/commercelayer/cli/helpers.rb
137
139
  - lib/commercelayer/cli/version.rb
138
140
  homepage: https://github.com/commercelayer/commercelayer-cli