infopark_cloud_connector 6.8.0.210.ed204b0 → 6.8.0.322.c003f11
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +5 -0
- data/README +5 -0
- data/app/helpers/rails_connector/marker_helper.rb +1 -1
- data/lib/infopark_cloud_connector.rb +1 -0
- data/lib/rails_connector/blob.rb +50 -33
- data/lib/rails_connector/cache.rb +0 -1
- data/lib/rails_connector/cache_middleware.rb +0 -1
- data/lib/rails_connector/chain.rb +0 -1
- data/lib/rails_connector/cloud_engine.rb +1 -1
- data/lib/rails_connector/cms_api_search_request.rb +3 -0
- data/lib/rails_connector/cms_base_model.rb +2 -3
- data/lib/rails_connector/cms_rest_api.rb +0 -2
- data/lib/rails_connector/content_cache.rb +0 -1
- data/lib/rails_connector/content_service.rb +9 -0
- data/lib/rails_connector/date_attribute.rb +1 -1
- data/lib/rails_connector/default_search_request.rb +2 -1
- data/lib/rails_connector/dict_storage.rb +1 -1
- data/lib/rails_connector/errors.rb +2 -0
- data/lib/rails_connector/link.rb +22 -8
- data/lib/rails_connector/named_link.rb +11 -8
- data/lib/rails_connector/obj.rb +113 -25
- data/lib/rails_connector/obj_data.rb +4 -7
- data/lib/rails_connector/obj_data_from_database.rb +0 -1
- data/lib/rails_connector/obj_data_from_hash.rb +0 -1
- data/lib/rails_connector/obj_data_from_service.rb +6 -1
- data/lib/rails_connector/path_conversion.rb +1 -1
- data/lib/rails_connector/revision.rb +0 -1
- data/lib/rails_connector/s3_blob.rb +17 -12
- data/lib/rails_connector/service_blob.rb +48 -0
- data/lib/rails_connector/service_cms_backend.rb +24 -19
- data/lib/rails_connector/version.rb +0 -1
- data/lib/rails_connector/workspace.rb +0 -1
- data/lib/rails_connector/workspace_data_from_database.rb +0 -1
- data/lib/rails_connector/workspace_data_from_service.rb +0 -1
- data/lib/rails_connector/workspace_selection_middleware.rb +0 -1
- metadata +23 -23
- data/lib/rails_connector/obj_body.rb +0 -60
data/lib/rails_connector/obj.rb
CHANGED
@@ -4,13 +4,13 @@ require 'kvom'
|
|
4
4
|
|
5
5
|
module RailsConnector
|
6
6
|
# The CMS file class
|
7
|
+
# @api public
|
7
8
|
class Obj
|
8
9
|
extend ActiveModel::Naming
|
9
10
|
include Kvom::ModelIdentity
|
10
11
|
|
11
12
|
include DateAttribute
|
12
13
|
include SEO
|
13
|
-
include ObjBody
|
14
14
|
|
15
15
|
# Create a new Obj instance with the given values and attributes.
|
16
16
|
# Normally this method should not be used.
|
@@ -25,11 +25,12 @@ module RailsConnector
|
|
25
25
|
|
26
26
|
# instantiate an Obj instance from obj_data.
|
27
27
|
# May result in an instance of a subclass of Obj according to STI rules.
|
28
|
-
def self.instantiate(obj_data)
|
28
|
+
def self.instantiate(obj_data)
|
29
29
|
obj_class = obj_data.value_of("_obj_class")
|
30
30
|
Obj.compute_type(obj_class).new(obj_data)
|
31
31
|
end
|
32
32
|
|
33
|
+
# @api public
|
33
34
|
def id
|
34
35
|
read_attribute('_id')
|
35
36
|
end
|
@@ -38,6 +39,7 @@ module RailsConnector
|
|
38
39
|
|
39
40
|
# Find an Obj by it's id.
|
40
41
|
# If the paremeter is an Array containing ids, return a list of corresponding Objs.
|
42
|
+
# @api public
|
41
43
|
def self.find(id_or_list)
|
42
44
|
case id_or_list
|
43
45
|
when Array
|
@@ -51,23 +53,24 @@ module RailsConnector
|
|
51
53
|
# (notice: not yet implemented)
|
52
54
|
# Returns a list of all Objs.
|
53
55
|
# If invoked on a subclass of Obj, the result will be restricted to Obj of that subclass.
|
54
|
-
def self.all
|
56
|
+
def self.all
|
55
57
|
raise "not yet implemented!"
|
56
58
|
end
|
57
59
|
|
58
60
|
# (notice: not yet implemented)
|
59
61
|
# returns an Array of all Objs with the given obj_class.
|
60
|
-
def self.find_all_by_obj_class(obj_class)
|
62
|
+
def self.find_all_by_obj_class(obj_class)
|
61
63
|
raise "not yet implemented!"
|
62
64
|
end
|
63
65
|
|
64
66
|
# Find the Obj with the given path.
|
65
67
|
# Returns nil if no matching Obj exists.
|
68
|
+
# @api public
|
66
69
|
def self.find_by_path(path)
|
67
70
|
find_objs_by(:path, [path]).first.first
|
68
71
|
end
|
69
72
|
|
70
|
-
def self.find_many_by_paths(pathes)
|
73
|
+
def self.find_many_by_paths(pathes)
|
71
74
|
find_objs_by(:path, pathes).map(&:first)
|
72
75
|
end
|
73
76
|
|
@@ -75,22 +78,24 @@ module RailsConnector
|
|
75
78
|
# Find an Obj with the given name.
|
76
79
|
# If several Objs exist with the given name, one of them is chosen and returned.
|
77
80
|
# If no Obj with the name exits, nil is returned.
|
78
|
-
def self.find_by_name(name)
|
81
|
+
def self.find_by_name(name)
|
79
82
|
raise "not yet implemented!"
|
80
83
|
end
|
81
84
|
|
82
85
|
# (notice: not yet implemented)
|
83
86
|
# Find all Objs with the given name.
|
84
|
-
def self.find_all_by_name(name)
|
87
|
+
def self.find_all_by_name(name)
|
85
88
|
raise "not yet implemented!"
|
86
89
|
end
|
87
90
|
|
88
91
|
# Return the Obj with the given permalink or nil if no matching Obj exists.
|
92
|
+
# @api public
|
89
93
|
def self.find_by_permalink(permalink)
|
90
94
|
find_objs_by(:permalink, [permalink]).first.first
|
91
95
|
end
|
92
96
|
|
93
97
|
# Return the Obj with the given permalink or raise ResourceNotFound if no matching Obj exists.
|
98
|
+
# @api public
|
94
99
|
def self.find_by_permalink!(permalink)
|
95
100
|
find_by_permalink(permalink) or
|
96
101
|
raise ResourceNotFound, "Could not find #{self} with permalink '#{permalink}'"
|
@@ -98,17 +103,17 @@ module RailsConnector
|
|
98
103
|
|
99
104
|
# accepts the name of an "obj_by" - view and a list of keys.
|
100
105
|
# returns a list of lists of Objs: a list of Objs for each given keys.
|
101
|
-
def self.find_objs_by(view, keys)
|
106
|
+
def self.find_objs_by(view, keys)
|
102
107
|
CmsBackend.find_obj_data_by(Workspace.current.data, view, keys).map do |list|
|
103
108
|
list.map { |obj_data| Obj.instantiate(obj_data) }
|
104
109
|
end
|
105
110
|
end
|
106
111
|
|
107
|
-
def to_param
|
112
|
+
def to_param
|
108
113
|
id
|
109
114
|
end
|
110
115
|
|
111
|
-
def self.configure_for_content(mode)
|
116
|
+
def self.configure_for_content(mode)
|
112
117
|
# this method exists only for compatibility with the fiona connector.
|
113
118
|
end
|
114
119
|
|
@@ -120,21 +125,23 @@ module RailsConnector
|
|
120
125
|
# * An invalid model name
|
121
126
|
#
|
122
127
|
# Rails' STI mechanism only considers the first case.
|
123
|
-
# In any other case, RailsConnector::Obj is used, except when
|
128
|
+
# In any other case, RailsConnector::Obj is used, except when explicitly asked
|
124
129
|
# for a model in the RailsConnector namespace (RailsConnector::Permission etc.)
|
125
130
|
|
126
|
-
def self.compute_type(type_name)
|
131
|
+
def self.compute_type(type_name)
|
127
132
|
@compute_type_cache ||= {}
|
128
133
|
@compute_type_cache [type_name] ||= try_type { type_name.constantize } || self
|
129
134
|
end
|
130
135
|
|
131
136
|
# return the Obj that is the parent of this Obj.
|
132
137
|
# returns nil for the root Obj.
|
138
|
+
# @api public
|
133
139
|
def parent
|
134
140
|
root? ? nil : Obj.find_by_path(parent_path)
|
135
141
|
end
|
136
142
|
|
137
143
|
# Returns an Array of all the ancestor objects, starting at the root and ending at this object's parent.
|
144
|
+
# @api public
|
138
145
|
def ancestors
|
139
146
|
return [] if root?
|
140
147
|
ancestor_paths = parent_path.scan(/\/[^\/]+/).inject([""]) do |list, component|
|
@@ -145,6 +152,7 @@ module RailsConnector
|
|
145
152
|
end
|
146
153
|
|
147
154
|
# return a list of all child Objs.
|
155
|
+
# @api public
|
148
156
|
def children
|
149
157
|
Obj.find_objs_by(:ppath, [path]).first
|
150
158
|
end
|
@@ -152,11 +160,13 @@ module RailsConnector
|
|
152
160
|
### ATTRIBUTES #################
|
153
161
|
|
154
162
|
# returns the Obj's path as a String.
|
163
|
+
# @api public
|
155
164
|
def path
|
156
165
|
read_attribute('_path') or raise "Obj without path"
|
157
166
|
end
|
158
167
|
|
159
168
|
# returns the Obj's name, i.e. the last component of the path.
|
169
|
+
# @api public
|
160
170
|
def name
|
161
171
|
if root?
|
162
172
|
""
|
@@ -189,17 +199,20 @@ module RailsConnector
|
|
189
199
|
end
|
190
200
|
|
191
201
|
# Returns the root Obj, i.e. the Obj with the path "/"
|
202
|
+
# @api public
|
192
203
|
def self.root
|
193
204
|
Obj.find_by_path("/") or raise ResourceNotFound, "Obj.root not found: There is no Obj with path '/'."
|
194
205
|
end
|
195
206
|
|
196
207
|
# Returns the homepage object. This can be overwritten in your application's +ObjExtensions+.
|
197
208
|
# Use <tt>Obj#homepage?</tt> to check if an object is the homepage.
|
209
|
+
# @api public
|
198
210
|
def self.homepage
|
199
211
|
root
|
200
212
|
end
|
201
213
|
|
202
214
|
# returns the obj's permalink.
|
215
|
+
# @api public
|
203
216
|
def permalink
|
204
217
|
read_attribute('_permalink')
|
205
218
|
end
|
@@ -208,6 +221,7 @@ module RailsConnector
|
|
208
221
|
# By default a controller matching the Obj's obj_class will be used.
|
209
222
|
# If the controller does not exist, the CmsController will be used as a fallback.
|
210
223
|
# Overwrite this method to force a different controller to be used.
|
224
|
+
# @api public
|
211
225
|
def controller_name
|
212
226
|
obj_class
|
213
227
|
end
|
@@ -215,20 +229,24 @@ module RailsConnector
|
|
215
229
|
# This method determines the action that should be invoked when the Obj is requested.
|
216
230
|
# The default action is 'index'.
|
217
231
|
# Overwrite this method to force a different action to be used.
|
232
|
+
# @api public
|
218
233
|
def controller_action_name
|
219
234
|
"index"
|
220
235
|
end
|
221
236
|
|
222
237
|
# Returns true if the current object is the homepage object.
|
238
|
+
# @api public
|
223
239
|
def homepage?
|
224
240
|
self == self.class.homepage
|
225
241
|
end
|
226
242
|
|
227
243
|
# Returns the title of the content or the name.
|
244
|
+
# @api public
|
228
245
|
def display_title
|
229
246
|
self.title || name
|
230
247
|
end
|
231
248
|
|
249
|
+
# @api public
|
232
250
|
def title
|
233
251
|
read_attribute('title')
|
234
252
|
end
|
@@ -264,6 +282,7 @@ module RailsConnector
|
|
264
282
|
end
|
265
283
|
|
266
284
|
# Returns true if this object is active (time_when is in object's time interval)
|
285
|
+
# @api public
|
267
286
|
def active?(time_when = nil)
|
268
287
|
return false unless valid_from
|
269
288
|
time_then = time_when || Obj.preview_time
|
@@ -271,7 +290,7 @@ module RailsConnector
|
|
271
290
|
end
|
272
291
|
|
273
292
|
# compatibility with legacy apps.
|
274
|
-
def suppress_export
|
293
|
+
def suppress_export
|
275
294
|
suppressed? ? 1 : 0
|
276
295
|
end
|
277
296
|
|
@@ -307,12 +326,14 @@ module RailsConnector
|
|
307
326
|
end
|
308
327
|
|
309
328
|
# Returns true if this object is the root object.
|
329
|
+
# @api public
|
310
330
|
def root?
|
311
331
|
path == "/"
|
312
332
|
end
|
313
333
|
|
314
334
|
# Returns a list of exportable? children excluding the binary? ones unless :all is specfied.
|
315
335
|
# This is mainly used for navigations.
|
336
|
+
# @api public
|
316
337
|
def toclist(*args)
|
317
338
|
return [] unless publication?
|
318
339
|
time = args.detect {|value| value.kind_of? Time}
|
@@ -322,6 +343,7 @@ module RailsConnector
|
|
322
343
|
end
|
323
344
|
|
324
345
|
# Returns the sorted +toclist+, respecting sort order and type of this Obj.
|
346
|
+
# @api public
|
325
347
|
def sorted_toclist(*args)
|
326
348
|
list = self.toclist(*args)
|
327
349
|
return [] if list.blank?
|
@@ -353,36 +375,37 @@ module RailsConnector
|
|
353
375
|
return self.sort_order == "descending" ? sorted_list.reverse : sorted_list
|
354
376
|
end
|
355
377
|
|
356
|
-
def sort_order
|
378
|
+
def sort_order
|
357
379
|
read_attribute('_sort_order') == 1 ? "descending" : "ascending"
|
358
380
|
end
|
359
381
|
|
360
|
-
def sort_type1
|
382
|
+
def sort_type1
|
361
383
|
converted_sort_type('_sort_type1')
|
362
384
|
end
|
363
385
|
|
364
|
-
def sort_type2
|
386
|
+
def sort_type2
|
365
387
|
converted_sort_type('_sort_type2')
|
366
388
|
end
|
367
389
|
|
368
|
-
def sort_type3
|
390
|
+
def sort_type3
|
369
391
|
converted_sort_type('_sort_type3')
|
370
392
|
end
|
371
393
|
|
372
|
-
def sort_key1
|
394
|
+
def sort_key1
|
373
395
|
read_attribute('_sort_key1')
|
374
396
|
end
|
375
397
|
|
376
|
-
def sort_key2
|
398
|
+
def sort_key2
|
377
399
|
read_attribute('_sort_key2')
|
378
400
|
end
|
379
401
|
|
380
|
-
def sort_key3
|
402
|
+
def sort_key3
|
381
403
|
read_attribute('_sort_key3')
|
382
404
|
end
|
383
405
|
|
384
406
|
# Returns the Object with the given name next in the hierarchy
|
385
407
|
# returns nil if no object with the given name was found.
|
408
|
+
# @api public
|
386
409
|
def find_nearest(name)
|
387
410
|
obj = self.class.find_by_path(root? ? "/#{name}" : "#{path}/#{name}")
|
388
411
|
return obj if obj and obj.active?
|
@@ -416,6 +439,7 @@ module RailsConnector
|
|
416
439
|
|
417
440
|
# Returns the value of an internal or external attribute specified by its name.
|
418
441
|
# Passing an invalid key will not raise an error, but return nil.
|
442
|
+
# @api public
|
419
443
|
def [](key)
|
420
444
|
key = key.to_s
|
421
445
|
if OLD_INTERNAL_KEYS.include?(key)
|
@@ -433,6 +457,7 @@ module RailsConnector
|
|
433
457
|
# Reloads the attributes of this object from the database.
|
434
458
|
# Notice that the ruby class of this Obj instance will NOT change,
|
435
459
|
# even if the obj_class in the database has changed.
|
460
|
+
# @api public
|
436
461
|
def reload
|
437
462
|
obj_data = CmsBackend.find_obj_data_by(Workspace.current.data, :id, [id.to_s]).first.first
|
438
463
|
update_data(obj_data)
|
@@ -442,18 +467,22 @@ module RailsConnector
|
|
442
467
|
read_attribute('_text_links')
|
443
468
|
end
|
444
469
|
|
470
|
+
# @api public
|
445
471
|
def obj_class
|
446
472
|
read_attribute('_obj_class')
|
447
473
|
end
|
448
474
|
|
475
|
+
# @api public
|
449
476
|
def last_changed
|
450
477
|
read_attribute('_last_changed')
|
451
478
|
end
|
452
479
|
|
480
|
+
# @api public
|
453
481
|
def valid_from
|
454
482
|
read_attribute('_valid_from')
|
455
483
|
end
|
456
484
|
|
485
|
+
# @api public
|
457
486
|
def valid_until
|
458
487
|
read_attribute('_valid_until')
|
459
488
|
end
|
@@ -463,6 +492,7 @@ module RailsConnector
|
|
463
492
|
# Override this method in subclasses to define a different content_type.
|
464
493
|
# Note that only Objs with content_type "text/html"
|
465
494
|
# will be rendered with layout and templates by the DefaultCmsController.
|
495
|
+
# @api public
|
466
496
|
def content_type
|
467
497
|
if binary?
|
468
498
|
body_content_type
|
@@ -474,15 +504,68 @@ module RailsConnector
|
|
474
504
|
|
475
505
|
# returns the extension (the part after the last dot) from the Obj's name.
|
476
506
|
# returns an empty string if no extension is present in the Obj's name.
|
507
|
+
# @api public
|
477
508
|
def file_extension
|
478
509
|
File.extname(name)[1..-1] || ""
|
479
510
|
end
|
480
511
|
|
481
|
-
|
512
|
+
# Returns the body (main content) of the Obj for non-binary Objs.
|
513
|
+
# Returns nil for binary Objs.
|
514
|
+
# @api public
|
515
|
+
def body
|
516
|
+
if binary?
|
517
|
+
nil
|
518
|
+
else
|
519
|
+
StringTagging.tag_as_html(read_attribute('body'), self)
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
523
|
+
# for binary Objs body_length equals the file size
|
524
|
+
# for non-binary Objs body_length equals the number of characters in the body (main content)
|
525
|
+
# @api public
|
526
|
+
def body_length
|
527
|
+
if binary?
|
528
|
+
blob = find_blob
|
529
|
+
blob ? blob.length : 0
|
530
|
+
else
|
531
|
+
(body || "").length
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
535
|
+
# returns an URL to retrieve the Obj's body for binary Objs.
|
536
|
+
# returns nil for non-binary Objs.
|
537
|
+
# @api public
|
538
|
+
def body_data_url
|
539
|
+
if binary?
|
540
|
+
blob = find_blob
|
541
|
+
blob.url if blob
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
def body_data_path
|
546
|
+
# not needed/supported when using cloud connector.
|
547
|
+
nil
|
548
|
+
end
|
549
|
+
|
550
|
+
# returns the content type of the Obj's body for binary Objs.
|
551
|
+
# returns nil for non-binary Objs.
|
552
|
+
# @api public
|
553
|
+
def body_content_type
|
554
|
+
if binary?
|
555
|
+
blob = find_blob
|
556
|
+
if blob
|
557
|
+
blob.content_type
|
558
|
+
else
|
559
|
+
"application/octet-stream"
|
560
|
+
end
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
def to_liquid
|
482
565
|
LiquidSupport::ObjDrop.new(self)
|
483
566
|
end
|
484
567
|
|
485
|
-
def respond_to?(method_id, include_private=false)
|
568
|
+
def respond_to?(method_id, include_private=false)
|
486
569
|
if has_attribute?(method_id)
|
487
570
|
true
|
488
571
|
else
|
@@ -490,11 +573,11 @@ module RailsConnector
|
|
490
573
|
end
|
491
574
|
end
|
492
575
|
|
493
|
-
def self.preview_time=(t)
|
576
|
+
def self.preview_time=(t)
|
494
577
|
Thread.current[:preview_time] = t
|
495
578
|
end
|
496
579
|
|
497
|
-
def self.preview_time
|
580
|
+
def self.preview_time
|
498
581
|
Thread.current[:preview_time] || Time.now
|
499
582
|
end
|
500
583
|
|
@@ -547,7 +630,12 @@ module RailsConnector
|
|
547
630
|
DateAttribute.parse(value) unless value.nil?
|
548
631
|
end
|
549
632
|
|
550
|
-
def
|
633
|
+
def find_blob
|
634
|
+
blob_spec = read_attribute('blob')
|
635
|
+
Blob.find(blob_spec["id"]) if blob_spec
|
636
|
+
end
|
637
|
+
|
638
|
+
def method_missing(method_name, *args)
|
551
639
|
if has_attribute?(method_name)
|
552
640
|
read_attribute(method_name.to_s)
|
553
641
|
else
|
@@ -1,4 +1,3 @@
|
|
1
|
-
#:enddoc:
|
2
1
|
module RailsConnector
|
3
2
|
|
4
3
|
class ObjData
|
@@ -24,14 +23,12 @@ module RailsConnector
|
|
24
23
|
case key
|
25
24
|
when "_text_links"
|
26
25
|
"linklist"
|
27
|
-
when "_valid_from"
|
26
|
+
when "_valid_from", "_valid_until", "_last_changed"
|
28
27
|
"date"
|
29
|
-
when "
|
30
|
-
"date"
|
31
|
-
when "_last_changed"
|
32
|
-
"date"
|
33
|
-
when "title"
|
28
|
+
when "title", "body"
|
34
29
|
"html"
|
30
|
+
when "blob"
|
31
|
+
"binary"
|
35
32
|
else
|
36
33
|
nil
|
37
34
|
end
|