workarea-core 3.5.3 → 3.5.4
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/assets/javascripts/workarea/core/modules/duplicate_id.js +5 -1
- data/app/models/workarea/release.rb +24 -1
- data/app/models/workarea/release/changeset.rb +9 -9
- data/lib/workarea/configuration.rb +15 -0
- data/lib/workarea/version.rb +1 -1
- data/test/javascripts/duplicate_id_spec.js +7 -1
- data/test/javascripts/fixtures/{duplicate_id.html.haml → duplicate_id_fail.html.haml} +1 -0
- data/test/javascripts/fixtures/duplicate_id_pass.html.haml +2 -0
- data/test/models/workarea/release_test.rb +25 -55
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8490f36459db38d3440f85a679bbc51aec0fe302563068a715fc51e78e130ab0
|
4
|
+
data.tar.gz: ba46602137e05b884f87a0169a75a896b9e7c7cb2601ce25130fac421dbd5a27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4188e1edfb091422a9a871dfcd4819d7732e110bf45262d00c59ef532ebce574a64b8ab0e2c097c9a1442432de90b11dbf6acb3d419ca8b9e43da4e46e4b726
|
7
|
+
data.tar.gz: 24700c5024b1bbde51a34eca0108ddf71a2caa8cf8edaed22fd5041a51a109b5e7854f8c7a323b103b20ee99536f5b67fb697cdcb1685d50a09d13ff47134cae
|
@@ -54,13 +54,17 @@ WORKAREA.registerModule('duplicateId', (function () {
|
|
54
54
|
}).toArray();
|
55
55
|
},
|
56
56
|
|
57
|
+
hasIdValue = function (_, element) {
|
58
|
+
return element.id !== '';
|
59
|
+
},
|
60
|
+
|
57
61
|
/**
|
58
62
|
* @method
|
59
63
|
* @name init
|
60
64
|
* @memberof WORKAREA.duplicateId
|
61
65
|
*/
|
62
66
|
init = function () {
|
63
|
-
var $elements = $('[id]'),
|
67
|
+
var $elements = $('[id]').filter(hasIdValue),
|
64
68
|
ids = getIdValues($elements);
|
65
69
|
|
66
70
|
if (_.isEmpty($elements) || noDuplicateIds(ids)) { return; }
|
@@ -186,7 +186,8 @@ module Workarea
|
|
186
186
|
self.publish_at = nil
|
187
187
|
save!
|
188
188
|
|
189
|
-
|
189
|
+
ordered_changesets.each(&:publish!)
|
190
|
+
touch_releasables
|
190
191
|
end
|
191
192
|
|
192
193
|
def set_publish_job
|
@@ -207,6 +208,18 @@ module Workarea
|
|
207
208
|
StatusCalculator.new(calculators, self).results
|
208
209
|
end
|
209
210
|
|
211
|
+
# Get changesets ordered based on publish priority set by configuration.
|
212
|
+
#
|
213
|
+
# @return [Array<Workarea::Release::Changeset>]
|
214
|
+
#
|
215
|
+
def ordered_changesets
|
216
|
+
ordering = Workarea.config.release_changeset_ordering
|
217
|
+
|
218
|
+
changesets.sort_by do |changeset|
|
219
|
+
ordering[changeset.releasable_type].presence || 999
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
210
223
|
private
|
211
224
|
|
212
225
|
def publish_at_status
|
@@ -225,5 +238,15 @@ module Workarea
|
|
225
238
|
Scheduler.delete(publish_job_id)
|
226
239
|
self.publish_job_id = nil
|
227
240
|
end
|
241
|
+
|
242
|
+
def touch_releasables
|
243
|
+
Sidekiq::Callbacks.disable do
|
244
|
+
changesets
|
245
|
+
.map(&:releasable_from_document_path)
|
246
|
+
.compact
|
247
|
+
.uniq
|
248
|
+
.each(&:touch)
|
249
|
+
end
|
250
|
+
end
|
228
251
|
end
|
229
252
|
end
|
@@ -106,15 +106,6 @@ module Workarea
|
|
106
106
|
releasable_from_document_path.reload
|
107
107
|
end
|
108
108
|
|
109
|
-
private
|
110
|
-
|
111
|
-
def apply_changeset(model, changeset)
|
112
|
-
changeset.each do |field, new_value|
|
113
|
-
model.send(:attribute_will_change!, field) # required for correct dirty tracking
|
114
|
-
model.attributes[field] = new_value
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
109
|
def releasable_from_document_path
|
119
110
|
return @releasable_from_document_path if defined?(@releasable_from_document_path)
|
120
111
|
|
@@ -125,6 +116,15 @@ module Workarea
|
|
125
116
|
nil
|
126
117
|
end
|
127
118
|
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
def apply_changeset(model, changeset)
|
123
|
+
changeset.each do |field, new_value|
|
124
|
+
model.send(:attribute_will_change!, field) # required for correct dirty tracking
|
125
|
+
model.attributes[field] = new_value
|
126
|
+
end
|
127
|
+
end
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
@@ -1276,6 +1276,21 @@ module Workarea
|
|
1276
1276
|
|
1277
1277
|
# How long a password reset URL stays valid
|
1278
1278
|
config.password_reset_timeout = 2.hours
|
1279
|
+
|
1280
|
+
# Define the priority order that releasable models' changesets get
|
1281
|
+
# published in. Workarea::Navigation::Menu should always be last. Any
|
1282
|
+
# model without a defined position will automatically set as 999.
|
1283
|
+
config.release_changeset_ordering = {
|
1284
|
+
'Workarea::Pricing::Price' => 0,
|
1285
|
+
'Workarea::Pricing::Sku' => 1,
|
1286
|
+
'Workarea::Catalog::Variant' => 2,
|
1287
|
+
'Workarea::Catalog::Product' => 3,
|
1288
|
+
'Workarea::Content::Block' => 4,
|
1289
|
+
'Workarea::Content' => 5,
|
1290
|
+
'Workarea::Content::Page' => 6,
|
1291
|
+
'Workarea::Catalog::Category' => 7,
|
1292
|
+
'Workarea::Navigation::Menu' => 1_000
|
1293
|
+
}
|
1279
1294
|
end
|
1280
1295
|
end
|
1281
1296
|
end
|
data/lib/workarea/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
//= require workarea/core/modules/environment
|
2
|
+
//= require workarea/core/modules/string
|
2
3
|
//= require workarea/core/modules/duplicate_id
|
3
4
|
|
4
5
|
(function () {
|
@@ -7,9 +8,14 @@
|
|
7
8
|
describe('WORKAREA.duplicateId', function () {
|
8
9
|
describe('init', function () {
|
9
10
|
it('throws error on duplicate ids', function () {
|
10
|
-
this.fixtures = fixture.load('
|
11
|
+
this.fixtures = fixture.load('duplicate_id_fail.html');
|
11
12
|
expect(WORKAREA.duplicateId.init).to.throw(Error, /foo|bar/);
|
12
13
|
});
|
14
|
+
|
15
|
+
it('should allow for empty ID values', function () {
|
16
|
+
this.fixtures = fixture.load('duplicate_id_pass.html');
|
17
|
+
expect(WORKAREA.duplicateId.init).to.not.throw(Error);
|
18
|
+
});
|
13
19
|
});
|
14
20
|
});
|
15
21
|
}());
|
@@ -160,62 +160,32 @@ module Workarea
|
|
160
160
|
assert(release.published?)
|
161
161
|
end
|
162
162
|
|
163
|
-
def
|
164
|
-
one_week_from_now = 1.week.from_now
|
165
|
-
|
166
|
-
one = create_release(publish_at: one_week_from_now)
|
167
|
-
two = create_release(publish_at: nil)
|
168
|
-
three = create_release(publish_at: 8.days.from_now)
|
169
|
-
four = create_release(publish_at: 6.days.from_now)
|
170
|
-
five = create_release(publish_at: one_week_from_now)
|
171
|
-
six = create_release(publish_at: 4.days.from_now)
|
172
|
-
|
173
|
-
assert_equal([six, four, five], one.scheduled_before)
|
174
|
-
assert_equal([], two.scheduled_before)
|
175
|
-
assert_equal([six, four, one, five], three.scheduled_before)
|
176
|
-
assert_equal([six], four.scheduled_before)
|
177
|
-
assert_equal([six, four, one], five.scheduled_before)
|
178
|
-
assert_equal([], six.scheduled_before)
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_scheduled_after
|
182
|
-
one_week_from_now = 1.week.from_now
|
183
|
-
|
184
|
-
one = create_release(name: '1', publish_at: one_week_from_now)
|
185
|
-
two = create_release(name: '2', publish_at: nil)
|
186
|
-
three = create_release(name: '3', publish_at: 8.days.from_now)
|
187
|
-
four = create_release(name: '4', publish_at: 6.days.from_now)
|
188
|
-
five = create_release(name: '5', publish_at: one_week_from_now)
|
189
|
-
six = create_release(name: '6', publish_at: 4.days.from_now)
|
190
|
-
|
191
|
-
assert_equal([five, three], one.scheduled_after)
|
192
|
-
assert_equal([], two.scheduled_after)
|
193
|
-
assert_equal([], three.scheduled_after)
|
194
|
-
assert_equal([one, five, three], four.scheduled_after)
|
195
|
-
assert_equal([one, three], five.scheduled_after)
|
196
|
-
assert_equal([four, one, five, three], six.scheduled_after)
|
197
|
-
end
|
198
|
-
|
199
|
-
def test_previous
|
163
|
+
def test_ordered_changesets
|
200
164
|
release = create_release
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
165
|
+
[
|
166
|
+
{ releasable_type: 'Workarea::Catalog::Category', releasable_id: '123' },
|
167
|
+
{ releasable_type: 'Workarea::Catalog::Product', releasable_id: 'PROD1' },
|
168
|
+
{ releasable_type: 'Workarea::Catalog::Variant', releasable_id: 'VAR1' },
|
169
|
+
{ releasable_type: 'Workarea::Content::Page', releasable_id: 'PAGE1' },
|
170
|
+
{ releasable_type: 'Workarea::Navigation::Menu', releasable_id: 'NAV1' },
|
171
|
+
{ releasable_type: 'Workarea::Content', releasable_id: 'CON1' },
|
172
|
+
{ releasable_type: 'Workarea::Search::Customization', releasable_id: 'CUS1' },
|
173
|
+
{ releasable_type: 'Workarea::Content::Block', releasable_id: 'BLC1' }
|
174
|
+
].each { |changeset| release.changesets.build(changeset) }
|
175
|
+
|
176
|
+
assert_equal(
|
177
|
+
%w(
|
178
|
+
Workarea::Catalog::Variant
|
179
|
+
Workarea::Catalog::Product
|
180
|
+
Workarea::Content::Block
|
181
|
+
Workarea::Content
|
182
|
+
Workarea::Content::Page
|
183
|
+
Workarea::Catalog::Category
|
184
|
+
Workarea::Search::Customization
|
185
|
+
Workarea::Navigation::Menu
|
186
|
+
),
|
187
|
+
release.ordered_changesets.map(&:releasable_type)
|
188
|
+
)
|
219
189
|
end
|
220
190
|
end
|
221
191
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workarea-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Crouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -896,22 +896,22 @@ dependencies:
|
|
896
896
|
name: minitest
|
897
897
|
requirement: !ruby/object:Gem::Requirement
|
898
898
|
requirements:
|
899
|
-
- - ">="
|
900
|
-
- !ruby/object:Gem::Version
|
901
|
-
version: 5.10.1
|
902
899
|
- - "~>"
|
903
900
|
- !ruby/object:Gem::Version
|
904
901
|
version: 5.10.3
|
902
|
+
- - ">="
|
903
|
+
- !ruby/object:Gem::Version
|
904
|
+
version: 5.10.1
|
905
905
|
type: :runtime
|
906
906
|
prerelease: false
|
907
907
|
version_requirements: !ruby/object:Gem::Requirement
|
908
908
|
requirements:
|
909
|
-
- - ">="
|
910
|
-
- !ruby/object:Gem::Version
|
911
|
-
version: 5.10.1
|
912
909
|
- - "~>"
|
913
910
|
- !ruby/object:Gem::Version
|
914
911
|
version: 5.10.3
|
912
|
+
- - ">="
|
913
|
+
- !ruby/object:Gem::Version
|
914
|
+
version: 5.10.1
|
915
915
|
- !ruby/object:Gem::Dependency
|
916
916
|
name: countries
|
917
917
|
requirement: !ruby/object:Gem::Requirement
|
@@ -2056,7 +2056,8 @@ files:
|
|
2056
2056
|
- test/javascripts/deletion_forms_spec.js
|
2057
2057
|
- test/javascripts/duplicate_id_spec.js
|
2058
2058
|
- test/javascripts/fixtures/deletion_forms.html.haml
|
2059
|
-
- test/javascripts/fixtures/
|
2059
|
+
- test/javascripts/fixtures/duplicate_id_fail.html.haml
|
2060
|
+
- test/javascripts/fixtures/duplicate_id_pass.html.haml
|
2060
2061
|
- test/javascripts/fixtures/form_submitting_controls.html.haml
|
2061
2062
|
- test/javascripts/fixtures/reveal_password.html.haml
|
2062
2063
|
- test/javascripts/fixtures/workarea_scope.html.haml
|
@@ -2717,7 +2718,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2717
2718
|
- !ruby/object:Gem::Version
|
2718
2719
|
version: '0'
|
2719
2720
|
requirements: []
|
2720
|
-
rubygems_version: 3.
|
2721
|
+
rubygems_version: 3.1.2
|
2721
2722
|
signing_key:
|
2722
2723
|
specification_version: 4
|
2723
2724
|
summary: Core of the Workarea Commerce Platform
|