webflow_sync 4.0.2 → 6.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/README.md +12 -4
- data/Rakefile +4 -2
- data/app/jobs/webflow_sync/create_item_job.rb +1 -0
- data/app/services/webflow_sync/api.rb +14 -21
- data/lib/generators/webflow_sync/templates/webflow_sync.rb +0 -1
- data/lib/webflow_sync/configuration.rb +1 -2
- data/lib/webflow_sync/version.rb +1 -1
- metadata +6 -104
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98d3c00c861dd048087817fe1a709eb32a66cde4d5b79e0207ca6b19513dd9df
|
4
|
+
data.tar.gz: dac4374d4f30f254db0808669600b5f0e1d8418bd38e43dcfaa736fed25631ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 203099b7e60df11fe4ac8c4319c4e41603d737a269892fcc120ed4909ebbfb47ea3c4dc0ec2456404607f8a3ba5e155923cff5c781e75a7edd3417e1ac908268
|
7
|
+
data.tar.gz: '0993c797a70bf2efe1faa86eb3f439a85a1a7233201033c5ccc4ccb3b71fcf97f15df19839e9b92259013f4141b2955d84d9c7bdaf017d8ee7a81791989c4d26'
|
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
|
-
|
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. `
|
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
|
|
@@ -230,9 +232,15 @@ This gem silently "fails" (does nothing) when `webflow_site_id` or `webflow_item
|
|
230
232
|
|
231
233
|
PRs welcome!
|
232
234
|
|
235
|
+
To run RuboCop style check and RSpec tests run:
|
236
|
+
|
237
|
+
```sh
|
238
|
+
bundle exec rake
|
239
|
+
```
|
240
|
+
|
233
241
|
## Thanks and Credits
|
234
242
|
|
235
|
-
This gem wouldn't be possible without the amazing work of [webflow-ruby](https://github.com/penseo/webflow-ruby) gem. Thank you, @phoet!
|
243
|
+
This gem wouldn't be possible without the amazing work of [webflow-ruby](https://github.com/penseo/webflow-ruby) gem. Thank you, [@phoet](https://github.com/phoet)!
|
236
244
|
|
237
245
|
|
238
246
|
## License
|
data/Rakefile
CHANGED
@@ -11,5 +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'
|
15
|
-
task default
|
14
|
+
load 'rspec/rails/tasks/rspec.rake' # runs all RSpec tests
|
15
|
+
task :default do
|
16
|
+
Rake::Task['style:rubocop:run'].execute
|
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)
|
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
|
-
if
|
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
|
-
|
45
|
+
if update_record_columns(record, response)
|
50
46
|
puts "Created #{record.inspect} in #{collection_slug}"
|
51
47
|
response
|
52
48
|
else
|
@@ -60,28 +56,24 @@ 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}"
|
@@ -121,7 +113,7 @@ module WebflowSync
|
|
121
113
|
response
|
122
114
|
end
|
123
115
|
|
124
|
-
def
|
116
|
+
def update_record_columns(record, response)
|
125
117
|
# use update_column to skip callbacks to prevent WebflowSync::ItemSync to kick off
|
126
118
|
if WebflowSync.configuration.sync_webflow_slug
|
127
119
|
record.update_columns(webflow_item_id: response['_id'], webflow_slug: response['slug']) # rubocop:disable Rails/SkipsModelValidations
|
@@ -130,18 +122,19 @@ module WebflowSync
|
|
130
122
|
end
|
131
123
|
end
|
132
124
|
|
133
|
-
def make_request(method_name, *args,
|
125
|
+
def make_request(method_name, *args, **kwargs)
|
134
126
|
if kwargs.present?
|
135
127
|
client.public_send(method_name, *args, **kwargs)
|
136
128
|
else
|
137
129
|
client.public_send(method_name, *args)
|
138
130
|
end
|
139
131
|
rescue Webflow::Error => e
|
140
|
-
raise
|
132
|
+
raise unless e.message.strip == 'Rate limit hit'
|
133
|
+
|
134
|
+
puts 'Sleeping 10 seconds'
|
135
|
+
sleep 10
|
141
136
|
|
142
|
-
|
143
|
-
sleep 2**retries
|
144
|
-
make_request(method_name, *args, retries: retries + 1, **kwargs)
|
137
|
+
make_request(method_name, *args, **kwargs)
|
145
138
|
end
|
146
139
|
end
|
147
140
|
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
|
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)
|
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: 6.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:
|
11
|
+
date: 2023-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: sprockets-rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,111 +39,13 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: factory_bot_rails
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: guard-rspec
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: net-smtp
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry-rails
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec-rails
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: vcr
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: webmock
|
42
|
+
name: webflow-ruby
|
141
43
|
requirement: !ruby/object:Gem::Requirement
|
142
44
|
requirements:
|
143
45
|
- - ">="
|
144
46
|
- !ruby/object:Gem::Version
|
145
47
|
version: '0'
|
146
|
-
type: :
|
48
|
+
type: :runtime
|
147
49
|
prerelease: false
|
148
50
|
version_requirements: !ruby/object:Gem::Requirement
|
149
51
|
requirements:
|
@@ -202,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
104
|
- !ruby/object:Gem::Version
|
203
105
|
version: '0'
|
204
106
|
requirements: []
|
205
|
-
rubygems_version: 3.3.
|
107
|
+
rubygems_version: 3.3.26
|
206
108
|
signing_key:
|
207
109
|
specification_version: 4
|
208
110
|
summary: Keep Rails models in sync with WebFlow.
|