infopark_fiona7 0.71.1.12 → 1.1.0.0.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/app/assets/javascripts/fiona7_ui.js +67 -0
- data/app/assets/stylesheets/fiona7_ui.css.scss +29 -0
- data/app/controllers/fiona7/release_controller.rb +37 -75
- data/app/controllers/scrivito/cms_dispatch_controller.rb +2 -12
- data/app/controllers/scrivito/objs_controller.rb +41 -13
- data/app/controllers/scrivito/webservice_controller.rb +4 -3
- data/app/views/fiona7/release/preview.html.erb +73 -0
- data/config/routes.rb +3 -1
- data/infopark_fiona7.gemspec +1 -1
- data/lib/fiona7/assert.rb +4 -0
- data/lib/fiona7/attribute_name_mangler.rb +19 -0
- data/lib/fiona7/attribute_names_from_cms.rb +17 -0
- data/lib/fiona7/attribute_names_from_queries.rb +17 -0
- data/lib/fiona7/builder/obj_builder.rb +3 -2
- data/lib/fiona7/builder/obj_updater.rb +2 -2
- data/lib/fiona7/builder/widget_builder.rb +1 -1
- data/lib/fiona7/builder/widget_updater.rb +2 -2
- data/lib/fiona7/complex_object.rb +24 -0
- data/lib/fiona7/controllers/rest_api/obj_controller.rb +96 -24
- data/lib/fiona7/controllers/rest_api/workspace_controller.rb +23 -2
- data/lib/fiona7/engine.rb +11 -23
- data/lib/fiona7/facet_builder.rb +136 -0
- data/lib/fiona7/json/reverse_obj_decorator.rb +2 -0
- data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk.rb +68 -10
- data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk_slave.rb +66 -14
- data/lib/fiona7/mode_switch/views.rb +2 -2
- data/lib/fiona7/naive_search_engine.rb +40 -5
- data/lib/fiona7/obj_class_name_demangler.rb +11 -0
- data/lib/fiona7/obj_class_name_mangler.rb +11 -0
- data/lib/fiona7/obj_classes_from_cms.rb +14 -0
- data/lib/fiona7/obj_classes_from_queries.rb +11 -0
- data/lib/fiona7/recursive_object_finder.rb +149 -0
- data/lib/fiona7/routers/rest_api.rb +14 -1
- data/lib/fiona7/routing_monkey_patch.rb +5 -2
- data/lib/fiona7/scrivito_patches/attribute_serializer.rb +1 -1
- data/lib/fiona7/scrivito_patches/basic_obj.rb +4 -9
- data/lib/fiona7/scrivito_patches/basic_widget.rb +0 -9
- data/lib/fiona7/scrivito_patches/cms_backend.rb +11 -16
- data/lib/fiona7/scrivito_patches/cms_rest_api.rb +1 -1
- data/lib/fiona7/scrivito_patches/cms_routing.rb +50 -33
- data/lib/fiona7/scrivito_patches/link_parser.rb +6 -13
- data/lib/fiona7/scrivito_patches/log_subscriber.rb +18 -0
- data/lib/fiona7/scrivito_patches/preset_routes.rb +47 -0
- data/lib/fiona7/scrivito_patches/routing_extensions.rb +48 -0
- data/lib/fiona7/search_engine.rb +4 -0
- data/lib/fiona7/type_loader.rb +5 -4
- data/lib/fiona7/type_register.rb +13 -27
- data/lib/fiona7/type_synchronizer.rb +8 -6
- data/lib/fiona7/verity_search_engine.rb +77 -30
- data/lib/fiona7/version.rb +1 -1
- metadata +18 -13
- data/app/models/rails_connector/abstract_obj.rb +0 -24
- data/lib/fiona7/controllers/content_service/obj_controller.rb +0 -121
- data/lib/fiona7/controllers/content_service/workspace_controller.rb +0 -19
- data/lib/fiona7/recursive_link_resolver.rb +0 -93
- data/lib/fiona7/routers/content_service.rb +0 -19
- data/lib/fiona7/scrivito_patches/client_config.rb +0 -0
- data/lib/fiona7/scrivito_patches/controller_actions.rb +0 -6
- data/lib/fiona7/scrivito_patches/obj_class.rb +0 -16
- data/lib/fiona7/scrivito_patches/obj_data_from_rest.rb +0 -30
@@ -0,0 +1,11 @@
|
|
1
|
+
module Fiona7
|
2
|
+
class ObjClassesFromQueries
|
3
|
+
def initialize(queries)
|
4
|
+
@queries = queries
|
5
|
+
end
|
6
|
+
|
7
|
+
def obj_classes
|
8
|
+
@queries.map {|q| q[:value] if q[:operator] == :equal && q[:field] == :_obj_class }.flatten.compact.uniq.presence if @queries
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Fiona7
|
4
|
+
class RecursiveObjectFinder
|
5
|
+
attr_reader :starting_obj, :widgets, :images, :downloads, :referenced, :linked
|
6
|
+
|
7
|
+
def initialize(starting_obj, max_levels=3)
|
8
|
+
@starting_obj = starting_obj
|
9
|
+
@max_levels = max_levels
|
10
|
+
|
11
|
+
@widgets = []
|
12
|
+
@images = []
|
13
|
+
@downloads = []
|
14
|
+
@referenced = []
|
15
|
+
@linked = []
|
16
|
+
|
17
|
+
recursive_compute(@starting_obj, Set[@starting_obj], @max_levels)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
def recursive_compute(obj, already_encountered, levels)
|
22
|
+
return if levels <= 0
|
23
|
+
|
24
|
+
new_widgets = find_widgets(obj) - already_encountered
|
25
|
+
already_encountered.merge(new_widgets)
|
26
|
+
|
27
|
+
new_images = find_images(obj) - already_encountered
|
28
|
+
already_encountered.merge(new_images)
|
29
|
+
|
30
|
+
new_downloads = find_downloads(obj) - already_encountered
|
31
|
+
already_encountered.merge(new_downloads)
|
32
|
+
|
33
|
+
new_referenced = find_referenced(obj) - already_encountered
|
34
|
+
already_encountered.merge(new_referenced)
|
35
|
+
|
36
|
+
new_linked = find_linked(obj) - already_encountered
|
37
|
+
already_encountered.merge(new_linked)
|
38
|
+
|
39
|
+
|
40
|
+
new_widgets.each do |new_obj|
|
41
|
+
@widgets << new_obj
|
42
|
+
end
|
43
|
+
|
44
|
+
new_images.each do |new_obj|
|
45
|
+
@images << new_obj
|
46
|
+
end
|
47
|
+
|
48
|
+
new_downloads.each do |new_obj|
|
49
|
+
@downloads << new_obj
|
50
|
+
end
|
51
|
+
|
52
|
+
new_referenced.each do |new_obj|
|
53
|
+
@referenced << new_obj
|
54
|
+
end
|
55
|
+
|
56
|
+
new_linked.each do |new_obj|
|
57
|
+
@linked << new_obj
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
new_objs = new_widgets
|
62
|
+
new_widgets.each do |new_obj|
|
63
|
+
recursive_compute(new_obj, already_encountered, levels-1)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def find_widgets(obj)
|
69
|
+
# TODO: optimize this through attr_values
|
70
|
+
links = obj[:X_widget_pool] || []
|
71
|
+
WriteObj.where(obj_id: links.map {|l| l.destination_object_id }).to_a.to_set
|
72
|
+
end
|
73
|
+
|
74
|
+
def find_images(obj)
|
75
|
+
find_selected(obj) do |link, attribute|
|
76
|
+
if link.internal?
|
77
|
+
destination_object = link.destination_object
|
78
|
+
if destination_object && destination_object.image?
|
79
|
+
true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_downloads(obj)
|
86
|
+
find_selected(obj) do |link, attribute|
|
87
|
+
if link.internal?
|
88
|
+
destination_object = link.destination_object
|
89
|
+
if destination_object && destination_object.generic?
|
90
|
+
true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def find_referenced(obj)
|
97
|
+
find_selected(obj) do |link, attribute|
|
98
|
+
if link.internal? && attribute && (attribute.type == :reference || attribute.type == :referencelist)
|
99
|
+
destination_object = link.destination_object
|
100
|
+
if destination_object && !(destination_object.image? || destination_object.generic?)
|
101
|
+
true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def find_linked(obj)
|
108
|
+
find_selected(obj) do |link, attribute|
|
109
|
+
if link.internal? && (!attribute || (attribute.type == :link || attribute.type == :linklist))
|
110
|
+
destination_object = link.destination_object
|
111
|
+
if destination_object && !(destination_object.image? || destination_object.generic?)
|
112
|
+
true
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def find_selected(obj)
|
119
|
+
referenced = Set.new
|
120
|
+
|
121
|
+
# TODO: optimize this through attr_values
|
122
|
+
type_definition = Fiona7::TypeRegister.instance.read_mangled(obj.obj_class)
|
123
|
+
type_definition.attrs.each do |attribute|
|
124
|
+
if attribute.type == :reference || attribute.type == :referencelist && attribute.name != "child_order"
|
125
|
+
(obj[attribute.real_name] || []).each do |link|
|
126
|
+
if yield(link, attribute)
|
127
|
+
referenced << link.destination_object
|
128
|
+
end
|
129
|
+
end
|
130
|
+
elsif attribute.type == :link || attribute.type == :linklist
|
131
|
+
(obj[attribute.real_name] || []).each do |link|
|
132
|
+
if yield(link, attribute)
|
133
|
+
referenced << link.destination_object
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
obj.text_links.each do |link|
|
140
|
+
if yield(link, nil)
|
141
|
+
referenced << link.destination_object
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
referenced
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
@@ -29,8 +29,12 @@ class Scrivito::CmsRestApi
|
|
29
29
|
resource_path = '/' + resource_path
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
$stdout.puts "DEBUG GET: #{resource_path}"
|
33
|
+
pp payload
|
33
34
|
case resource_path
|
35
|
+
when /\A\/?revisions\/[a-zA-Z0-9_-]+\/objs\/mget\Z/
|
36
|
+
_, _, revision_id, _, _ = *resource_path.split("/")
|
37
|
+
Fiona7::Controllers::RestAPI::ObjController.new.fetch_multiple(revision_id, payload)
|
34
38
|
when /\A\/?revisions\/[a-zA-Z0-9_-]+\/objs\/[a-zA-Z0-9_-]+\Z/
|
35
39
|
_, _, revision_id, _, obj_id = *resource_path.split("/")
|
36
40
|
Fiona7::Controllers::RestAPI::ObjController.new.fetch_by_id_from_revision(revision_id, obj_id)
|
@@ -46,12 +50,18 @@ class Scrivito::CmsRestApi
|
|
46
50
|
when /\A\/?workspaces\/[a-zA-Z0-9_-]+\Z/
|
47
51
|
_, _, workspace_id = *resource_path.split("/")
|
48
52
|
Fiona7::Controllers::RestAPI::WorkspaceController.new.fetch(workspace_id)
|
53
|
+
when /\A\/?workspaces\/[a-zA-Z0-9_-]+\/changes\Z/
|
54
|
+
_, _, workspace_id,_ = *resource_path.split("/")
|
55
|
+
Fiona7::Controllers::RestAPI::WorkspaceController.new.changes(workspace_id)
|
49
56
|
when /\A\/?workspaces\/[a-zA-Z0-9_-]+\/objs\/[a-zA-Z0-9_-]+\Z/
|
50
57
|
_, _, workspace_id, _, obj_id = *resource_path.split("/")
|
51
58
|
Fiona7::Controllers::RestAPI::ObjController.new.fetch_by_id(workspace_id, obj_id)
|
52
59
|
when /\A\/?blobs\/[a-zA-Z0-9_-]+\Z/
|
53
60
|
_, _, blob_id = *resource_path.split("/")
|
54
61
|
Fiona7::Controllers::RestAPI::BlobController.new.fetch(blob_id)
|
62
|
+
when /\A\/?blobs\/[a-zA-Z0-9_-]+\/no_cache\Z/
|
63
|
+
_, _, blob_id = *resource_path.split("/")
|
64
|
+
Fiona7::Controllers::RestAPI::BlobController.new.fetch(blob_id)
|
55
65
|
when /\A\/?blobs\/[a-zA-Z0-9_-]+\/transform\Z/
|
56
66
|
_, _, blob_id = *resource_path.split("/")
|
57
67
|
Fiona7::Controllers::RestAPI::BlobController.new.fetch(blob_id, payload[:transformation])
|
@@ -131,6 +141,9 @@ class Scrivito::CmsRestApi
|
|
131
141
|
raise Scrivito::ScrivitoError, 'Rebase operation unsupported for workspaces'
|
132
142
|
_, _, workspace_id = *resource_path.split("/")
|
133
143
|
Fiona7::Controllers::RestAPI::WorkspaceController.new.publish(workspace_id)
|
144
|
+
when /\A\/?workspaces\/[a-zA-Z0-9]+/
|
145
|
+
_, _, workspace_id = *resource_path.split("/")
|
146
|
+
Fiona7::Controllers::RestAPI::WorkspaceController.new.update(workspace_id)
|
134
147
|
else
|
135
148
|
#$stdout.puts "PUT: #{resource_path}"
|
136
149
|
original_put(resource_path, payload, options||{})
|
@@ -4,8 +4,11 @@ module ActionDispatch
|
|
4
4
|
def add_route(app, conditions = {}, requirements = {}, defaults = {}, name = nil, anchor = true)
|
5
5
|
raise ArgumentError, "Invalid route name: '#{name}'" unless name.blank? || name.to_s.match(/^[_a-z]\w*$/i)
|
6
6
|
|
7
|
-
forbidden_paths = [
|
8
|
-
::File.join(Gem.loaded_specs['
|
7
|
+
forbidden_paths = [
|
8
|
+
::File.join(Gem.loaded_specs['scrivito_sdk'].full_gem_path, "config/routes.rb"),
|
9
|
+
::File.join(Gem.loaded_specs['scrivito_sdk'].full_gem_path, "config/precedence_routes.rb"),
|
10
|
+
::File.join(Gem.loaded_specs['infopark_fiona_connector'].full_gem_path, "config/cms_routes.rb")
|
11
|
+
]
|
9
12
|
|
10
13
|
if caller.any? {|path| forbidden_paths.any? {|fp| path.include?(fp) } }
|
11
14
|
return # bad dog scrivito/fiona_connector, bad dog! no cms_routes for you
|
@@ -5,7 +5,7 @@ module Scrivito
|
|
5
5
|
def serialize_binary_value(attribute_value, attribute_definition)
|
6
6
|
case attribute_value
|
7
7
|
when File then attribute_value
|
8
|
-
when FutureBinary then attribute_value.
|
8
|
+
when FutureBinary then attribute_value.file_to_upload
|
9
9
|
when UploadedBinary then attribute_value.params
|
10
10
|
else
|
11
11
|
raise_validation_error(attribute_definition.name,
|
@@ -9,11 +9,6 @@ module Scrivito
|
|
9
9
|
@_type_computer ||= TypeComputer.new(Scrivito::BasicObj, Obj)
|
10
10
|
end
|
11
11
|
|
12
|
-
# to_param should only return strings and our ids are numbers
|
13
|
-
def to_param
|
14
|
-
id.to_s
|
15
|
-
end
|
16
|
-
|
17
12
|
# optimized away
|
18
13
|
def outdated?
|
19
14
|
false
|
@@ -68,10 +63,10 @@ module Scrivito
|
|
68
63
|
# and does not support shadow classes
|
69
64
|
def self.where(field, operator, value, boost = nil)
|
70
65
|
assert_not_basic_obj('.where')
|
71
|
-
if self == Obj || self ==
|
66
|
+
if self == ::Obj || self == Obj
|
72
67
|
Workspace.current.objs.where(field, operator, value, boost)
|
73
68
|
else
|
74
|
-
Workspace.current.objs.where(:_obj_class, :equals,
|
69
|
+
Workspace.current.objs.where(:_obj_class, :equals, name)
|
75
70
|
.and(field, operator, value, boost)
|
76
71
|
end
|
77
72
|
end
|
@@ -80,10 +75,10 @@ module Scrivito
|
|
80
75
|
# and does not support shadow classes
|
81
76
|
def self.all
|
82
77
|
assert_not_basic_obj('.all')
|
83
|
-
if self == Obj || self ==
|
78
|
+
if self == ::Obj || self == Obj
|
84
79
|
Workspace.current.objs.all
|
85
80
|
else
|
86
|
-
find_all_by_obj_class(
|
81
|
+
find_all_by_obj_class(name)
|
87
82
|
end
|
88
83
|
end
|
89
84
|
|
@@ -2,11 +2,6 @@ require 'scrivito/cms_backend'
|
|
2
2
|
|
3
3
|
module Scrivito
|
4
4
|
class CmsBackend
|
5
|
-
def die_content_service
|
6
|
-
# TODO: remove this
|
7
|
-
false
|
8
|
-
end
|
9
|
-
|
10
5
|
# prevent the use of local URLs (localhost:7104) from cache
|
11
6
|
# when running under a server
|
12
7
|
def find_blob_data_from_cache(id, access, verb, transformation_definition)
|
@@ -27,22 +22,22 @@ module Scrivito
|
|
27
22
|
end
|
28
23
|
|
29
24
|
# prevent real get requests since we run everything locally
|
30
|
-
def request_blob_metadata_from_s3(url)
|
31
|
-
|
25
|
+
# def request_blob_metadata_from_s3(url)
|
26
|
+
# @query_counter += 1
|
32
27
|
|
33
|
-
|
28
|
+
# blob_id = /\/_b\/([0-9]+)/.match(url)[1]
|
34
29
|
|
35
|
-
|
30
|
+
# raise ScrivitoError, "Unexpected 's3' url: #{url}" unless blob_id.present?
|
36
31
|
|
37
|
-
|
32
|
+
# rest_api_meta_data = Fiona7::Controllers::RestAPI::BlobController.new.metadata(blob_id)
|
38
33
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
# meta_data = {}
|
35
|
+
# meta_data[:content_type] = rest_api_meta_data['meta_data']['content_type'].last
|
36
|
+
# meta_data[:content_length] = rest_api_meta_data['meta_data']['content_length'].last
|
37
|
+
# meta_data[:cache_control] = 'no-transform,public,max-age=300,s-maxage=900'
|
43
38
|
|
44
|
-
|
45
|
-
end
|
39
|
+
# meta_data
|
40
|
+
# end
|
46
41
|
|
47
42
|
end
|
48
43
|
end
|
@@ -4,7 +4,7 @@ module Scrivito
|
|
4
4
|
class CmsRestApi
|
5
5
|
# Stub upload_future_binary since the uploads are handled directly in ruby.
|
6
6
|
def self.upload_future_binary(future_binary, obj_id)
|
7
|
-
file = future_binary.
|
7
|
+
file = future_binary.file_to_upload
|
8
8
|
# TODO: code deduplication with obj builder
|
9
9
|
parent = Fiona7::WriteObj.find(obj_id.to_i)
|
10
10
|
ext = ::File.extname(file.path).to_s[1..-1]
|
@@ -4,7 +4,7 @@ module Scrivito
|
|
4
4
|
class CmsRouting
|
5
5
|
def convert_links(html)
|
6
6
|
if html
|
7
|
-
html.to_str.gsub(%r{\bobjid:([a-f0-9]{4,
|
7
|
+
html.to_str.gsub(%r{\bobjid:([a-f0-9]{4,})\b([^"']*)}) do
|
8
8
|
if obj = Obj.find_by_id($1)
|
9
9
|
options = {}
|
10
10
|
|
@@ -12,13 +12,14 @@ module Scrivito
|
|
12
12
|
begin
|
13
13
|
uri = URI.parse($2)
|
14
14
|
options.merge!(extract_query(uri))
|
15
|
-
options[
|
15
|
+
options[:anchor] = uri.fragment
|
16
16
|
rescue
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
if editing_context.display_mode == 'editing'
|
21
|
-
|
21
|
+
options[:id] = obj.id
|
22
|
+
scrivito_engine.base_id_path(options)
|
22
23
|
else
|
23
24
|
path_or_url(obj, :path, options)
|
24
25
|
end
|
@@ -29,46 +30,62 @@ module Scrivito
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
#
|
33
|
-
def path_or_url_without_editing_context(target, path_or_url, options)
|
34
|
-
if target.is_a?(Link)
|
35
|
-
path_or_url_for_links(target, path_or_url, options)
|
36
|
-
elsif target.is_a?(Obj) || target.is_a?(BasicObj)
|
37
|
-
path_or_url_for_objs(target, path_or_url, options)
|
38
|
-
elsif target.respond_to?(:first)
|
39
|
-
if target.first.is_a?(Link)
|
40
|
-
path_or_url_for_links(target.first, path_or_url, options)
|
41
|
-
else
|
42
|
-
return LINK_TO_EMPTY_LINKLIST
|
43
|
-
end
|
44
|
-
elsif target.is_a?(Binary)
|
45
|
-
binary_url(target)
|
46
|
-
else
|
47
|
-
raise "scrivito_path or scrivito_url was called with an instance of #{target.class}. "+
|
48
|
-
"It must only be called with an Obj or a Link or a non-empty LinkList."
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# use rails connector permalinks in legacy mode
|
33
|
+
# Use fiona connector permalinks in legacy mode
|
53
34
|
def path_or_url_for_objs(obj, path_or_url, options)
|
54
35
|
permalink = obj.permalink
|
55
|
-
if permalink
|
36
|
+
if permalink && route_defined?(:permalink)
|
37
|
+
|
56
38
|
if Fiona7.mode == :legacy
|
57
|
-
|
58
|
-
.public_send("cms_permalink_#{path_or_url}", options.merge(:permalink => permalink))
|
39
|
+
context.public_send("cms_permalink_#{path_or_url}", options.merge(:permalink => permalink))
|
59
40
|
else
|
60
|
-
|
61
|
-
.public_send("scrivito_permalink_#{path_or_url}", options.merge(:permalink => permalink))
|
41
|
+
use_route(:permalink, path_or_url, options.merge(:permalink => permalink))
|
62
42
|
end
|
63
|
-
elsif homepage?(obj)
|
64
|
-
|
43
|
+
elsif homepage?(obj) && route_defined?(:homepage)
|
44
|
+
use_route(:homepage, path_or_url, options)
|
65
45
|
elsif obj.binary?
|
66
|
-
|
67
|
-
|
46
|
+
# use fiona connector routes when possible
|
47
|
+
if Fiona7.mode == :legacy
|
48
|
+
if binary = obj.binary
|
49
|
+
obj_id = obj.id
|
50
|
+
|
51
|
+
context.public_send("cms_id_#{path_or_url}", {id: obj_id, slug: binary.filename})
|
52
|
+
else
|
53
|
+
LINK_TO_EMPTY_BLOB
|
54
|
+
end
|
55
|
+
else
|
56
|
+
binary_obj_url(obj) || LINK_TO_EMPTY_BLOB
|
57
|
+
end
|
58
|
+
elsif route_defined?(:slug_id)
|
68
59
|
slug = obj.slug.present? ? obj.slug.sub(/^\//, '') : nil
|
69
60
|
id_path_or_url_for_objs(obj, path_or_url, options.merge(slug: slug))
|
61
|
+
else
|
62
|
+
raise ScrivitoError, "The required scrivito route 'slug_id' is not defined. "\
|
63
|
+
"Please add a 'slug_id' definition to your routes.rb. See the documentation"\
|
64
|
+
" of 'scrivito_route' for further details."
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# use fiona connector routes when possible
|
69
|
+
def id_path_or_url_for_objs(obj, path_or_url, options)
|
70
|
+
if Fiona7.mode == :standalone
|
71
|
+
options[:id] = obj.id
|
72
|
+
|
73
|
+
# Options must have the key slug.
|
74
|
+
# Otherwise Rails will use the slug from current request params.
|
75
|
+
options[:slug] ||= nil
|
76
|
+
|
77
|
+
use_route(:slug_id, path_or_url, options)
|
78
|
+
else
|
79
|
+
options[:id] = obj.id
|
80
|
+
|
81
|
+
# Options must have the key slug.
|
82
|
+
# Otherwise Rails will use the slug from current request params.
|
83
|
+
options[:slug] ||= nil
|
84
|
+
|
85
|
+
context.public_send("cms_id_#{path_or_url}", options)
|
70
86
|
end
|
71
87
|
end
|
88
|
+
|
72
89
|
end
|
73
90
|
end
|
74
91
|
|