scrivito_sdk 0.65.2 → 0.66.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 +19 -0
- data/app/controllers/scrivito/objs_controller.rb +6 -2
- data/app/controllers/scrivito/webservice_controller.rb +1 -1
- data/app/controllers/scrivito/workspaces_controller.rb +1 -7
- data/app/helpers/scrivito_helper.rb +115 -64
- data/app/views/scrivito/objs/is_outdated.json.jbuilder +1 -0
- data/app/views/scrivito/ui/index.html.erb +1 -0
- data/config/ca-bundle.crt +1 -1
- data/config/precedence_routes.rb +6 -4
- data/config/routes.rb +1 -1
- 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 +2975 -357
- data/lib/assets/stylesheets/scrivito_sdk.css +1 -3
- data/lib/assets/stylesheets/scrivito_ui.css +1 -3
- data/lib/generators/scrivito/install/templates/scrivito/migrate/install_scrivito_migration.rb +0 -2
- data/lib/generators/scrivito/migration/templates/migration.erb +6 -8
- data/lib/scrivito/attribute_content.rb +16 -52
- data/lib/scrivito/attribute_deserializer.rb +3 -5
- data/lib/scrivito/attribute_serializer.rb +42 -45
- data/lib/scrivito/backend/content_state_node.rb +71 -19
- data/lib/scrivito/backend/index.rb +20 -0
- data/lib/scrivito/backend/obj_data_cache.rb +157 -31
- data/lib/scrivito/backend/obj_data_from_rest.rb +1 -0
- data/lib/scrivito/backend/obj_load.rb +10 -6
- data/lib/scrivito/backend/obj_query.rb +2 -1
- data/lib/scrivito/backend/parent_path_index.rb +5 -1
- data/lib/scrivito/backend/path_index.rb +5 -1
- data/lib/scrivito/backend/permalink_index.rb +18 -10
- data/lib/scrivito/basic_obj.rb +62 -42
- data/lib/scrivito/basic_widget.rb +5 -5
- data/lib/scrivito/binary.rb +154 -13
- data/lib/scrivito/binary_param_verifier.rb +31 -0
- data/lib/scrivito/binary_rewrite.rb +35 -0
- data/lib/scrivito/cache_middleware.rb +5 -0
- data/lib/scrivito/child_list_tag.rb +3 -3
- data/lib/scrivito/cms_backend.rb +89 -57
- data/lib/scrivito/cms_data_cache.rb +21 -4
- data/lib/scrivito/cms_dispatch_controller.rb +13 -0
- data/lib/scrivito/cms_field_tag.rb +16 -3
- data/lib/scrivito/cms_rest_api.rb +2 -2
- data/lib/scrivito/cms_routing.rb +41 -18
- data/lib/scrivito/configuration.rb +22 -0
- data/lib/scrivito/content_state.rb +1 -9
- data/lib/scrivito/content_state_caching.rb +0 -20
- data/lib/scrivito/controller_actions.rb +3 -2
- data/lib/scrivito/controller_runtime.rb +16 -8
- data/lib/scrivito/dialog_size_helper.rb +11 -0
- data/lib/scrivito/diff.rb +0 -2
- data/lib/scrivito/editing_context.rb +24 -13
- data/lib/scrivito/editing_context_middleware.rb +6 -1
- data/lib/scrivito/errors.rb +18 -0
- data/lib/scrivito/image_tag.rb +55 -0
- data/lib/scrivito/link.rb +12 -0
- data/lib/scrivito/membership_collection.rb +3 -2
- data/lib/scrivito/migrations/cms_backend.rb +6 -13
- data/lib/scrivito/migrations/migrator.rb +2 -23
- data/lib/scrivito/migrations/workspace_lock.rb +23 -11
- data/lib/scrivito/named_link.rb +1 -1
- data/lib/scrivito/obj_collection.rb +1 -1
- data/lib/scrivito/obj_data_from_service.rb +0 -7
- data/lib/scrivito/obj_search_enumerator.rb +2 -2
- data/lib/scrivito/parent_path.rb +9 -0
- data/lib/scrivito/routing_helper.rb +2 -2
- data/lib/scrivito/user.rb +2 -2
- data/lib/scrivito/user_definition.rb +2 -2
- data/lib/scrivito/widget_garbage_collection.rb +2 -2
- data/lib/scrivito/widget_tag.rb +6 -3
- data/lib/scrivito/workspace.rb +60 -41
- data/lib/scrivito/workspace_data.rb +40 -4
- data/lib/scrivito/workspace_data_from_service.rb +0 -10
- data/lib/scrivito_sdk.rb +0 -16
- metadata +12 -12
- data/lib/scrivito/attribute.rb +0 -152
- data/lib/scrivito/attribute_collection.rb +0 -66
- data/lib/scrivito/attribute_definition_migrator.rb +0 -188
- data/lib/scrivito/cms_rest_api/legacy_attribute_serializer.rb +0 -105
- data/lib/scrivito/image_tag_helper.rb +0 -46
- data/lib/scrivito/obj_class.rb +0 -258
- data/lib/scrivito/obj_class_collection.rb +0 -71
- data/lib/scrivito/obj_class_data.rb +0 -37
- data/lib/tasks/migrate_attribute_definitions.rake +0 -6
@@ -1,105 +0,0 @@
|
|
1
|
-
module Scrivito
|
2
|
-
class CmsRestApi
|
3
|
-
module LegacyAttributeSerializer
|
4
|
-
class << self
|
5
|
-
|
6
|
-
def generate_widget_pool_changes(widget_hash)
|
7
|
-
widget_pool_changes = {}
|
8
|
-
|
9
|
-
widget_hash.each do |widget, attributes|
|
10
|
-
if attributes.present?
|
11
|
-
widget_pool_changes[widget.id] =
|
12
|
-
self.convert(attributes)
|
13
|
-
else # Empty hash or nil
|
14
|
-
widget_pool_changes[widget.id] = attributes
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
widget_pool_changes
|
19
|
-
end
|
20
|
-
|
21
|
-
def convert(attributes)
|
22
|
-
Hash[
|
23
|
-
attributes.map do |attribute_name, value|
|
24
|
-
attribute_name = attribute_name.to_s
|
25
|
-
|
26
|
-
converted_value = if value.nil? || value == []
|
27
|
-
nil
|
28
|
-
elsif link_array?(value)
|
29
|
-
convert_links(value)
|
30
|
-
elsif value.is_a?(Link)
|
31
|
-
convert_link(value)
|
32
|
-
elsif value.is_a?(BasicObj)
|
33
|
-
value.id
|
34
|
-
elsif widget_array?(value)
|
35
|
-
convert_widgets(value)
|
36
|
-
elsif obj_array?(value)
|
37
|
-
value.map(&:id)
|
38
|
-
elsif value.is_a?(Time) || value.is_a?(Date)
|
39
|
-
convert_time(value)
|
40
|
-
elsif value.is_a?(Array)
|
41
|
-
value.map(&:to_s)
|
42
|
-
elsif value.is_a?(File)
|
43
|
-
Scrivito::CmsRestApi.upload_file(value)
|
44
|
-
elsif value.is_a?(UploadedBinary)
|
45
|
-
value.params
|
46
|
-
else
|
47
|
-
value.to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
[attribute_name, converted_value]
|
51
|
-
end
|
52
|
-
]
|
53
|
-
end
|
54
|
-
|
55
|
-
def convert_time(point_in_time)
|
56
|
-
time_object = if point_in_time.instance_of?(Date)
|
57
|
-
point_in_time.to_time
|
58
|
-
else
|
59
|
-
point_in_time.to_time.utc
|
60
|
-
end
|
61
|
-
|
62
|
-
time_object.strftime("%Y%m%d%H%M%S")
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
def widget_array?(value)
|
68
|
-
value.is_a?(Array) && value.all? do |element|
|
69
|
-
element.is_a?(BasicWidget)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def convert_widgets(value)
|
74
|
-
converted_widgets = value.map do |widget|
|
75
|
-
{ 'widget' => widget.id }
|
76
|
-
end
|
77
|
-
|
78
|
-
{ 'list' => converted_widgets }
|
79
|
-
end
|
80
|
-
|
81
|
-
def link_array?(value)
|
82
|
-
value.is_a?(Array) && value.all? do |element|
|
83
|
-
element.is_a?(Link)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def obj_array?(value)
|
88
|
-
value.is_a?(Array) && value.all? do |element|
|
89
|
-
element.is_a?(BasicObj)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def convert_links(links)
|
94
|
-
links.map do |link|
|
95
|
-
convert_link(link)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def convert_link(link)
|
100
|
-
link.to_cms_api_linklist_params
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Scrivito
|
2
|
-
|
3
|
-
class ImageTagHelper < Struct.new(:view_context)
|
4
|
-
|
5
|
-
def self.display_title(target)
|
6
|
-
if target.respond_to?(:display_title)
|
7
|
-
target.display_title
|
8
|
-
elsif target.respond_to?(:first) && target.first.respond_to?(:display_title)
|
9
|
-
target.first.display_title
|
10
|
-
elsif target.respond_to?(:filename)
|
11
|
-
target.filename
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def options(obj, field_name, tag_options, editing_options)
|
16
|
-
tag_options.reverse_merge(src: scrivito_image_tag_src(obj, field_name, editing_options),
|
17
|
-
alt: scrivito_image_tag_alt(obj, field_name))
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def scrivito_image_tag_src(obj, field_name, editing_options)
|
23
|
-
scrivito_image_tag_path(obj, field_name) || editing_options[:placeholder] ||
|
24
|
-
view_context.image_path('scrivito/image_placeholder.png')
|
25
|
-
end
|
26
|
-
|
27
|
-
def scrivito_image_tag_alt(obj, field_name)
|
28
|
-
self.class.display_title(obj[field_name])
|
29
|
-
end
|
30
|
-
|
31
|
-
def scrivito_image_tag_path(obj, field_name)
|
32
|
-
field_type = obj.type_of_attribute(field_name)
|
33
|
-
field_value = obj[field_name]
|
34
|
-
|
35
|
-
case field_type
|
36
|
-
when 'link', 'binary', 'reference'
|
37
|
-
field_value && view_context.scrivito_path(field_value)
|
38
|
-
when 'linklist'
|
39
|
-
path = view_context.scrivito_path(field_value)
|
40
|
-
path == CmsRouting::LINK_TO_EMPTY_LINKLIST ? nil : path
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
data/lib/scrivito/obj_class.rb
DELETED
@@ -1,258 +0,0 @@
|
|
1
|
-
module Scrivito
|
2
|
-
# This class represents a CMS obj class. Obj classes can be created, updated and all properties
|
3
|
-
# can be read. The class also provides methods to find obj classes. The attributes of an obj class
|
4
|
-
# are defined by {Scrivito::Attribute} instances.
|
5
|
-
#
|
6
|
-
# @api public
|
7
|
-
# @deprecated
|
8
|
-
class ObjClass
|
9
|
-
include ModelIdentity
|
10
|
-
|
11
|
-
class << self
|
12
|
-
#
|
13
|
-
# Remove all obj classes.
|
14
|
-
#
|
15
|
-
# This method removes all classes in the corresponding workspace. By doing that it migrates
|
16
|
-
# the contents of the workspace. The migrated workspace will not use {Scrivito::ObjClass},
|
17
|
-
# {Scrivito::Attribute} etc. anymore to determine which attributes an {Obj} has, but will
|
18
|
-
# use attributes defined in model with {Scrivito::AttributeContent::ClassMethods#attribute}.
|
19
|
-
# The +id+ of the current workspace must be +"rtc"+.
|
20
|
-
# For detailed migration instructions please visit https://scrivito.com/obj-class-migration.
|
21
|
-
#
|
22
|
-
# @api public
|
23
|
-
# @see Scrivito::AttributeContent::ClassMethods#attribute
|
24
|
-
# @raise [ScrivitoError] if the +id+ of the corresponding workspace is not +"rtc"+
|
25
|
-
#
|
26
|
-
def remove
|
27
|
-
if Workspace.current.rtc?
|
28
|
-
Workspace.current.api_request(:delete, '/obj_classes')
|
29
|
-
else
|
30
|
-
raise ScrivitoError, 'Scrivito::ObjClass.remove is only allowed in the "rtc" workspace.'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Returns all obj classes.
|
35
|
-
# @api public
|
36
|
-
# @deprecated
|
37
|
-
# @return Scrivito::ObjClassCollection
|
38
|
-
#
|
39
|
-
def all
|
40
|
-
Workspace.current.obj_classes
|
41
|
-
end
|
42
|
-
|
43
|
-
# Finds an obj class by its name.
|
44
|
-
#
|
45
|
-
# @api public
|
46
|
-
# @deprecated
|
47
|
-
#
|
48
|
-
# @example Find the obj class named "Homepage" in the current {Scrivito::Workspace}.
|
49
|
-
# ObjClass.find('Homepage')
|
50
|
-
#
|
51
|
-
# @param [String] name The name of the obj class.
|
52
|
-
# @return [Scrivito::ObjClass]
|
53
|
-
# @raise [Scrivito::ResourceNotFound] Raised when no obj class with the given +name+ can be found.
|
54
|
-
def find(name)
|
55
|
-
obj_class = Workspace.current.obj_classes[name]
|
56
|
-
|
57
|
-
unless obj_class
|
58
|
-
raise ResourceNotFound, "Could not find '#{ObjClass}' with name '#{name}'."
|
59
|
-
end
|
60
|
-
|
61
|
-
obj_class
|
62
|
-
end
|
63
|
-
|
64
|
-
# Creates a new obj class and persists it in the CMS.
|
65
|
-
#
|
66
|
-
# @api public
|
67
|
-
# @deprecated
|
68
|
-
#
|
69
|
-
# This allows you to set the different properties of an obj class by
|
70
|
-
# providing a hash with the property names as keys and the values you want
|
71
|
-
# to set as values. Attributes can be either given as {Scrivito::Attribute} instances or as
|
72
|
-
# an attribute property hash.
|
73
|
-
#
|
74
|
-
# @example Create a obj class
|
75
|
-
# ObjClass.create(name: 'Homepage', attributes: [
|
76
|
-
# { name: 'title', type: :string },
|
77
|
-
# { name: 'body', type: :widget }
|
78
|
-
# ])
|
79
|
-
#
|
80
|
-
# @example Create a binary obj class.
|
81
|
-
# ObjClass.create(name: 'Image', attributes: [
|
82
|
-
# { name: 'blob', type: :binary }
|
83
|
-
# ])
|
84
|
-
#
|
85
|
-
# @example Create an obj class with attributes passed in as an Array of attribute property hashes.
|
86
|
-
# ObjClass.create(name: 'Blog', attributes: [
|
87
|
-
# { name: 'headline', type: :string },
|
88
|
-
# { name: 'category', type: :enum, values: %w(tech social) },
|
89
|
-
# ])
|
90
|
-
#
|
91
|
-
# @example Create an obj class with attributes passed in as an Array of {Scrivito::Attribute} instances.
|
92
|
-
# ObjClass.create(name: 'Blog', attributes: [
|
93
|
-
# Attribute.new(name: 'headline', type: :string),
|
94
|
-
# Attribute.new(name: 'category', type: :enum, values: %w(tech social)),
|
95
|
-
# ])
|
96
|
-
#
|
97
|
-
# @param [Hash] properties
|
98
|
-
# @option properties [String] :name The name of the obj class.
|
99
|
-
# @option properties [Boolean] :is_active Is it possible to create instances of this obj class?
|
100
|
-
# @option properties [Array<Scrivito::Attribute>, Array<Hash>] :attributes A list of
|
101
|
-
# attributes for this obj class. Can be either a list of attribute instances or attribute
|
102
|
-
# property hashes.
|
103
|
-
#
|
104
|
-
# @note the +is_binary+ option is deprecated
|
105
|
-
#
|
106
|
-
# @return [Scrivito::ObjClass]
|
107
|
-
def create(properties)
|
108
|
-
Scrivito.raise_obj_class_deprecated_error
|
109
|
-
end
|
110
|
-
|
111
|
-
private
|
112
|
-
|
113
|
-
# Formats obj class properties into a CMS REST API format.
|
114
|
-
# @param [Hash] properties
|
115
|
-
# @return [Hash] Properties formated for the CMS.
|
116
|
-
def format_properties_for_cms(properties)
|
117
|
-
params = properties.dup
|
118
|
-
|
119
|
-
if params.has_key?(:is_binary)
|
120
|
-
params[:type] = params.delete(:is_binary) ? :generic : :publication
|
121
|
-
end
|
122
|
-
|
123
|
-
if params.has_key?(:attributes)
|
124
|
-
params[:attributes] = params[:attributes].map(&:to_cms_rest_api)
|
125
|
-
end
|
126
|
-
|
127
|
-
params
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Initializes a new obj class. It expects the CMS backend representation of an obj class.
|
132
|
-
#
|
133
|
-
# See {ObjClass.create} for a detailed overview of how to set properties.
|
134
|
-
#
|
135
|
-
# @param [Hash] obj_class_data
|
136
|
-
# @param [Workspace,NilClass] workspace
|
137
|
-
# @raise [Scrivito::ScrivitoError]
|
138
|
-
# @return [Scrivito::ObjClass]
|
139
|
-
def initialize(obj_class_data, workspace)
|
140
|
-
update_obj_class_data(obj_class_data)
|
141
|
-
@workspace = workspace
|
142
|
-
end
|
143
|
-
|
144
|
-
# @api public
|
145
|
-
# @deprecated
|
146
|
-
# Returns true if this ObjClass was created with a +is_binary+ option.
|
147
|
-
# Creating ObjClass with this option is deprecated and will be removed.
|
148
|
-
#
|
149
|
-
# @return [Boolean]
|
150
|
-
def legacy_type?
|
151
|
-
!!obj_class_data.type
|
152
|
-
end
|
153
|
-
|
154
|
-
# @!attribute [r] id
|
155
|
-
# @api public
|
156
|
-
# @deprecated
|
157
|
-
# @return [String] unique identifier of this obj class
|
158
|
-
# @!attribute [r] name
|
159
|
-
# @api public
|
160
|
-
# @deprecated
|
161
|
-
# @return [String] the name of this obj class
|
162
|
-
# @!attribute [r] is_active
|
163
|
-
# @api public
|
164
|
-
# @deprecated
|
165
|
-
# @return [Boolean] whether instances can be created with this obj class
|
166
|
-
delegate :id, :name, :is_active, to: :obj_class_data
|
167
|
-
|
168
|
-
# @api public
|
169
|
-
# @deprecated
|
170
|
-
# @return [Boolean] whether instances of this class are binary, e.g. images or PDFs
|
171
|
-
# @deprecated Please create objects without using the +is_binary+ option
|
172
|
-
# @raise [ScrivitoError] if the method is called on a non-legacy-type ObjClass
|
173
|
-
def is_binary
|
174
|
-
if legacy_type?
|
175
|
-
obj_class_data.is_binary
|
176
|
-
else
|
177
|
-
raise ScrivitoError,
|
178
|
-
%(`is_binary' and `binary?' can only be called on ObjClasses with a legacy_type.)
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
alias_method :active?, :is_active
|
183
|
-
alias_method :binary?, :is_binary
|
184
|
-
|
185
|
-
# @api public
|
186
|
-
# @deprecated
|
187
|
-
# @return [Scrivito::AttributeCollection] the attributes of this obj class.
|
188
|
-
#
|
189
|
-
# @example Find an attribute named "locale" for the obj class "Homepage".
|
190
|
-
# ObjClass.find('Homepage').attributes['locale']
|
191
|
-
#
|
192
|
-
# @example Add a new +string+ attribute named "headline" to the "Homepage" obj class by providing an attribute property hash.
|
193
|
-
# ObjClass.find('Homepage').attributes.add(name: 'headline', type: :string)
|
194
|
-
#
|
195
|
-
# @example Add a new +enum+ attribute named "category" to the "Homepage" obj class by providing an attribute instance.
|
196
|
-
# attribute = Attribute.new(name: 'category', type: :enum, values: %w(tech social))
|
197
|
-
# ObjClass.find('Homepage').attributes.add(attribute)
|
198
|
-
#
|
199
|
-
# @example Iterate over the list of attributes from the obj class "Homepage" and print their name and type.
|
200
|
-
# ObjClass.find('Homepage').attributes.each do |attribute|
|
201
|
-
# puts "#{attribute.name}:#{attribute.type}"
|
202
|
-
# end
|
203
|
-
attr_reader :attributes
|
204
|
-
|
205
|
-
# @api public
|
206
|
-
# @deprecated
|
207
|
-
# Updates this obj class and persists the changes in the CMS. It is not possible to
|
208
|
-
# update the +name+.
|
209
|
-
#
|
210
|
-
# See {Scrivito::ObjClass.create} for a detailed overview of
|
211
|
-
# what properties are allowed and how to set them.
|
212
|
-
#
|
213
|
-
# The +is_binary+ option can only be removed. By passing +nil+ for the
|
214
|
-
# +is_binary+ option to update, you can convert legacy objects. This conversion
|
215
|
-
# removes the fields +title+, +body+ (if +is_binary+ was +false+) or +blob+ (if
|
216
|
-
# +is_binary+ was +true+). If you add the fields in the same request the values
|
217
|
-
# will be kept for all objs.
|
218
|
-
#
|
219
|
-
# @example Removing +is_binary+ but keeping the previously predefined fields
|
220
|
-
# ObjClass.find('Homepage').update(is_binary: nil, attributes: [
|
221
|
-
# {name: 'title', type: 'string'},
|
222
|
-
# {name: 'body', type: 'html'}
|
223
|
-
# ])
|
224
|
-
#
|
225
|
-
# # Binary ObjClass
|
226
|
-
# ObjClass.find('Image').update(is_binary: nil, attributes: [
|
227
|
-
# {name: 'title', type: 'string'},
|
228
|
-
# {name: 'blob', type: 'binary'}
|
229
|
-
# ])
|
230
|
-
#
|
231
|
-
# @param [Hash] properties
|
232
|
-
#
|
233
|
-
# @raise [ScrivitoError] Raised when trying to change +name+ or +is_binary+.
|
234
|
-
#
|
235
|
-
# @return [nil]
|
236
|
-
def update(properties)
|
237
|
-
Scrivito.raise_obj_class_deprecated_error
|
238
|
-
end
|
239
|
-
|
240
|
-
def update_obj_class_data(obj_class_data)
|
241
|
-
@obj_class_data = obj_class_data
|
242
|
-
update_attributes
|
243
|
-
end
|
244
|
-
|
245
|
-
private
|
246
|
-
|
247
|
-
attr_reader :obj_class_data, :workspace
|
248
|
-
|
249
|
-
def update_attributes
|
250
|
-
attributes = @obj_class_data.attributes.map do |attribute_data|
|
251
|
-
attribute = Attribute.new(attribute_data)
|
252
|
-
attribute.obj_class = self
|
253
|
-
attribute
|
254
|
-
end
|
255
|
-
@attributes = AttributeCollection.new(self, attributes)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
module Scrivito
|
2
|
-
# This class allows you to retrieve obj classes from a specific working copy. It behaves almost
|
3
|
-
# exactly as an Array, so methods like +#each+, +#select+ etc. are available. You can get an
|
4
|
-
# instance by accessing {Workspace#obj_classes}.
|
5
|
-
#
|
6
|
-
# @api public
|
7
|
-
# @deprecated
|
8
|
-
class ObjClassCollection
|
9
|
-
include Enumerable
|
10
|
-
|
11
|
-
# Initializes an obj class collection for a workspace.
|
12
|
-
#
|
13
|
-
# @param [Workspace] workspace
|
14
|
-
# @return [ObjClassCollection]
|
15
|
-
def initialize(workspace)
|
16
|
-
@workspace = workspace
|
17
|
-
end
|
18
|
-
|
19
|
-
# Finds an obj class by its name in the working copy of the collection.
|
20
|
-
#
|
21
|
-
# @api public
|
22
|
-
# @deprecated
|
23
|
-
#
|
24
|
-
# @example Find the obj class named "Homepage" in the "rtc" {Workspace}.
|
25
|
-
# Workspace.find('rtc').obj_classes['Homepage']
|
26
|
-
#
|
27
|
-
# @param [String] name The name of the obj class.
|
28
|
-
# @return [ObjClass, nil] Returns the obj class or nil when no obj class with the given +name+ can be found in the working copy.
|
29
|
-
def [](name)
|
30
|
-
if obj_class_data = CmsBackend.instance.find_obj_class_data_by_name(workspace.revision, name)
|
31
|
-
ObjClass.new(obj_class_data, workspace)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
#
|
36
|
-
# @!method each
|
37
|
-
#
|
38
|
-
# Yields successive obj classes of the collection. Implements the +Enumerable+ interface.
|
39
|
-
#
|
40
|
-
# @api public
|
41
|
-
# @deprecated
|
42
|
-
# @see Scrivito::ObjClass.remove
|
43
|
-
#
|
44
|
-
# @yield [ObjClass] successive obj classes of the collection if the corresponding workspace
|
45
|
-
# still uses {Scrivito::ObjClass}.
|
46
|
-
# @yield [Array] an empty array if the corresponding workspace does not use {Scrivito::ObjClass}
|
47
|
-
# anymore.
|
48
|
-
#
|
49
|
-
# @example Find all obj classes in the "rtc" {Workspace} and print their name.
|
50
|
-
# Workspace.find('rtc').obj_classes.each do |obj_class|
|
51
|
-
# puts obj_class.name
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
delegate :each, to: :obj_classes
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def obj_classes
|
59
|
-
if workspace.uses_obj_classes
|
60
|
-
CmsBackend.instance.find_all_obj_class_data(workspace.revision).map do |obj_class_data|
|
61
|
-
ObjClass.new(obj_class_data, workspace)
|
62
|
-
end
|
63
|
-
else
|
64
|
-
Scrivito.print_obj_class_deprecated_warning
|
65
|
-
[]
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
attr_reader :workspace
|
70
|
-
end
|
71
|
-
end
|