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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/fiona7.js +1 -282
- data/app/assets/javascripts/fiona7_ui.js +335 -0
- data/app/assets/stylesheets/fiona7.css.scss +4 -36
- data/app/assets/stylesheets/fiona7_ui.css.scss +39 -0
- data/app/controllers/fiona7/blobs_controller.rb +13 -23
- data/app/controllers/fiona7/release_controller.rb +1 -0
- data/app/controllers/fiona7/sessions_controller.rb +3 -5
- data/app/helpers/fiona7_override_helper.rb +6 -2
- data/app/models/fiona7/edited_obj.rb +6 -1
- data/app/models/fiona7/released_obj.rb +11 -3
- data/app/models/fiona7/write_obj.rb +18 -3
- data/app/models/fiona7_login_page.rb +3 -0
- data/app/views/scrivito/ui/index.html.erb +16 -0
- data/config/routes.rb +2 -0
- data/infopark_fiona7.gemspec +6 -4
- data/lib/fiona7/builder/batch_widget_writer.rb +7 -3
- data/lib/fiona7/builder/obj_builder.rb +130 -42
- data/lib/fiona7/builder/obj_class_builder.rb +3 -59
- data/lib/fiona7/builder/obj_class_updater.rb +7 -44
- data/lib/fiona7/builder/obj_updater.rb +25 -7
- data/lib/fiona7/builder/widget_builder.rb +24 -0
- data/lib/fiona7/builder/widget_building.rb +2 -7
- data/lib/fiona7/builder/widget_updater.rb +21 -0
- data/lib/fiona7/controllers/content_service/obj_controller.rb +16 -25
- data/lib/fiona7/controllers/rest_api/blob_controller.rb +41 -2
- data/lib/fiona7/controllers/rest_api/obj_controller.rb +19 -7
- data/lib/fiona7/controllers/rest_api/workspace_controller.rb +1 -1
- data/lib/fiona7/engine.rb +58 -7
- data/lib/fiona7/fiona_connector_patches/basic_obj.rb +46 -0
- data/lib/fiona7/initializer.rb +15 -11
- data/lib/fiona7/json/obj_decorator.rb +53 -31
- data/lib/fiona7/json/reverse_obj_decorator.rb +36 -0
- data/lib/fiona7/json/widget_decorator.rb +3 -1
- data/lib/fiona7/link_converter/fiona_to_scrivito.rb +45 -13
- data/lib/fiona7/link_converter/scrivito_to_fiona.rb +1 -1
- data/lib/fiona7/middleware/server_detection_middleware.rb +27 -0
- data/lib/fiona7/middleware/table_switching_middleware.rb +33 -0
- data/lib/fiona7/mode_switch/cms_routes/scrivito_sdk.rb +5 -11
- data/lib/fiona7/mode_switch/composite.rb +2 -4
- data/lib/fiona7/naive_search_engine.rb +66 -16
- data/lib/fiona7/routers/rest_api.rb +50 -45
- data/lib/fiona7/routing_monkey_patch.rb +5 -3
- data/lib/fiona7/scrivito_patches/attribute_content.rb +9 -10
- data/lib/fiona7/scrivito_patches/attribute_serializer.rb +15 -0
- data/lib/fiona7/scrivito_patches/basic_obj.rb +25 -19
- data/lib/fiona7/scrivito_patches/basic_widget.rb +4 -0
- data/lib/fiona7/scrivito_patches/binary.rb +452 -33
- data/lib/fiona7/scrivito_patches/client_config.rb +0 -19
- data/lib/fiona7/scrivito_patches/cms_backend.rb +48 -0
- data/lib/fiona7/scrivito_patches/cms_field_tag.rb +19 -0
- data/lib/fiona7/scrivito_patches/cms_rest_api.rb +20 -3
- data/lib/fiona7/scrivito_patches/cms_routing.rb +20 -34
- data/lib/fiona7/scrivito_patches/controller_actions.rb +0 -8
- data/lib/fiona7/scrivito_patches/migrator.rb +4 -0
- data/lib/fiona7/scrivito_patches/objs_controller.rb +18 -0
- data/lib/fiona7/scrivito_patches/type_computer.rb +12 -12
- data/lib/fiona7/scrivito_patches/webservice_controller.rb +21 -0
- data/lib/fiona7/scrivito_patches/workspace.rb +8 -5
- data/lib/fiona7/shadow_classes.rb +74 -0
- data/lib/fiona7/table_switcher.rb +39 -0
- data/lib/fiona7/type_loader.rb +63 -0
- data/lib/fiona7/type_register.rb +170 -89
- data/lib/fiona7/type_synchronizer.rb +68 -0
- data/lib/fiona7/version.rb +1 -1
- data/lib/fiona7/version_helper.rb +35 -54
- data/lib/fiona7/widget_resolver.rb +1 -1
- data/lib/tasks/fiona7_tasks.rake +0 -8
- metadata +57 -18
- data/lib/fiona7/controllers/rest_api/obj_class_controller.rb +0 -39
- data/lib/fiona7/json/obj_class_decorator.rb +0 -45
- data/lib/fiona7/mode_switch/constants.rb +0 -86
- 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 | 
            -
                     | 
| 12 | 
            +
                    @revision_id =
         | 
| 13 | 
            +
                      @content_state_id =
         | 
| 14 | 
            +
                      @base_revision_id =
         | 
| 15 | 
            +
                      @base_content_state_id = published_revision_id
         | 
| 23 16 | 
             
                  else
         | 
| 24 | 
            -
                     | 
| 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 | 
            -
                   | 
| 40 | 
            -
                   | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 58 | 
            -
                   | 
| 59 | 
            -
                   | 
| 60 | 
            -
                   | 
| 61 | 
            -
                   | 
| 62 | 
            -
             | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 72 | 
            -
                   | 
| 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 | 
| 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] }
         | 
    
        data/lib/tasks/fiona7_tasks.rake
    CHANGED
    
    | @@ -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. | 
| 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- | 
| 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. | 
| 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. | 
| 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:  | 
| 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:  | 
| 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. | 
| 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. | 
| 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. | 
| 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. | 
| 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/ | 
| 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
         |