Skip to content

Commit

Permalink
Additional objects
Browse files Browse the repository at this point in the history
closes TryGhost#2620
- moved aspect -> filters
- updated tests
- fixed inconsistency in pagination object
  • Loading branch information
sebgie committed Apr 27, 2014
1 parent 33884e7 commit e1bbc60
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 31 deletions.
23 changes: 5 additions & 18 deletions core/server/controllers/frontend.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,6 @@ function getPostPage(options) {
}
options.include = 'author,tags,fields';
return api.posts.browse(options);
}).then(function (page) {

// A bit of a hack for situations with no content.
if (page.meta.pagination.pages === 0) {
page.meta.pagination.pages = 1;
}

return page;
});
}

Expand Down Expand Up @@ -121,7 +113,7 @@ frontendControllers = {

// Format data for template
response = _.extend(formatPageResponse(posts, page), {
tag: page.aspect.tag
tag: page.meta.filters.tags ? page.meta.filters.tags[0] : ''
});

res.render(view, response);
Expand Down Expand Up @@ -286,8 +278,10 @@ frontendControllers = {
feed;

if (tagParam) {
title = page.aspect.tag.name + ' - ' + title;
feedUrl = feedUrl + 'tag/' + page.aspect.tag.slug + '/';
if (page.meta.filters.tags) {
title = page.meta.filters.tags[0].name + ' - ' + title;
feedUrl = feedUrl + 'tag/' + page.meta.filters.tags[0].slug + '/';
}
}

feed = new RSS({
Expand All @@ -299,13 +293,6 @@ frontendControllers = {
ttl: '60'
});


// A bit of a hack for situations with no content.
if (maxPage === 0) {
maxPage = 1;
page.meta.pagination.pages = 1;
}

// If page is greater than number of pages we have, redirect to last page
if (pageParam > maxPage) {
if (tagParam) {
Expand Down
10 changes: 6 additions & 4 deletions core/server/models/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,13 +380,14 @@ Post = ghostBookshelf.Model.extend({
// Format response of data
.then(function (resp) {
var totalPosts = parseInt(resp[0].aggregate, 10),
calcPages = Math.ceil(totalPosts / opts.limit),
pagination = {},
meta = {},
data = {};

pagination['page'] = parseInt(opts.page, 10);
pagination['limit'] = opts.limit;
pagination['pages'] = Math.ceil(totalPosts / opts.limit);
pagination['pages'] = calcPages === 0 ? 1 : calcPages;
pagination['total'] = totalPosts;
pagination['next'] = null;
pagination['prev'] = null;
Expand All @@ -413,9 +414,10 @@ Post = ghostBookshelf.Model.extend({
}

if (tagInstance) {
data.aspect = {
tag: tagInstance.toJSON()
};
meta['filters'] = {};
if (!tagInstance.isNew()) {
meta.filters['tags'] = [tagInstance.toJSON()];
}
}

return data;
Expand Down
16 changes: 8 additions & 8 deletions core/test/integration/model/model_posts_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -395,35 +395,35 @@ describe('Post Model', function () {
paginationResult.meta.pagination.page.should.equal(1);
paginationResult.meta.pagination.limit.should.equal(15);
paginationResult.meta.pagination.pages.should.equal(1);
paginationResult.aspect.tag.name.should.equal('bacon');
paginationResult.aspect.tag.slug.should.equal('bacon');
paginationResult.meta.filters.tags[0].name.should.equal('bacon');
paginationResult.meta.filters.tags[0].slug.should.equal('bacon');
paginationResult.posts.length.should.equal(2);

return PostModel.findPage({page: 1, tag: 'kitchen-sink'});
}).then(function (paginationResult) {
paginationResult.meta.pagination.page.should.equal(1);
paginationResult.meta.pagination.limit.should.equal(15);
paginationResult.meta.pagination.pages.should.equal(1);
paginationResult.aspect.tag.name.should.equal('kitchen sink');
paginationResult.aspect.tag.slug.should.equal('kitchen-sink');
paginationResult.meta.filters.tags[0].name.should.equal('kitchen sink');
paginationResult.meta.filters.tags[0].slug.should.equal('kitchen-sink');
paginationResult.posts.length.should.equal(2);

return PostModel.findPage({page: 1, tag: 'injection'});
}).then(function (paginationResult) {
paginationResult.meta.pagination.page.should.equal(1);
paginationResult.meta.pagination.limit.should.equal(15);
paginationResult.meta.pagination.pages.should.equal(2);
paginationResult.aspect.tag.name.should.equal('injection');
paginationResult.aspect.tag.slug.should.equal('injection');
paginationResult.meta.filters.tags[0].name.should.equal('injection');
paginationResult.meta.filters.tags[0].slug.should.equal('injection');
paginationResult.posts.length.should.equal(15);

return PostModel.findPage({page: 2, tag: 'injection'});
}).then(function (paginationResult) {
paginationResult.meta.pagination.page.should.equal(2);
paginationResult.meta.pagination.limit.should.equal(15);
paginationResult.meta.pagination.pages.should.equal(2);
paginationResult.aspect.tag.name.should.equal('injection');
paginationResult.aspect.tag.slug.should.equal('injection');
paginationResult.meta.filters.tags[0].name.should.equal('injection');
paginationResult.meta.filters.tags[0].slug.should.equal('injection');
paginationResult.posts.length.should.equal(11);

done();
Expand Down
4 changes: 3 additions & 1 deletion core/test/unit/frontend_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,10 @@ describe('Frontend Controller', function () {
page: 1,
pages: 1,
},
filters: {
tags: [mockTags[0]]
}
},
aspect: {tag: mockTags[0]}
});
});

Expand Down

0 comments on commit e1bbc60

Please sign in to comment.