workarea-core 3.5.4 → 3.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/workarea/content/block.rb +1 -1
- data/app/models/workarea/content/block_draft.rb +1 -1
- data/app/models/workarea/content/block_type.rb +1 -1
- data/app/models/workarea/content/block_type_definition.rb +1 -1
- data/app/models/workarea/content/preset.rb +1 -1
- data/app/models/workarea/segment/rules/traffic_referrer.rb +2 -2
- data/app/models/workarea/segmentable.rb +1 -1
- data/app/services/workarea/direct_upload.rb +11 -12
- data/app/workers/sidekiq/callbacks.rb +52 -4
- data/app/workers/sidekiq/callbacks_worker.rb +6 -4
- data/lib/workarea/configuration/content_blocks.rb +16 -0
- data/lib/workarea/version.rb +1 -1
- data/test/javascripts/form_submitting_controls_spec.js +1 -0
- data/test/models/workarea/content/block_name_test.rb +2 -2
- data/test/models/workarea/content/block_type_definition_test.rb +6 -6
- data/test/services/workarea/direct_upload_test.rb +26 -1
- data/test/workers/sidekiq/callbacks_test.rb +22 -0
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d47e5bfba5ae31a8628b66da9818d40cc49adb0e3428b0449bddb3a414bc0efc
|
4
|
+
data.tar.gz: 4336935901cbd99fedf36de8e62ee3d1f842b143bed0d79e0b253be3419c97c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22c46296fa0ad6e75263909fe7793134219c05122077f2d6d58a1f4a493e425861f7051bbbb5684984bb34f7f0c9f80151fd44c9e8eb7b79868ccd2a8304a576
|
7
|
+
data.tar.gz: 11bea33230c8001e5d2f8841729b065600bd89d6faa22be3d5cf5183dfe4e065739cce4b52f664f3edacbe010ed5ddd87c78ef0d32bafdfe4de90d7638dff272
|
@@ -13,11 +13,11 @@ module Workarea
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def medium_match?(referrer)
|
16
|
-
medium.to_s.strip.casecmp?(referrer.medium)
|
16
|
+
medium.present? && medium.to_s.strip.casecmp?(referrer.medium.to_s)
|
17
17
|
end
|
18
18
|
|
19
19
|
def source_match?(referrer)
|
20
|
-
source.any? { |s| s.strip.casecmp?(referrer.source) }
|
20
|
+
source.any? { |s| s.present? && s.to_s.strip.casecmp?(referrer.source.to_s) }
|
21
21
|
end
|
22
22
|
|
23
23
|
def url_match?(referrer)
|
@@ -73,7 +73,7 @@ module Workarea
|
|
73
73
|
# If loaded with `.only` this might be missing
|
74
74
|
return if attribute_missing?(:active_segment_ids)
|
75
75
|
|
76
|
-
CurrentSegments.has_segmented_content! if active_segment_ids.
|
76
|
+
CurrentSegments.has_segmented_content! if active_segment_ids.present?
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -10,18 +10,17 @@ module Workarea
|
|
10
10
|
redis_key = "cors_#{url.optionize}"
|
11
11
|
return if Workarea.redis.get(redis_key) == 'true'
|
12
12
|
|
13
|
-
Workarea.s3.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
)
|
24
|
-
|
13
|
+
response = Workarea.s3.get_bucket_cors(Configuration::S3.bucket)
|
14
|
+
cors = response.data[:body]
|
15
|
+
cors['CORSConfiguration'] << {
|
16
|
+
'ID' => "direct_upload_#{url}",
|
17
|
+
'AllowedMethod' => 'PUT',
|
18
|
+
'AllowedOrigin' => url,
|
19
|
+
'AllowedHeader' => '*'
|
20
|
+
}
|
21
|
+
cors['CORSConfiguration'].uniq!
|
22
|
+
|
23
|
+
Workarea.s3.put_bucket_cors(Configuration::S3.bucket, cors)
|
25
24
|
Workarea.redis.set(redis_key, 'true')
|
26
25
|
end
|
27
26
|
|
@@ -7,6 +7,54 @@ module Sidekiq
|
|
7
7
|
class InvalidConfiguration < RuntimeError; end
|
8
8
|
|
9
9
|
class << self
|
10
|
+
# The list of workers that perform Sidekiq callbacks. Used for checking
|
11
|
+
# whether one of them need to be fired off after a callback happens.
|
12
|
+
#
|
13
|
+
# @private
|
14
|
+
# @return [Array<Class>]
|
15
|
+
#
|
16
|
+
def workers
|
17
|
+
caching_classes? ? workers_list : workers_list.map(&:constantize)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Add a {Class} to the list of workers to check when running callbacks.
|
21
|
+
#
|
22
|
+
# @private
|
23
|
+
# @param [Class] worker
|
24
|
+
#
|
25
|
+
def add_worker(klass)
|
26
|
+
if caching_classes?
|
27
|
+
workers_list << klass
|
28
|
+
elsif !workers_list.include?(klass.name)
|
29
|
+
workers_list << klass.name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Whether Rails is caching classes, which matters when checking workers to
|
34
|
+
# run by comparing the worker's configuration with the model running the
|
35
|
+
# callback.
|
36
|
+
#
|
37
|
+
# When we aren't caching classes, we need to use the fully qualified
|
38
|
+
# constant name to decide since the classes could have been reloaded due
|
39
|
+
# to code changes.
|
40
|
+
#
|
41
|
+
# @return [Boolean]
|
42
|
+
#
|
43
|
+
def caching_classes?
|
44
|
+
::Rails.application.config.cache_classes
|
45
|
+
end
|
46
|
+
|
47
|
+
# Convenience reference to the tracked list of workers in the Rails config
|
48
|
+
#
|
49
|
+
# @private
|
50
|
+
# @return [Array<String,Class>]
|
51
|
+
#
|
52
|
+
def workers_list
|
53
|
+
config = ::Rails.application.config
|
54
|
+
config.sidekiq_callbacks_workers = [] unless config.respond_to?(:sidekiq_callbacks_workers)
|
55
|
+
config.sidekiq_callbacks_workers
|
56
|
+
end
|
57
|
+
|
10
58
|
# Permanently or temporarily enable callback workers. If
|
11
59
|
# no workers are given, it will enable all callback
|
12
60
|
# workers during the execution of the block or globally if no
|
@@ -148,7 +196,7 @@ module Sidekiq
|
|
148
196
|
# finds a problem.
|
149
197
|
#
|
150
198
|
def assert_valid_config!
|
151
|
-
Sidekiq::
|
199
|
+
Sidekiq::Callbacks.workers.each do |worker|
|
152
200
|
if (worker.enqueue_on.values.flatten & [:find, 'find']).any?
|
153
201
|
raise(
|
154
202
|
InvalidConfiguration,
|
@@ -161,7 +209,7 @@ module Sidekiq
|
|
161
209
|
private
|
162
210
|
|
163
211
|
def set_workers(workers, action)
|
164
|
-
workers = Sidekiq::
|
212
|
+
workers = Sidekiq::Callbacks.workers if workers.blank?
|
165
213
|
|
166
214
|
if !block_given?
|
167
215
|
workers.each(&action)
|
@@ -197,7 +245,7 @@ module Sidekiq
|
|
197
245
|
private
|
198
246
|
|
199
247
|
def _enqueue_callback_workers(kind)
|
200
|
-
Sidekiq::
|
248
|
+
Sidekiq::Callbacks.workers.select(&:enabled?).each do |worker|
|
201
249
|
worker.callbacks.each do |klass, callbacks|
|
202
250
|
if _perform_callback_worker?(klass, callbacks, kind, worker)
|
203
251
|
args = worker.find_callback_args(self)
|
@@ -219,7 +267,7 @@ module Sidekiq
|
|
219
267
|
end
|
220
268
|
|
221
269
|
def _is_a_callback_type_match?(model_class)
|
222
|
-
return is_a?(model_class) if ::
|
270
|
+
return is_a?(model_class) if Sidekiq::Callbacks.caching_classes?
|
223
271
|
|
224
272
|
# This is a funny way of doing the same check as `is_a?`.
|
225
273
|
#
|
@@ -4,15 +4,17 @@ module Sidekiq
|
|
4
4
|
module CallbacksWorker
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
mattr_accessor :workers
|
8
|
-
self.workers = []
|
9
|
-
|
10
7
|
included do
|
11
8
|
thread_cattr_accessor :enabled, :inlined
|
12
|
-
|
9
|
+
Sidekiq::Callbacks.add_worker(self)
|
13
10
|
end
|
14
11
|
|
15
12
|
class_methods do
|
13
|
+
# @deprecated TODO remove this in v3.6
|
14
|
+
def workers
|
15
|
+
Sidekiq::Callbacks.workers
|
16
|
+
end
|
17
|
+
|
16
18
|
def enabled?
|
17
19
|
enabled.nil? || !!enabled
|
18
20
|
end
|
@@ -3,6 +3,14 @@ module Workarea
|
|
3
3
|
module ContentBlocks
|
4
4
|
extend self
|
5
5
|
|
6
|
+
def types
|
7
|
+
@types ||= []
|
8
|
+
end
|
9
|
+
|
10
|
+
def types=(values)
|
11
|
+
@types = values
|
12
|
+
end
|
13
|
+
|
6
14
|
def building_blocks
|
7
15
|
@building_blocks ||= []
|
8
16
|
end
|
@@ -11,6 +19,14 @@ module Workarea
|
|
11
19
|
building_blocks.each do |block|
|
12
20
|
Content::BlockTypeDefinition.define(&block)
|
13
21
|
end
|
22
|
+
|
23
|
+
# TODO remove in v3.6, this exists to help with a backwards incompatible
|
24
|
+
# patch to fix copying of Workarea.config in multisite.
|
25
|
+
Workarea.config.content_block_types = types
|
26
|
+
Workarea.deprecation.deprecate_methods(
|
27
|
+
AdministrableOptions,
|
28
|
+
content_block_types: 'use Configuration::ContentBlocks.types instead'
|
29
|
+
)
|
14
30
|
end
|
15
31
|
end
|
16
32
|
end
|
data/lib/workarea/version.rb
CHANGED
@@ -5,7 +5,7 @@ module Workarea
|
|
5
5
|
class BlockNameTest < TestCase
|
6
6
|
def test_not_erroring_for_configured_blocks
|
7
7
|
assert_nothing_raised do
|
8
|
-
|
8
|
+
Configuration::ContentBlocks.types.each do |type|
|
9
9
|
block = Block.new(type: type, data: type.defaults)
|
10
10
|
BlockName.new(block).to_s
|
11
11
|
end
|
@@ -13,7 +13,7 @@ module Workarea
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_name_is_human_readable
|
16
|
-
|
16
|
+
Configuration::ContentBlocks.types.each do |type|
|
17
17
|
block = Block.new(type: type, data: type.defaults)
|
18
18
|
name = BlockName.new(block).to_s
|
19
19
|
|
@@ -7,12 +7,12 @@ module Workarea
|
|
7
7
|
teardown :restore_config
|
8
8
|
|
9
9
|
def reset_config
|
10
|
-
@current =
|
11
|
-
|
10
|
+
@current = Configuration::ContentBlocks.types
|
11
|
+
Configuration::ContentBlocks.types = []
|
12
12
|
end
|
13
13
|
|
14
14
|
def restore_config
|
15
|
-
|
15
|
+
Configuration::ContentBlocks.types = @current
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_constructs_a_list_of_blocks_based_on_the_dsl
|
@@ -39,8 +39,8 @@ module Workarea
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
assert_equal(2,
|
43
|
-
results =
|
42
|
+
assert_equal(2, Configuration::ContentBlocks.types.length)
|
43
|
+
results = Configuration::ContentBlocks.types
|
44
44
|
|
45
45
|
assert_equal('Foo', results.first.name)
|
46
46
|
assert_equal('workarea/admin/content_block_types/custom_foo_icon', results.first.icon)
|
@@ -122,7 +122,7 @@ module Workarea
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
result =
|
125
|
+
result = Configuration::ContentBlocks.types.first
|
126
126
|
|
127
127
|
assert_equal('Foo', result.name)
|
128
128
|
assert_equal(5, result.fieldsets.length)
|
@@ -47,6 +47,14 @@ module Workarea
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_ensure_cors
|
50
|
+
response = mock('Excon::Response')
|
51
|
+
response.expects(:data)
|
52
|
+
.times(3)
|
53
|
+
.returns(body: { 'CORSConfiguration' => [] })
|
54
|
+
Workarea.s3.expects(:get_bucket_cors)
|
55
|
+
.times(3)
|
56
|
+
.with(Configuration::S3.bucket)
|
57
|
+
.returns(response)
|
50
58
|
Workarea.s3.expects(:put_bucket_cors).with(
|
51
59
|
Configuration::S3.bucket,
|
52
60
|
'CORSConfiguration' => [
|
@@ -61,6 +69,12 @@ module Workarea
|
|
61
69
|
Workarea.s3.expects(:put_bucket_cors).with(
|
62
70
|
Configuration::S3.bucket,
|
63
71
|
'CORSConfiguration' => [
|
72
|
+
{
|
73
|
+
'ID' => "direct_upload_http://test.host",
|
74
|
+
'AllowedMethod' => 'PUT',
|
75
|
+
'AllowedOrigin' => 'http://test.host',
|
76
|
+
'AllowedHeader' => '*'
|
77
|
+
},
|
64
78
|
{
|
65
79
|
'ID' => "direct_upload_http://localhost:3000",
|
66
80
|
'AllowedMethod' => 'PUT',
|
@@ -72,6 +86,18 @@ module Workarea
|
|
72
86
|
Workarea.s3.expects(:put_bucket_cors).with(
|
73
87
|
Configuration::S3.bucket,
|
74
88
|
'CORSConfiguration' => [
|
89
|
+
{
|
90
|
+
'ID' => "direct_upload_http://test.host",
|
91
|
+
'AllowedMethod' => 'PUT',
|
92
|
+
'AllowedOrigin' => 'http://test.host',
|
93
|
+
'AllowedHeader' => '*'
|
94
|
+
},
|
95
|
+
{
|
96
|
+
'ID' => "direct_upload_http://localhost:3000",
|
97
|
+
'AllowedMethod' => 'PUT',
|
98
|
+
'AllowedOrigin' => 'http://localhost:3000',
|
99
|
+
'AllowedHeader' => '*'
|
100
|
+
},
|
75
101
|
{
|
76
102
|
'ID' => "direct_upload_https://example.com",
|
77
103
|
'AllowedMethod' => 'PUT',
|
@@ -81,7 +107,6 @@ module Workarea
|
|
81
107
|
]
|
82
108
|
).returns(true)
|
83
109
|
|
84
|
-
|
85
110
|
assert(DirectUpload.ensure_cors!('http://test.host/admin/content_assets'))
|
86
111
|
assert_equal('true', Workarea.redis.get('cors_http_test_host'))
|
87
112
|
assert(DirectUpload.ensure_cors!('http://localhost:3000/admin/content_assets'))
|
@@ -133,6 +133,9 @@ module Sidekiq
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
class TestTrackingWorkerOne; end
|
137
|
+
class TestTrackingWorkerTwo; end
|
138
|
+
|
136
139
|
setup :setup_sidekiq
|
137
140
|
teardown :teardown_sidekiq
|
138
141
|
|
@@ -429,5 +432,24 @@ module Sidekiq
|
|
429
432
|
|
430
433
|
assert(Worker.enabled?)
|
431
434
|
end
|
435
|
+
|
436
|
+
def test_tracking_workers
|
437
|
+
current_workers = ::Rails.application.config.sidekiq_callbacks_workers
|
438
|
+
::Rails.application.config.sidekiq_callbacks_workers = []
|
439
|
+
|
440
|
+
Sidekiq::Callbacks.add_worker(TestTrackingWorkerOne)
|
441
|
+
assert_includes(Sidekiq::Callbacks.workers, TestTrackingWorkerOne)
|
442
|
+
|
443
|
+
current_cache_classes = ::Rails.application.config.cache_classes
|
444
|
+
::Rails.application.config.cache_classes = false
|
445
|
+
::Rails.application.config.sidekiq_callbacks_workers = []
|
446
|
+
|
447
|
+
Sidekiq::Callbacks.add_worker(TestTrackingWorkerTwo)
|
448
|
+
assert_includes(Sidekiq::Callbacks.workers, TestTrackingWorkerTwo)
|
449
|
+
|
450
|
+
ensure
|
451
|
+
::Rails.application.config.sidekiq_callbacks_workers = current_workers
|
452
|
+
::Rails.application.config.cache_classes = current_cache_classes
|
453
|
+
end
|
432
454
|
end
|
433
455
|
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.5
|
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-
|
11
|
+
date: 2020-02-21 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.3
|
902
899
|
- - ">="
|
903
900
|
- !ruby/object:Gem::Version
|
904
901
|
version: 5.10.1
|
902
|
+
- - "~>"
|
903
|
+
- !ruby/object:Gem::Version
|
904
|
+
version: 5.10.3
|
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.3
|
912
909
|
- - ">="
|
913
910
|
- !ruby/object:Gem::Version
|
914
911
|
version: 5.10.1
|
912
|
+
- - "~>"
|
913
|
+
- !ruby/object:Gem::Version
|
914
|
+
version: 5.10.3
|
915
915
|
- !ruby/object:Gem::Dependency
|
916
916
|
name: countries
|
917
917
|
requirement: !ruby/object:Gem::Requirement
|
@@ -2718,7 +2718,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2718
2718
|
- !ruby/object:Gem::Version
|
2719
2719
|
version: '0'
|
2720
2720
|
requirements: []
|
2721
|
-
rubygems_version: 3.
|
2721
|
+
rubygems_version: 3.0.6
|
2722
2722
|
signing_key:
|
2723
2723
|
specification_version: 4
|
2724
2724
|
summary: Core of the Workarea Commerce Platform
|