lib/scrivito/workspace.rb in scrivito_sdk-0.15.0 vs lib/scrivito/workspace.rb in scrivito_sdk-0.16.0

- old
+ new

@@ -199,14 +199,94 @@ def assert_revertable raise ScrivitoError, 'published workspace is not modifiable' if published? raise ScrivitoError, 'rtc workspace may contain attribute and class changes' if rtc? end + # Find a {BasicObj Obj} by its id. + # If the parameter is an Array containing ids, return a list of corresponding Objs. + # @param [String, Integer, Array<String, Integer>]id_or_list + # @return [Obj, Array<Obj>] + # @api public + def find_obj(id_or_list) + find_filtering_deleted(id_or_list, false) + end + + # Find a {BasicObj Obj} by its id. + # If the parameter is an Array containing ids, return a list of corresponding Objs. + # The results include deleted objects as well. + # @param [String, Integer, Array<String, Integer>]id_or_list + # @return [Obj, Array<Obj>] + # @api public + def find_obj_including_deleted(id_or_list) + find_filtering_deleted(id_or_list, true) + end + + # Find the {BasicObj Obj} with the given path. + # Returns +nil+ if no matching Obj exists. + # @param [String] path Path of the {BasicObj Obj}. + # @return [Obj] + # @api public + def find_obj_by_path(path) + find_objs_by(:path, [path]).first.first + end + + # Returns the {BasicObj Obj} with the given permalink, or +nil+ if no matching Obj exists. + # @param [String] permalink The permalink of the {BasicObj Obj}. + # @return [Obj] + # @api public + def find_obj_by_permalink(permalink) + find_objs_by(:permalink, [permalink]).first.first + end + + def find_objs_by_parent_path(path) + find_objs_by(:ppath, [path]).first + end + + def find_obj_by_id(id) + find_objs_by(:id, [id]).first.first + end + + def find_objs_by_paths(paths) + find_objs_by(:path, paths).map(&:first) + end + def inspect "<#{self.class} id=\"#{id}\" title=\"#{title}\">" end private + + def find_filtering_deleted(id_or_list, include_deleted) + case id_or_list + when Array + find_objs_by(:id, id_or_list, include_deleted).map(&:first).compact + else + obj = find_objs_by(:id, [id_or_list.to_s], include_deleted).first.first + obj or raise ResourceNotFound, "Could not find Obj with id #{id_or_list}" + end + end + + # accepts the name of an "obj_by" - view, a list of keys + # and an "include_deleted" flag + # returns a list of lists of Objs: a list of Objs for each given keys. + def find_objs_by(view, keys, include_deleted = false) + if include_deleted + finder_method_name = :find_obj_data_including_deleted_by + else + finder_method_name = :find_obj_data_by + end + + result = CmsBackend.instance.public_send(finder_method_name, revision, view, keys) + + result.map do |list| + list.map do |obj_data| + obj = BasicObj.instantiate(obj_data) + obj.revision = revision + + obj + end + end + end def backend_url "/workspaces/#{id}" end