webflow_sync 5.0.0 → 6.1.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: e2c06f856b81cc899ec4558cd26ddedc42f870bc2cd93620895f2991d68eb0a1
4
- data.tar.gz: 2ae06ec63e98709b8ce972a83690a9a03aa9c5f1f59da790114391b43a4e1f9f
3
+ metadata.gz: bf8a9fdd99e65667dad7f82bd2e5eb7539999a3c48a363cfd8f68b1217b6bb84
4
+ data.tar.gz: e7aa812fd99148cf99cd41b5c999414d356dd2384e59cc610de61a73d7a3ecf1
5
5
  SHA512:
6
- metadata.gz: de94d27681c0c660d6ca9a19332660f7864e13077b17cd5afe996d5bfea070df6d63ce7a3f3007d65005ba016175676d85f597322a29b9df55935ff4519916a1
7
- data.tar.gz: 679933381b266e9b113b7954bff9a206ae6beb1e45f2e0ea895ecf80ae93ebab3c017a3be5efc17c1f8494287d92792e049b98a89174a75e2234266cf8cc142d
6
+ metadata.gz: 7ad5b0d2e7fb1724ab309f96630e3653dfe3b4419365b2131af623ec324b05b47e4a65275f977fc5a42744f12630892659bce92053de065d5cc92ebc2f2cc58a
7
+ data.tar.gz: b61fdc179fcc31af51ab45180eec3f108e842e3b92870463e5602515b470a6c5956a3d1825f7c37dc99e513322d76d615d30d957344a191d45018893b4c5873d
data/README.md CHANGED
@@ -11,9 +11,12 @@ For the latest changes, check the [CHANGELOG.md](CHANGELOG.md).
11
11
 
12
12
  ## Installation
13
13
 
14
- Add this line to your application's Gemfile:
14
+ This gem currently only works with a fork of 'webflow-ruby' gem.
15
+
16
+ Add these lines to your application's Gemfile:
15
17
 
16
18
  ```ruby
19
+ gem 'webflow-ruby', github: 'vfonic/webflow-ruby', branch: 'allow-live-delete'
17
20
  gem 'webflow_sync'
18
21
  ```
19
22
 
@@ -45,8 +48,7 @@ In `config/initializers/webflow_sync.rb` you can specify configuration options:
45
48
  1. `api_token`
46
49
  2. `webflow_site_id`
47
50
  3. `skip_webflow_sync` - skip synchronization for different environments.
48
- 4. `publish_on_sync` - republish all domains after create, update and destroy actions.
49
- 5. `sync_webflow_slug` - save slug generated on WebFlow to the Rails model, `webflow_slug` column.
51
+ 4. `sync_webflow_slug` - save slug generated on WebFlow to the Rails model, `webflow_slug` column.
50
52
 
51
53
  This can be useful if you want to link to WebFlow item directly from your Rails app:
52
54
 
data/Rakefile CHANGED
@@ -11,8 +11,7 @@ require 'bundler/gem_tasks'
11
11
 
12
12
  require 'stylecheck/rake_tasks' unless Rails.env.production?
13
13
 
14
- load 'rspec/rails/tasks/rspec.rake'
14
+ load 'rspec/rails/tasks/rspec.rake' # runs all RSpec tests
15
15
  task :default do
16
16
  Rake::Task['style:rubocop:run'].execute
17
- Rake::Task['spec'].execute
18
17
  end
@@ -15,6 +15,7 @@ module WebflowSync
15
15
  record = model_class.find_by(id:)
16
16
  return if record.blank?
17
17
  return if record.webflow_site_id.blank?
18
+ return WebflowSync::UpdateItemJob.perform_now(model_name, id, collection_slug) if record.webflow_item_id.present?
18
19
 
19
20
  WebflowSync::Api.new(record.webflow_site_id).create_item(record, collection_slug)
20
21
  end
@@ -37,16 +37,12 @@ module WebflowSync
37
37
  make_request(:item, collection['_id'], webflow_item_id)
38
38
  end
39
39
 
40
- def create_item(record, collection_slug) # rubocop:disable Metrics/MethodLength
40
+ def create_item(record, collection_slug)
41
41
  collection = find_webflow_collection(collection_slug)
42
42
  response = make_request(:create_item, collection['_id'],
43
43
  record.as_webflow_json.reverse_merge(_archived: false, _draft: false), live: true)
44
44
 
45
45
  if update_record_columns(record, response)
46
- # When the item is created, sometimes changes are not visible throughout the WebFlow site immediately (probably due to some caching).
47
- # To make this change immediately visible from the WebFlow site, we need to publish the site.
48
- publish
49
-
50
46
  puts "Created #{record.inspect} in #{collection_slug}"
51
47
  response
52
48
  else
@@ -60,34 +56,32 @@ module WebflowSync
60
56
  response = make_request(:update_item, { '_cid' => collection['_id'], '_id' => record.webflow_item_id },
61
57
  record.as_webflow_json.reverse_merge(_archived: false, _draft: false), live: true)
62
58
 
63
- # When the item is updated, sometimes changes are not visible throughout the WebFlow site immediately (probably due to some caching).
64
- # To make this change immediately visible from the WebFlow site, we need to publish the site.
65
- publish
66
-
67
59
  puts "Updated #{record.inspect} in #{collection_slug}"
68
60
  response
69
61
  end
70
62
 
71
63
  def delete_item(collection_slug, webflow_item_id)
72
64
  collection = find_webflow_collection(collection_slug)
65
+ # deleting items from Webflow doesn't work as expected.
66
+ # if we delete without `live: true`, the item will stay visible on the site until the site is published again
67
+ # 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
68
+ # we then call delete again to remove the item from Webflow CMS
69
+ make_request(:delete_item, { '_cid' => collection['_id'], '_id' => webflow_item_id }, live: true)
73
70
  response = make_request(:delete_item, { '_cid' => collection['_id'], '_id' => webflow_item_id })
74
- # When the item is removed from WebFlow, it's still visible throughout the WebFlow site (probably due to some caching).
75
- # To remove the item immediately from the WebFlow site, we need to publish the site.
76
- publish
77
71
 
78
72
  puts "Deleted #{webflow_item_id} from #{collection_slug}"
79
73
  response
80
74
  end
81
75
 
82
76
  def publish
83
- return unless WebflowSync.configuration.publish_on_sync
84
-
85
77
  response = make_request(:publish, site_id, domain_names:)
86
78
 
87
79
  puts "Publish all domains for Webflow site with id: #{site_id}"
88
80
  response
89
81
  end
90
82
 
83
+ def sites = make_request(:sites)
84
+
91
85
  private
92
86
 
93
87
  def client
@@ -95,7 +89,7 @@ module WebflowSync
95
89
  end
96
90
 
97
91
  def collections
98
- @collections ||= client.collections(site_id)
92
+ @collections ||= make_request(:collections, site_id)
99
93
  end
100
94
 
101
95
  def domain_names
@@ -106,16 +100,16 @@ module WebflowSync
106
100
  # client.domains request does not return the default domain
107
101
  # We need to get default domain name if there are no custom domains set to avoid error:
108
102
  # Webflow::Error: Domain not found for site
109
- site = client.site(site_id)
110
- default_domain_name = "#{site['shortName']}.webflow.io"
103
+ site = make_request(:site, site_id)
104
+ default_domain_name = "#{site.fetch('shortName')}.webflow.io"
111
105
  names = [default_domain_name]
112
- client.domains(site_id).each { |domain| names << domain['name'] }
106
+ make_request(:domains, site_id).each { |domain| names << domain.fetch('name') }
113
107
 
114
108
  names
115
109
  end
116
110
 
117
111
  def find_webflow_collection(collection_slug)
118
- response = collections.find { |collection| collection['slug'] == collection_slug }
112
+ response = collections.find { |collection| collection.fetch('slug') == collection_slug }
119
113
  raise "Cannot find collection #{collection_slug} for Webflow site #{site_id}" unless response
120
114
 
121
115
  response
@@ -130,18 +124,19 @@ module WebflowSync
130
124
  end
131
125
  end
132
126
 
133
- def make_request(method_name, *args, retries: 0, **kwargs)
127
+ def make_request(method_name, *args, **kwargs)
134
128
  if kwargs.present?
135
129
  client.public_send(method_name, *args, **kwargs)
136
130
  else
137
131
  client.public_send(method_name, *args)
138
132
  end
139
133
  rescue Webflow::Error => e
140
- raise if retries >= 8 || e.message.strip != 'Rate limit hit'
134
+ raise unless e.message.strip == 'Rate limit hit'
135
+
136
+ puts 'Sleeping 10 seconds'
137
+ sleep 10
141
138
 
142
- puts "Sleeping #{2**retries} seconds"
143
- sleep 2**retries
144
- make_request(method_name, *args, retries: retries + 1, **kwargs)
139
+ make_request(method_name, *args, **kwargs)
145
140
  end
146
141
  end
147
142
  end
@@ -5,5 +5,4 @@ WebflowSync.configure do |config|
5
5
  # config.skip_webflow_sync = Rails.env.test? # default
6
6
  config.webflow_site_id = ENV.fetch('WEBFLOW_SITE_ID')
7
7
  config.sync_webflow_slug = ENV.fetch('SYNC_WEBFLOW_SLUG')
8
- config.publish_on_sync = true
9
8
  end
@@ -7,7 +7,6 @@ module WebflowSync
7
7
  def configure
8
8
  self.configuration ||= Configuration.new
9
9
 
10
- self.configuration.publish_on_sync = true
11
10
  self.configuration.skip_webflow_sync = !Rails.env.production?
12
11
 
13
12
  yield(self.configuration)
@@ -21,7 +20,7 @@ module WebflowSync
21
20
  end
22
21
 
23
22
  class Configuration
24
- attr_accessor :skip_webflow_sync, :webflow_site_id, :sync_webflow_slug, :publish_on_sync
23
+ attr_accessor :skip_webflow_sync, :webflow_site_id, :sync_webflow_slug
25
24
  attr_reader :api_token
26
25
 
27
26
  def api_token=(value)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WebflowSync
4
- VERSION = '5.0.0'
4
+ VERSION = '6.1.0'
5
5
  end
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: 5.0.0
4
+ version: 6.1.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-02-08 00:00:00.000000000 Z
11
+ date: 2023-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7.0'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '7.0'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sprockets-rails
29
29
  requirement: !ruby/object:Gem::Requirement