cmis_server 1.0.3

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.
Files changed (133) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +51 -0
  5. data/app/assets/javascripts/cmis_server/application.js +13 -0
  6. data/app/assets/stylesheets/cmis_server/application.css +15 -0
  7. data/app/controllers/cmis_server/application_controller.rb +19 -0
  8. data/app/controllers/cmis_server/atom_pub/base_controller.rb +23 -0
  9. data/app/controllers/cmis_server/atom_pub/bulk_controller.rb +302 -0
  10. data/app/controllers/cmis_server/atom_pub/content_controller.rb +178 -0
  11. data/app/controllers/cmis_server/atom_pub/entries_controller.rb +41 -0
  12. data/app/controllers/cmis_server/atom_pub/folder_collection_controller.rb +70 -0
  13. data/app/controllers/cmis_server/atom_pub/query_controller.rb +138 -0
  14. data/app/controllers/cmis_server/atom_pub/repository_controller.rb +75 -0
  15. data/app/controllers/cmis_server/atom_pub/secondary_types_controller.rb +149 -0
  16. data/app/controllers/cmis_server/atom_pub/service_documents_controller.rb +34 -0
  17. data/app/controllers/cmis_server/atom_pub/types_controller.rb +229 -0
  18. data/app/controllers/cmis_server/atom_pub/uri_templates_controller.rb +58 -0
  19. data/app/controllers/concerns/cmis_server/atom_pub/repository_scopable.rb +18 -0
  20. data/app/helpers/cmis_server/application_helper.rb +31 -0
  21. data/app/models/cmis_server/application_record.rb +5 -0
  22. data/app/services/cmis_server/bulk_update_service.rb +69 -0
  23. data/app/services/cmis_server/content_stream_service.rb +75 -0
  24. data/app/services/cmis_server/discovery_service.rb +31 -0
  25. data/app/services/cmis_server/navigation_service.rb +43 -0
  26. data/app/services/cmis_server/object_service.rb +176 -0
  27. data/app/services/cmis_server/repository_service.rb +40 -0
  28. data/app/services/cmis_server/secondary_type_service.rb +120 -0
  29. data/app/services/cmis_server/type_management_service.rb +117 -0
  30. data/app/views/cmis_server/atom_pub/bulk_update_feed.atom.builder +47 -0
  31. data/app/views/cmis_server/atom_pub/entries/_cmis_document_links.atom_entry.builder +0 -0
  32. data/app/views/cmis_server/atom_pub/entries/_cmis_folder_links.atom_entry.builder +3 -0
  33. data/app/views/cmis_server/atom_pub/entries/_object_entry.atom_entry.builder +64 -0
  34. data/app/views/cmis_server/atom_pub/entries/_property.atom_entry.builder +8 -0
  35. data/app/views/cmis_server/atom_pub/entries/object_entry.atom_entry.builder +1 -0
  36. data/app/views/cmis_server/atom_pub/entries/type_entry.atom_entry.builder +59 -0
  37. data/app/views/cmis_server/atom_pub/feeds/_feed_entry.atom_feed.builder +1 -0
  38. data/app/views/cmis_server/atom_pub/feeds/feed.atom_feed.builder +30 -0
  39. data/app/views/cmis_server/atom_pub/service_documents/_uri_template.atom_service.builder +5 -0
  40. data/app/views/cmis_server/atom_pub/service_documents/_workspace.atom_service.builder +89 -0
  41. data/app/views/cmis_server/atom_pub/service_documents/service_document.atom_service.builder +1 -0
  42. data/app/views/cmis_server/atom_pub/shared/_collection.xml.builder +7 -0
  43. data/app/views/cmis_server/atom_pub/shared/atom_entry_layout.atom_entry.builder +0 -0
  44. data/app/views/cmis_server/atom_pub/type_entry.atom.builder +69 -0
  45. data/app/views/cmis_server/atom_pub/types_feed.atom.builder +91 -0
  46. data/app/views/layouts/cmis_server/application.atom_entry.builder +2 -0
  47. data/app/views/layouts/cmis_server/application.atom_feed.builder +3 -0
  48. data/app/views/layouts/cmis_server/application.atom_service.builder +10 -0
  49. data/app/views/layouts/cmis_server/application.html.erb +14 -0
  50. data/config/routes.rb +49 -0
  51. data/lib/cmis_server/atom_pub/entry_parser.rb +72 -0
  52. data/lib/cmis_server/base_objects/base_type.rb +128 -0
  53. data/lib/cmis_server/base_objects/document.rb +68 -0
  54. data/lib/cmis_server/base_objects/folder.rb +104 -0
  55. data/lib/cmis_server/base_objects/item.rb +25 -0
  56. data/lib/cmis_server/base_types.rb +123 -0
  57. data/lib/cmis_server/cmis_object.rb +190 -0
  58. data/lib/cmis_server/configuration.rb +43 -0
  59. data/lib/cmis_server/constants.rb +8 -0
  60. data/lib/cmis_server/content_stream.rb +52 -0
  61. data/lib/cmis_server/context.rb +11 -0
  62. data/lib/cmis_server/document_object.rb +12 -0
  63. data/lib/cmis_server/document_type.rb +67 -0
  64. data/lib/cmis_server/engine.rb +60 -0
  65. data/lib/cmis_server/exceptions.rb +185 -0
  66. data/lib/cmis_server/folder_object.rb +18 -0
  67. data/lib/cmis_server/folder_type.rb +34 -0
  68. data/lib/cmis_server/id.rb +18 -0
  69. data/lib/cmis_server/item_adapter.rb +26 -0
  70. data/lib/cmis_server/item_object.rb +15 -0
  71. data/lib/cmis_server/item_type.rb +7 -0
  72. data/lib/cmis_server/object_adapter.rb +79 -0
  73. data/lib/cmis_server/property.rb +29 -0
  74. data/lib/cmis_server/property_definition.rb +118 -0
  75. data/lib/cmis_server/query/parser.output +2250 -0
  76. data/lib/cmis_server/query/parser.racc +222 -0
  77. data/lib/cmis_server/query/parser.racc.rb +1039 -0
  78. data/lib/cmis_server/query/parser.rex +114 -0
  79. data/lib/cmis_server/query/parser.rex.rb +238 -0
  80. data/lib/cmis_server/query/statement.rb +395 -0
  81. data/lib/cmis_server/query.rb +2 -0
  82. data/lib/cmis_server/renderable_collection.rb +45 -0
  83. data/lib/cmis_server/renderable_object.rb +49 -0
  84. data/lib/cmis_server/repository.rb +91 -0
  85. data/lib/cmis_server/secondary_type.rb +11 -0
  86. data/lib/cmis_server/type.rb +62 -0
  87. data/lib/cmis_server/type_registry.rb +115 -0
  88. data/lib/cmis_server/version.rb +4 -0
  89. data/lib/cmis_server.rb +22 -0
  90. data/lib/tasks/cmis_server_tasks.rake +4 -0
  91. data/test/cmis_server_test.rb +7 -0
  92. data/test/dummy/README.rdoc +28 -0
  93. data/test/dummy/Rakefile +6 -0
  94. data/test/dummy/app/assets/javascripts/application.js +13 -0
  95. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  96. data/test/dummy/app/controllers/application_controller.rb +5 -0
  97. data/test/dummy/app/helpers/application_helper.rb +2 -0
  98. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  99. data/test/dummy/bin/bundle +3 -0
  100. data/test/dummy/bin/rails +4 -0
  101. data/test/dummy/bin/rake +4 -0
  102. data/test/dummy/bin/setup +29 -0
  103. data/test/dummy/config/application.rb +26 -0
  104. data/test/dummy/config/boot.rb +5 -0
  105. data/test/dummy/config/database.yml +25 -0
  106. data/test/dummy/config/environment.rb +5 -0
  107. data/test/dummy/config/environments/development.rb +41 -0
  108. data/test/dummy/config/environments/production.rb +79 -0
  109. data/test/dummy/config/environments/test.rb +42 -0
  110. data/test/dummy/config/initializers/assets.rb +11 -0
  111. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  112. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  113. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  114. data/test/dummy/config/initializers/inflections.rb +16 -0
  115. data/test/dummy/config/initializers/mime_types.rb +4 -0
  116. data/test/dummy/config/initializers/session_store.rb +3 -0
  117. data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
  118. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  119. data/test/dummy/config/locales/en.yml +23 -0
  120. data/test/dummy/config/routes.rb +4 -0
  121. data/test/dummy/config/secrets.yml +22 -0
  122. data/test/dummy/config.ru +4 -0
  123. data/test/dummy/public/404.html +67 -0
  124. data/test/dummy/public/422.html +67 -0
  125. data/test/dummy/public/500.html +66 -0
  126. data/test/dummy/public/favicon.ico +0 -0
  127. data/test/integration/navigation_test.rb +8 -0
  128. data/test/services/bulk_update_service_test.rb +121 -0
  129. data/test/services/content_stream_service_test.rb +176 -0
  130. data/test/services/secondary_type_service_test.rb +174 -0
  131. data/test/services/type_management_service_test.rb +146 -0
  132. data/test/test_helper.rb +16 -0
  133. metadata +326 -0
@@ -0,0 +1,395 @@
1
+ module CmisServer
2
+
3
+ module Query
4
+
5
+ module Statement
6
+
7
+ class Node
8
+
9
+ # def accept(visitor)
10
+ # klass = self.class.ancestors.find do |ancestor|
11
+ # visitor.respond_to?("visit_#{demodulize(ancestor.name)}")
12
+ # end
13
+ #
14
+ # if klass
15
+ # visitor.__send__("visit_#{demodulize(klass.name)}", self)
16
+ # else
17
+ # raise "No visitor for #{self.class.name}"
18
+ # end
19
+ # end
20
+ #
21
+ # def to_sql
22
+ # SQLVisitor.new.visit(self)
23
+ # end
24
+
25
+ private
26
+
27
+ def demodulize(str)
28
+ str.split('::')[-1]
29
+ end
30
+
31
+ end
32
+
33
+ class CmisQuery < Node
34
+ def initialize(query_expression, order_by)
35
+ @query_expression = query_expression
36
+ @order_by = order_by
37
+ end
38
+
39
+ attr_reader :query_expression
40
+ attr_reader :order_by
41
+ end
42
+
43
+ class Select < Node
44
+ def initialize(select_list,from,where)
45
+ @select_list=select_list
46
+ @from=from
47
+ @where=where
48
+ end
49
+ attr_reader :select_list, :from, :where
50
+ end
51
+
52
+ class All < Node
53
+
54
+ def initialize(table=nil)
55
+ @column=table
56
+ end
57
+
58
+ attr_reader :table
59
+ end
60
+
61
+ class SelectList < Node
62
+
63
+ def initialize(columns)
64
+ @columns = Array(columns)
65
+ end
66
+
67
+ attr_reader :columns
68
+
69
+ end
70
+
71
+ class As < Node
72
+
73
+ def initialize(value, column)
74
+ @value = value
75
+ @column = column
76
+ end
77
+
78
+ attr_reader :value
79
+ attr_reader :column
80
+
81
+ end
82
+
83
+ class QualifiedColumn < Node
84
+
85
+ def initialize(column, table, secondary_table=nil)
86
+ @table = table
87
+ @column = column
88
+ end
89
+
90
+ attr_reader :table
91
+ attr_reader :column
92
+
93
+ end
94
+
95
+ class FromClause < Node
96
+
97
+ def initialize(tables)
98
+ @tables = Array(tables)
99
+ end
100
+
101
+ attr_reader :tables
102
+
103
+ end
104
+
105
+ class WhereClause < Node
106
+
107
+ def initialize(search_condition)
108
+ @search_condition = search_condition
109
+ end
110
+
111
+ attr_reader :search_condition
112
+
113
+ def to_h
114
+ search_condition.to_h
115
+ end
116
+
117
+ end
118
+
119
+ class OrderBy < Node
120
+
121
+ def initialize(sort_specification)
122
+ @sort_specification = Array(sort_specification)
123
+ end
124
+
125
+ attr_reader :sort_specification
126
+
127
+ end
128
+
129
+ class JoinedTable < Node
130
+
131
+ def initialize(left, right)
132
+ @left = left
133
+ @right = right
134
+ end
135
+
136
+ attr_reader :left
137
+ attr_reader :right
138
+
139
+ end
140
+
141
+ class QualifiedJoin < JoinedTable
142
+
143
+ def initialize(left, right, search_condition)
144
+ super(left, right)
145
+ @search_condition = search_condition
146
+ end
147
+
148
+ attr_reader :search_condition
149
+
150
+ end
151
+
152
+ class InnerJoin < QualifiedJoin
153
+ end
154
+
155
+ class LeftJoin < QualifiedJoin
156
+ end
157
+
158
+ class LeftOuterJoin < QualifiedJoin
159
+ end
160
+
161
+ class ComparisonPredicate < Node
162
+
163
+ def initialize(left, right)
164
+ @left = left
165
+ @right = right
166
+ end
167
+
168
+ attr_reader :left
169
+ attr_reader :right
170
+
171
+ end
172
+
173
+ class Is < ComparisonPredicate
174
+ end
175
+
176
+ class Like < ComparisonPredicate
177
+ end
178
+
179
+ class In < ComparisonPredicate
180
+ end
181
+
182
+ class QuantifiedIn < ComparisonPredicate
183
+ end
184
+
185
+ class InValueList < Node
186
+
187
+ def initialize(values)
188
+ @values = values
189
+ end
190
+
191
+ attr_reader :values
192
+
193
+ end
194
+
195
+ class FolderPredicate
196
+
197
+ def initialize(folder_id, qualifier=nil)
198
+ @folder_id = folder_id
199
+ @qualifier = qualifier
200
+ end
201
+
202
+ attr_reader :folder_id
203
+ attr_reader :qualifier
204
+
205
+ end
206
+
207
+ class InFolder < FolderPredicate
208
+ end
209
+
210
+ class InTree < FolderPredicate
211
+ end
212
+
213
+ class InColumnList < Node
214
+
215
+ def initialize(columns)
216
+ @columns = columns
217
+ end
218
+
219
+ attr_reader :columns
220
+
221
+ end
222
+
223
+ class Between < Node
224
+
225
+ def initialize(left, min, max)
226
+ @left = left
227
+ @min = min
228
+ @max = max
229
+ end
230
+
231
+ attr_reader :left
232
+ attr_reader :min
233
+ attr_reader :max
234
+
235
+ end
236
+
237
+ class SearchCondition < Node
238
+
239
+ def initialize(left, right)
240
+ @left = left
241
+ @right = right
242
+ end
243
+
244
+ attr_reader :left
245
+ attr_reader :right
246
+
247
+ end
248
+
249
+ class Or < SearchCondition
250
+ end
251
+
252
+ class And < SearchCondition
253
+
254
+ def to_h
255
+ self.left.to_h.merge(self.right.to_h)
256
+ end
257
+
258
+ end
259
+
260
+
261
+ class GreaterOrEquals < ComparisonPredicate
262
+ end
263
+
264
+ class LessOrEquals < ComparisonPredicate
265
+ end
266
+
267
+ class Greater < ComparisonPredicate
268
+ end
269
+
270
+ class Less < ComparisonPredicate
271
+ end
272
+
273
+ class Equals < ComparisonPredicate
274
+ def to_h
275
+ {self.left.to_cmis_where_key => self.right.value}
276
+ end
277
+
278
+ end
279
+
280
+ class QuantifiedComparison < ComparisonPredicate
281
+ end
282
+
283
+ class Identifier < Node
284
+
285
+ def initialize(name)
286
+ @name = name
287
+ end
288
+
289
+ def to_cmis_where_key
290
+ CmisServer::Id.new(self.name).to_method_name.to_sym
291
+ end
292
+
293
+ attr_reader :name
294
+ alias_method :value, :name
295
+
296
+ end
297
+
298
+ class Table < Identifier
299
+ end
300
+
301
+ class Column < Identifier
302
+ end
303
+
304
+ class FolderId < Identifier
305
+ end
306
+
307
+
308
+ class Score < Node
309
+ end
310
+
311
+ class True < Node
312
+ end
313
+
314
+ class False < Node
315
+ end
316
+
317
+ class Null < Node
318
+ end
319
+
320
+ class Literal < Node
321
+
322
+ def initialize(value)
323
+ @value = value
324
+ end
325
+
326
+ attr_reader :value
327
+
328
+ end
329
+
330
+ class DateTime < Literal
331
+ end
332
+
333
+ class Date < Literal
334
+ end
335
+
336
+ class String < Literal
337
+ end
338
+
339
+ class ApproximateFloat < Node
340
+
341
+ def initialize(mantissa, exponent)
342
+ @mantissa = mantissa
343
+ @exponent = exponent
344
+ end
345
+
346
+ attr_reader :mantissa
347
+ attr_reader :exponent
348
+
349
+ end
350
+
351
+ class Float < Literal
352
+ end
353
+
354
+ class Integer < Literal
355
+ end
356
+
357
+ class Unary < Node
358
+
359
+ def initialize(value)
360
+ @value = value
361
+ end
362
+
363
+ attr_reader :value
364
+
365
+ end
366
+
367
+ class Not < Unary
368
+ end
369
+
370
+ class UnaryPlus < Unary
371
+ end
372
+
373
+ class UnaryMinus < Unary
374
+ end
375
+
376
+ class OrderSpecification < Node
377
+
378
+ def initialize(column)
379
+ @column = column
380
+ end
381
+
382
+ attr_reader :column
383
+
384
+ end
385
+
386
+ class Ascending < OrderSpecification
387
+ end
388
+
389
+ class Descending < OrderSpecification
390
+ end
391
+
392
+ end
393
+ end
394
+ end
395
+
@@ -0,0 +1,2 @@
1
+ require 'cmis_server/query/statement'
2
+ require 'cmis_server/query/parser.racc'
@@ -0,0 +1,45 @@
1
+ require 'securerandom'
2
+
3
+ module CmisServer
4
+ class RenderableCollection
5
+
6
+ attr_reader :base_object
7
+ attr_reader :items
8
+
9
+ def initialize(base_object:, items:, atompub_properties: nil)
10
+ @base_object=base_object
11
+ @items =items
12
+ if atompub_properties
13
+ @atompub_properties={
14
+ id: atompub_properties[:id]||SecureRandom.uuid,
15
+ title: atompub_properties[:title]||'Collection',
16
+ edited: atompub_properties[:edited]||DateTime.now,
17
+ updated: atompub_properties[:updated]||DateTime.now,
18
+ author: atompub_properties[:author]||'Unknown',
19
+ }
20
+ end
21
+ end
22
+
23
+ def filter_properties!(filter)
24
+ @properties=@properties.slice(*filter)
25
+ end
26
+
27
+ def atompub_properties
28
+ return @atompub_properties if @atompub_properties
29
+ if @base_object
30
+ {
31
+ id: @base_object.cmis_object_id,
32
+ title: @base_object.cmis_name,
33
+ edited: DateTime.now,
34
+ updated: DateTime.now,
35
+ author: 'unknown',
36
+ }
37
+ end
38
+ end
39
+
40
+ def total_items_count
41
+ nil
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,49 @@
1
+ module CmisServer
2
+ class RenderableObject
3
+
4
+ attr_reader :base_object
5
+ attr_reader :properties
6
+
7
+ def initialize(base_object:, properties: nil, include_relationships: :none, include_policies: false, rendition_filter: "cmis:none", include_acl: false, include_allowable_actions: false)
8
+ @base_object=base_object
9
+ @properties =properties||@base_object.properties.values
10
+ end
11
+
12
+ def filter_properties!(filter)
13
+ @properties.slice!(*filter)
14
+ end
15
+
16
+ def atompub_entry_properties
17
+ {
18
+ id: @base_object.cmis_object_id,
19
+ title: @base_object.cmis_name,
20
+ summary: @base_object.cmis_description,
21
+ edited: @base_object.cmis_creation_date,
22
+ updated: @base_object.cmis_last_modification_date,
23
+ author: @base_object.cmis_created_by,
24
+ content: @base_object.try(:content_stream)
25
+ }
26
+ end
27
+
28
+ def policies
29
+ nil
30
+ end
31
+
32
+ def relastionships
33
+ nil
34
+ end
35
+
36
+ def renditions
37
+ nil
38
+ end
39
+
40
+ def acl
41
+ nil
42
+ end
43
+
44
+ def allowable_actions
45
+ nil
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,91 @@
1
+ module CmisServer
2
+ class Repository
3
+
4
+ class Capabitilies
5
+
6
+ attr_reader :acl, :all_versions_searchable, :changes, :content_stream_updatability, :get_descendants, :get_folder_tree, :multifiling, :pwc_searchable, :pwc_updatable, :query, :renditions, :unfiling, :version_specific_filing, :join, :secondary_types
7
+
8
+ # CMIS 1.1 capabilities
9
+ attr_reader :create_type, :bulk_update, :append_content_stream, :update_type, :delete_type
10
+
11
+ def initialize(attrs={})
12
+ @acl = attrs.fetch(:acl, :none)
13
+ @all_versions_searchable = attrs.fetch(:all_versions_searchable, :false)
14
+ @changes = attrs.fetch(:changes, :none)
15
+ @content_stream_updatability= attrs.fetch(:content_stream_updatability, :none)
16
+ @get_descendants = attrs.fetch(:get_descendants, :false)
17
+ @get_folder_tree = attrs.fetch(:get_folder_tree, :false)
18
+ @multifiling = attrs.fetch(:multifiling, :false)
19
+ @pwc_searchable = attrs.fetch(:pwc_searchable, :false)
20
+ @pwc_updatable = attrs.fetch(:pwc_updatable, :false)
21
+ @query = attrs.fetch(:query, :metadataonly)
22
+ @renditions = attrs.fetch(:renditions, :none)
23
+ @unfiling = attrs.fetch(:unfiling, :true)
24
+ @version_specific_filing = attrs.fetch(:version_specific_filing, :false)
25
+ @join = attrs.fetch(:join, :none)
26
+ @secondary_types = attrs.fetch(:secondary_types, :true)
27
+
28
+ # CMIS 1.1 capabilities
29
+ @create_type = attrs.fetch(:create_type, false)
30
+ @bulk_update = attrs.fetch(:bulk_update, false)
31
+ @append_content_stream = attrs.fetch(:append_content_stream, false)
32
+ @update_type = attrs.fetch(:update_type, false)
33
+ @delete_type = attrs.fetch(:delete_type, false)
34
+ end
35
+
36
+ def [](attr)
37
+ self.send(attr)
38
+ end
39
+ end
40
+
41
+
42
+ attr_accessor :id, :name, :description, :vendor_name, :product_name, :product_version, :root_folder_id, :capabilities, :latest_change_log_token, :cmis_version_supported, :capabilities
43
+
44
+ alias_method :repository_id, :id
45
+ alias_method :repository_name, :name
46
+ alias_method :repository_description, :description
47
+
48
+
49
+ def initialize(attrs={})
50
+ attrs.to_h.each do |property, value|
51
+ self.send(property.to_s+"=", value)
52
+ end
53
+ end
54
+
55
+
56
+ def self.find(id)
57
+ #Todo this is a mockup
58
+ repo=self.new(id: id,
59
+ name: "My Repo",
60
+ description: "This is my repo !",
61
+ vendor_name: "AGSI",
62
+ product_name: "Plugandwork",
63
+ product_version: "CmisServer Gem v#{CmisServer::VERSION}",
64
+ root_folder_id: CmisServer::FolderObject.root_folder.cmis_object_id,
65
+ latest_change_log_token: 0,
66
+ cmis_version_supported: CmisServer::CMIS_VERSION_SUPPORTED,
67
+ capabilities: Capabitilies.new(
68
+ # Activer les capacités CMIS 1.1 par défaut
69
+ create_type: true,
70
+ bulk_update: true,
71
+ append_content_stream: true,
72
+ update_type: true,
73
+ delete_type: true
74
+ )
75
+ )
76
+ repo
77
+ end
78
+
79
+ def infos
80
+ [:repository_id, :repository_name, :repository_description, :vendor_name, :product_name, :product_version, :root_folder_id, :cmis_version_supported].map { |p| [p.to_s.camelize(:lower), self.send(p)] }.to_h
81
+ end
82
+
83
+ # Méthode pour récupérer un objet CMIS par son ID
84
+ def get_object(object_id)
85
+ # À implémenter selon votre système de stockage
86
+ # Cette méthode devrait retourner l'objet CMIS correspondant à l'ID ou nil
87
+ nil
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,11 @@
1
+ module CmisServer
2
+ class SecondaryType < Type
3
+ def base_id
4
+ 'cmis:secondary'
5
+ end
6
+
7
+ def create
8
+ raise "Secondary types cannot be created directly"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,62 @@
1
+ module CmisServer
2
+ class Type
3
+
4
+ attr_accessor :id,
5
+ :local_name,
6
+ :local_namespace,
7
+ :query_name,
8
+ :display_name,
9
+ :base_id,
10
+ :parent_type,
11
+ :description,
12
+ :creatable,
13
+ :fileable,
14
+ :queryable,
15
+ :controllable_policy,
16
+ :controllable_acl,
17
+ :fulltext_indexed,
18
+ :included_in_supertype_query,
19
+ :self_property_definitions
20
+
21
+
22
+ def initialize(attrs={})
23
+ @id = CmisServer::Id.new(attrs.fetch(:id).to_s)
24
+ @parent_type = attrs.fetch(:parent_type)
25
+ @local_name = attrs.fetch(:local_name, id)
26
+ @local_namespace = attrs.fetch(:local_namespace, 'local')
27
+ @query_name = attrs.fetch(:query_name, id)
28
+ @display_name = attrs.fetch(:display_name, id)
29
+ @description = attrs.fetch(:description, 'No description provided')
30
+ @creatable = attrs.fetch(:creatable, false)
31
+ @fileable = attrs.fetch(:fileable, false)
32
+ @queryable = attrs.fetch(:queryable, false)
33
+ @controllable_policy = attrs.fetch(:controllable_policy, false)
34
+ @controllable_acl = attrs.fetch(:controllable_acl, false)
35
+ @fulltext_indexed = attrs.fetch(:fulltext_indexed, false)
36
+ @included_in_supertype_query = attrs.fetch(:included_in_supertype_query, false)
37
+
38
+ @self_property_definitions = attrs.fetch(:property_definitions, [])
39
+ end
40
+
41
+ def parent_id
42
+ self.parent_type&.id
43
+ end
44
+
45
+ def base_type
46
+ self.parent_type ? self.parent_type.base_type : self
47
+ end
48
+
49
+ def base_id
50
+ self.parent_type ? self.parent_type.base_id : self.id
51
+ end
52
+
53
+ def property_definitions
54
+ @self_property_definitions.to_a+parent_property_definitions
55
+ end
56
+
57
+ def parent_property_definitions
58
+ #Decorate parent property_definitions as inherited
59
+ self.parent_type&.property_definitions.to_a.map { |pd| InheritedDecorator.new(pd) }
60
+ end
61
+ end
62
+ end