scrivito_sdk 1.9.1 → 1.10.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/scrivito/obj_class_controller.rb +12 -3
- data/app/controllers/scrivito/users_controller.rb +11 -0
- data/app/helpers/scrivito_helper.rb +4 -4
- data/config/ca-bundle.crt +1 -1
- data/lib/assets/javascripts/scrivito.js +12 -12
- data/lib/assets/javascripts/scrivito_ui_redirect.js +2 -2
- data/lib/assets/javascripts/scrivito_with_js_sdk.js +20123 -19370
- data/lib/assets/stylesheets/scrivito.css +1 -1
- data/lib/scrivito/attribute_content.rb +25 -15
- data/lib/scrivito/attribute_serializer.rb +3 -1
- data/lib/scrivito/backend/obj_load.rb +1 -5
- data/lib/scrivito/backend/obj_query.rb +2 -6
- data/lib/scrivito/backend/parent_path_index.rb +4 -7
- data/lib/scrivito/backend/path_index.rb +5 -8
- data/lib/scrivito/backend/permalink_index.rb +4 -7
- data/lib/scrivito/basic_obj.rb +70 -67
- data/lib/scrivito/basic_widget.rb +1 -0
- data/lib/scrivito/binary.rb +17 -2
- data/lib/scrivito/binary_param_verifier.rb +30 -34
- data/lib/scrivito/client_error.rb +2 -0
- data/lib/scrivito/cms_data_cache.rb +71 -73
- data/lib/scrivito/cms_rest_api.rb +114 -118
- data/lib/scrivito/cms_rest_api/rate_limit.rb +21 -26
- data/lib/scrivito/cms_routing.rb +1 -1
- data/lib/scrivito/configuration.rb +412 -373
- data/lib/scrivito/connection_manager.rb +42 -36
- data/lib/scrivito/deprecation.rb +11 -15
- data/lib/scrivito/diff.rb +6 -8
- data/lib/scrivito/gem_info.rb +9 -6
- data/lib/scrivito/generator_helper.rb +5 -7
- data/lib/scrivito/migrations/cms_backend.rb +11 -8
- data/lib/scrivito/migrations/migrator.rb +19 -21
- data/lib/scrivito/obj_search_enumerator.rb +24 -24
- data/lib/scrivito/request_homepage.rb +10 -14
- data/lib/scrivito/route.rb +27 -31
- data/lib/scrivito/sdk_engine.rb +8 -4
- data/lib/scrivito/tag_renderer.rb +17 -23
- data/lib/scrivito/test_request.rb +7 -9
- data/lib/scrivito/ui_config.rb +0 -19
- data/lib/scrivito/user.rb +89 -99
- data/lib/scrivito/workspace.rb +12 -16
- data/lib/scrivito/workspace_data.rb +2 -6
- data/lib/scrivito_sdk.rb +0 -13
- data/lib/tasks/cache.rake +2 -0
- metadata +18 -4
data/lib/scrivito/sdk_engine.rb
CHANGED
@@ -2,6 +2,7 @@ require 'rails'
|
|
2
2
|
|
3
3
|
require 'jbuilder'
|
4
4
|
require 'net/http/post/multipart'
|
5
|
+
require_relative './legacy_switch'
|
5
6
|
|
6
7
|
module ::Scrivito
|
7
8
|
class SdkEngine < Rails::Engine
|
@@ -62,14 +63,17 @@ module ::Scrivito
|
|
62
63
|
app.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
|
63
64
|
end
|
64
65
|
|
66
|
+
initializer 'scrivito.add_middlewares' do |app|
|
67
|
+
config.app_middleware.use Scrivito::EditingContextMiddleware
|
68
|
+
config.app_middleware.use Scrivito::CacheMiddleware
|
69
|
+
config.app_middleware.use Scrivito::WorkspaceSelectionMiddleware
|
70
|
+
config.app_middleware.use Scrivito::DisableBrowserCacheForUiMiddleware
|
71
|
+
end
|
72
|
+
|
65
73
|
config.autoload_paths += paths['lib'].to_a
|
66
74
|
config.autoload_once_paths += paths['lib'].to_a
|
67
75
|
config.eager_load_paths += [root.join('lib', 'scrivito').to_s]
|
68
76
|
|
69
|
-
config.app_middleware.use Scrivito::EditingContextMiddleware
|
70
|
-
config.app_middleware.use Scrivito::CacheMiddleware
|
71
|
-
config.app_middleware.use Scrivito::WorkspaceSelectionMiddleware
|
72
|
-
config.app_middleware.use Scrivito::DisableBrowserCacheForUiMiddleware
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
@@ -13,33 +13,27 @@ module TagRenderer
|
|
13
13
|
{}
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
else
|
28
|
-
view.content_tag(tag_name, content, options)
|
29
|
-
end
|
16
|
+
def self.render(view, tag, given_options, &block)
|
17
|
+
content = tag.content(&block)
|
18
|
+
tag_name = tag.tag_name
|
19
|
+
options = given_options
|
20
|
+
.merge(tag.html_options)
|
21
|
+
.merge(formatted_options(tag))
|
22
|
+
|
23
|
+
if VOID_TAGS.include?(tag_name.to_s)
|
24
|
+
view.tag(tag_name, options)
|
25
|
+
else
|
26
|
+
view.content_tag(tag_name, content, options)
|
30
27
|
end
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
formatted_options =
|
36
|
-
tag.options.each do |key, value|
|
37
|
-
formatted_options["data-scrivito-#{key}"] = value
|
38
|
-
end
|
39
|
-
|
40
|
-
formatted_options
|
30
|
+
private_class_method def self.formatted_options(tag)
|
31
|
+
formatted_options = {}
|
32
|
+
tag.options.each do |key, value|
|
33
|
+
formatted_options["data-scrivito-#{key}"] = value
|
41
34
|
end
|
42
35
|
|
36
|
+
formatted_options
|
43
37
|
end
|
44
38
|
|
45
39
|
end
|
@@ -47,15 +47,13 @@ module Scrivito
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
raise e
|
58
|
-
end
|
50
|
+
def self.assign_parameters(routes, controller_path, *args)
|
51
|
+
super routes, controller_path, *args
|
52
|
+
rescue *ROUTING_ERRORS => e
|
53
|
+
begin
|
54
|
+
super routes, 'scrivito/cms_dispatch', *args
|
55
|
+
rescue *ROUTING_ERRORS
|
56
|
+
raise e
|
59
57
|
end
|
60
58
|
end
|
61
59
|
end
|
data/lib/scrivito/ui_config.rb
CHANGED
@@ -14,8 +14,6 @@ class UiConfig < Struct.new(:editing_context, :resource, :return_to, :app_extens
|
|
14
14
|
i18n: i18n_config,
|
15
15
|
is_development_mode: Rails.env.development?,
|
16
16
|
resource_dialog: resource_dialog_config,
|
17
|
-
user: user_config,
|
18
|
-
user_permissions: user_permissions_config,
|
19
17
|
class_datas: obj_class_config + widget_class_config,
|
20
18
|
useRailsEngine: true,
|
21
19
|
}.to_json
|
@@ -47,23 +45,6 @@ class UiConfig < Struct.new(:editing_context, :resource, :return_to, :app_extens
|
|
47
45
|
}
|
48
46
|
end
|
49
47
|
|
50
|
-
def user_permissions_config
|
51
|
-
{
|
52
|
-
create_workspace: editor.can?(:create, :workspace),
|
53
|
-
rename_workspace: editor.can?(:write, selected_workspace),
|
54
|
-
invite_to_workspace: editor.can?(:invite_to, selected_workspace),
|
55
|
-
rebase_workspace: editor.can?(:write, selected_workspace),
|
56
|
-
delete_workspace: editor.can?(:delete, selected_workspace),
|
57
|
-
publish_workspace: editor.can?(:publish, selected_workspace),
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
def user_config
|
62
|
-
{
|
63
|
-
current: editor.as_json,
|
64
|
-
}
|
65
|
-
end
|
66
|
-
|
67
48
|
def editor
|
68
49
|
editing_context.editor
|
69
50
|
end
|
data/lib/scrivito/user.rb
CHANGED
@@ -31,108 +31,103 @@ module Scrivito
|
|
31
31
|
:read_history,
|
32
32
|
].freeze
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
define_user(id, &block)
|
82
|
-
end
|
83
|
-
|
84
|
-
#
|
85
|
-
# Returns an anonymous system user who can always create workspaces, can always read, write,
|
86
|
-
# publish, delete, and invite others to collaborate on any workspace.
|
87
|
-
# @example Check whether the user may publish a particular object:
|
88
|
-
# Scrivito::User.system_user.can_publish?(Obj.root)
|
89
|
-
# # => true
|
90
|
-
#
|
91
|
-
# @example Get the notification messages for publishing restrictions. An empty array indicates that no restrictions exist.
|
92
|
-
# Scrivito::User.system_user.restriction_messages_for(Obj.root)
|
93
|
-
# # => []
|
94
|
-
#
|
95
|
-
# @api public
|
96
|
-
# @return [Scrivito::User] the system user
|
97
|
-
#
|
98
|
-
def system_user
|
99
|
-
define_user { |user| user.is_admin! }
|
100
|
-
end
|
34
|
+
# Defines a new user.
|
35
|
+
#
|
36
|
+
# @api public
|
37
|
+
#
|
38
|
+
# @param [String] id The unique, unalterable id of the user.
|
39
|
+
# The user id is used to associate the user with the corresponding CMS resources.
|
40
|
+
# It is persisted in the CMS.
|
41
|
+
#
|
42
|
+
# @raise [Scrivito::ScrivitoError] if id is blank
|
43
|
+
# @raise [Scrivito::ScrivitoError] if id is more than 64 characters long
|
44
|
+
#
|
45
|
+
# @yieldparam [Scrivito::UserDefinition] user object to define rules on
|
46
|
+
#
|
47
|
+
# @see Scrivito::UserDefinition#can_always
|
48
|
+
# @see Scrivito::UserDefinition#can_never
|
49
|
+
# @see Scrivito::UserDefinition#description
|
50
|
+
# @see Scrivito::UserDefinition#restrict_obj_publish
|
51
|
+
# @see Scrivito::UserDefinition#suggest_users
|
52
|
+
#
|
53
|
+
# @example
|
54
|
+
# Scrivito::User.define('alice') do |user_definition|
|
55
|
+
# user_definition.description { 'Alice Almighty' }
|
56
|
+
#
|
57
|
+
# user_definition.can_always(:read, :workspace)
|
58
|
+
# user_definition.can_always(:write, :workspace)
|
59
|
+
# user_definition.can_always(:publish, :workspace, 'You can always publish workspaces.')
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# Scrivito::User.define('bob') do |user_definition|
|
63
|
+
# user_definition.description('Bob Doe')
|
64
|
+
#
|
65
|
+
# user_definition.can_never(:create, :workspace, 'You are not allowed to create workspaces.')
|
66
|
+
# user_definition.can_always(:read, :workspace)
|
67
|
+
#
|
68
|
+
# user_definition.restrict_obj_publish(using: :_obj_class) do |obj_class|
|
69
|
+
# if obj_class == 'BlogPost'
|
70
|
+
# false
|
71
|
+
# else
|
72
|
+
# 'You are not allowed to publish blog posts.'
|
73
|
+
# end
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
#
|
77
|
+
def self.define(id, &block)
|
78
|
+
assert_valid_id(id)
|
79
|
+
define_user(id, &block)
|
80
|
+
end
|
101
81
|
|
102
|
-
|
103
|
-
|
104
|
-
|
82
|
+
#
|
83
|
+
# Returns an anonymous system user who can always create workspaces, can always read, write,
|
84
|
+
# publish, delete, and invite others to collaborate on any workspace.
|
85
|
+
# @example Check whether the user may publish a particular object:
|
86
|
+
# Scrivito::User.system_user.can_publish?(Obj.root)
|
87
|
+
# # => true
|
88
|
+
#
|
89
|
+
# @example Get the notification messages for publishing restrictions. An empty array indicates that no restrictions exist.
|
90
|
+
# Scrivito::User.system_user.restriction_messages_for(Obj.root)
|
91
|
+
# # => []
|
92
|
+
#
|
93
|
+
# @api public
|
94
|
+
# @return [Scrivito::User] the system user
|
95
|
+
#
|
96
|
+
def self.system_user
|
97
|
+
define_user { |user| user.is_admin! }
|
98
|
+
end
|
105
99
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
assert_valid_user(user)
|
110
|
-
user
|
111
|
-
end
|
112
|
-
end
|
100
|
+
def self.unknown_user(id)
|
101
|
+
new(id: id, explicit_rules: {})
|
102
|
+
end
|
113
103
|
|
114
|
-
|
115
|
-
|
104
|
+
def self.find(id)
|
105
|
+
if Configuration.find_user_proc
|
106
|
+
user = Scrivito::Configuration.find_user_proc.call(id)
|
107
|
+
assert_valid_user(user)
|
108
|
+
user
|
116
109
|
end
|
110
|
+
end
|
117
111
|
|
118
|
-
|
112
|
+
def self.mget(*ids)
|
113
|
+
ids.map(&method(:find))
|
114
|
+
end
|
119
115
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
116
|
+
private_class_method def self.define_user(id = nil)
|
117
|
+
user_definition = UserDefinition.new(id)
|
118
|
+
yield user_definition if block_given?
|
119
|
+
user_definition.user
|
120
|
+
end
|
125
121
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
122
|
+
private_class_method def self.assert_valid_id(id)
|
123
|
+
raise ScrivitoError.new('User id must be a string') unless id.to_s == id
|
124
|
+
raise ScrivitoError.new('User id can not be blank') if id.blank?
|
125
|
+
raise ScrivitoError.new('User id is too long (max length 64)') if id.length > 64
|
126
|
+
end
|
131
127
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
end
|
128
|
+
private_class_method def self.assert_valid_user(user)
|
129
|
+
unless user.is_a?(User) || user.nil?
|
130
|
+
raise ScrivitoError.new("Expected an instance of #{self} or nil, but got #{user.inspect}")
|
136
131
|
end
|
137
132
|
end
|
138
133
|
|
@@ -235,7 +230,6 @@ module Scrivito
|
|
235
230
|
{
|
236
231
|
id: id,
|
237
232
|
description: description,
|
238
|
-
explicit_rules: explicit_rules_as_json,
|
239
233
|
}
|
240
234
|
end
|
241
235
|
|
@@ -263,9 +257,5 @@ module Scrivito
|
|
263
257
|
|
264
258
|
nil
|
265
259
|
end
|
266
|
-
|
267
|
-
def explicit_rules_as_json
|
268
|
-
@explicit_rules.map { |(adverb, verb, _)| "#{adverb}-#{verb}" }
|
269
|
-
end
|
270
260
|
end
|
271
261
|
end
|
data/lib/scrivito/workspace.rb
CHANGED
@@ -385,26 +385,22 @@ class Workspace
|
|
385
385
|
end
|
386
386
|
end
|
387
387
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
def from_workspace_data(id, data)
|
392
|
-
unless data
|
393
|
-
raise ResourceNotFound, "Could not find #{self} with id #{id}"
|
394
|
-
end
|
395
|
-
|
396
|
-
cache[id] = Workspace.new(data)
|
388
|
+
private_class_method def self.from_workspace_data(id, data)
|
389
|
+
unless data
|
390
|
+
raise ResourceNotFound, "Could not find #{self} with id #{id}"
|
397
391
|
end
|
398
392
|
|
399
|
-
|
400
|
-
|
393
|
+
cache[id] = Workspace.new(data)
|
394
|
+
end
|
401
395
|
|
402
|
-
|
403
|
-
|
404
|
-
Serving from cache.
|
396
|
+
private_class_method def self.warn_backend_not_available(error_message)
|
397
|
+
Warning.warn <<-EOS
|
405
398
|
|
406
|
-
|
407
|
-
|
399
|
+
Couldn't connect to backend to fetch published workspace.
|
400
|
+
#{error_message}
|
401
|
+
Serving from cache.
|
402
|
+
|
403
|
+
EOS
|
408
404
|
end
|
409
405
|
end
|
410
406
|
|
@@ -1,11 +1,7 @@
|
|
1
1
|
module Scrivito
|
2
2
|
class WorkspaceData
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def data_attr_reader(attr_name)
|
7
|
-
define_method(attr_name) { @data[attr_name.to_s] }
|
8
|
-
end
|
3
|
+
private_class_method def self.data_attr_reader(attr_name)
|
4
|
+
define_method(attr_name) { @data[attr_name.to_s] }
|
9
5
|
end
|
10
6
|
|
11
7
|
data_attr_reader :id
|
data/lib/scrivito_sdk.rb
CHANGED
@@ -138,19 +138,6 @@ module Scrivito
|
|
138
138
|
def self.models
|
139
139
|
@models ||= ModelLibrary.new
|
140
140
|
end
|
141
|
-
|
142
|
-
def self.autoload_all_sources
|
143
|
-
source_files = Dir.glob(File.expand_path("../scrivito/*.rb", __FILE__)).map do |file|
|
144
|
-
File.basename(file)
|
145
|
-
end
|
146
|
-
|
147
|
-
source_files.each do |file|
|
148
|
-
name = file.gsub(".rb", "")
|
149
|
-
autoload name.camelcase, "scrivito/#{name}"
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
autoload_all_sources
|
154
141
|
end
|
155
142
|
|
156
143
|
require 'scrivito/sdk_engine' if defined?(Rails)
|
data/lib/tasks/cache.rake
CHANGED
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: 1.
|
4
|
+
version: 1.10.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: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.12.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: multi_json
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.9'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.9'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: multipart-post
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -424,9 +438,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
424
438
|
version: 2.1.0
|
425
439
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
426
440
|
requirements:
|
427
|
-
- - "
|
441
|
+
- - ">"
|
428
442
|
- !ruby/object:Gem::Version
|
429
|
-
version:
|
443
|
+
version: 1.3.1
|
430
444
|
requirements: []
|
431
445
|
rubyforge_project:
|
432
446
|
rubygems_version: 2.4.8
|