workarea-core 3.4.25 → 3.4.26
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 +26 -2
- 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 +28 -0
- 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: 565180173a33822af9ccf9869c938b7a279aa4af98d302d5eb294ae92a64ddcd
|
4
|
+
data.tar.gz: 7e8a3f3affcb68255b2015abbc0215b07e074d4678f4ac5e949fd790f78a8497
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 233b6a7ea863877f716e809c348c921155fbf868db0a462bbcc57fe540aebe0008f44dc1a58d9fface1d04deb5bc0450938c8f53941a393246e5b9fffc3373a7
|
7
|
+
data.tar.gz: db0b7774e57ef6c9f59e3c171c998a53400fc316500fd246ab1aadffc604bb473292edcc3371b7a06a42fa087a1bd5f0fddd50b8c974e50f55b7a48903116582
|
@@ -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; }
|
@@ -155,7 +155,8 @@ module Workarea
|
|
155
155
|
self.publish_at = nil
|
156
156
|
save!
|
157
157
|
|
158
|
-
|
158
|
+
ordered_changesets.each(&:publish!)
|
159
|
+
touch_releasables
|
159
160
|
end
|
160
161
|
|
161
162
|
def undo!
|
@@ -163,7 +164,8 @@ module Workarea
|
|
163
164
|
self.undone_at = Time.current
|
164
165
|
save!
|
165
166
|
|
166
|
-
|
167
|
+
ordered_changesets.each(&:undo!)
|
168
|
+
touch_releasables
|
167
169
|
end
|
168
170
|
|
169
171
|
def set_publish_job
|
@@ -193,6 +195,18 @@ module Workarea
|
|
193
195
|
StatusCalculator.new(calculators, self).results
|
194
196
|
end
|
195
197
|
|
198
|
+
# Get changesets ordered based on publish priority set by configuration.
|
199
|
+
#
|
200
|
+
# @return [Array<Workarea::Release::Changeset>]
|
201
|
+
#
|
202
|
+
def ordered_changesets
|
203
|
+
ordering = Workarea.config.release_changeset_ordering
|
204
|
+
|
205
|
+
changesets.sort_by do |changeset|
|
206
|
+
ordering[changeset.releasable_type].presence || 999
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
196
210
|
private
|
197
211
|
|
198
212
|
def publish_at_status
|
@@ -228,5 +242,15 @@ module Workarea
|
|
228
242
|
errors.add(:undo_at, I18n.t('workarea.errors.messages.undo_unpublished_release'))
|
229
243
|
end
|
230
244
|
end
|
245
|
+
|
246
|
+
def touch_releasables
|
247
|
+
Sidekiq::Callbacks.disable do
|
248
|
+
changesets
|
249
|
+
.map(&:releasable_from_document_path)
|
250
|
+
.compact
|
251
|
+
.uniq
|
252
|
+
.each(&:touch)
|
253
|
+
end
|
254
|
+
end
|
231
255
|
end
|
232
256
|
end
|
@@ -100,15 +100,6 @@ module Workarea
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
private
|
104
|
-
|
105
|
-
def apply_changeset(model, changeset)
|
106
|
-
changeset.each do |field, new_value|
|
107
|
-
model.send(:attribute_will_change!, field) # required for correct dirty tracking
|
108
|
-
model.attributes[field] = new_value
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
103
|
def releasable_from_document_path
|
113
104
|
return @releasable_from_document_path if defined?(@releasable_from_document_path)
|
114
105
|
|
@@ -120,6 +111,15 @@ module Workarea
|
|
120
111
|
end
|
121
112
|
end
|
122
113
|
|
114
|
+
private
|
115
|
+
|
116
|
+
def apply_changeset(model, changeset)
|
117
|
+
changeset.each do |field, new_value|
|
118
|
+
model.send(:attribute_will_change!, field) # required for correct dirty tracking
|
119
|
+
model.attributes[field] = new_value
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
123
|
def build_undo(model = releasable_from_document_path)
|
124
124
|
self.undo = changeset.keys.inject({}) do |memo, key|
|
125
125
|
old_value = model.attributes[key]
|
@@ -1268,6 +1268,21 @@ module Workarea
|
|
1268
1268
|
# if your CSV files are failing to import with a UTF-8 encoding
|
1269
1269
|
# error.
|
1270
1270
|
config.csv_import_options = { encoding: 'bom|utf-8' }
|
1271
|
+
|
1272
|
+
# Define the priority order that releasable models' changesets get
|
1273
|
+
# published in. Workarea::Navigation::Menu should always be last. Any
|
1274
|
+
# model without a defined position will automatically set as 999.
|
1275
|
+
config.release_changeset_ordering = {
|
1276
|
+
'Workarea::Pricing::Price' => 0,
|
1277
|
+
'Workarea::Pricing::Sku' => 1,
|
1278
|
+
'Workarea::Catalog::Variant' => 2,
|
1279
|
+
'Workarea::Catalog::Product' => 3,
|
1280
|
+
'Workarea::Content::Block' => 4,
|
1281
|
+
'Workarea::Content' => 5,
|
1282
|
+
'Workarea::Content::Page' => 6,
|
1283
|
+
'Workarea::Catalog::Category' => 7,
|
1284
|
+
'Workarea::Navigation::Menu' => 1_000
|
1285
|
+
}
|
1271
1286
|
end
|
1272
1287
|
end
|
1273
1288
|
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
|
}());
|
@@ -204,6 +204,34 @@ module Workarea
|
|
204
204
|
refute(release.valid?)
|
205
205
|
assert_includes(release.errors.full_messages.to_sentence, I18n.t('workarea.errors.messages.undo_unpublished_release'))
|
206
206
|
end
|
207
|
+
|
208
|
+
def test_ordered_changesets
|
209
|
+
release = create_release
|
210
|
+
[
|
211
|
+
{ releasable_type: 'Workarea::Catalog::Category', releasable_id: '123' },
|
212
|
+
{ releasable_type: 'Workarea::Catalog::Product', releasable_id: 'PROD1' },
|
213
|
+
{ releasable_type: 'Workarea::Catalog::Variant', releasable_id: 'VAR1' },
|
214
|
+
{ releasable_type: 'Workarea::Content::Page', releasable_id: 'PAGE1' },
|
215
|
+
{ releasable_type: 'Workarea::Navigation::Menu', releasable_id: 'NAV1' },
|
216
|
+
{ releasable_type: 'Workarea::Content', releasable_id: 'CON1' },
|
217
|
+
{ releasable_type: 'Workarea::Search::Customization', releasable_id: 'CUS1' },
|
218
|
+
{ releasable_type: 'Workarea::Content::Block', releasable_id: 'BLC1' }
|
219
|
+
].each { |changeset| release.changesets.build(changeset) }
|
220
|
+
|
221
|
+
assert_equal(
|
222
|
+
%w(
|
223
|
+
Workarea::Catalog::Variant
|
224
|
+
Workarea::Catalog::Product
|
225
|
+
Workarea::Content::Block
|
226
|
+
Workarea::Content
|
227
|
+
Workarea::Content::Page
|
228
|
+
Workarea::Catalog::Category
|
229
|
+
Workarea::Search::Customization
|
230
|
+
Workarea::Navigation::Menu
|
231
|
+
),
|
232
|
+
release.ordered_changesets.map(&:releasable_type)
|
233
|
+
)
|
234
|
+
end
|
207
235
|
end
|
208
236
|
|
209
237
|
class ReleaseJobsTest < TestCase
|
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.4.
|
4
|
+
version: 3.4.26
|
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
|
@@ -882,22 +882,22 @@ dependencies:
|
|
882
882
|
name: minitest
|
883
883
|
requirement: !ruby/object:Gem::Requirement
|
884
884
|
requirements:
|
885
|
-
- - ">="
|
886
|
-
- !ruby/object:Gem::Version
|
887
|
-
version: 5.10.1
|
888
885
|
- - "~>"
|
889
886
|
- !ruby/object:Gem::Version
|
890
887
|
version: 5.10.3
|
888
|
+
- - ">="
|
889
|
+
- !ruby/object:Gem::Version
|
890
|
+
version: 5.10.1
|
891
891
|
type: :runtime
|
892
892
|
prerelease: false
|
893
893
|
version_requirements: !ruby/object:Gem::Requirement
|
894
894
|
requirements:
|
895
|
-
- - ">="
|
896
|
-
- !ruby/object:Gem::Version
|
897
|
-
version: 5.10.1
|
898
895
|
- - "~>"
|
899
896
|
- !ruby/object:Gem::Version
|
900
897
|
version: 5.10.3
|
898
|
+
- - ">="
|
899
|
+
- !ruby/object:Gem::Version
|
900
|
+
version: 5.10.1
|
901
901
|
- !ruby/object:Gem::Dependency
|
902
902
|
name: countries
|
903
903
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1987,7 +1987,8 @@ files:
|
|
1987
1987
|
- test/javascripts/deletion_forms_spec.js
|
1988
1988
|
- test/javascripts/duplicate_id_spec.js
|
1989
1989
|
- test/javascripts/fixtures/deletion_forms.html.haml
|
1990
|
-
- test/javascripts/fixtures/
|
1990
|
+
- test/javascripts/fixtures/duplicate_id_fail.html.haml
|
1991
|
+
- test/javascripts/fixtures/duplicate_id_pass.html.haml
|
1991
1992
|
- test/javascripts/fixtures/form_submitting_controls.html.haml
|
1992
1993
|
- test/javascripts/fixtures/reveal_password.html.haml
|
1993
1994
|
- test/javascripts/fixtures/workarea_scope.html.haml
|
@@ -2608,7 +2609,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2608
2609
|
- !ruby/object:Gem::Version
|
2609
2610
|
version: '0'
|
2610
2611
|
requirements: []
|
2611
|
-
rubygems_version: 3.
|
2612
|
+
rubygems_version: 3.1.2
|
2612
2613
|
signing_key:
|
2613
2614
|
specification_version: 4
|
2614
2615
|
summary: Core of the Workarea Commerce Platform
|