scrivito_sdk 0.70.2 → 0.71.0.rc1
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/controllers/scrivito/binary_redirect_controller.rb +12 -9
- data/app/controllers/scrivito/blobs_controller.rb +1 -2
- data/app/controllers/scrivito/objs_controller.rb +16 -0
- data/app/helpers/scrivito_helper.rb +6 -2
- data/app/views/cms/index.html.erb +1 -1
- data/app/views/scrivito/blobs/activate_upload.json.jbuilder +1 -0
- data/app/views/scrivito/objs/obj.json.jbuilder +1 -1
- data/app/views/scrivito/objs/transfer_modifications.json.jbuilder +6 -0
- data/config/ca-bundle.crt +128 -81
- data/config/precedence_routes.rb +1 -0
- data/lib/assets/images/scrivito/source_invalid.png +0 -0
- data/lib/assets/images/scrivito/source_too_large.png +0 -0
- data/lib/assets/images/scrivito/source_type_invalid.png +0 -0
- data/lib/assets/javascripts/scrivito_ui.js +1043 -645
- data/lib/assets/stylesheets/scrivito.css +1 -1
- data/lib/assets/stylesheets/scrivito_ui.css +1 -1
- data/lib/generators/scrivito/page/templates/thumbnail.html.erb +1 -1
- data/lib/scrivito/attribute_content.rb +54 -17
- data/lib/scrivito/attribute_deserializer.rb +1 -1
- data/lib/scrivito/attribute_serializer.rb +6 -4
- data/lib/scrivito/backend/obj_query.rb +11 -2
- data/lib/scrivito/base_widget_tag.rb +77 -0
- data/lib/scrivito/basic_obj.rb +67 -67
- data/lib/scrivito/basic_widget.rb +11 -6
- data/lib/scrivito/binary.rb +50 -5
- data/lib/scrivito/binary_param_verifier.rb +4 -5
- data/lib/scrivito/client_attribute_serializer.rb +3 -3
- data/lib/scrivito/cms_backend.rb +12 -0
- data/lib/scrivito/cms_field_tag.rb +8 -6
- data/lib/scrivito/cms_rest_api.rb +28 -8
- data/lib/scrivito/cms_rest_api/rate_limit.rb +1 -0
- data/lib/scrivito/cms_routing.rb +7 -1
- data/lib/scrivito/configuration.rb +1 -1
- data/lib/scrivito/controller_actions.rb +38 -35
- data/lib/scrivito/date_attribute.rb +3 -7
- data/lib/scrivito/editing_context.rb +3 -3
- data/lib/scrivito/editing_context_middleware.rb +3 -3
- data/lib/scrivito/errored_widget_tag.rb +34 -0
- data/lib/scrivito/errors.rb +6 -0
- data/lib/scrivito/future_binary.rb +23 -0
- data/lib/scrivito/link_parser.rb +12 -1
- data/lib/scrivito/membership_collection.rb +8 -8
- data/lib/scrivito/obj_collection.rb +2 -2
- data/lib/scrivito/obj_create_params_parser.rb +2 -2
- data/lib/scrivito/obj_params_parser.rb +5 -1
- data/lib/scrivito/obj_search_builder.rb +2 -12
- data/lib/scrivito/obj_search_enumerator.rb +48 -43
- data/lib/scrivito/page_config.rb +2 -1
- data/lib/scrivito/type_computer.rb +6 -6
- data/lib/scrivito/user.rb +9 -10
- data/lib/scrivito/user_definition.rb +2 -2
- data/lib/scrivito/warning.rb +17 -0
- data/lib/scrivito/widget_garbage_collection.rb +1 -1
- data/lib/scrivito/widget_tag.rb +28 -53
- data/lib/scrivito/workspace.rb +32 -23
- metadata +10 -6
- data/app/views/scrivito/objs/copy_widget.html.erb +0 -1
- data/app/views/scrivito/objs/create_widget.html.erb +0 -1
data/lib/scrivito/page_config.rb
CHANGED
@@ -23,11 +23,12 @@ class PageConfig < Struct.new(:obj, :editing_context, :lookup_context)
|
|
23
23
|
return {} unless obj
|
24
24
|
{
|
25
25
|
id: obj.id,
|
26
|
-
|
26
|
+
obj_class: obj.obj_class,
|
27
27
|
has_children: obj.children.any?,
|
28
28
|
has_conflict: obj.has_conflict?,
|
29
29
|
has_details_view: obj_has_details_view?,
|
30
30
|
modification: modification(obj),
|
31
|
+
parent_path: obj.parent_path,
|
31
32
|
restriction_messages: editor.restriction_messages_for(obj),
|
32
33
|
}
|
33
34
|
end
|
@@ -5,12 +5,12 @@ class TypeComputer
|
|
5
5
|
@base_class, @fallback_class = base_class, fallback_class
|
6
6
|
end
|
7
7
|
|
8
|
-
def compute_type(
|
9
|
-
load_class(
|
8
|
+
def compute_type(obj_class)
|
9
|
+
load_class(obj_class) || @fallback_class
|
10
10
|
end
|
11
11
|
|
12
|
-
def compute_type_without_fallback(
|
13
|
-
if obj_class = load_class(
|
12
|
+
def compute_type_without_fallback(obj_class)
|
13
|
+
if obj_class = load_class(obj_class)
|
14
14
|
obj_class
|
15
15
|
else
|
16
16
|
raise ObjClassNotFound
|
@@ -23,8 +23,8 @@ class TypeComputer
|
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def load_class(
|
27
|
-
klass =
|
26
|
+
def load_class(obj_class)
|
27
|
+
klass = obj_class.constantize
|
28
28
|
klass if inherits_from_base?(klass)
|
29
29
|
rescue NameError
|
30
30
|
end
|
data/lib/scrivito/user.rb
CHANGED
@@ -52,8 +52,8 @@ module Scrivito
|
|
52
52
|
# user_definition.can_never(:create, :workspace, 'You are not allowed to create workspaces.')
|
53
53
|
# user_definition.can_always(:read, :workspace)
|
54
54
|
#
|
55
|
-
# user_definition.restrict_obj_publish(using: :
|
56
|
-
# if
|
55
|
+
# user_definition.restrict_obj_publish(using: :_obj_class) do |obj_class|
|
56
|
+
# if obj_class == 'BlogPost'
|
57
57
|
# false
|
58
58
|
# else
|
59
59
|
# 'You are not allowed to publish blog posts.'
|
@@ -155,7 +155,7 @@ module Scrivito
|
|
155
155
|
# Checks whether the User may publish changes to a specific {Scrivito::BasicObj Obj}.
|
156
156
|
#
|
157
157
|
# @api public
|
158
|
-
# @param [BasicObj] obj the object to be published
|
158
|
+
# @param [Scrivito::BasicObj] obj the object to be published
|
159
159
|
# @return [Boolean] true if the user is allowed to publish the object, otherwise false
|
160
160
|
#
|
161
161
|
def can_publish?(obj)
|
@@ -164,11 +164,11 @@ module Scrivito
|
|
164
164
|
|
165
165
|
#
|
166
166
|
# Checks whether the User may publish changes to an {Scrivito::BasicObj Obj} and returns
|
167
|
-
# the message specified in a {UserDefinition#restrict_obj_publish} callback if they
|
168
|
-
# If the user may publish the CMS object, an empty array is returned.
|
167
|
+
# the message specified in a {Scrivito::UserDefinition#restrict_obj_publish} callback if they
|
168
|
+
# may not. If the user may publish the CMS object, an empty array is returned.
|
169
169
|
#
|
170
170
|
# @api public
|
171
|
-
# @param [BasicObj] obj the object to be published
|
171
|
+
# @param [Scrivito::BasicObj] obj the object to be published
|
172
172
|
# @return [Array<String>] Hints on why the user cannot publish the object
|
173
173
|
#
|
174
174
|
def restriction_messages_for(obj)
|
@@ -236,10 +236,9 @@ module Scrivito
|
|
236
236
|
def sandbox_suggest_user_proc(input)
|
237
237
|
suggest_users_proc.call(input)
|
238
238
|
rescue Exception => e
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
})
|
239
|
+
message = %{Method `suggest_users' of the user "#{id}" raised an error on input "#{input}"}
|
240
|
+
Warning.error(message, e)
|
241
|
+
|
243
242
|
nil
|
244
243
|
end
|
245
244
|
end
|
@@ -185,8 +185,8 @@ module Scrivito
|
|
185
185
|
# end
|
186
186
|
# end
|
187
187
|
#
|
188
|
-
# user.restrict_obj_publish(using: :
|
189
|
-
# if
|
188
|
+
# user.restrict_obj_publish(using: :_obj_class) do |obj_class|
|
189
|
+
# if obj_class == 'BlogPost'
|
190
190
|
# false
|
191
191
|
# else
|
192
192
|
# 'You are only allowed to edit Blog Posts.'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Scrivito
|
2
|
+
module Warning
|
3
|
+
def self.warn(message)
|
4
|
+
Rails.logger.warn("[Scrivito] WARNING! #{message}")
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.error(message, exception=nil)
|
8
|
+
if exception
|
9
|
+
padded_backtrace = exception.backtrace.map { |line| " #{line}" }
|
10
|
+
|
11
|
+
message += ": #{exception.class.to_s} (#{exception})\n#{padded_backtrace.join("\n")}"
|
12
|
+
end
|
13
|
+
|
14
|
+
Rails.logger.error("[Scrivito] ERROR! #{message}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,7 +2,7 @@ module Scrivito
|
|
2
2
|
|
3
3
|
class WidgetGarbageCollection
|
4
4
|
|
5
|
-
# @param [BasicObj] obj the Obj that the update applies to
|
5
|
+
# @param [Scrivito::BasicObj] obj the Obj that the update applies to
|
6
6
|
# @param [Hash] update the keys are content objects (Obj or Widget)
|
7
7
|
# and the values are their update params.
|
8
8
|
# update params are accepted in the same format as accepted by Obj.create or Obj#update.
|
data/lib/scrivito/widget_tag.rb
CHANGED
@@ -1,83 +1,58 @@
|
|
1
1
|
module Scrivito
|
2
2
|
|
3
|
-
class WidgetTag <
|
4
|
-
DEFAULT_TAG = "div"
|
5
|
-
|
6
|
-
include TagRenderer
|
7
|
-
|
3
|
+
class WidgetTag < BaseWidgetTag
|
8
4
|
def render
|
9
5
|
super
|
10
6
|
rescue => error
|
11
|
-
if
|
12
|
-
|
13
|
-
view.controller.on_scrivito_widget_error(widget, error)
|
7
|
+
if handle_render_errors?
|
8
|
+
errored_widget_tag(error).render
|
14
9
|
else
|
15
10
|
raise error
|
16
11
|
end
|
17
12
|
end
|
18
13
|
|
19
|
-
def tag_name
|
20
|
-
inner_tag || DEFAULT_TAG
|
21
|
-
end
|
22
|
-
|
23
14
|
def content
|
24
|
-
|
25
|
-
rescue ActionView::MissingTemplate
|
26
|
-
raise if Rails.env.development? || Rails.env.test?
|
27
|
-
"Missing show template for #{widget.description_for_editor}" if view.scrivito_user
|
15
|
+
render_content(render_context)
|
28
16
|
end
|
29
17
|
|
30
|
-
|
31
|
-
options = {}
|
32
|
-
|
33
|
-
if inplace_editing_allowed?
|
34
|
-
options['private-widget-id'] = widget.id
|
35
|
-
options['widget-obj-class'] = widget.obj_class_name
|
36
|
-
options['private-widget-description-for-editor'] = widget.description_for_editor
|
18
|
+
private
|
37
19
|
|
38
|
-
|
39
|
-
|
40
|
-
|
20
|
+
def errored_widget_tag(error)
|
21
|
+
ErroredWidgetTag.new(view, widget, placement_modification: placement_modification,
|
22
|
+
render_context: render_context, inner_tag: inner_tag, error: error)
|
23
|
+
end
|
41
24
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if placement_modification
|
46
|
-
unless widget.in_revision(Workspace.current.revision)
|
47
|
-
Modification::DELETED
|
48
|
-
end
|
49
|
-
end
|
50
|
-
else
|
51
|
-
comparison.modification(widget)
|
52
|
-
end
|
25
|
+
def description_for_editor
|
26
|
+
widget.description_for_editor
|
27
|
+
end
|
53
28
|
|
54
|
-
|
55
|
-
|
29
|
+
def render_content(context)
|
30
|
+
template_path = widget.public_send("#{context}_view_path")
|
31
|
+
view.render(template: template_path, locals: {widget: widget})
|
32
|
+
rescue ActionView::MissingTemplate
|
33
|
+
if context == DEFAULT_RENDER_CONTEXT
|
34
|
+
if view.scrivito_user
|
35
|
+
view.content_tag(:h4, "Error: Missing 'show' template for #{widget.obj_class}",
|
36
|
+
class: 'scrivito_error')
|
37
|
+
end
|
38
|
+
else
|
39
|
+
render_content(DEFAULT_RENDER_CONTEXT)
|
56
40
|
end
|
57
|
-
|
58
|
-
options
|
59
41
|
end
|
60
42
|
|
61
|
-
|
62
|
-
|
63
|
-
def template_path
|
64
|
-
widget.public_send("to_#{template_name}_view_path")
|
43
|
+
def render_context
|
44
|
+
super || DEFAULT_RENDER_CONTEXT
|
65
45
|
end
|
66
46
|
|
67
47
|
def has_widget_details_view?(widget)
|
68
|
-
view.lookup_context.find(widget.
|
48
|
+
view.lookup_context.find(widget.details_view_path).present?
|
69
49
|
rescue ActionView::MissingTemplate
|
70
50
|
false
|
71
51
|
end
|
72
52
|
|
73
|
-
def
|
74
|
-
|
53
|
+
def handle_render_errors?
|
54
|
+
!Rails.env.development? && !Rails.env.test?
|
75
55
|
end
|
76
|
-
|
77
|
-
def editing_context
|
78
|
-
EditingContextMiddleware.from_request(view.request)
|
79
|
-
end
|
80
|
-
|
81
56
|
end
|
82
57
|
|
83
58
|
end
|
data/lib/scrivito/workspace.rb
CHANGED
@@ -92,34 +92,34 @@ class Workspace
|
|
92
92
|
all.detect { |workspace| workspace.title == title }
|
93
93
|
end
|
94
94
|
|
95
|
+
#
|
95
96
|
# Find a workspace by its id or title and set it as the currently used workspace.
|
96
|
-
# @example
|
97
|
-
# Scrivito::Workspace.use('6a75fe694eeeb093')
|
98
97
|
#
|
99
|
-
#
|
100
|
-
# # => '6a75fe694eeeb093'
|
98
|
+
# @api public
|
101
99
|
#
|
102
|
-
#
|
100
|
+
# @param [String] id_or_title id or title of the workspace
|
101
|
+
# @raise [Scrivito::ResourceNotFound]
|
102
|
+
# @return [void]
|
103
103
|
#
|
104
|
+
# @example
|
105
|
+
# Scrivito::Workspace.use("6a75fe694eeeb093")
|
106
|
+
# Scrivito::Workspace.current.id
|
107
|
+
# # => "6a75fe694eeeb093"
|
108
|
+
#
|
109
|
+
# Scrivito::Workspace.use("my working copy")
|
104
110
|
# Scrivito::Workspace.current.title
|
105
|
-
# # =>
|
111
|
+
# # => "my working copy"
|
106
112
|
#
|
107
113
|
# # raises Scrivito::ResourceNotFound:
|
108
|
-
# Scrivito::Workspace.use(
|
109
|
-
#
|
110
|
-
# @param [String] id_or_title
|
111
|
-
# @return [void]
|
112
|
-
# @raise [Scrivito::ResourceNotFound]
|
114
|
+
# Scrivito::Workspace.use("missing")
|
115
|
+
#
|
113
116
|
def self.use(id_or_title)
|
114
|
-
|
117
|
+
self.current = if id_or_title =~ /^[a-z0-9]{16}$/
|
115
118
|
find(id_or_title)
|
116
|
-
|
117
|
-
find_by_title(id_or_title)
|
118
|
-
|
119
|
-
if workspace.blank?
|
120
|
-
raise(ResourceNotFound, "Could not find #{self} with id or title #{id_or_title}")
|
119
|
+
else
|
120
|
+
find_by_title(id_or_title) or
|
121
|
+
raise ResourceNotFound, "Could not find #{self} with title #{id_or_title}"
|
121
122
|
end
|
122
|
-
self.current = workspace
|
123
123
|
end
|
124
124
|
|
125
125
|
delegate :content_state_id, :base_content_state_id, :content_state,
|
@@ -170,6 +170,14 @@ class Workspace
|
|
170
170
|
response
|
171
171
|
end
|
172
172
|
|
173
|
+
def create_obj(attributes)
|
174
|
+
CmsBackend.instance.create_obj(id, attributes).tap { reload }
|
175
|
+
end
|
176
|
+
|
177
|
+
def update_obj(obj_id, attributes)
|
178
|
+
CmsBackend.instance.update_obj(id, obj_id, attributes).tap { reload }
|
179
|
+
end
|
180
|
+
|
173
181
|
def task_unaware_api_request(verb, path, payload = nil)
|
174
182
|
CmsRestApi.task_unaware_request(verb, "#{backend_url}#{path}", payload)
|
175
183
|
end
|
@@ -231,7 +239,7 @@ class Workspace
|
|
231
239
|
|
232
240
|
# @api public
|
233
241
|
# Returns the memberships (users and their roles) of this workspace.
|
234
|
-
# @return [MembershipCollection]
|
242
|
+
# @return [Scrivito::MembershipCollection]
|
235
243
|
def memberships
|
236
244
|
@memberships ||= MembershipCollection.new(self)
|
237
245
|
end
|
@@ -289,9 +297,9 @@ class Workspace
|
|
289
297
|
raise ScrivitoError, 'published workspace is not modifiable' if published?
|
290
298
|
end
|
291
299
|
|
292
|
-
# Returns an {ObjCollection} of this working copy for accessing its CMS objects.
|
300
|
+
# Returns an {Scrivito::ObjCollection} of this working copy for accessing its CMS objects.
|
293
301
|
# @api public
|
294
|
-
# @return {ObjCollection}
|
302
|
+
# @return {Scrivito::ObjCollection}
|
295
303
|
def objs
|
296
304
|
@objs ||= ObjCollection.new(self)
|
297
305
|
end
|
@@ -355,12 +363,13 @@ class Workspace
|
|
355
363
|
end
|
356
364
|
|
357
365
|
def warn_backend_not_available(error_message)
|
358
|
-
|
366
|
+
Warning.warn <<-EOS
|
367
|
+
|
359
368
|
Couldn't connect to backend to fetch published workspace.
|
360
369
|
#{error_message}
|
361
370
|
Serving from cache.
|
371
|
+
|
362
372
|
EOS
|
363
|
-
Rails.logger.warn(message)
|
364
373
|
end
|
365
374
|
end
|
366
375
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scrivito_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.71.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Infopark AG
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -172,11 +172,10 @@ files:
|
|
172
172
|
- app/views/cms/index.html.erb
|
173
173
|
- app/views/google_maps_widget/show.html.erb
|
174
174
|
- app/views/scrivito/_editing_auth_warning.html.erb
|
175
|
+
- app/views/scrivito/blobs/activate_upload.json.jbuilder
|
175
176
|
- app/views/scrivito/blobs/upload_permission.json.jbuilder
|
176
177
|
- app/views/scrivito/content_widget/show.html.erb
|
177
178
|
- app/views/scrivito/fallback_thumbnail.html.erb
|
178
|
-
- app/views/scrivito/objs/copy_widget.html.erb
|
179
|
-
- app/views/scrivito/objs/create_widget.html.erb
|
180
179
|
- app/views/scrivito/objs/destroy.json.jbuilder
|
181
180
|
- app/views/scrivito/objs/format_missing_error.json.jbuilder
|
182
181
|
- app/views/scrivito/objs/is_outdated.json.jbuilder
|
@@ -185,6 +184,7 @@ files:
|
|
185
184
|
- app/views/scrivito/objs/search.json.jbuilder
|
186
185
|
- app/views/scrivito/objs/search_only_size.json.jbuilder
|
187
186
|
- app/views/scrivito/objs/show.json.jbuilder
|
187
|
+
- app/views/scrivito/objs/transfer_modifications.json.jbuilder
|
188
188
|
- app/views/scrivito/objs/update.json.jbuilder
|
189
189
|
- app/views/scrivito/objs/widget.json.jbuilder
|
190
190
|
- app/views/scrivito/objs/widget_class_selection.json.jbuilder
|
@@ -273,6 +273,7 @@ files:
|
|
273
273
|
- lib/scrivito/backend/path_index.rb
|
274
274
|
- lib/scrivito/backend/permalink_index.rb
|
275
275
|
- lib/scrivito/backend_error.rb
|
276
|
+
- lib/scrivito/base_widget_tag.rb
|
276
277
|
- lib/scrivito/basic_obj.rb
|
277
278
|
- lib/scrivito/basic_widget.rb
|
278
279
|
- lib/scrivito/binary.rb
|
@@ -317,7 +318,9 @@ files:
|
|
317
318
|
- lib/scrivito/diff.rb
|
318
319
|
- lib/scrivito/editing_context.rb
|
319
320
|
- lib/scrivito/editing_context_middleware.rb
|
321
|
+
- lib/scrivito/errored_widget_tag.rb
|
320
322
|
- lib/scrivito/errors.rb
|
323
|
+
- lib/scrivito/future_binary.rb
|
321
324
|
- lib/scrivito/gem_info.rb
|
322
325
|
- lib/scrivito/generator_helper.rb
|
323
326
|
- lib/scrivito/html_string.rb
|
@@ -366,6 +369,7 @@ files:
|
|
366
369
|
- lib/scrivito/uploaded_binary.rb
|
367
370
|
- lib/scrivito/user.rb
|
368
371
|
- lib/scrivito/user_definition.rb
|
372
|
+
- lib/scrivito/warning.rb
|
369
373
|
- lib/scrivito/widget_collection.rb
|
370
374
|
- lib/scrivito/widget_garbage_collection.rb
|
371
375
|
- lib/scrivito/widget_tag.rb
|
@@ -393,9 +397,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
393
397
|
version: 2.1.0
|
394
398
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
395
399
|
requirements:
|
396
|
-
- - "
|
400
|
+
- - ">"
|
397
401
|
- !ruby/object:Gem::Version
|
398
|
-
version:
|
402
|
+
version: 1.3.1
|
399
403
|
requirements: []
|
400
404
|
rubyforge_project:
|
401
405
|
rubygems_version: 2.4.5
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= Scrivito::WidgetTag.new(self, @widget).render %>
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= Scrivito::WidgetTag.new(self, @widget).render %>
|