Skip to content

Instantly share code, notes, and snippets.

@lancejpollard
Created November 22, 2012 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lancejpollard/1c9acd98ac1c1e469355 to your computer and use it in GitHub Desktop.
Save lancejpollard/1c9acd98ac1c1e469355 to your computer and use it in GitHub Desktop.
Tower Bindable Controller/Params/Criteria API Ideas
// http://docs.meteor.com/#allow
// https://github.com/crofty/ember.js/commit/757bea350f9fca252447c69690e5faa19472e5e2
App.User = Tower.Model.extend({
});
App.Posts = Tower.Controller.extend({
}).allow('create', function(userId, record) {
return (userId && record.owner === userId);
});
App.Posts = Tower.Controller.allow('create', function(userId, record) {
return (userId && record.owner === userId);
}).extend({
});
App.Posts = Tower.Controller.extend({
// this is a keyword fn, can[Action]
canCreate: function(userId, record, callback) {
}
});
App.CommentsController = Tower.Controller.extend({
canCreate: Ember.computed(function() {
return this.get('user')
}).property('user'),
// http://jsfiddle.net/ud3323/yjs8D/
contentDidChange: Ember.observer(function() {
this.refresh();
}, 'content', 'App.params', 'sort'),
contentChangeBindings: ['App.params.title', 'App.params.x']
});
Cursor.authorize = function(user) {
this.set('user', user);
return this;
}
App.get('commentsController').authorize(user).where()
App.get('usersController').allow('update', fn);
// you can do a default scope like that!
App.Post = Tower.Model.extend().where(active: true);
App.login()
App.logout()
// summed up:
App.CommentsAuthorizationMixin = Ember.Mixin.create({
canCreate: Ember.computed(function() {
return this.get('user')
}).property('user')
});
App.Comments = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
content: Ember.computed(function(key, value) {
if (arguments.length > 1) {
return value;
} else {
return this.toArray();
}
}).property('App.params');
});
App.commentsController.authorize(user).create()
App.Comments = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
whereCreatedAtGte: Ember.computed(function() {
return _(2).days().ago();
}).property('@each.createdAt'),
page: 1,
sort: ['createdAt', 'title'],
});
// this is going to be computationally slow though
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
whereCreatedAtGte: _(2).days().ago().computed(),
page: 1,
sort: ['createdAt', 'title'],
limit: 20
});
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
where: Ember.Object.extend({
createdAt: _(2).days().ago().computed()
}),
page: 1,
sort: ['createdAt', 'title'],
limit: 20
});
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
query: Ember.Object.extend({
, createdAtGte: _(2).days().ago().computed()
, page: 1
, sort: ['createdAt', 'title']
, limit: 20
})
});
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
query: Ember.Object.extend({
, where: Ember.Object.extend({
createdAtGte: _(2).days().ago().computed()
})
, page: 1
, sort: ['createdAt', 'title']
, limit: 20
})
});
Tower.Cursor.currentMixin = function() {
return this._currentMixin || (this._currentMixin = {});
}
Tower.Cursor.where = function() {
this.currentMixin().where = arguments
}
Tower.Cursor.reopenClass({
extend: function() {
return this._super(this.currentMixin());
}
})
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
query: Tower.Cursor
.gte('createdAt', _(2).days().ago().computed())
.page(1)
.desc(['createdAt', 'title'])
.limit(20)
.extend()
})
});
App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
query: Tower.Cursor
.gte('createdAt', _(2).days().ago().computed())
.page(1)
.desc(['createdAt', 'title'])
.limit(20)
.extend()
})
});
router.get('commentsController')
.gte('createdAt', _(2).days().ago().computed())
.page(1)
.desc(['createdAt', 'title'])
.limit(20)
.run() // .all()
App.get('commentsController.query').setProperties(createdAt: new Date)
App.get('commentsController').params(createdAt: new Date)
/*
* App.User.quere(whereCreatedAtGte: _(2).days().ago(), page: 1, sort: ['createdAt', 'title'], limit: 20)
*/
Cursor.query = function(object) {
}
@lancejpollard
Copy link
Author

Chainable Ember API:

App.CommentsController = Tower.Controller.extend(App.CommentsAuthorizationMixin, {
  query: Tower.Cursor
    .gte('createdAt', _(2).days().ago().computed())
    .page(1)
    .desc(['createdAt', 'title'])
    .limit(20)
    .extend()
  })
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment