scrivito_sdk 0.50.1 → 0.60.0.rc1
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/controllers/scrivito/objs_controller.rb +25 -21
 - data/app/controllers/scrivito/ui_controller.rb +1 -1
 - data/app/controllers/scrivito/webservice_controller.rb +1 -1
 - data/app/models/scrivito/content_widget.rb +1 -3
 - data/app/views/cms/index.html.erb +3 -0
 - data/app/views/scrivito/objs/destroy.json.jbuilder +1 -0
 - data/app/views/scrivito/objs/show.json.jbuilder +2 -0
 - data/app/views/scrivito/objs/update.json.jbuilder +1 -1
 - data/app/views/scrivito/objs/{widget_modification.json.jbuilder → widget.json.jbuilder} +0 -0
 - data/config/ca-bundle.crt +24 -219
 - data/config/precedence_routes.rb +60 -0
 - data/config/routes.rb +13 -46
 - data/lib/assets/javascripts/scrivito_ui.js +360 -202
 - data/lib/assets/stylesheets/scrivito_sdk.css +1 -1
 - data/lib/assets/stylesheets/scrivito_ui.css +1 -1
 - data/lib/generators/scrivito/install/templates/app/models/download.rb +1 -3
 - data/lib/generators/scrivito/install/templates/app/models/headline_widget.rb +1 -5
 - data/lib/generators/scrivito/install/templates/app/models/image.rb +1 -3
 - data/lib/generators/scrivito/install/templates/app/models/image_widget.rb +1 -5
 - data/lib/generators/scrivito/install/templates/app/models/page.rb +3 -6
 - data/lib/generators/scrivito/install/templates/app/models/text_widget.rb +1 -5
 - data/lib/generators/scrivito/install/templates/scrivito/migrate/install_scrivito_migration.rb +1 -25
 - data/lib/generators/scrivito/migration/templates/migration.erb +2 -26
 - data/lib/generators/scrivito/page/page_generator.rb +0 -11
 - data/lib/generators/scrivito/page/templates/model.erb +3 -7
 - data/lib/generators/scrivito/widget/widget_generator.rb +0 -11
 - data/lib/scrivito/attribute.rb +10 -16
 - data/lib/scrivito/attribute_collection.rb +4 -0
 - data/lib/scrivito/attribute_content.rb +239 -161
 - data/lib/scrivito/attribute_definition.rb +16 -10
 - data/lib/scrivito/attribute_definition_collection.rb +7 -4
 - data/lib/scrivito/attribute_definition_migrator.rb +1 -3
 - data/lib/scrivito/attribute_deserializer.rb +111 -0
 - data/lib/scrivito/attribute_serializer.rb +189 -0
 - data/lib/scrivito/basic_obj.rb +113 -78
 - data/lib/scrivito/basic_widget.rb +103 -37
 - data/lib/scrivito/binary.rb +3 -3
 - data/lib/scrivito/cache/chainable.rb +10 -4
 - data/lib/scrivito/cache/file_store.rb +7 -4
 - data/lib/scrivito/cache/ram_store.rb +1 -1
 - data/lib/scrivito/class_collection.rb +2 -2
 - data/lib/scrivito/client_config.rb +7 -6
 - data/lib/scrivito/cms_backend.rb +2 -2
 - data/lib/scrivito/cms_field_tag.rb +33 -25
 - data/lib/scrivito/cms_rest_api/{attribute_serializer.rb → legacy_attribute_serializer.rb} +1 -1
 - data/lib/scrivito/cms_routing.rb +20 -14
 - data/lib/scrivito/configuration.rb +1 -1
 - data/lib/scrivito/controller_actions.rb +12 -4
 - data/lib/scrivito/date_attribute.rb +8 -0
 - data/lib/scrivito/diff.rb +1 -1
 - data/lib/scrivito/editing_context.rb +1 -1
 - data/lib/scrivito/editing_context_middleware.rb +1 -1
 - data/lib/scrivito/errors.rb +4 -0
 - data/lib/scrivito/link_parser.rb +6 -1
 - data/lib/scrivito/migrations/cms_backend.rb +17 -60
 - data/lib/scrivito/migrations/migration_store.rb +0 -1
 - data/lib/scrivito/model_library.rb +6 -6
 - data/lib/scrivito/obj_class.rb +34 -48
 - data/lib/scrivito/obj_class_collection.rb +21 -3
 - data/lib/scrivito/obj_create_params_parser.rb +2 -1
 - data/lib/scrivito/obj_data.rb +9 -103
 - data/lib/scrivito/obj_data_from_hash.rb +19 -21
 - data/lib/scrivito/obj_data_from_service.rb +28 -48
 - data/lib/scrivito/obj_params_parser.rb +14 -14
 - data/lib/scrivito/obj_search_enumerator.rb +1 -1
 - data/lib/scrivito/obj_update_params_parser.rb +2 -2
 - data/lib/scrivito/restriction_set.rb +1 -1
 - data/lib/scrivito/sdk_engine.rb +2 -2
 - data/lib/scrivito/test_request.rb +10 -0
 - data/lib/scrivito/type_computer.rb +5 -1
 - data/lib/scrivito/widget_collection.rb +15 -0
 - data/lib/scrivito/widget_garbage_collection.rb +1 -1
 - data/lib/scrivito/widget_tag.rb +2 -0
 - data/lib/scrivito/workspace.rb +2 -1
 - data/lib/scrivito/workspace_data_from_service.rb +1 -0
 - data/lib/scrivito_sdk.rb +17 -1
 - metadata +36 -34
 - data/app/views/scrivito/objs/modification.json.jbuilder +0 -1
 - data/config/cms_routes.rb +0 -22
 - data/lib/generators/scrivito/page/templates/migration.erb +0 -9
 - data/lib/generators/scrivito/widget/templates/migration.erb +0 -7
 
    
        data/lib/scrivito/cms_routing.rb
    CHANGED
    
    | 
         @@ -73,30 +73,36 @@ class CmsRouting < Struct.new(:request, :main_app) 
     | 
|
| 
       73 
73 
     | 
    
         
             
              end
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
75 
     | 
    
         
             
              def path_or_url_for_objs(obj, path_or_url, options = {})
         
     | 
| 
      
 76 
     | 
    
         
            +
                if editing_context.display_mode == "editing"
         
     | 
| 
      
 77 
     | 
    
         
            +
                  return id_path_or_url_for_objs(obj, path_or_url, options)
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
       76 
80 
     | 
    
         
             
                permalink = obj.permalink
         
     | 
| 
       77 
81 
     | 
    
         
             
                if permalink
         
     | 
| 
       78 
82 
     | 
    
         
             
                  main_app.public_send("scrivito_permalink_#{path_or_url}", options.merge(:permalink => permalink))
         
     | 
| 
       79 
83 
     | 
    
         
             
                elsif obj.homepage?
         
     | 
| 
       80 
84 
     | 
    
         
             
                  main_app.public_send("scrivito_root_#{path_or_url}", options)
         
     | 
| 
       81 
     | 
    
         
            -
                 
     | 
| 
       82 
     | 
    
         
            -
                  if obj. 
     | 
| 
       83 
     | 
    
         
            -
                     
     | 
| 
       84 
     | 
    
         
            -
                      obj.binary_url
         
     | 
| 
       85 
     | 
    
         
            -
                    else
         
     | 
| 
       86 
     | 
    
         
            -
                      LINK_TO_EMPTY_BLOB
         
     | 
| 
       87 
     | 
    
         
            -
                    end
         
     | 
| 
      
 85 
     | 
    
         
            +
                elsif obj.binary?
         
     | 
| 
      
 86 
     | 
    
         
            +
                  if obj.binary_url
         
     | 
| 
      
 87 
     | 
    
         
            +
                    obj.binary_url
         
     | 
| 
       88 
88 
     | 
    
         
             
                  else
         
     | 
| 
       89 
     | 
    
         
            -
                     
     | 
| 
       90 
     | 
    
         
            -
                      "cms_id_#{path_or_url}",
         
     | 
| 
       91 
     | 
    
         
            -
                      options.merge(
         
     | 
| 
       92 
     | 
    
         
            -
                        id: obj.id,
         
     | 
| 
       93 
     | 
    
         
            -
                        slug: obj.slug.presence
         
     | 
| 
       94 
     | 
    
         
            -
                      )
         
     | 
| 
       95 
     | 
    
         
            -
                    )
         
     | 
| 
      
 89 
     | 
    
         
            +
                    LINK_TO_EMPTY_BLOB
         
     | 
| 
       96 
90 
     | 
    
         
             
                  end
         
     | 
| 
      
 91 
     | 
    
         
            +
                else
         
     | 
| 
      
 92 
     | 
    
         
            +
                  id_path_or_url_for_objs(obj, path_or_url, options)
         
     | 
| 
       97 
93 
     | 
    
         
             
                end
         
     | 
| 
       98 
94 
     | 
    
         
             
              end
         
     | 
| 
       99 
95 
     | 
    
         | 
| 
      
 96 
     | 
    
         
            +
              def id_path_or_url_for_objs(obj, path_or_url, options)
         
     | 
| 
      
 97 
     | 
    
         
            +
                main_app.public_send(
         
     | 
| 
      
 98 
     | 
    
         
            +
                  "cms_id_#{path_or_url}",
         
     | 
| 
      
 99 
     | 
    
         
            +
                  options.merge(
         
     | 
| 
      
 100 
     | 
    
         
            +
                    id: obj.id,
         
     | 
| 
      
 101 
     | 
    
         
            +
                    slug: obj.slug.presence
         
     | 
| 
      
 102 
     | 
    
         
            +
                  )
         
     | 
| 
      
 103 
     | 
    
         
            +
                )
         
     | 
| 
      
 104 
     | 
    
         
            +
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       100 
106 
     | 
    
         
             
              def editor_authenticated?
         
     | 
| 
       101 
107 
     | 
    
         
             
                editing_context.authenticated_editor?
         
     | 
| 
       102 
108 
     | 
    
         
             
              end
         
     | 
| 
         @@ -65,7 +65,7 @@ module Scrivito 
     | 
|
| 
       65 
65 
     | 
    
         
             
                  # @example Return a "dummy" {Scrivito::User}
         
     | 
| 
       66 
66 
     | 
    
         
             
                  #   Scrivito.configure do |config|
         
     | 
| 
       67 
67 
     | 
    
         
             
                  #     config.find_user do |user_id|
         
     | 
| 
       68 
     | 
    
         
            -
                  #       Scrivito::User. 
     | 
| 
      
 68 
     | 
    
         
            +
                  #       Scrivito::User.define(user_id)
         
     | 
| 
       69 
69 
     | 
    
         
             
                  #     end
         
     | 
| 
       70 
70 
     | 
    
         
             
                  #   end
         
     | 
| 
       71 
71 
     | 
    
         
             
                  # @example Find the user with a custom user model and convert it to a {Scrivito::User}
         
     | 
| 
         @@ -84,7 +84,7 @@ module ControllerActions 
     | 
|
| 
       84 
84 
     | 
    
         
             
              end
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
       86 
86 
     | 
    
         
             
              def editing_context
         
     | 
| 
       87 
     | 
    
         
            -
                 
     | 
| 
      
 87 
     | 
    
         
            +
                EditingContextMiddleware.from_request(request)
         
     | 
| 
       88 
88 
     | 
    
         
             
              end
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
90 
     | 
    
         
             
              delegate :comparison, to: :editing_context
         
     | 
| 
         @@ -97,9 +97,17 @@ module ControllerActions 
     | 
|
| 
       97 
97 
     | 
    
         
             
              end
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
       99 
99 
     | 
    
         
             
              def load_widget
         
     | 
| 
       100 
     | 
    
         
            -
                 
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                 
     | 
| 
      
 100 
     | 
    
         
            +
                widget = widget_from_current_revision || widget_from_base_revision
         
     | 
| 
      
 101 
     | 
    
         
            +
                raise ResourceNotFound, "Widget with ID #{params[:widget_id]} not found!" unless widget
         
     | 
| 
      
 102 
     | 
    
         
            +
                widget
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              def widget_from_current_revision
         
     | 
| 
      
 106 
     | 
    
         
            +
                @obj.widget_from_pool(params[:widget_id])
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
              def widget_from_base_revision
         
     | 
| 
      
 110 
     | 
    
         
            +
                if comparison.active? # The "diff" mode.
         
     | 
| 
       103 
111 
     | 
    
         
             
                  @obj.in_revision(editing_context.selected_workspace.base_revision)
         
     | 
| 
       104 
112 
     | 
    
         
             
                    .widget_from_pool(params[:widget_id])
         
     | 
| 
       105 
113 
     | 
    
         
             
                end
         
     | 
| 
         @@ -11,6 +11,14 @@ module Scrivito 
     | 
|
| 
       11 
11 
     | 
    
         
             
                    raise "The value is not a valid ISO date time: #{iso_date_time.inspect}"
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def self.serialize(attribute_value)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  attribute_value = case attribute_value
         
     | 
| 
      
 17 
     | 
    
         
            +
                    when Date then attribute_value.to_time
         
     | 
| 
      
 18 
     | 
    
         
            +
                    when Time then attribute_value.to_time.utc
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
                  attribute_value.strftime('%Y%m%d%H%M%S') if attribute_value
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
       14 
22 
     | 
    
         
             
              end
         
     | 
| 
       15 
23 
     | 
    
         | 
| 
       16 
24 
     | 
    
         
             
            end
         
     | 
    
        data/lib/scrivito/diff.rb
    CHANGED
    
    
| 
         @@ -20,7 +20,7 @@ class EditingContext 
     | 
|
| 
       20 
20 
     | 
    
         
             
                  if @editor && !@editor.is_a?(Scrivito::User)
         
     | 
| 
       21 
21 
     | 
    
         
             
                    raise ScrivitoError.new(
         
     | 
| 
       22 
22 
     | 
    
         
             
                      "The editing auth callback has to return a Scrivito::User or falsy."+
         
     | 
| 
       23 
     | 
    
         
            -
                      " To upgrade please return Scrivito::User. 
     | 
| 
      
 23 
     | 
    
         
            +
                      " To upgrade please return Scrivito::User.define(id) and set the permissions" +
         
     | 
| 
       24 
24 
     | 
    
         
             
                      " of the user. See the documentation for further details."
         
     | 
| 
       25 
25 
     | 
    
         
             
                    )
         
     | 
| 
       26 
26 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/scrivito/errors.rb
    CHANGED
    
    
    
        data/lib/scrivito/link_parser.rb
    CHANGED
    
    | 
         @@ -10,7 +10,7 @@ module Scrivito 
     | 
|
| 
       10 
10 
     | 
    
         
             
                def parse(url)
         
     | 
| 
       11 
11 
     | 
    
         
             
                  uri = Addressable::URI.parse(url)
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                  if (params =  
     | 
| 
      
 13 
     | 
    
         
            +
                  if (params = sdk_route(uri.to_s)) && params[:controller] == 'scrivito/ui'
         
     | 
| 
       14 
14 
     | 
    
         
             
                    uri.path = params[:application_path]
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
         @@ -69,6 +69,11 @@ module Scrivito 
     | 
|
| 
       69 
69 
     | 
    
         
             
                  route_params && route_params[:controller] == 'scrivito/cms_dispatch'
         
     | 
| 
       70 
70 
     | 
    
         
             
                end
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
                def sdk_route(uri)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  Scrivito::SdkEngine.routes.recognize_path(uri.to_s, method: :get)
         
     | 
| 
      
 74 
     | 
    
         
            +
                rescue ActionController::RoutingError
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       72 
77 
     | 
    
         
             
                def route(uri)
         
     | 
| 
       73 
78 
     | 
    
         
             
                  Rails.application.routes.recognize_path(uri.to_s, method: :get)
         
     | 
| 
       74 
79 
     | 
    
         
             
                rescue ActionController::RoutingError
         
     | 
| 
         @@ -2,67 +2,36 @@ module Scrivito 
     | 
|
| 
       2 
2 
     | 
    
         
             
              module Migrations
         
     | 
| 
       3 
3 
     | 
    
         
             
                class CmsBackend
         
     | 
| 
       4 
4 
     | 
    
         
             
                  def read
         
     | 
| 
       5 
     | 
    
         
            -
                    obj = find_migration_store_obj
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                    if obj
         
     | 
| 
       8 
     | 
    
         
            -
                      obj[attribute_name]
         
     | 
| 
      
 5 
     | 
    
         
            +
                    if obj = find_migration_store_obj
         
     | 
| 
      
 6 
     | 
    
         
            +
                      obj.data_from_cms.value_of('versions')
         
     | 
| 
       9 
7 
     | 
    
         
             
                    else
         
     | 
| 
       10 
     | 
    
         
            -
                       
     | 
| 
      
 8 
     | 
    
         
            +
                      ''
         
     | 
| 
       11 
9 
     | 
    
         
             
                    end
         
     | 
| 
       12 
10 
     | 
    
         
             
                  end
         
     | 
| 
       13 
11 
     | 
    
         | 
| 
       14 
12 
     | 
    
         
             
                  def save(value)
         
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
       16 
     | 
    
         
            -
                      endpoint("objs/#{migration_store_obj.id}"),
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
      
 13 
     | 
    
         
            +
                    if Workspace.current.uses_obj_classes
         
     | 
| 
      
 14 
     | 
    
         
            +
                      CmsRestApi.put(endpoint("objs/#{migration_store_obj.id}"), obj: {versions: value})
         
     | 
| 
      
 15 
     | 
    
         
            +
                    else
         
     | 
| 
      
 16 
     | 
    
         
            +
                      CmsRestApi.put(endpoint("objs/#{migration_store_obj.id}"),
         
     | 
| 
      
 17 
     | 
    
         
            +
                        obj: {versions: ['string', value]})
         
     | 
| 
      
 18 
     | 
    
         
            +
                    end
         
     | 
| 
       21 
19 
     | 
    
         
             
                  end
         
     | 
| 
       22 
20 
     | 
    
         | 
| 
       23 
21 
     | 
    
         
             
                  private
         
     | 
| 
       24 
22 
     | 
    
         | 
| 
       25 
23 
     | 
    
         
             
                  def create
         
     | 
| 
       26 
     | 
    
         
            -
                     
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                        : 
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                            :name => attribute_name,
         
     | 
| 
       34 
     | 
    
         
            -
                            :type => :text,
         
     | 
| 
       35 
     | 
    
         
            -
                          },
         
     | 
| 
       36 
     | 
    
         
            -
                        ],
         
     | 
| 
       37 
     | 
    
         
            -
                        :type => :publication,
         
     | 
| 
       38 
     | 
    
         
            -
                        :title => obj_class_name,
         
     | 
| 
       39 
     | 
    
         
            -
                      }
         
     | 
| 
       40 
     | 
    
         
            -
                    )
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                    # Create obj
         
     | 
| 
       43 
     | 
    
         
            -
                    CmsRestApi.post(
         
     | 
| 
       44 
     | 
    
         
            -
                      endpoint('objs'),
         
     | 
| 
       45 
     | 
    
         
            -
                      :obj => {
         
     | 
| 
       46 
     | 
    
         
            -
                        :_path => path,
         
     | 
| 
       47 
     | 
    
         
            -
                        :_obj_class => obj_class_name,
         
     | 
| 
       48 
     | 
    
         
            -
                        attribute_name => initial_value,
         
     | 
| 
       49 
     | 
    
         
            -
                      }
         
     | 
| 
       50 
     | 
    
         
            -
                    )
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                    # Deactivate obj class
         
     | 
| 
       53 
     | 
    
         
            -
                    CmsRestApi.put(
         
     | 
| 
       54 
     | 
    
         
            -
                      endpoint("obj_classes/#{obj_class_name}"),
         
     | 
| 
       55 
     | 
    
         
            -
                      :obj_class => {
         
     | 
| 
       56 
     | 
    
         
            -
                        :is_active => false,
         
     | 
| 
       57 
     | 
    
         
            -
                      }
         
     | 
| 
       58 
     | 
    
         
            -
                    )
         
     | 
| 
      
 24 
     | 
    
         
            +
                    if Workspace.current.uses_obj_classes
         
     | 
| 
      
 25 
     | 
    
         
            +
                      CmsRestApi.post(endpoint('objs'),
         
     | 
| 
      
 26 
     | 
    
         
            +
                        obj: {_path: path, _obj_class: 'MigrationStore', versions: ''})
         
     | 
| 
      
 27 
     | 
    
         
            +
                    else
         
     | 
| 
      
 28 
     | 
    
         
            +
                      CmsRestApi.post(endpoint('objs'),
         
     | 
| 
      
 29 
     | 
    
         
            +
                        obj: {_path: path, _obj_class: 'MigrationStore', versions: ['string', '']})
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
       59 
31 
     | 
    
         
             
                  end
         
     | 
| 
       60 
32 
     | 
    
         | 
| 
       61 
33 
     | 
    
         
             
                  def migration_store_obj
         
     | 
| 
       62 
     | 
    
         
            -
                    unless find_migration_store_obj
         
     | 
| 
       63 
     | 
    
         
            -
                      create
         
     | 
| 
       64 
     | 
    
         
            -
                    end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
      
 34 
     | 
    
         
            +
                    create unless find_migration_store_obj
         
     | 
| 
       66 
35 
     | 
    
         
             
                    find_migration_store_obj
         
     | 
| 
       67 
36 
     | 
    
         
             
                  end
         
     | 
| 
       68 
37 
     | 
    
         | 
| 
         @@ -70,22 +39,10 @@ module Scrivito 
     | 
|
| 
       70 
39 
     | 
    
         
             
                    Obj.find_by_path(path)
         
     | 
| 
       71 
40 
     | 
    
         
             
                  end
         
     | 
| 
       72 
41 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                  def attribute_name
         
     | 
| 
       74 
     | 
    
         
            -
                    'versions'
         
     | 
| 
       75 
     | 
    
         
            -
                  end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                  def obj_class_name
         
     | 
| 
       78 
     | 
    
         
            -
                    'MigrationStore'
         
     | 
| 
       79 
     | 
    
         
            -
                  end
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
42 
     | 
    
         
             
                  def path
         
     | 
| 
       82 
43 
     | 
    
         
             
                    '/_internal/migration-store'
         
     | 
| 
       83 
44 
     | 
    
         
             
                  end
         
     | 
| 
       84 
45 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                  def initial_value
         
     | 
| 
       86 
     | 
    
         
            -
                    ''
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
46 
     | 
    
         
             
                  def endpoint(path)
         
     | 
| 
       90 
47 
     | 
    
         
             
                    "workspaces/#{Workspace.current.id}/#{path}"
         
     | 
| 
       91 
48 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Scrivito
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            #
         
     | 
| 
       4 
     | 
    
         
            -
            # @api  
     | 
| 
      
 4 
     | 
    
         
            +
            # @api public
         
     | 
| 
       5 
5 
     | 
    
         
             
            #
         
     | 
| 
       6 
6 
     | 
    
         
             
            class ModelLibrary
         
     | 
| 
       7 
7 
     | 
    
         
             
              attr_reader :custom_pages, :custom_widgets, :custom_paths
         
     | 
| 
         @@ -13,7 +13,7 @@ class ModelLibrary 
     | 
|
| 
       13 
13 
     | 
    
         
             
              #
         
     | 
| 
       14 
14 
     | 
    
         
             
              # Clears model cache.
         
     | 
| 
       15 
15 
     | 
    
         
             
              #
         
     | 
| 
       16 
     | 
    
         
            -
              # @api  
     | 
| 
      
 16 
     | 
    
         
            +
              # @api public
         
     | 
| 
       17 
17 
     | 
    
         
             
              # @see Scrivito.models
         
     | 
| 
       18 
18 
     | 
    
         
             
              #
         
     | 
| 
       19 
19 
     | 
    
         
             
              def clear_cache
         
     | 
| 
         @@ -25,7 +25,7 @@ class ModelLibrary 
     | 
|
| 
       25 
25 
     | 
    
         
             
              #
         
     | 
| 
       26 
26 
     | 
    
         
             
              # Configures which models Scrivito assumes as pages and widgets.
         
     | 
| 
       27 
27 
     | 
    
         
             
              #
         
     | 
| 
       28 
     | 
    
         
            -
              # @api  
     | 
| 
      
 28 
     | 
    
         
            +
              # @api public
         
     | 
| 
       29 
29 
     | 
    
         
             
              # @see Scrivito.models
         
     | 
| 
       30 
30 
     | 
    
         
             
              #
         
     | 
| 
       31 
31 
     | 
    
         
             
              def define(&block)
         
     | 
| 
         @@ -35,7 +35,7 @@ class ModelLibrary 
     | 
|
| 
       35 
35 
     | 
    
         
             
              #
         
     | 
| 
       36 
36 
     | 
    
         
             
              # Lists available page models.
         
     | 
| 
       37 
37 
     | 
    
         
             
              #
         
     | 
| 
       38 
     | 
    
         
            -
              # @api  
     | 
| 
      
 38 
     | 
    
         
            +
              # @api public
         
     | 
| 
       39 
39 
     | 
    
         
             
              # @see Scrivito.models
         
     | 
| 
       40 
40 
     | 
    
         
             
              # @return [Scrivito::ClassCollection] available page classes
         
     | 
| 
       41 
41 
     | 
    
         
             
              #
         
     | 
| 
         @@ -46,7 +46,7 @@ class ModelLibrary 
     | 
|
| 
       46 
46 
     | 
    
         
             
              #
         
     | 
| 
       47 
47 
     | 
    
         
             
              # Lists available widget models.
         
     | 
| 
       48 
48 
     | 
    
         
             
              #
         
     | 
| 
       49 
     | 
    
         
            -
              # @api  
     | 
| 
      
 49 
     | 
    
         
            +
              # @api public
         
     | 
| 
       50 
50 
     | 
    
         
             
              # @see Scrivito.models
         
     | 
| 
       51 
51 
     | 
    
         
             
              # @return [Scrivito::ClassCollection] available widget classes
         
     | 
| 
       52 
52 
     | 
    
         
             
              #
         
     | 
| 
         @@ -57,7 +57,7 @@ class ModelLibrary 
     | 
|
| 
       57 
57 
     | 
    
         
             
              #
         
     | 
| 
       58 
58 
     | 
    
         
             
              # Lists available paths to scan for models.
         
     | 
| 
       59 
59 
     | 
    
         
             
              #
         
     | 
| 
       60 
     | 
    
         
            -
              # @api  
     | 
| 
      
 60 
     | 
    
         
            +
              # @api public
         
     | 
| 
       61 
61 
     | 
    
         
             
              # @see Scrivito.models
         
     | 
| 
       62 
62 
     | 
    
         
             
              # @return [Array<String>] available paths to scan for models.
         
     | 
| 
       63 
63 
     | 
    
         
             
              #
         
     | 
    
        data/lib/scrivito/obj_class.rb
    CHANGED
    
    | 
         @@ -4,13 +4,36 @@ module Scrivito 
     | 
|
| 
       4 
4 
     | 
    
         
             
              # are defined by {Scrivito::Attribute} instances.
         
     | 
| 
       5 
5 
     | 
    
         
             
              #
         
     | 
| 
       6 
6 
     | 
    
         
             
              # @api public
         
     | 
| 
      
 7 
     | 
    
         
            +
              # @deprecated
         
     | 
| 
       7 
8 
     | 
    
         
             
              class ObjClass
         
     | 
| 
       8 
9 
     | 
    
         
             
                include ModelIdentity
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                class << self
         
     | 
| 
       11 
12 
     | 
    
         
             
                  #
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # Remove all obj classes.
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # This method removes all classes in the corresponding workspace. By doing that it migrates
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # the contents of the workspace. The migrated workspace will not use {Scrivito::ObjClass},
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # {Scrivito::Attribute} etc. anymore to determine which attributes an {Obj} has, but will
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # use attributes defined in model with {Scrivito::AttributeContent::ClassMethods#attribute}.
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # The +id+ of the current workspace must be +"rtc"+.
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # For detailed migration instructions please visit https://scrivito.com/obj-class-migration.
         
     | 
| 
      
 21 
     | 
    
         
            +
                  #
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # @api public
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # @see Scrivito::AttributeContent::ClassMethods#attribute
         
     | 
| 
      
 24 
     | 
    
         
            +
                  # @raise [ScrivitoError] if the +id+ of the corresponding workspace is not +"rtc"+
         
     | 
| 
      
 25 
     | 
    
         
            +
                  #
         
     | 
| 
      
 26 
     | 
    
         
            +
                  def remove
         
     | 
| 
      
 27 
     | 
    
         
            +
                    if Workspace.current.rtc?
         
     | 
| 
      
 28 
     | 
    
         
            +
                      Workspace.current.api_request(:delete, '/obj_classes')
         
     | 
| 
      
 29 
     | 
    
         
            +
                    else
         
     | 
| 
      
 30 
     | 
    
         
            +
                      raise ScrivitoError, 'Scrivito::ObjClass.remove is only allowed in the "rtc" workspace.'
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       12 
34 
     | 
    
         
             
                  # Returns all obj classes.
         
     | 
| 
       13 
35 
     | 
    
         
             
                  # @api public
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       14 
37 
     | 
    
         
             
                  # @return Scrivito::ObjClassCollection
         
     | 
| 
       15 
38 
     | 
    
         
             
                  #
         
     | 
| 
       16 
39 
     | 
    
         
             
                  def all
         
     | 
| 
         @@ -20,6 +43,7 @@ module Scrivito 
     | 
|
| 
       20 
43 
     | 
    
         
             
                  # Finds an obj class by its name.
         
     | 
| 
       21 
44 
     | 
    
         
             
                  #
         
     | 
| 
       22 
45 
     | 
    
         
             
                  # @api public
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       23 
47 
     | 
    
         
             
                  #
         
     | 
| 
       24 
48 
     | 
    
         
             
                  # @example Find the obj class named "Homepage" in the current {Scrivito::Workspace}.
         
     | 
| 
       25 
49 
     | 
    
         
             
                  #   ObjClass.find('Homepage')
         
     | 
| 
         @@ -40,6 +64,7 @@ module Scrivito 
     | 
|
| 
       40 
64 
     | 
    
         
             
                  # Creates a new obj class and persists it in the CMS.
         
     | 
| 
       41 
65 
     | 
    
         
             
                  #
         
     | 
| 
       42 
66 
     | 
    
         
             
                  # @api public
         
     | 
| 
      
 67 
     | 
    
         
            +
                  # @deprecated
         
     | 
| 
       43 
68 
     | 
    
         
             
                  #
         
     | 
| 
       44 
69 
     | 
    
         
             
                  # This allows you to set the different properties of an obj class by
         
     | 
| 
       45 
70 
     | 
    
         
             
                  # providing a hash with the property names as keys and the values you want
         
     | 
| 
         @@ -80,26 +105,7 @@ module Scrivito 
     | 
|
| 
       80 
105 
     | 
    
         
             
                  #
         
     | 
| 
       81 
106 
     | 
    
         
             
                  # @return [Scrivito::ObjClass]
         
     | 
| 
       82 
107 
     | 
    
         
             
                  def create(properties)
         
     | 
| 
       83 
     | 
    
         
            -
                     
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                    if properties.key?(:is_binary)
         
     | 
| 
       86 
     | 
    
         
            -
                      Scrivito::Deprecation.warn(
         
     | 
| 
       87 
     | 
    
         
            -
                        "`is_binary' is deprecated and should not be used anymore."\
         
     | 
| 
       88 
     | 
    
         
            -
                        "Please remove the parameter and specify all attributes you need "\
         
     | 
| 
       89 
     | 
    
         
            -
                        "including the previously provided attributes 'title', 'body', 'blob'"
         
     | 
| 
       90 
     | 
    
         
            -
                      )
         
     | 
| 
       91 
     | 
    
         
            -
                    end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                    if properties[:attributes]
         
     | 
| 
       94 
     | 
    
         
            -
                      properties[:attributes].map! do |attribute|
         
     | 
| 
       95 
     | 
    
         
            -
                        attribute.respond_to?(:to_cms_rest_api) ? attribute : Attribute.new(attribute)
         
     | 
| 
       96 
     | 
    
         
            -
                      end
         
     | 
| 
       97 
     | 
    
         
            -
                    end
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                    workspace = Workspace.current
         
     | 
| 
       100 
     | 
    
         
            -
                    raw_obj_class_data = workspace.api_request(:post, '/obj_classes',
         
     | 
| 
       101 
     | 
    
         
            -
                        obj_class: format_properties_for_cms(properties))
         
     | 
| 
       102 
     | 
    
         
            -
                    new(ObjClassData.new(raw_obj_class_data), workspace)
         
     | 
| 
      
 108 
     | 
    
         
            +
                    Scrivito.raise_obj_class_deprecated_error
         
     | 
| 
       103 
109 
     | 
    
         
             
                  end
         
     | 
| 
       104 
110 
     | 
    
         | 
| 
       105 
111 
     | 
    
         
             
                  private
         
     | 
| 
         @@ -136,6 +142,7 @@ module Scrivito 
     | 
|
| 
       136 
142 
     | 
    
         
             
                end
         
     | 
| 
       137 
143 
     | 
    
         | 
| 
       138 
144 
     | 
    
         
             
                # @api public
         
     | 
| 
      
 145 
     | 
    
         
            +
                # @deprecated
         
     | 
| 
       139 
146 
     | 
    
         
             
                # Returns true if this ObjClass was created with a +is_binary+ option.
         
     | 
| 
       140 
147 
     | 
    
         
             
                # Creating ObjClass with this option is deprecated and will be removed.
         
     | 
| 
       141 
148 
     | 
    
         
             
                #
         
     | 
| 
         @@ -146,16 +153,20 @@ module Scrivito 
     | 
|
| 
       146 
153 
     | 
    
         | 
| 
       147 
154 
     | 
    
         
             
                # @!attribute [r] id
         
     | 
| 
       148 
155 
     | 
    
         
             
                #   @api public
         
     | 
| 
      
 156 
     | 
    
         
            +
                #   @deprecated
         
     | 
| 
       149 
157 
     | 
    
         
             
                #   @return [String] unique identifier of this obj class
         
     | 
| 
       150 
158 
     | 
    
         
             
                # @!attribute [r] name
         
     | 
| 
       151 
159 
     | 
    
         
             
                #   @api public
         
     | 
| 
      
 160 
     | 
    
         
            +
                #   @deprecated
         
     | 
| 
       152 
161 
     | 
    
         
             
                #   @return [String] the name of this obj class
         
     | 
| 
       153 
162 
     | 
    
         
             
                # @!attribute [r] is_active
         
     | 
| 
       154 
163 
     | 
    
         
             
                #   @api public
         
     | 
| 
      
 164 
     | 
    
         
            +
                #   @deprecated
         
     | 
| 
       155 
165 
     | 
    
         
             
                #   @return [Boolean] whether instances can be created with this obj class
         
     | 
| 
       156 
166 
     | 
    
         
             
                delegate :id, :name, :is_active, to: :obj_class_data
         
     | 
| 
       157 
167 
     | 
    
         | 
| 
       158 
168 
     | 
    
         
             
                # @api public
         
     | 
| 
      
 169 
     | 
    
         
            +
                # @deprecated
         
     | 
| 
       159 
170 
     | 
    
         
             
                # @return [Boolean] whether instances of this class are binary, e.g. images or PDFs
         
     | 
| 
       160 
171 
     | 
    
         
             
                # @deprecated Please create objects without using the +is_binary+ option
         
     | 
| 
       161 
172 
     | 
    
         
             
                # @raise [ScrivitoError] if the method is called on a non-legacy-type ObjClass
         
     | 
| 
         @@ -172,6 +183,7 @@ module Scrivito 
     | 
|
| 
       172 
183 
     | 
    
         
             
                alias_method :binary?, :is_binary
         
     | 
| 
       173 
184 
     | 
    
         | 
| 
       174 
185 
     | 
    
         
             
                # @api public
         
     | 
| 
      
 186 
     | 
    
         
            +
                # @deprecated
         
     | 
| 
       175 
187 
     | 
    
         
             
                # @return [Scrivito::AttributeCollection] the attributes of this obj class.
         
     | 
| 
       176 
188 
     | 
    
         
             
                #
         
     | 
| 
       177 
189 
     | 
    
         
             
                # @example Find an attribute named "locale" for the obj class "Homepage".
         
     | 
| 
         @@ -191,6 +203,7 @@ module Scrivito 
     | 
|
| 
       191 
203 
     | 
    
         
             
                attr_reader :attributes
         
     | 
| 
       192 
204 
     | 
    
         | 
| 
       193 
205 
     | 
    
         
             
                # @api public
         
     | 
| 
      
 206 
     | 
    
         
            +
                # @deprecated
         
     | 
| 
       194 
207 
     | 
    
         
             
                # Updates this obj class and persists the changes in the CMS. It is not possible to
         
     | 
| 
       195 
208 
     | 
    
         
             
                # update the +name+.
         
     | 
| 
       196 
209 
     | 
    
         
             
                #
         
     | 
| 
         @@ -221,34 +234,7 @@ module Scrivito 
     | 
|
| 
       221 
234 
     | 
    
         
             
                #
         
     | 
| 
       222 
235 
     | 
    
         
             
                # @return [nil]
         
     | 
| 
       223 
236 
     | 
    
         
             
                def update(properties)
         
     | 
| 
       224 
     | 
    
         
            -
                   
     | 
| 
       225 
     | 
    
         
            -
             
     | 
| 
       226 
     | 
    
         
            -
                  if params.has_key?(:is_binary)
         
     | 
| 
       227 
     | 
    
         
            -
                    if params[:is_binary].nil?
         
     | 
| 
       228 
     | 
    
         
            -
                      params[:type] = params.delete(:is_binary)
         
     | 
| 
       229 
     | 
    
         
            -
                    else
         
     | 
| 
       230 
     | 
    
         
            -
                      raise ScrivitoError, "#{self.class} only supports removing the `is_binary' property"
         
     | 
| 
       231 
     | 
    
         
            -
                    end
         
     | 
| 
       232 
     | 
    
         
            -
                  end
         
     | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
       234 
     | 
    
         
            -
                  if params.has_key?(:name)
         
     | 
| 
       235 
     | 
    
         
            -
                    raise ScrivitoError, "#{self.class} does not support changing 'name'. Please remove" \
         
     | 
| 
       236 
     | 
    
         
            -
                      " the key from the properties."
         
     | 
| 
       237 
     | 
    
         
            -
                  end
         
     | 
| 
       238 
     | 
    
         
            -
             
     | 
| 
       239 
     | 
    
         
            -
                  if params.has_key?(:attributes)
         
     | 
| 
       240 
     | 
    
         
            -
                    params[:attributes].map! do |attribute|
         
     | 
| 
       241 
     | 
    
         
            -
                      attribute = Attribute.new(attribute) unless attribute.respond_to?(:to_cms_rest_api)
         
     | 
| 
       242 
     | 
    
         
            -
                      attribute.obj_class = self
         
     | 
| 
       243 
     | 
    
         
            -
                      attribute.to_cms_rest_api
         
     | 
| 
       244 
     | 
    
         
            -
                    end
         
     | 
| 
       245 
     | 
    
         
            -
                  end
         
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
                  raw_obj_class_data = workspace.api_request(:put, "/obj_classes/#{name}", obj_class: params)
         
     | 
| 
       248 
     | 
    
         
            -
                  update_obj_class_data(ObjClassData.new(raw_obj_class_data))
         
     | 
| 
       249 
     | 
    
         
            -
                  workspace.reload
         
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
                  nil
         
     | 
| 
      
 237 
     | 
    
         
            +
                  Scrivito.raise_obj_class_deprecated_error
         
     | 
| 
       252 
238 
     | 
    
         
             
                end
         
     | 
| 
       253 
239 
     | 
    
         | 
| 
       254 
240 
     | 
    
         
             
                def update_obj_class_data(obj_class_data)
         
     |