uniq.
each do |resource_class|
resource_class.filter([['uuid','in',uuids_to_add]]).each do |dst|
- if resource_class == Collection
+ if resource_class == Collection and not Collection.attribute_info.include?(:name)
dst = Link.new(owner_uuid: target_uuid,
tail_uuid: target_uuid,
head_uuid: dst.uuid,
end
def load_contents_objects kinds=[]
- @limit = 5
kind_filters = @filters.select do |attr,op,val|
op == 'is_a' and val.is_a? Array and val.count > 1
end
- if /^created_at/ =~ @order[0] and kind_filters.count == 1
+ if /^created_at\b/ =~ @order[0] and kind_filters.count == 1
# If filtering on multiple types and sorting by date: Get the
# first page of each type, sort the entire set, truncate to one
# page, and use the last item on this page as a filter for
# retrieving the next page. Ideally the API would do this for
# us, but it doesn't (yet).
+ nextpage_operator = /\bdesc$/i =~ @order[0] ? '<' : '>'
@objects = []
+ @name_link_for = {}
kind_filters.each do |attr,op,val|
(val.is_a?(Array) ? val : [val]).each do |type|
- @objects += @object.contents(order: @order,
- limit: @limit,
- include_linked: true,
- filters: (@filters - kind_filters + [['uuid', 'is_a', type]]),
- offset: @offset)
+ objects = @object.contents(order: @order,
+ limit: @limit,
+ include_linked: true,
+ filters: (@filters - kind_filters + [['uuid', 'is_a', type]]),
+ offset: @offset)
+ objects.each do |object|
+ @name_link_for[object.andand.uuid] = objects.links_for(object, 'name').first
+ end
+ @objects += objects
end
end
- @objects = @objects.to_a.sort_by(&:created_at).reverse[0..@limit-1]
+ @objects = @objects.to_a.sort_by(&:created_at)
+ @objects.reverse! if nextpage_operator == '<'
+ @objects = @objects[0..@limit-1]
@next_page_filters = @filters.reject do |attr,op,val|
- attr == 'created_at' and op == '<'
+ attr == 'created_at' and op == nextpage_operator
end
if @objects.any?
- @next_page_filters += [['created_at', '<', @objects.last.created_at]]
+ @next_page_filters += [['created_at',
+ nextpage_operator,
+ @objects.last.created_at]]
@next_page_href = url_for(partial: :contents_rows,
filters: @next_page_filters.to_json)
else
offset: @offset)
@next_page_href = next_page_href(partial: :contents_rows)
end
+
+ preload_links_for_objects(@objects.to_a)
end
def show
name_links.each do |name_link|
objects_and_names << [object, name_link]
end
+ elsif @name_link_for.andand[object.uuid]
+ objects_and_names << [object, @name_link_for[object.uuid]]
elsif object.respond_to? :name
objects_and_names << [object, object]
- else
+ elsif not Collection.attribute_info.include?(:name)
objects_and_names << [object,
Link.new(owner_uuid: @object.uuid,
tail_uuid: @object.uuid,