What can I do to share code among views in CouchDB?
Jesse Hallett has some good utility methods, including
function dot(attr) {
return function(obj) {
return obj[attr];
}
}
Array.prototype.map = function(func) {
var i, r = [],
for (i = 0; i < this.length; i += 1) {
r[i] = func(this[i]);
}
return r;
};
...
Where can I put this code so every view can access it?
Similarly for constants I use in my application. Where do I put
MyApp = {
A_CONSTANT = "...";
ANOTHER_CONSTANT = "...";
};
What if I want a one view that filters by "is this a rich person?":
function(doc) {
if (doc.type == 'person' && doc.net_worth > 1000000) {
emit(doc.id, doc);
}
}
and another that indexes by last name:
function(doc) {
if (doc.last_name) {
emit(doc.last_name, doc);
}
}
How can I combine them into a "rich people by last name" view?
I sort of want the equivalent of the Ruby
my_array.select { |x| x.person? }.select { |x| x.net_worth > 1,000,000 }.map { |x| [x.last_name, x] }
How can I be DRYer?
As per this blog post, you can add commonjs modules to the map function (but not the reduce function) in views in couchdb 1.1 by having a key called lib in your views object. A lot of popular javascript libraries like underscore.js adhere to the commonjs standard, so you can use them in your views by using require("views/lib/[your module name]").
Say you include underscore.js as "underscore" in the lib object in views, like so:
views: {
lib: {
underscore: "// Underscore.js 1.1.6\n ...
}
...
[ the rest of your views go here]
}
, you can then add the following to your view to get access to the _ module:
var _ = require("views/lib/underscore");
For custom libraries, all you need to do is make anything you want to share in your library a value to the global "exports" object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With