locomotivecms 3.2.0.rc2 → 3.2.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/Gemfile +1 -1
- data/app/controllers/locomotive/current_site_controller.rb +5 -0
- data/app/controllers/locomotive/errors_controller.rb +3 -1
- data/app/models/locomotive/editable_control.rb +1 -1
- data/app/views/locomotive/editable_elements/index_without_preview.html.slim +1 -1
- data/app/views/locomotive/notifications/new_content_entry.html.slim +1 -0
- data/app/views/locomotive/shared/sidebar/_page.html.slim +9 -8
- data/lib/locomotive/steam/services/api_content_entry_service.rb +11 -0
- data/lib/locomotive/steam_adaptor.rb +4 -1
- data/lib/locomotive/version.rb +1 -1
- data/spec/lib/locomotive/steam/services/api_content_entry_service_spec.rb +44 -0
- data/spec/requests/locomotive/steam/cache_spec.rb +1 -1
- data/vendor/assets/javascripts/locomotive/wysihtml5/parser_rules/advanced.js +82 -7
- metadata +10 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4bade9679c107681f6331eded20d257d26b15984
|
|
4
|
+
data.tar.gz: b1b3f52495e62d5875a3df43caec5fdfaa811a88
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b3acfde3cf399e738e0b5f138133302c7c8b67d116fc54c8a9fbe21180a7b3f051877faa32244326a8daa6a82c5017668d053301a53206c3402a55cb72df7d01
|
|
7
|
+
data.tar.gz: 976d3e537b9ff47402f5f70b700457f0f0de010ea6ab87fa8020b3c87bd010884df54fc435dc3cc47cdd56c780572e3a3af48570055dc943dc0222453bc444a4
|
data/Gemfile
CHANGED
|
@@ -25,7 +25,7 @@ group :development do
|
|
|
25
25
|
# gem 'locomotivecms_common', github: 'locomotivecms/common', ref: '257047b', require: false
|
|
26
26
|
|
|
27
27
|
# gem 'locomotivecms_steam', path: '../gems/steam', require: false
|
|
28
|
-
# gem 'locomotivecms_steam', github: 'locomotivecms/steam', ref: '
|
|
28
|
+
# gem 'locomotivecms_steam', github: 'locomotivecms/steam', ref: 'a2cba33', require: false
|
|
29
29
|
|
|
30
30
|
# gem 'locomotive_liquid', path: '../gems/liquid' # for Developers
|
|
31
31
|
# gem 'locomotivecms_solid', path: '../gems/solid' # for Developers
|
|
@@ -10,6 +10,7 @@ module Locomotive
|
|
|
10
10
|
helper Locomotive::SitesHelper
|
|
11
11
|
|
|
12
12
|
before_filter :ensure_domains_list, only: :update
|
|
13
|
+
before_filter :ensure_url_redirections, only: :update
|
|
13
14
|
|
|
14
15
|
def edit
|
|
15
16
|
authorize @site
|
|
@@ -70,5 +71,9 @@ module Locomotive
|
|
|
70
71
|
params[:site][:domains] = [] unless params[:site][:domains]
|
|
71
72
|
end
|
|
72
73
|
|
|
74
|
+
def ensure_url_redirections
|
|
75
|
+
params[:site][:url_redirections] = [] unless params[:site][:url_redirections]
|
|
76
|
+
end
|
|
77
|
+
|
|
73
78
|
end
|
|
74
79
|
end
|
|
@@ -18,12 +18,13 @@ li id="node-#{page._id}" class=page.class_names
|
|
|
18
18
|
= render partial: 'locomotive/shared/sidebar/page', collection: page.nodes
|
|
19
19
|
|
|
20
20
|
- if page.templatized_children? && !page.templatized?
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
- if content_type = page.templatized_page.content_type
|
|
22
|
+
li.list-entries
|
|
23
|
+
= link_to content_entries_path(current_site, content_type.slug) do
|
|
24
|
+
i.fa.fa-list-ul.icon
|
|
25
|
+
span.text style="#{page.deeper_text_inline_style}"= t(:list_content_entries, name: content_type.name.pluralize, scope: 'locomotive.pages.index')
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
li.new-entry.sidebar-list-add
|
|
28
|
+
= link_to new_content_entry_path(current_site, content_type.slug) do
|
|
29
|
+
i.fa.fa-plus.icon
|
|
30
|
+
span.text style="#{page.deeper_text_inline_style}"= t(:new_content_entry, name: content_type.name.singularize, scope: 'locomotive.pages.index')
|
|
@@ -28,6 +28,8 @@ module Locomotive
|
|
|
28
28
|
def with_form(type_slug, attributes, as_json, &block)
|
|
29
29
|
load_content_type(type_slug)
|
|
30
30
|
|
|
31
|
+
useTempfiles(attributes)
|
|
32
|
+
|
|
31
33
|
::Mongoid::Fields::I18n.with_locale(self.locale) do
|
|
32
34
|
form = Locomotive::API::Forms::ContentEntryForm.new(@content_type, attributes)
|
|
33
35
|
|
|
@@ -37,6 +39,15 @@ module Locomotive
|
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
|
|
42
|
+
def useTempfiles(attributes)
|
|
43
|
+
# kind of marshal/unmarshal mechanism :-)
|
|
44
|
+
attributes.each do |key, value|
|
|
45
|
+
if value.is_a?(Hash) && value['tempfile'].present? && value['tempfile'].is_a?(String) && value['filename'].present?
|
|
46
|
+
attributes[key]['tempfile'] = File.open(attributes[key]['tempfile'])
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
40
51
|
def make_entity(entry, as_json)
|
|
41
52
|
entity = entry.to_steam(@content_type)
|
|
42
53
|
decorated_entity = Locomotive::Steam::Decorators::I18nDecorator.new(entity, locale)
|
|
@@ -29,7 +29,10 @@ Locomotive::Steam.configure do |config|
|
|
|
29
29
|
config.middleware.delete Rack::Lint
|
|
30
30
|
config.middleware.delete Rack::Session::Moneta
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
require_relative 'steam/middlewares/catch_error'
|
|
33
|
+
config.middleware.insert_after Locomotive::Steam::Middlewares::Site, Locomotive::Steam::Middlewares::CatchError
|
|
34
|
+
|
|
35
|
+
%w(cache page_editing missing_translations wysihtml_css).each do |name|
|
|
33
36
|
require_relative "steam/middlewares/#{name}"
|
|
34
37
|
config.middleware.insert_after Locomotive::Steam::Middlewares::Page, Locomotive::Steam::Middlewares.const_get(name.camelize)
|
|
35
38
|
end
|
data/lib/locomotive/version.rb
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Locomotive::Steam::APIContentEntryService do
|
|
4
|
+
|
|
5
|
+
let(:site) { create(:site) }
|
|
6
|
+
let(:request_env) { instance_double('RequestEnv') }
|
|
7
|
+
let(:request) { instance_double('Request', ip: '127.0.0.1', env: request_env) }
|
|
8
|
+
let!(:content_type) { create('article content type', site: site).reload }
|
|
9
|
+
let(:service) { described_class.new(nil, nil, :en, request) }
|
|
10
|
+
|
|
11
|
+
before { expect(request_env).to receive(:[]).with('locomotive.site').and_return(site) }
|
|
12
|
+
|
|
13
|
+
describe '#create' do
|
|
14
|
+
|
|
15
|
+
let(:file) { Rack::Multipart::UploadedFile.new(FixturedAsset.path('5k.png'), 'image/png') }
|
|
16
|
+
let(:attributes) { { title: 'Hello world', body: 'Lorem ipsum...', picture: file } }
|
|
17
|
+
|
|
18
|
+
subject { service.create(content_type.slug, attributes, true) }
|
|
19
|
+
|
|
20
|
+
it 'persists the content entry' do
|
|
21
|
+
expect { subject }.to change(Locomotive::ContentEntry, :count).by(1)
|
|
22
|
+
expect(subject['picture']['url']).to eq '5k.png'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'marshalled picture' do
|
|
26
|
+
|
|
27
|
+
let(:file) {
|
|
28
|
+
{
|
|
29
|
+
'content_type' => 'image/png',
|
|
30
|
+
'original_filename' => '5k.png',
|
|
31
|
+
'filename' => '5k.png',
|
|
32
|
+
'tempfile' => FixturedAsset.path('5k.png')
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
it 'persists the content entry' do
|
|
37
|
+
expect(subject['picture']['url']).to eq '5k.png'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -113,6 +113,10 @@ var wysihtml5ParserRules = {
|
|
|
113
113
|
"tr": {
|
|
114
114
|
"add_class": {
|
|
115
115
|
"align": "align_text"
|
|
116
|
+
},
|
|
117
|
+
"check_attributes": {
|
|
118
|
+
"id": "any",
|
|
119
|
+
"class": "any"
|
|
116
120
|
}
|
|
117
121
|
},
|
|
118
122
|
"strike": {},
|
|
@@ -131,6 +135,10 @@ var wysihtml5ParserRules = {
|
|
|
131
135
|
"rename_tag": "div"
|
|
132
136
|
},
|
|
133
137
|
"h4": {
|
|
138
|
+
"check_attributes": {
|
|
139
|
+
"id": "any",
|
|
140
|
+
"class": "any"
|
|
141
|
+
},
|
|
134
142
|
"add_class": {
|
|
135
143
|
"align": "align_text"
|
|
136
144
|
}
|
|
@@ -165,7 +173,12 @@ var wysihtml5ParserRules = {
|
|
|
165
173
|
"command": {
|
|
166
174
|
"remove": 1
|
|
167
175
|
},
|
|
168
|
-
"ul": {
|
|
176
|
+
"ul": {
|
|
177
|
+
"check_attributes": {
|
|
178
|
+
"id": "any",
|
|
179
|
+
"class": "any"
|
|
180
|
+
}
|
|
181
|
+
},
|
|
169
182
|
"progress": {
|
|
170
183
|
"rename_tag": "span"
|
|
171
184
|
},
|
|
@@ -174,6 +187,7 @@ var wysihtml5ParserRules = {
|
|
|
174
187
|
},
|
|
175
188
|
"iframe": {
|
|
176
189
|
"check_attributes": {
|
|
190
|
+
"id": "any",
|
|
177
191
|
"class": "any",
|
|
178
192
|
"width": "any",
|
|
179
193
|
"height": "any",
|
|
@@ -187,17 +201,19 @@ var wysihtml5ParserRules = {
|
|
|
187
201
|
},
|
|
188
202
|
"a": {
|
|
189
203
|
"check_attributes": {
|
|
204
|
+
"id": "any",
|
|
190
205
|
"target": "any",
|
|
191
206
|
"href": "any", // if you compiled master manually then change this from 'url' to 'href'
|
|
192
207
|
"title": "any",
|
|
193
208
|
"class": "any",
|
|
194
|
-
"data-*": "any"
|
|
195
|
-
|
|
196
|
-
"set_attributes": {
|
|
209
|
+
"data-*": "any",
|
|
210
|
+
"rel": "any"
|
|
197
211
|
}
|
|
198
212
|
},
|
|
199
213
|
"img": {
|
|
200
214
|
"check_attributes": {
|
|
215
|
+
"id": "any",
|
|
216
|
+
"class": "any",
|
|
201
217
|
"width": "numbers",
|
|
202
218
|
"title": "any",
|
|
203
219
|
"alt": "any",
|
|
@@ -236,6 +252,10 @@ var wysihtml5ParserRules = {
|
|
|
236
252
|
"rename_tag": "div"
|
|
237
253
|
},
|
|
238
254
|
"h1": {
|
|
255
|
+
"check_attributes": {
|
|
256
|
+
"id": "any",
|
|
257
|
+
"class": "any"
|
|
258
|
+
},
|
|
239
259
|
"add_class": {
|
|
240
260
|
"align": "align_text"
|
|
241
261
|
}
|
|
@@ -244,6 +264,10 @@ var wysihtml5ParserRules = {
|
|
|
244
264
|
"remove": 1
|
|
245
265
|
},
|
|
246
266
|
"tbody": {
|
|
267
|
+
"check_attributes": {
|
|
268
|
+
"id": "any",
|
|
269
|
+
"class": "any"
|
|
270
|
+
},
|
|
247
271
|
"add_class": {
|
|
248
272
|
"align": "align_text"
|
|
249
273
|
}
|
|
@@ -254,9 +278,16 @@ var wysihtml5ParserRules = {
|
|
|
254
278
|
"s": {
|
|
255
279
|
"rename_tag": "span"
|
|
256
280
|
},
|
|
257
|
-
"li": {
|
|
281
|
+
"li": {
|
|
282
|
+
"check_attributes": {
|
|
283
|
+
"id": "any",
|
|
284
|
+
"class": "any"
|
|
285
|
+
},
|
|
286
|
+
},
|
|
258
287
|
"td": {
|
|
259
288
|
"check_attributes": {
|
|
289
|
+
"id": "any",
|
|
290
|
+
"class": "any",
|
|
260
291
|
"rowspan": "numbers",
|
|
261
292
|
"colspan": "numbers"
|
|
262
293
|
},
|
|
@@ -269,6 +300,7 @@ var wysihtml5ParserRules = {
|
|
|
269
300
|
},
|
|
270
301
|
"div": {
|
|
271
302
|
"check_attributes": {
|
|
303
|
+
"id": "any",
|
|
272
304
|
"class": "any",
|
|
273
305
|
"data-*": "any"
|
|
274
306
|
},
|
|
@@ -309,6 +341,10 @@ var wysihtml5ParserRules = {
|
|
|
309
341
|
"remove": 1
|
|
310
342
|
},
|
|
311
343
|
"h5": {
|
|
344
|
+
"check_attributes": {
|
|
345
|
+
"id": "any",
|
|
346
|
+
"class": "any"
|
|
347
|
+
},
|
|
312
348
|
"add_class": {
|
|
313
349
|
"align": "align_text"
|
|
314
350
|
}
|
|
@@ -331,6 +367,10 @@ var wysihtml5ParserRules = {
|
|
|
331
367
|
}
|
|
332
368
|
},
|
|
333
369
|
"tfoot": {
|
|
370
|
+
"check_attributes": {
|
|
371
|
+
"id": "any",
|
|
372
|
+
"class": "any"
|
|
373
|
+
},
|
|
334
374
|
"add_class": {
|
|
335
375
|
"align": "align_text"
|
|
336
376
|
}
|
|
@@ -358,6 +398,7 @@ var wysihtml5ParserRules = {
|
|
|
358
398
|
},
|
|
359
399
|
"span": {
|
|
360
400
|
"check_attributes": {
|
|
401
|
+
"id": "any",
|
|
361
402
|
"class": "any",
|
|
362
403
|
"data-*": "any"
|
|
363
404
|
}
|
|
@@ -383,7 +424,12 @@ var wysihtml5ParserRules = {
|
|
|
383
424
|
"body": {
|
|
384
425
|
"rename_tag": "div"
|
|
385
426
|
},
|
|
386
|
-
"ol": {
|
|
427
|
+
"ol": {
|
|
428
|
+
"check_attributes": {
|
|
429
|
+
"id": "any",
|
|
430
|
+
"class": "any"
|
|
431
|
+
}
|
|
432
|
+
},
|
|
387
433
|
"nobr": {
|
|
388
434
|
"rename_tag": "span"
|
|
389
435
|
},
|
|
@@ -401,6 +447,8 @@ var wysihtml5ParserRules = {
|
|
|
401
447
|
// },
|
|
402
448
|
"blockquote": {
|
|
403
449
|
"check_attributes": {
|
|
450
|
+
"id": "any",
|
|
451
|
+
"class": "any",
|
|
404
452
|
"cite": "url"
|
|
405
453
|
}
|
|
406
454
|
},
|
|
@@ -414,6 +462,10 @@ var wysihtml5ParserRules = {
|
|
|
414
462
|
"rename_tag": "span"
|
|
415
463
|
},
|
|
416
464
|
"h3": {
|
|
465
|
+
"check_attributes": {
|
|
466
|
+
"id": "any",
|
|
467
|
+
"class": "any"
|
|
468
|
+
},
|
|
417
469
|
"add_class": {
|
|
418
470
|
"align": "align_text"
|
|
419
471
|
}
|
|
@@ -438,6 +490,10 @@ var wysihtml5ParserRules = {
|
|
|
438
490
|
"remove": 1
|
|
439
491
|
},
|
|
440
492
|
"thead": {
|
|
493
|
+
"check_attributes": {
|
|
494
|
+
"id": "any",
|
|
495
|
+
"class": "any"
|
|
496
|
+
},
|
|
441
497
|
"add_class": {
|
|
442
498
|
"align": "align_text"
|
|
443
499
|
}
|
|
@@ -452,6 +508,10 @@ var wysihtml5ParserRules = {
|
|
|
452
508
|
"remove": 1
|
|
453
509
|
},
|
|
454
510
|
"h6": {
|
|
511
|
+
"check_attributes": {
|
|
512
|
+
"id": "any",
|
|
513
|
+
"class": "any"
|
|
514
|
+
},
|
|
455
515
|
"add_class": {
|
|
456
516
|
"align": "align_text"
|
|
457
517
|
}
|
|
@@ -461,6 +521,8 @@ var wysihtml5ParserRules = {
|
|
|
461
521
|
},
|
|
462
522
|
"th": {
|
|
463
523
|
"check_attributes": {
|
|
524
|
+
"id": "any",
|
|
525
|
+
"class": "any",
|
|
464
526
|
"rowspan": "numbers",
|
|
465
527
|
"colspan": "numbers"
|
|
466
528
|
},
|
|
@@ -510,7 +572,12 @@ var wysihtml5ParserRules = {
|
|
|
510
572
|
"article": {
|
|
511
573
|
"rename_tag": "div"
|
|
512
574
|
},
|
|
513
|
-
"cite": {
|
|
575
|
+
"cite": {
|
|
576
|
+
"check_attributes": {
|
|
577
|
+
"id": "any",
|
|
578
|
+
"class": "any"
|
|
579
|
+
}
|
|
580
|
+
},
|
|
514
581
|
"link": {
|
|
515
582
|
"remove": 1
|
|
516
583
|
},
|
|
@@ -530,6 +597,10 @@ var wysihtml5ParserRules = {
|
|
|
530
597
|
"rename_tag": "span"
|
|
531
598
|
},
|
|
532
599
|
"h2": {
|
|
600
|
+
"check_attributes": {
|
|
601
|
+
"id": "any",
|
|
602
|
+
"class": "any"
|
|
603
|
+
},
|
|
533
604
|
"add_class": {
|
|
534
605
|
"align": "align_text"
|
|
535
606
|
}
|
|
@@ -538,6 +609,10 @@ var wysihtml5ParserRules = {
|
|
|
538
609
|
"rename_tag": "span"
|
|
539
610
|
},
|
|
540
611
|
"p": {
|
|
612
|
+
"check_attributes": {
|
|
613
|
+
"id": "any",
|
|
614
|
+
"class": "any"
|
|
615
|
+
},
|
|
541
616
|
"add_class": {
|
|
542
617
|
"align": "align_text"
|
|
543
618
|
}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: locomotivecms
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.2.0
|
|
4
|
+
version: 3.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Didier Lafforgue
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-11-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -156,28 +156,28 @@ dependencies:
|
|
|
156
156
|
requirements:
|
|
157
157
|
- - "~>"
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: 2.7.0
|
|
159
|
+
version: 2.7.0
|
|
160
160
|
type: :runtime
|
|
161
161
|
prerelease: false
|
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
|
164
164
|
- - "~>"
|
|
165
165
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: 2.7.0
|
|
166
|
+
version: 2.7.0
|
|
167
167
|
- !ruby/object:Gem::Dependency
|
|
168
168
|
name: locomotivecms_steam
|
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
|
170
170
|
requirements:
|
|
171
171
|
- - "~>"
|
|
172
172
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: 1.2.0
|
|
173
|
+
version: 1.2.0
|
|
174
174
|
type: :runtime
|
|
175
175
|
prerelease: false
|
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
177
|
requirements:
|
|
178
178
|
- - "~>"
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: 1.2.0
|
|
180
|
+
version: 1.2.0
|
|
181
181
|
- !ruby/object:Gem::Dependency
|
|
182
182
|
name: slim
|
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -1243,6 +1243,7 @@ files:
|
|
|
1243
1243
|
- spec/lib/action_view_spec.rb
|
|
1244
1244
|
- spec/lib/core_ext_spec.rb
|
|
1245
1245
|
- spec/lib/locomotive/configuration_spec.rb
|
|
1246
|
+
- spec/lib/locomotive/steam/services/api_content_entry_service_spec.rb
|
|
1246
1247
|
- spec/lib/locomotive/steam/services/api_entry_submission_service_spec.rb
|
|
1247
1248
|
- spec/lib/locomotive/steam/services/async_email_service_spec.rb
|
|
1248
1249
|
- spec/lib/locomotive/steam/services/liquid_parser_with_cache_service_spec.rb
|
|
@@ -1365,9 +1366,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1365
1366
|
version: '0'
|
|
1366
1367
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1367
1368
|
requirements:
|
|
1368
|
-
- - "
|
|
1369
|
+
- - ">="
|
|
1369
1370
|
- !ruby/object:Gem::Version
|
|
1370
|
-
version:
|
|
1371
|
+
version: '0'
|
|
1371
1372
|
requirements: []
|
|
1372
1373
|
rubyforge_project:
|
|
1373
1374
|
rubygems_version: 2.4.5.1
|
|
@@ -1390,6 +1391,7 @@ test_files:
|
|
|
1390
1391
|
- spec/lib/action_view_spec.rb
|
|
1391
1392
|
- spec/lib/core_ext_spec.rb
|
|
1392
1393
|
- spec/lib/locomotive/configuration_spec.rb
|
|
1394
|
+
- spec/lib/locomotive/steam/services/api_content_entry_service_spec.rb
|
|
1393
1395
|
- spec/lib/locomotive/steam/services/api_entry_submission_service_spec.rb
|
|
1394
1396
|
- spec/lib/locomotive/steam/services/async_email_service_spec.rb
|
|
1395
1397
|
- spec/lib/locomotive/steam/services/liquid_parser_with_cache_service_spec.rb
|