ckeditor5 1.26.0 → 1.26.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae47ab2c50827fd1a0716bc093475ce4e55a237ad3a9f4c35ba0b66d8ea46f7c
4
- data.tar.gz: 13e648a1a348203b84f7220b7160c9d98e25753a97a207e4c5260d8d4d598571
3
+ metadata.gz: b30c6cdd98e034209f4dd07ffa70d5a209c207fc1f7a7b37dfd58192a12ac4bc
4
+ data.tar.gz: e36f7f055fc52af917e2b146653879172a840af29e16665a650c6331092a18a7
5
5
  SHA512:
6
- metadata.gz: c311294593a9de01ba525eab43d6dbf0418f454e6c7754a8c2a607464539ca82ed39f61a66d58f5c3a977f89a39c591adfb60b63711c47f3c2657e6c3442c49e
7
- data.tar.gz: 64f021c1316971588676e9819d422b09d83bea982d74e94544ccbcc703ffb381778dc08aa308620559701a030d88423c20b5b3a678abfc1854daebb33f9fccc1
6
+ metadata.gz: de3f06d82c4dedc97d34e3082a2f1aaf13323b9fb15ed0bc68d126fa4f63890234206e5fc52528e27332937d9330fc70440b687cc91a7facfe6f8a7b04271836
7
+ data.tar.gz: 26c4eeb0617420bd283841c0bd4bd77a3516eef5287e59a7388591bc6f8538838c7abba67ccc20fc4a32db5662daa8c168954767eb158a96a4cfcc626ed36310
@@ -73,7 +73,7 @@ module CKEditor5::Rails
73
73
  type ||= preset.type
74
74
 
75
75
  # Add some fallbacks
76
- config[:licenseKey] ||= context[:license_key]
76
+ config[:licenseKey] ||= context[:license_key] || preset.license_key
77
77
  config[:language] = { ui: language } if language
78
78
 
79
79
  editor_props = Editor::Props.new(
@@ -44,7 +44,7 @@ module CKEditor5::Rails::Plugins::Patches
44
44
  JS
45
45
 
46
46
  def initialize
47
- super(:FixColorPickerRaceCondition, PLUGIN_CODE)
47
+ super(:FixColorPickerRaceCondition, PLUGIN_CODE, max_version: '44.4.0')
48
48
  compress!
49
49
  end
50
50
  end
@@ -80,7 +80,7 @@ module CKEditor5::Rails
80
80
  raise InvalidPatchPluginError, 'Provided plugin must be a PropsPatchPlugin instance'
81
81
  end
82
82
 
83
- return unless plugin.applicable_for_version?(config[:version])
83
+ return unless !@version || plugin.applicable_for_version?(@version)
84
84
 
85
85
  register_plugin(plugin)
86
86
  end
@@ -127,8 +127,10 @@ module CKEditor5::Rails
127
127
  # Check if the plugin looks like an inline plugin
128
128
  # @param plugin [Editor::PropsBasePlugin] Plugin instance
129
129
  # @return [Boolean] True if the plugin is an inline plugin
130
- def looks_like_inline_plugin?(plugin)
131
- plugin.respond_to?(:code) && plugin.code.present?
130
+ def looks_like_unsafe_inline_plugin?(plugin)
131
+ plugin.respond_to?(:code) &&
132
+ plugin.code.present? &&
133
+ !plugin.is_a?(CKEditor5::Rails::Editor::PropsPatchPlugin)
132
134
  end
133
135
 
134
136
  # Register a plugin in the editor configuration.
@@ -140,7 +142,7 @@ module CKEditor5::Rails
140
142
  # @param plugin_obj [Editor::PropsBasePlugin] Plugin instance to register
141
143
  # @return [Editor::PropsBasePlugin] The registered plugin
142
144
  def register_plugin(plugin_obj)
143
- if disallow_inline_plugins && looks_like_inline_plugin?(plugin_obj)
145
+ if disallow_inline_plugins && looks_like_unsafe_inline_plugin?(plugin_obj)
144
146
  raise DisallowedInlinePluginError, 'Inline plugins are not allowed here.'
145
147
  end
146
148
 
@@ -191,6 +191,9 @@ module CKEditor5::Rails
191
191
  @version = Semver.new(version)
192
192
  end
193
193
 
194
+ # If there is no license key set, and the version if newer than 44.0.0, switch to GPL
195
+ # as the license key is now required in all versions
196
+ gpl if license_key.nil? && @version.major >= 44
194
197
  apply_integration_patches if apply_patches
195
198
  end
196
199
 
@@ -10,6 +10,13 @@ module CKEditor5
10
10
  include Comparable
11
11
 
12
12
  def initialize(version_string)
13
+ if version_string.is_a?(Semver)
14
+ @major = version_string.major
15
+ @minor = version_string.minor
16
+ @patch = version_string.patch
17
+ return
18
+ end
19
+
13
20
  validate!(version_string)
14
21
  @major, @minor, @patch = version_string.split('.').map(&:to_i)
15
22
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module CKEditor5
4
4
  module Rails
5
- VERSION = '1.26.0'
5
+ VERSION = '1.26.1'
6
6
 
7
7
  DEFAULT_CKEDITOR_VERSION = '44.1.0'
8
8
  end
@@ -24,6 +24,7 @@ RSpec.describe CKEditor5::Rails::Editor::Helpers::Editor do
24
24
  allow(preset).to receive(:config).and_return({})
25
25
  allow(preset).to receive(:automatic_upgrades?).and_return(false)
26
26
  allow(preset).to receive(:editable_height).and_return(nil)
27
+ allow(preset).to receive(:license_key).and_return(nil)
27
28
  end
28
29
 
29
30
  before do
@@ -225,6 +226,18 @@ RSpec.describe CKEditor5::Rails::Editor::Helpers::Editor do
225
226
  expect(helper.ckeditor5_editor(editable_height: 600)).to include('editable-height="600px"')
226
227
  end
227
228
  end
229
+
230
+ context 'when using license key' do
231
+ it 'uses license key from preset when no other license key is provided' do
232
+ custom_context = { preset: :default, bundle: 'custom-bundle' }
233
+ allow(helper).to receive(:ckeditor5_context_or_fallback).and_return(custom_context)
234
+
235
+ allow(preset).to receive(:license_key).and_return('preset-license-key')
236
+
237
+ result = helper.ckeditor5_editor
238
+ expect(result).to include('preset-license-key')
239
+ end
240
+ end
228
241
  end
229
242
 
230
243
  describe '#ckeditor5_editable' do
@@ -36,6 +36,62 @@ RSpec.describe CKEditor5::Rails::Editor::PropsPatchPlugin do
36
36
  expect(result).to be true
37
37
  end
38
38
 
39
+ it 'returns true when version is equal to min constraint' do
40
+ result = described_class.applicable_for_version?(
41
+ '29.0.0',
42
+ min_version: '29.0.0'
43
+ )
44
+ expect(result).to be true
45
+ end
46
+
47
+ it 'returns true when version is equal to max constraint' do
48
+ result = described_class.applicable_for_version?(
49
+ '30.0.0',
50
+ max_version: '30.0.0'
51
+ )
52
+ expect(result).to be true
53
+ end
54
+
55
+ it 'returns true when version is higher than min constraint (patch)' do
56
+ result = described_class.applicable_for_version?(
57
+ '29.0.1',
58
+ min_version: '29.0.0'
59
+ )
60
+ expect(result).to be true
61
+ end
62
+
63
+ it 'returns true when version is higher than min constraint (minor)' do
64
+ result = described_class.applicable_for_version?(
65
+ '29.1.0',
66
+ min_version: '29.0.0'
67
+ )
68
+ expect(result).to be true
69
+ end
70
+
71
+ it 'returns true when version is higher than min constraint (major)' do
72
+ result = described_class.applicable_for_version?(
73
+ '30.0.0',
74
+ min_version: '29.0.0'
75
+ )
76
+ expect(result).to be true
77
+ end
78
+
79
+ it 'returns false when version is not equal to max constraint (patch)' do
80
+ result = described_class.applicable_for_version?(
81
+ '30.0.1',
82
+ max_version: '30.0.0'
83
+ )
84
+ expect(result).to be false
85
+ end
86
+
87
+ it 'returns false when version is not equal to min constraint (minor)' do
88
+ result = described_class.applicable_for_version?(
89
+ '29.1.0',
90
+ max_version: '29.0.0'
91
+ )
92
+ expect(result).to be false
93
+ end
94
+
39
95
  it 'returns false when version is too low' do
40
96
  result = described_class.applicable_for_version?(
41
97
  '28.9.9',
@@ -56,16 +112,46 @@ RSpec.describe CKEditor5::Rails::Editor::PropsPatchPlugin do
56
112
  end
57
113
 
58
114
  describe '#applicable_for_version?' do
59
- let(:plugin) do
60
- described_class.new(plugin_name, plugin_code, min_version: '29.0.0', max_version: '30.0.0')
115
+ context 'with both version constraints' do
116
+ let(:plugin) do
117
+ described_class.new(plugin_name, plugin_code, min_version: '29.0.0', max_version: '30.0.0')
118
+ end
119
+
120
+ it 'returns true for version within constraints' do
121
+ expect(plugin.applicable_for_version?('29.1.0')).to be true
122
+ end
123
+
124
+ it 'returns false for version outside constraints' do
125
+ expect(plugin.applicable_for_version?('28.9.9')).to be false
126
+ end
61
127
  end
62
128
 
63
- it 'returns true for version within constraints' do
64
- expect(plugin.applicable_for_version?('29.1.0')).to be true
129
+ context 'with only min_version constraint' do
130
+ let(:plugin) do
131
+ described_class.new(plugin_name, plugin_code, min_version: '29.0.0')
132
+ end
133
+
134
+ it 'returns true for version above min_version' do
135
+ expect(plugin.applicable_for_version?('30.0.0')).to be true
136
+ end
137
+
138
+ it 'returns false for version below min_version' do
139
+ expect(plugin.applicable_for_version?('28.9.9')).to be false
140
+ end
65
141
  end
66
142
 
67
- it 'returns false for version outside constraints' do
68
- expect(plugin.applicable_for_version?('28.9.9')).to be false
143
+ context 'with only max_version constraint' do
144
+ let(:plugin) do
145
+ described_class.new(plugin_name, plugin_code, max_version: '30.0.0')
146
+ end
147
+
148
+ it 'returns true for version below max_version' do
149
+ expect(plugin.applicable_for_version?('29.0.0')).to be true
150
+ end
151
+
152
+ it 'returns false for version above max_version' do
153
+ expect(plugin.applicable_for_version?('30.0.1')).to be false
154
+ end
69
155
  end
70
156
  end
71
157
  end
@@ -31,6 +31,34 @@ RSpec.describe CKEditor5::Rails::Presets::PresetBuilder do
31
31
  end
32
32
  end
33
33
 
34
+ describe '#version' do
35
+ it 'sets version' do
36
+ builder.version '35.0.0'
37
+ expect(builder.version).to eq('35.0.0')
38
+ end
39
+
40
+ context 'with version >= 44.0.0' do
41
+ it 'sets GPL license when no license key is set' do
42
+ builder.version('44.0.0')
43
+ expect(builder.license_key).to eq('GPL')
44
+ expect(builder.premium?).to be false
45
+ end
46
+
47
+ it 'does not change license when license key is already set' do
48
+ builder.license_key('commercial-key')
49
+ builder.version('44.0.0')
50
+ expect(builder.license_key).to eq('commercial-key')
51
+ end
52
+ end
53
+
54
+ context 'with version < 44.0.0' do
55
+ it 'does not set GPL license automatically' do
56
+ builder.version('43.0.0')
57
+ expect(builder.license_key).to be_nil
58
+ end
59
+ end
60
+ end
61
+
34
62
  describe '#initialize_copy' do
35
63
  let(:original) do
36
64
  described_class.new do
@@ -520,6 +548,10 @@ RSpec.describe CKEditor5::Rails::Presets::PresetBuilder do
520
548
  end
521
549
 
522
550
  describe '#special_characters' do
551
+ it 'should not crash if block is not provided' do
552
+ expect { builder.special_characters }.not_to raise_error
553
+ end
554
+
523
555
  it 'configures special characters with groups and items' do # rubocop:disable Metrics/BlockLength
524
556
  builder.special_characters do
525
557
  group 'Emoji', label: 'Emoticons' do
@@ -542,36 +574,38 @@ RSpec.describe CKEditor5::Rails::Presets::PresetBuilder do
542
574
  order :Text, :Arrows, :Emoji, :Mixed
543
575
  end
544
576
 
545
- expect(builder.config[:specialCharactersBootstrap]).to eq({
546
- groups: [
547
- {
548
- name: 'Emoji',
549
- items: [
550
- { title: 'smiley', character: '😊' },
551
- { title: 'heart', character: '❤️' }
552
- ],
553
- options: { label: 'Emoticons' }
554
- },
555
- {
556
- name: 'Arrows',
557
- items: [
558
- { title: 'right', character: '→' },
559
- { title: 'left', character: '←' }
560
- ],
561
- options: {}
562
- },
563
- {
564
- name: 'Mixed',
565
- items: [
566
- { title: 'star', character: '⭐' },
567
- { title: 'heart', character: '❤️' }
568
- ],
569
- options: { label: 'Mixed Characters' }
570
- }
571
- ],
572
- order: %w[Text Arrows Emoji Mixed],
573
- packs: []
574
- })
577
+ data = {
578
+ groups: [
579
+ {
580
+ name: 'Emoji',
581
+ items: [
582
+ { title: 'smiley', character: '😊' },
583
+ { title: 'heart', character: '❤️' }
584
+ ],
585
+ options: { label: 'Emoticons' }
586
+ },
587
+ {
588
+ name: 'Arrows',
589
+ items: [
590
+ { title: 'right', character: '→' },
591
+ { title: 'left', character: '←' }
592
+ ],
593
+ options: {}
594
+ },
595
+ {
596
+ name: 'Mixed',
597
+ items: [
598
+ { title: 'star', character: '⭐' },
599
+ { title: 'heart', character: '❤️' }
600
+ ],
601
+ options: { label: 'Mixed Characters' }
602
+ }
603
+ ],
604
+ order: %w[Text Arrows Emoji Mixed],
605
+ packs: []
606
+ }
607
+
608
+ expect(builder.config[:specialCharactersBootstrap]).to eq(data)
575
609
 
576
610
  plugin_names = builder.config[:plugins].map(&:name)
577
611
  expect(plugin_names).to include(:SpecialCharacters)
@@ -8,6 +8,15 @@ RSpec.describe CKEditor5::Rails::Semver do
8
8
  it 'accepts version in x.y.z format' do
9
9
  expect { described_class.new('1.2.3') }.not_to raise_error
10
10
  end
11
+
12
+ it 'accepts Semver object' do
13
+ original = described_class.new('1.2.3')
14
+ copied = described_class.new(original)
15
+
16
+ expect(copied.major).to eq(1)
17
+ expect(copied.minor).to eq(2)
18
+ expect(copied.patch).to eq(3)
19
+ end
11
20
  end
12
21
 
13
22
  context 'with invalid version' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ckeditor5
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.0
4
+ version: 1.26.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateusz Bagiński