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,222 @@
1
+ class CmisServer::Query::Parser
2
+
3
+ rule
4
+ # dynamic sql
5
+
6
+ query_statement
7
+ : simple_table order_by_clause {result = CmisServer::Query::Statement::CmisQuery.new(val[0], val[1])}
8
+
9
+ simple_table
10
+ : SELECT select_list from_clause where_clause {result = CmisServer::Query::Statement::Select.new(val[1],val[2],val[3])}
11
+
12
+ select_list
13
+ : asterisk { result = CmisServer::Query::Statement::All.new }
14
+ | select_sublist { result = CmisServer::Query::Statement::SelectList.new(val[0]) }
15
+
16
+ select_sublist
17
+ : derived_column comma select_sublist { result = Array(val[0]) + Array(val[2]) }
18
+ | derived_column
19
+
20
+ derived_column
21
+ : qualifier period asterisk { result = CmisServer::Query::Statement::All.new(val[0]) }
22
+ | value_expression AS column_name { result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
23
+ | value_expression column_name { result = CmisServer::Query::Statement::As.new(val[0], val[1]) }
24
+ | value_expression
25
+
26
+ value_expression
27
+ : numeric_value_function
28
+ | column_reference
29
+
30
+ numeric_value_function
31
+ : SCORE left_paren right_paren { result = CmisServer::Query::Statement::Score.new }
32
+
33
+ column_reference
34
+ : qualifier period column_name { result = CmisServer::Query::Statement::QualifiedColumn.new(val[0], val[2]) }
35
+ | column_name
36
+
37
+
38
+ from_clause
39
+ : FROM table_reference { result = CmisServer::Query::Statement::FromClause.new(val[1]) }
40
+
41
+ table_reference
42
+ : table_name AS correlation_name {result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
43
+ | table_name correlation_name {result = CmisServer::Query::Statement::As.new(val[0], val[2]) }
44
+ | table_name
45
+ | joined_table
46
+
47
+ joined_table
48
+ : left_paren joined_table right_paren
49
+ | table_reference JOIN table_reference join_specification { result = CmisServer::Query::Statement::InnerJoin.new(val[0], val[3], val[4]) } #Default
50
+ | table_reference join_type JOIN table_reference join_specification { result = val[1].new(val[0], val[3], val[4]) }
51
+
52
+ join_type
53
+ : INNER { result = CmisServer::Query::Statement::InnerJoin}
54
+ | LEFT OUTER { result = CmisServer::Query::Statement::LeftOuterJoin }
55
+ | LEFT { result = CmisServer::Query::Statement::LeftJoin }
56
+
57
+ join_specification
58
+ : ON column_reference equals_operator column_reference {result = CmisServer::Query::Statement::Equals.new(val[1], val[3])}
59
+
60
+ where_clause
61
+ : #No_action
62
+ | WHERE search_condition { result = CmisServer::Query::Statement::WhereClause.new(val[1]) }
63
+
64
+ search_condition
65
+ : search_condition OR boolean_term { result = CmisServer::Query::Statement::Or.new(val[0], val[2]) }
66
+ | boolean_term
67
+
68
+ boolean_term
69
+ : boolean_term AND boolean_factor { result = CmisServer::Query::Statement::And.new(val[0], val[2]) }
70
+ | boolean_factor
71
+
72
+ boolean_factor
73
+ : NOT boolean_test { result = CmisServer::Query::Statement::Not.new(val[1]) }
74
+ | boolean_test
75
+
76
+ boolean_test
77
+ : boolean_primary
78
+
79
+ boolean_primary
80
+ : predicate
81
+ | left_paren search_condition right_paren { result = val[1] }
82
+
83
+ predicate
84
+ : quantified_comparison_predicate
85
+ | comparison_predicate
86
+ | folder_predicate
87
+ | in_predicate
88
+ | like_predicate
89
+ | null_predicate
90
+ | quantified_in_predicate
91
+ #TODO | text_search_predicate
92
+
93
+ comparison_predicate
94
+ : value_expression equals_operator literal { result = CmisServer::Query::Statement::Equals.new(val[0], val[2]) }
95
+ | value_expression not_equals_operator literal { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Equals.new(val[0], val[2])) }
96
+ | value_expression less_than_operator literal { result = CmisServer::Query::Statement::Less.new(val[0], val[2]) }
97
+ | value_expression greater_than_operator literal { result = CmisServer::Query::Statement::Greater.new(val[0], val[2]) }
98
+ | value_expression less_than_or_equals_operator literal { result = CmisServer::Query::Statement::LessOrEquals.new(val[0], val[2]) }
99
+ | value_expression greater_than_or_equals_operator literal { result = CmisServer::Query::Statement::GreaterOrEquals.new(val[0], val[2]) }
100
+
101
+ in_predicate
102
+ : column_reference NOT IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::In.new(val[0], val[4])) }
103
+ | column_reference IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::In.new(val[0], val[3]) }
104
+
105
+ in_value_list
106
+ : in_value_list comma literal { result = Array(val[0]) + Array(val[2]) }
107
+ | literal
108
+
109
+ null_predicate
110
+ : column_reference IS NOT NULL { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Is.new(val[0], CmisServer::Query::Statement::Null.new)) }
111
+ | column_reference IS NULL { result = CmisServer::Query::Statement::Is.new(val[0], CmisServer::Query::Statement::Null.new) }
112
+
113
+ like_predicate
114
+ : column_reference NOT LIKE general_literal { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::Like.new(val[0], val[3])) }
115
+ | column_reference LIKE general_literal { result = CmisServer::Query::Statement::Like.new(val[0], val[2]) }
116
+
117
+ quantified_comparison_predicate
118
+ : literal equals_operator ANY column_reference { result = CmisServer::Query::Statement::QuantifiedComparison.new(val[0], val[3]) }
119
+
120
+ quantified_in_predicate
121
+ : ANY column_reference NOT IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::Not.new(CmisServer::Query::Statement::QuantifiedIn.new(val[1], val[5])) }
122
+ | ANY column_reference IN left_paren in_value_list right_paren { result = CmisServer::Query::Statement::QuantifiedIn.new(val[1], val[4]) }
123
+
124
+ folder_predicate
125
+ : depth_selector left_paren qualifier comma folder_id right_paren { result = val[0].new(val[4], val[2]) }
126
+ | depth_selector left_paren folder_id right_paren { result = val[0].new(val[2], nil) }
127
+
128
+ depth_selector
129
+ : IN_FOLDER { result = CmisServer::Query::Statement::InFolder }
130
+ | IN_TREE { result = CmisServer::Query::Statement::InTree }
131
+
132
+ literal
133
+ : boolean_literal
134
+ | datetime_literal
135
+ | signed_numeric_literal
136
+ | general_literal
137
+
138
+ order_by_clause
139
+ : #No action
140
+ | ORDER BY sort_specification_list { result = CmisServer::Query::Statement::OrderBy.new(val[2]) }
141
+
142
+ sort_specification_list
143
+ : sort_specification comma sort_specification { result = Array(val[0]) + Array(val[2]) }
144
+ | sort_specification
145
+
146
+ sort_specification
147
+ : sort_key ordering_specification { result = val[1].new(val[0]) }
148
+
149
+ sort_key
150
+ : column_reference
151
+
152
+ ordering_specification
153
+ : { result = CmisServer::Query::Statement::Ascending } # defaultf
154
+ | ASC { result = CmisServer::Query::Statement::Ascending }
155
+ | DESC { result = CmisServer::Query::Statement::Descending }
156
+
157
+ qualifier
158
+ : table_name
159
+
160
+ correlation_name
161
+ : qualifier
162
+
163
+ folder_id
164
+ : identifier {result = CmisServer::Query::Statement::FolderId.new(val[0])}
165
+
166
+ table_name
167
+ : identifier {result = CmisServer::Query::Statement::Table.new(val[0])}
168
+
169
+ column_name
170
+ : identifier {result = CmisServer::Query::Statement::Column.new(val[0])}
171
+
172
+ general_literal
173
+ : quote character_string_literal quote { result = CmisServer::Query::Statement::String.new(val[1]) }
174
+ | quote quote { result = CmisServer::Query::Statement::String.new('') }
175
+
176
+ datetime_literal
177
+ : TIMESTAMP date_string { result = CmisServer::Query::Statement::Date.new(val[1]) }
178
+
179
+ signed_numeric_literal
180
+ | sign unsigned_numeric_literal { result = val[0].new(val[1]) }
181
+ | unsigned_numeric_literal
182
+
183
+ unsigned_numeric_literal
184
+ : exact_numeric_literal
185
+ | approximate_numeric_literal
186
+
187
+ exact_numeric_literal
188
+ : unsigned_integer period unsigned_integer { result = CmisServer::Query::Statement::Float.new("#{val[0]}.#{val[2]}".to_f) }
189
+ | unsigned_integer period { result = CmisServer::Query::Statement::Float.new(val[0]) }
190
+ | period unsigned_integer { result = CmisServer::Query::Statement::Float.new("0.#{val[1]}".to_f) }
191
+ | unsigned_integer { result = CmisServer::Query::Statement::Integer.new(val[0]) }
192
+
193
+ approximate_numeric_literal
194
+ : mantissa E exponent { result = CmisServer::Query::Statement::ApproximateFloat.new(val[0], val[2]) }
195
+
196
+ mantissa
197
+ : exact_numeric_literal
198
+
199
+ exponent
200
+ : signed_integer
201
+
202
+ signed_integer
203
+ : sign unsigned_integer { result = val[0].new(CmisServer::Query::Statement::Integer.new(val[1])) }
204
+ | unsigned_integer { result = CmisServer::Query::Statement::Integer.new(val[0]) }
205
+
206
+ sign
207
+ : plus_sign { result = CmisServer::Query::Statement::UnaryPlus }
208
+ | minus_sign { result = CmisServer::Query::Statement::UnaryMinus }
209
+
210
+ boolean_literal
211
+ : TRUE { result = CmisServer::Query::Statement::True.new }
212
+ | FALSE { result = CmisServer::Query::Statement::False.new }
213
+
214
+
215
+ ---- header ----
216
+ require File.dirname(__FILE__) + '/parser.rex.rb'
217
+
218
+ ---- inner ----
219
+
220
+ def self.parse(sql)
221
+ new.scan_str(sql)
222
+ end