infopark_fiona7 0.30.0.2 → 0.70.0.1

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/fiona7.js +1 -282
  3. data/app/assets/javascripts/fiona7_ui.js +335 -0
  4. data/app/assets/stylesheets/fiona7.css.scss +4 -36
  5. data/app/assets/stylesheets/fiona7_ui.css.scss +39 -0
  6. data/app/controllers/fiona7/blobs_controller.rb +13 -23
  7. data/app/controllers/fiona7/release_controller.rb +1 -0
  8. data/app/controllers/fiona7/sessions_controller.rb +3 -5
  9. data/app/helpers/fiona7_override_helper.rb +6 -2
  10. data/app/models/fiona7/edited_obj.rb +6 -1
  11. data/app/models/fiona7/released_obj.rb +11 -3
  12. data/app/models/fiona7/write_obj.rb +18 -3
  13. data/app/models/fiona7_login_page.rb +3 -0
  14. data/app/views/scrivito/ui/index.html.erb +16 -0
  15. data/config/routes.rb +2 -0
  16. data/infopark_fiona7.gemspec +6 -4
  17. data/lib/fiona7/builder/batch_widget_writer.rb +7 -3
  18. data/lib/fiona7/builder/obj_builder.rb +130 -42
  19. data/lib/fiona7/builder/obj_class_builder.rb +3 -59
  20. data/lib/fiona7/builder/obj_class_updater.rb +7 -44
  21. data/lib/fiona7/builder/obj_updater.rb +25 -7
  22. data/lib/fiona7/builder/widget_builder.rb +24 -0
  23. data/lib/fiona7/builder/widget_building.rb +2 -7
  24. data/lib/fiona7/builder/widget_updater.rb +21 -0
  25. data/lib/fiona7/controllers/content_service/obj_controller.rb +16 -25
  26. data/lib/fiona7/controllers/rest_api/blob_controller.rb +41 -2
  27. data/lib/fiona7/controllers/rest_api/obj_controller.rb +19 -7
  28. data/lib/fiona7/controllers/rest_api/workspace_controller.rb +1 -1
  29. data/lib/fiona7/engine.rb +58 -7
  30. data/lib/fiona7/fiona_connector_patches/basic_obj.rb +46 -0
  31. data/lib/fiona7/initializer.rb +15 -11
  32. data/lib/fiona7/json/obj_decorator.rb +53 -31
  33. data/lib/fiona7/json/reverse_obj_decorator.rb +36 -0
  34. data/lib/fiona7/json/widget_decorator.rb +3 -1
  35. data/lib/fiona7/link_converter/fiona_to_scrivito.rb +45 -13
  36. data/lib/fiona7/link_converter/scrivito_to_fiona.rb +1 -1
  37. data/lib/fiona7/middleware/server_detection_middleware.rb +27 -0
  38. data/lib/fiona7/middleware/table_switching_middleware.rb +33 -0
  39. data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk.rb +5 -11
  40. data/lib/fiona7/mode_switch/composite.rb +2 -4
  41. data/lib/fiona7/naive_search_engine.rb +66 -16
  42. data/lib/fiona7/routers/rest_api.rb +50 -45
  43. data/lib/fiona7/routing_monkey_patch.rb +5 -3
  44. data/lib/fiona7/scrivito_patches/attribute_content.rb +9 -10
  45. data/lib/fiona7/scrivito_patches/attribute_serializer.rb +15 -0
  46. data/lib/fiona7/scrivito_patches/basic_obj.rb +25 -19
  47. data/lib/fiona7/scrivito_patches/basic_widget.rb +4 -0
  48. data/lib/fiona7/scrivito_patches/binary.rb +452 -33
  49. data/lib/fiona7/scrivito_patches/client_config.rb +0 -19
  50. data/lib/fiona7/scrivito_patches/cms_backend.rb +48 -0
  51. data/lib/fiona7/scrivito_patches/cms_field_tag.rb +19 -0
  52. data/lib/fiona7/scrivito_patches/cms_rest_api.rb +20 -3
  53. data/lib/fiona7/scrivito_patches/cms_routing.rb +20 -34
  54. data/lib/fiona7/scrivito_patches/controller_actions.rb +0 -8
  55. data/lib/fiona7/scrivito_patches/migrator.rb +4 -0
  56. data/lib/fiona7/scrivito_patches/objs_controller.rb +18 -0
  57. data/lib/fiona7/scrivito_patches/type_computer.rb +12 -12
  58. data/lib/fiona7/scrivito_patches/webservice_controller.rb +21 -0
  59. data/lib/fiona7/scrivito_patches/workspace.rb +8 -5
  60. data/lib/fiona7/shadow_classes.rb +74 -0
  61. data/lib/fiona7/table_switcher.rb +39 -0
  62. data/lib/fiona7/type_loader.rb +63 -0
  63. data/lib/fiona7/type_register.rb +170 -89
  64. data/lib/fiona7/type_synchronizer.rb +68 -0
  65. data/lib/fiona7/version.rb +1 -1
  66. data/lib/fiona7/version_helper.rb +35 -54
  67. data/lib/fiona7/widget_resolver.rb +1 -1
  68. data/lib/tasks/fiona7_tasks.rake +0 -8
  69. metadata +57 -18
  70. data/lib/fiona7/controllers/rest_api/obj_class_controller.rb +0 -39
  71. data/lib/fiona7/json/obj_class_decorator.rb +0 -45
  72. data/lib/fiona7/mode_switch/constants.rb +0 -86
  73. data/lib/fiona7/type_register_mixin.rb +0 -9
@@ -5,79 +5,60 @@ require 'digest/sha1'
5
5
 
6
6
  module Fiona7
7
7
  class VersionHelper
8
+ attr_reader :revision_id, :content_state_id, :base_revision_id, :base_content_state_id
8
9
  def initialize(workspace_id)
9
10
  @workspace_id = workspace_id.to_sym
10
- end
11
-
12
- def revision_id
13
- if @workspace_id == :published
14
- published_revision_id
15
- else
16
- rtc_revision_id
17
- end
18
- end
19
-
20
- def content_state_id
21
11
  if @workspace_id == :published
22
- published_content_state_id
12
+ @revision_id =
13
+ @content_state_id =
14
+ @base_revision_id =
15
+ @base_content_state_id = published_revision_id
23
16
  else
24
- rtc_content_state_id
17
+ @revision_id =
18
+ @content_state_id = rtc_revision_id
19
+ @base_revision_id =
20
+ @base_content_state_id = "f" * 40 #published_revision_id
25
21
  end
26
22
  end
27
23
 
28
- def base_revision_id
29
- published_revision_id
30
- end
31
-
32
- def base_content_state_id
33
- published_content_state_id
34
- end
35
-
36
24
  protected
37
25
  def published_revision_id
26
+ return @published_revision_id if @published_revision_id
38
27
  klass = ReleasedObj
39
- last_changed = klass.maximum(:last_changed)
40
- obj_count = klass.count
28
+ # only one query executed
29
+ query = ReleasedObj.select('max(last_changed), count(*)').to_sql
30
+ last_changed, obj_count = *ReleasedObj.connection.execute(query).first
41
31
  revision_id = Digest::SHA1.hexdigest("published:#{last_changed}:#{obj_count}").sub(/^./, 'f')
42
-
32
+ # tag the revision as published
43
33
  revision_id[0] = 'f'
44
- revision_id
34
+
35
+ #begin
36
+ # raise
37
+ #rescue => e
38
+ # Rails.logger.debug(e.backtrace.join("\n"))
39
+ #end
40
+
41
+ @published_revision_id = revision_id
45
42
  end
46
43
 
47
44
  def rtc_revision_id
45
+ return @rtc_revision_id if @rtc_revision_id
48
46
  klass = EditedObj
49
- changed = klass.connection.execute("SELECT * from #{klass.table_name} WHERE last_changed = '#{klass.maximum(:last_changed)}' ORDER BY obj_id").to_json
50
- obj_count = klass.count
51
- revision_id = Digest::SHA1.hexdigest("rtc:#{changed}:#{obj_count}")
52
-
53
- revision_id[0] = 'b'
54
- revision_id
55
- end
56
47
 
57
- def published_content_state_id
58
- obj_class_names = RailsConnector::ObjClass.select([:obj_class_name, :is_enabled]).map {|o| "#{o.name}:#{o.is_enabled}"}.join("|")
59
- attribute_names = RailsConnector::Attribute.select(:attribute_name).map(&:name).join("|")
60
- attribute_joins = self.obj_class_attrs
61
- Digest::SHA1.hexdigest("#{published_revision_id}:#{obj_class_names}:#{attribute_names}:#{attribute_joins}")
62
- end
48
+ first_query = klass.select("obj_id, count(*), last_changed, attr_values").to_sql
49
+ # NOTE: the hidden assumption here is that no more than 23 object have been changed in the last second
50
+ second_query= klass.select("obj_id, is_released, last_changed, attr_values").order("last_changed DESC").limit(23).to_sql
51
+ union_query = "SELECT * FROM ( #{first_query} ) QUERY1 UNION ALL SELECT * FROM ( #{second_query} ) QUERY2"
52
+ # only one query executed
53
+ results = EditedObj.connection.execute(union_query).to_a
54
+ obj_count = results.shift[1]
55
+ changed = results
63
56
 
64
- def rtc_content_state_id
65
- obj_class_names = RailsConnector::ObjClass.select([:obj_class_name, :is_enabled]).map {|o| "#{o.name}:#{o.is_enabled}"}.join("|")
66
- attribute_names = RailsConnector::Attribute.select(:attribute_name).map(&:name).join("|")
67
- attribute_joins = self.obj_class_attrs
68
- Digest::SHA1.hexdigest("#{rtc_revision_id}:#{obj_class_names}:#{attribute_names}:#{attribute_joins}")
69
- end
57
+ revision_id = Digest::SHA1.hexdigest("rtc:#{changed}:#{obj_count}")
70
58
 
71
- def obj_class_attrs
72
- if Fiona7.mode == :standalone
73
- ''
74
- elsif Fiona7.mode == :legacy
75
- klass = ReleasedObj
76
- table_name = "#{klass.table_name_prefix}obj_class_attrs"
77
- klass.connection.execute("SELECT * from #{table_name}").to_a.map {|(id1,id2)| "#{id1}:#{id2}" }.join("|")
78
- else
79
- raise "Invalid Fiona7.mode = #{Fiona7.mode}"
80
- end
59
+ # tag the revision as edited/rtc
60
+ revision_id[0] = 'b'
61
+ @rtc_revision_id = revision_id
81
62
  end
82
63
 
83
64
  end
@@ -15,7 +15,7 @@ module Fiona7
15
15
 
16
16
  def preload
17
17
  widget_id_to_object_id_map = Hash[
18
- self.value.map {|link| [link.title, link.destination_object_id] }
18
+ self.value.map {|link| [link["title"], link["destination"]] }
19
19
  ]
20
20
  object_id_to_widget_instance_map = Hash[
21
21
  self.klass.where(obj_id: widget_id_to_object_id_map.values).map {|obj| [obj.id, obj] }
@@ -1,13 +1,5 @@
1
1
  namespace :fiona7 do
2
2
  desc "Initialize Fiona7"
3
3
  task :initialize => :environment do
4
- require "fiona7/initializer"
5
-
6
- initializer = Fiona7::Initializer.new
7
-
8
- initializer.sanity_check
9
- initializer.classes_and_attributes
10
- initializer.set_valid_sub_obj_classes
11
- initializer.create_login_page
12
4
  end
13
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infopark_fiona7
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0.2
4
+ version: 0.70.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Przedmojski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-17 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.1.5
19
+ version: 4.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 4.1.5
26
+ version: 4.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: scrivito
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '0.30'
33
+ version: 0.70.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '0.30'
40
+ version: 0.70.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: scrivito_sdk
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,30 +70,58 @@ dependencies:
70
70
  name: infopark_fiona_connector
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 7.0.0
75
+ version: 7.0.1.beta2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 7.0.0
82
+ version: 7.0.1.beta2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: infopark_reactor
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 1.12.0
89
+ version: 1.15.0.beta1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 1.12.0
96
+ version: 1.15.0.beta1
97
+ - !ruby/object:Gem::Dependency
98
+ name: mini_magick
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: ruby-prof
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  description: scrivito-compatible interface for classic Fiona
98
126
  email:
99
127
  - tomasz.przedmojski@infopark.de
@@ -106,8 +134,10 @@ files:
106
134
  - app/assets/images/fiona7-logo.png
107
135
  - app/assets/images/fiona7-marker.png
108
136
  - app/assets/javascripts/fiona7.js
137
+ - app/assets/javascripts/fiona7_ui.js
109
138
  - app/assets/stylesheets/fiona7-login.css.scss
110
139
  - app/assets/stylesheets/fiona7.css.scss
140
+ - app/assets/stylesheets/fiona7_ui.css.scss
111
141
  - app/controllers/fiona7/blobs_controller.rb
112
142
  - app/controllers/fiona7/default_scrivito_cms_controller.rb
113
143
  - app/controllers/fiona7/release_controller.rb
@@ -125,6 +155,7 @@ files:
125
155
  - app/models/x_image.rb
126
156
  - app/views/fiona7_login_page/index.html.erb
127
157
  - app/views/layouts/fiona7_login_page_layout.html.erb
158
+ - app/views/scrivito/ui/index.html.erb
128
159
  - config/locales/login.yml
129
160
  - config/locales/permissions.yml
130
161
  - config/routes.rb
@@ -141,18 +172,19 @@ files:
141
172
  - lib/fiona7/controllers/content_service/obj_controller.rb
142
173
  - lib/fiona7/controllers/content_service/workspace_controller.rb
143
174
  - lib/fiona7/controllers/rest_api/blob_controller.rb
144
- - lib/fiona7/controllers/rest_api/obj_class_controller.rb
145
175
  - lib/fiona7/controllers/rest_api/obj_controller.rb
146
176
  - lib/fiona7/controllers/rest_api/workspace_controller.rb
147
177
  - lib/fiona7/engine.rb
148
178
  - lib/fiona7/fiona_connector_patches/basic_obj.rb
149
179
  - lib/fiona7/initializer.rb
150
- - lib/fiona7/json/obj_class_decorator.rb
151
180
  - lib/fiona7/json/obj_decorator.rb
181
+ - lib/fiona7/json/reverse_obj_decorator.rb
152
182
  - lib/fiona7/json/typeless_obj_decorator.rb
153
183
  - lib/fiona7/json/widget_decorator.rb
154
184
  - lib/fiona7/link_converter/fiona_to_scrivito.rb
155
185
  - lib/fiona7/link_converter/scrivito_to_fiona.rb
186
+ - lib/fiona7/middleware/server_detection_middleware.rb
187
+ - lib/fiona7/middleware/table_switching_middleware.rb
156
188
  - lib/fiona7/mode_switch.rb
157
189
  - lib/fiona7/mode_switch/abstract_mode_switch.rb
158
190
  - lib/fiona7/mode_switch/cms_routes.rb
@@ -160,7 +192,6 @@ files:
160
192
  - lib/fiona7/mode_switch/cms_routes/scrivito_sdk.rb
161
193
  - lib/fiona7/mode_switch/cms_routes/scrivito_sdk_slave.rb
162
194
  - lib/fiona7/mode_switch/composite.rb
163
- - lib/fiona7/mode_switch/constants.rb
164
195
  - lib/fiona7/mode_switch/views.rb
165
196
  - lib/fiona7/naive_search_engine.rb
166
197
  - lib/fiona7/recursive_link_resolver.rb
@@ -168,23 +199,31 @@ files:
168
199
  - lib/fiona7/routers/rest_api.rb
169
200
  - lib/fiona7/routing_monkey_patch.rb
170
201
  - lib/fiona7/scrivito_patches/attribute_content.rb
202
+ - lib/fiona7/scrivito_patches/attribute_serializer.rb
171
203
  - lib/fiona7/scrivito_patches/basic_obj.rb
172
204
  - lib/fiona7/scrivito_patches/basic_widget.rb
173
205
  - lib/fiona7/scrivito_patches/binary.rb
174
206
  - lib/fiona7/scrivito_patches/client_config.rb
207
+ - lib/fiona7/scrivito_patches/cms_backend.rb
175
208
  - lib/fiona7/scrivito_patches/cms_dispatch_controller.rb
209
+ - lib/fiona7/scrivito_patches/cms_field_tag.rb
176
210
  - lib/fiona7/scrivito_patches/cms_rest_api.rb
177
211
  - lib/fiona7/scrivito_patches/cms_routing.rb
178
212
  - lib/fiona7/scrivito_patches/controller_actions.rb
179
213
  - lib/fiona7/scrivito_patches/link_parser.rb
180
214
  - lib/fiona7/scrivito_patches/migrator.rb
181
215
  - lib/fiona7/scrivito_patches/obj_class.rb
216
+ - lib/fiona7/scrivito_patches/objs_controller.rb
182
217
  - lib/fiona7/scrivito_patches/type_computer.rb
218
+ - lib/fiona7/scrivito_patches/webservice_controller.rb
183
219
  - lib/fiona7/scrivito_patches/workspace.rb
184
220
  - lib/fiona7/scrivito_user.rb
185
221
  - lib/fiona7/search_engine.rb
222
+ - lib/fiona7/shadow_classes.rb
223
+ - lib/fiona7/table_switcher.rb
224
+ - lib/fiona7/type_loader.rb
186
225
  - lib/fiona7/type_register.rb
187
- - lib/fiona7/type_register_mixin.rb
226
+ - lib/fiona7/type_synchronizer.rb
188
227
  - lib/fiona7/version.rb
189
228
  - lib/fiona7/version_helper.rb
190
229
  - lib/fiona7/widget_resolver.rb
@@ -1,39 +0,0 @@
1
- require 'fiona7/builder/obj_class_builder'
2
- require 'fiona7/builder/obj_class_updater'
3
- require 'fiona7/json/obj_class_decorator'
4
- require 'fiona7/type_register'
5
-
6
- module Fiona7
7
- module Controllers
8
- module RestAPI
9
- class ObjClassController
10
- def all
11
- # ObjClasses with X_ prefix are hidden, so is Root (temporarily)
12
- cms_classes = RailsConnector::ObjClass.all.select {|o| o.name != 'Root' && o.name !~ /\AX_/ }.map {|cms_class| JSON::ObjClassDecorator.new(cms_class) }
13
- return ::JSON.parse(::ActiveSupport::JSON.encode({results: cms_classes}))
14
- end
15
-
16
- def create(workspace_id, values)
17
- raise "Unexpected workspace_id: #{workspace_id}" unless workspace_id.to_s == "rtc"
18
- cms_class = JSON::ObjClassDecorator.new(Builder::ObjClassBuilder.new(values[:obj_class].dup).build)
19
- return ::JSON.parse(::ActiveSupport::JSON.encode(cms_class))
20
- end
21
-
22
- def update(workspace_id, values)
23
- raise "Unexpected workspace_id: #{workspace_id}" unless workspace_id.to_s == "rtc"
24
- cms_class = JSON::ObjClassDecorator.new(Builder::ObjClassUpdater.new(values[:obj_class].dup).build)
25
- # invalidate caches:
26
- TypeRegister.instance.invalidate_cached_type(cms_class.name)
27
- return ::JSON.parse(::ActiveSupport::JSON.encode(cms_class))
28
- end
29
-
30
- def fetch(workspace_id, name)
31
- # TODO: assert workspace_id
32
- cms_class = JSON::ObjClassDecorator.new(RailsConnector::ObjClass.find_by_obj_class_name(name))
33
- return ::JSON.parse(::ActiveSupport::JSON.encode(cms_class))
34
- end
35
- end
36
- end
37
- end
38
- end
39
-
@@ -1,45 +0,0 @@
1
- require 'fiona7/type_register_mixin'
2
-
3
- module Fiona7
4
- module JSON
5
- class ObjClassDecorator
6
- include TypeRegisterMixin
7
-
8
- attr_reader :cms_class
9
-
10
- def initialize(cms_class)
11
- @cms_class = cms_class
12
- end
13
-
14
- def name
15
- cms_class.name
16
- end
17
-
18
- def as_json(*options)
19
- result = {
20
- id: cms_class.name,
21
- name: cms_class.name,
22
- title: cms_class.title(:de),
23
- #type: cms_class.obj_type,
24
- is_active: cms_class.enabled?,
25
- attributes: []
26
- }
27
- type_register.annotated_attributes(cms_class.name).each do |attribute|
28
- virtual_name = attribute.virtual_name
29
- virtual_type = attribute.virtual_type
30
-
31
- attr_hash = {
32
- name: virtual_name.to_s,
33
- type: virtual_type.to_s
34
- }
35
-
36
- attr_hash[:values] = attribute.values if attribute.values
37
-
38
- result[:attributes] << attr_hash
39
- end
40
-
41
- result.as_json(*options)
42
- end
43
- end
44
- end
45
- end
@@ -1,86 +0,0 @@
1
- require 'fiona7/mode_switch/abstract_mode_switch'
2
-
3
- module Fiona7
4
- module ModeSwitch
5
- class Constants < AbstractModeSwitch
6
- def standalone
7
- self.common_const_manipulation
8
- self.set_root_obj_to(::Scrivito::Obj)
9
- end
10
-
11
- def legacy
12
- self.common_const_manipulation
13
- self.set_root_obj_to(::RailsConnector::Obj)
14
- end
15
-
16
- protected
17
- def set_rails_connector_obj
18
- if self.obj_defined_in_app?
19
- if self.rails_connector_app_obj?
20
- ::RailsConnector.const_set('Obj', ::Object.const_get('Obj'))
21
- else
22
- ::RailsConnector.const_set('Obj', ::RailsConnector::AbstractObj)
23
- end
24
- else
25
- ::RailsConnector.const_set('Obj', ::RailsConnector::AbstractObj)
26
- end
27
- end
28
-
29
- def set_scrivito_obj
30
- if self.obj_defined_in_app?
31
- if self.scrivito_app_obj?
32
- ::Scrivito.const_set('Obj', ::Object.const_get('Obj'))
33
- elsif Fiona7.mode == :legacy && self.scrivito_legacy_app_obj?
34
- # nop
35
- else
36
- ::Scrivito.const_set('Obj', Class.new(::Scrivito::BasicObj))
37
- end
38
- else
39
- ::Scrivito.const_set('Obj', Class.new(::Scrivito::BasicObj))
40
- end
41
- end
42
-
43
- def common_const_manipulation
44
- self.reset_global_obj
45
-
46
- self.set_rails_connector_obj
47
- self.set_scrivito_obj
48
- end
49
-
50
- def reset_global_obj
51
- return if self.obj_defined_in_app?
52
-
53
- # load global obj
54
- ::Object.const_get('Obj')
55
- # since both want it, nobody gets it. (at first)
56
- ::Object.send(:remove_const, 'Obj')
57
- end
58
-
59
- def set_root_obj_to(klass)
60
- return if self.obj_defined_in_app?
61
-
62
- ::Object.const_set('Obj', klass)
63
- end
64
-
65
- def obj_defined_in_app?
66
- # NOTE: this is not bullet-proof but a good-enough heuristic
67
- @obj_defined_in_app ||= ::File.exists?(self.app.paths["app/models"].first + "/obj.rb")
68
- end
69
-
70
- def rails_connector_app_obj?
71
- obj_klass = ::Object.const_get('Obj')
72
- obj_klass == ::RailsConnector::BasicObj || obj_klass < ::RailsConnector::BasicObj
73
- end
74
-
75
- def scrivito_app_obj?
76
- obj_klass = ::Object.const_get('Obj')
77
- obj_klass == ::Scrivito::BasicObj || obj_klass < ::Scrivito::BasicObj
78
- end
79
-
80
- def scrivito_legacy_app_obj?
81
- obj_klass = ::Scrivito::Obj rescue Object
82
- obj_klass == ::Scrivito::BasicObj || obj_klass < ::Scrivito::BasicObj
83
- end
84
- end
85
- end
86
- end