infopark_fiona7 0.30.0.2 → 0.70.0.1

Sign up to get free protection for your applications and to get access to all the features.
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