webflow_sync 6.1.2 → 7.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 +4 -4
- data/app/jobs/webflow_sync/create_item_job.rb +4 -1
- data/app/jobs/webflow_sync/destroy_item_job.rb +1 -0
- data/app/jobs/webflow_sync/update_item_job.rb +4 -1
- data/app/services/webflow_sync/api.rb +16 -41
- data/lib/webflow_sync/engine.rb +2 -0
- data/lib/webflow_sync/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f639ebd2128267a119b8dd6a93e2d06858e8713a2faeb6b6f17bc123e60438bb
|
4
|
+
data.tar.gz: 43294f31bc2fa6e5b0772ecbd28480b8c071c6472c1748b05a3109bd2818dc47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fac06bf9bc32b9618636acd2ab18437385f01071435757db1d311225c4f032800cb210c51168c9fb659bc095dcec5d716ce718d1c2e89449bbbf842e59bf4a8
|
7
|
+
data.tar.gz: 8109face21e162c8826b25fec73409009a4bc94ffd519c1648c9c7916f9a4ae6b7bdbe5c328d95031ae0fadfbc0ade771c196a83b3cf4232be80e1cefe19a8de
|
@@ -11,11 +11,14 @@ module WebflowSync
|
|
11
11
|
# collection_slug => slug of the WebFlow collection
|
12
12
|
# model_name = 'articles'; id = article.id, collection_slug = 'stories'
|
13
13
|
def perform(model_name, id, collection_slug = model_name.underscore.dasherize.pluralize)
|
14
|
+
return if WebflowSync.configuration.skip_webflow_sync
|
15
|
+
|
14
16
|
model_class = model_name.underscore.classify.constantize
|
15
17
|
record = model_class.find_by(id:)
|
16
18
|
return if record.blank?
|
19
|
+
return if record.skip_webflow_sync
|
17
20
|
return if record.webflow_site_id.blank?
|
18
|
-
return WebflowSync::UpdateItemJob.
|
21
|
+
return WebflowSync::UpdateItemJob.perform_later(model_name, id, collection_slug) if record.webflow_item_id.present?
|
19
22
|
|
20
23
|
WebflowSync::Api.new(record.webflow_site_id).create_item(record, collection_slug)
|
21
24
|
end
|
@@ -7,11 +7,14 @@ module WebflowSync
|
|
7
7
|
# 'JobListing'.underscore.dasherize.pluralize => 'job-listings'
|
8
8
|
# 'job_listing'.underscore.dasherize.pluralize => 'job-listings'
|
9
9
|
def perform(model_name, id, collection_slug = model_name.underscore.dasherize.pluralize)
|
10
|
+
return if WebflowSync.configuration.skip_webflow_sync
|
11
|
+
|
10
12
|
model_class = model_name.underscore.classify.constantize
|
11
13
|
record = model_class.find_by(id:)
|
12
14
|
return if record.blank?
|
15
|
+
return if record.skip_webflow_sync
|
13
16
|
return if record.webflow_site_id.blank?
|
14
|
-
return WebflowSync::CreateItemJob.
|
17
|
+
return WebflowSync::CreateItemJob.perform_later(model_name, id, collection_slug) if record.webflow_item_id.blank?
|
15
18
|
|
16
19
|
WebflowSync::Api.new(record.webflow_site_id).update_item(record, collection_slug)
|
17
20
|
end
|
@@ -8,20 +8,20 @@ module WebflowSync
|
|
8
8
|
@site_id = site_id
|
9
9
|
end
|
10
10
|
|
11
|
-
def get_all_items(collection_slug:, page_limit: 100) # rubocop:disable Metrics/MethodLength
|
12
|
-
collection_id = find_webflow_collection(collection_slug)
|
13
|
-
max_items_per_page = page_limit
|
11
|
+
def get_all_items(collection_slug:, page_limit: 100) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
12
|
+
collection_id = find_webflow_collection(collection_slug).fetch('id')
|
13
|
+
max_items_per_page = [page_limit, 100].min
|
14
14
|
first_page_number = 1
|
15
15
|
|
16
16
|
result = make_request(:paginate_items, collection_id, page: first_page_number, per_page: max_items_per_page)
|
17
17
|
puts "Get all items from WebFlow for #{collection_slug} page: #{first_page_number}"
|
18
18
|
|
19
|
-
total_items = result
|
19
|
+
total_items = result.dig('pagination', 'total')
|
20
20
|
total_pages = (total_items.to_f / max_items_per_page).ceil
|
21
|
-
items = result
|
21
|
+
items = result.fetch('items')
|
22
22
|
|
23
23
|
(2..total_pages).each do |page_number|
|
24
|
-
next_page_items = make_request(:paginate_items, collection_id, page: page_number, per_page: max_items_per_page)
|
24
|
+
next_page_items = make_request(:paginate_items, collection_id, page: page_number, per_page: max_items_per_page).fetch('items')
|
25
25
|
puts "Get all items from WebFlow for #{collection_slug} page: #{page_number}"
|
26
26
|
|
27
27
|
items.concat next_page_items
|
@@ -33,47 +33,38 @@ module WebflowSync
|
|
33
33
|
def get_item(collection_slug, webflow_item_id)
|
34
34
|
collection = find_webflow_collection(collection_slug)
|
35
35
|
|
36
|
-
make_request(:item, collection
|
36
|
+
make_request(:item, collection.fetch('id'), webflow_item_id)
|
37
37
|
end
|
38
38
|
|
39
39
|
def create_item(record, collection_slug)
|
40
40
|
collection = find_webflow_collection(collection_slug)
|
41
|
-
response = make_request(:create_item, collection
|
42
|
-
record.as_webflow_json.reverse_merge(_archived: false, _draft: false), live: true)
|
41
|
+
response = make_request(:create_item, collection.fetch('id'), record.as_webflow_json, publish: true)
|
43
42
|
|
44
43
|
if update_record_columns(record, response)
|
45
44
|
puts "Created #{record.inspect} in #{collection_slug}"
|
46
45
|
response
|
47
46
|
else
|
48
|
-
raise "Failed to store webflow_item_id: '#{response
|
47
|
+
raise "Failed to store webflow_item_id: '#{response.fetch('id')}' " \
|
49
48
|
"after creating item in WebFlow collection #{record.inspect}"
|
50
49
|
end
|
51
50
|
end
|
52
51
|
|
53
52
|
def update_item(record, collection_slug)
|
54
53
|
collection = find_webflow_collection(collection_slug)
|
55
|
-
response = make_request(:update_item,
|
56
|
-
record.as_webflow_json.reverse_merge(_archived: false, _draft: false), live: true)
|
57
|
-
|
54
|
+
response = make_request(:update_item, collection.fetch('id'), record.webflow_item_id, record.as_webflow_json, publish: true)
|
58
55
|
puts "Updated #{record.inspect} in #{collection_slug}"
|
59
56
|
response
|
60
57
|
end
|
61
58
|
|
62
59
|
def delete_item(collection_slug, webflow_item_id)
|
63
60
|
collection = find_webflow_collection(collection_slug)
|
64
|
-
|
65
|
-
# if we delete without `live: true`, the item will stay visible on the site until the site is published again
|
66
|
-
# if we delete with `live: true`, the item will be set as draft and not visible on the site, but it will be visible in the Webflow CMS
|
67
|
-
# we then call delete again to remove the item from Webflow CMS
|
68
|
-
make_request(:delete_item, { '_cid' => collection['_id'], '_id' => webflow_item_id }, live: true)
|
69
|
-
response = make_request(:delete_item, { '_cid' => collection['_id'], '_id' => webflow_item_id })
|
70
|
-
|
61
|
+
response = make_request(:delete_item, collection.fetch('id'), webflow_item_id)
|
71
62
|
puts "Deleted #{webflow_item_id} from #{collection_slug}"
|
72
63
|
response
|
73
64
|
end
|
74
65
|
|
75
66
|
def publish
|
76
|
-
response = make_request(:publish, site_id
|
67
|
+
response = make_request(:publish, site_id)
|
77
68
|
|
78
69
|
puts "Publish all domains for Webflow site with id: #{site_id}"
|
79
70
|
response
|
@@ -89,23 +80,7 @@ module WebflowSync
|
|
89
80
|
end
|
90
81
|
|
91
82
|
def collections
|
92
|
-
@collections ||= make_request(:collections, site_id)
|
93
|
-
end
|
94
|
-
|
95
|
-
def domain_names
|
96
|
-
@domain_names ||= find_domain_names
|
97
|
-
end
|
98
|
-
|
99
|
-
def find_domain_names
|
100
|
-
# client.domains request does not return the default domain
|
101
|
-
# We need to get default domain name if there are no custom domains set to avoid error:
|
102
|
-
# Webflow::Error: Domain not found for site
|
103
|
-
site = make_request(:site, site_id)
|
104
|
-
default_domain_name = "#{site.fetch('shortName')}.webflow.io"
|
105
|
-
names = [default_domain_name]
|
106
|
-
make_request(:domains, site_id).each { |domain| names << domain.fetch('name') }
|
107
|
-
|
108
|
-
names
|
83
|
+
@collections ||= make_request(:collections, site_id).fetch('collections')
|
109
84
|
end
|
110
85
|
|
111
86
|
def find_webflow_collection(collection_slug)
|
@@ -118,9 +93,9 @@ module WebflowSync
|
|
118
93
|
def update_record_columns(record, response)
|
119
94
|
# use update_column to skip callbacks to prevent WebflowSync::ItemSync to kick off
|
120
95
|
if WebflowSync.configuration.sync_webflow_slug
|
121
|
-
record.update_columns(webflow_item_id: response
|
96
|
+
record.update_columns(webflow_item_id: response.fetch('id'), webflow_slug: response.dig('fieldData', 'slug')) # rubocop:disable Rails/SkipsModelValidations
|
122
97
|
else
|
123
|
-
record.update_column(:webflow_item_id, response
|
98
|
+
record.update_column(:webflow_item_id, response.fetch('id')) # rubocop:disable Rails/SkipsModelValidations
|
124
99
|
end
|
125
100
|
end
|
126
101
|
|
@@ -131,7 +106,7 @@ module WebflowSync
|
|
131
106
|
client.public_send(method_name, *args)
|
132
107
|
end
|
133
108
|
rescue Webflow::Error => e
|
134
|
-
raise unless e.message.strip == '
|
109
|
+
raise unless e.message.strip == 'Too Many Requests'
|
135
110
|
|
136
111
|
puts 'Sleeping 10 seconds'
|
137
112
|
sleep 10
|
data/lib/webflow_sync/engine.rb
CHANGED
data/lib/webflow_sync/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webflow_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Viktor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
|
-
rubygems_version: 3.
|
107
|
+
rubygems_version: 3.4.21
|
108
108
|
signing_key:
|
109
109
|
specification_version: 4
|
110
110
|
summary: Keep Rails models in sync with WebFlow.
|