lib/scrivito/revision.rb in scrivito_sdk-0.60.0 vs lib/scrivito/revision.rb in scrivito_sdk-0.65.0.rc1

- old
+ new

@@ -1,13 +1,73 @@ module Scrivito -class Revision < Struct.new(:id, :content_state, :workspace, :base) +class Revision < Struct.new(:id, :workspace, :base) def initialize(options) - super(*options.values_at(:id, :content_state, :workspace, :base)) + super(*options.values_at(:id, :workspace, :base)) end + def content_state + base ? workspace.base_content_state : workspace.content_state + end + + def content_state_id + base ? workspace.base_content_state_id : workspace.content_state_id + end + + def content_state_node + @node ||= Backend::ContentStateNode.new(content_state_id) + end + + # returns a list of raw rest-api hashes, one for each given id + def obj_mget_request(ids) + internal_obj_mget(ids, []) + end + + # performs given search-query, returns the search-hits as a list of obj-ids + def obj_search_request(query) + if base + raise Scrivito::InternalError, "search not possible for base revision" + end + + internal_obj_search(query, []) + end + + def api_request(verb, path, payload = nil) + CmsRestApi.public_send(verb, "revisions/#{id}#{path}", payload) + end + def base? !!base + end + + private + + def internal_obj_search(query, result) + response = workspace.api_request(:get, "/objs/search", { + query: query, include_deleted: true, size: 100, offset: result.size + }) + + cur_result = response['results'].map { |obj_data| obj_data['id'] } + result += cur_result + + if result.size >= response['total'].to_i + result + else + internal_obj_search(query, result) + end + end + + def internal_obj_mget(ids, result) + response = api_request( + :get, "/objs/mget", ids: ids, include_deleted: true) + + current_result = result + response["results"] + + if response["results"].size < ids.size + internal_obj_mget(ids.drop(response["results"].size), current_result) + else + current_result + end end end end