Source

glas_process / glas_process / ddoc.py

import coffeescript

views = {
    'streams': {
        'map': """(doc) ->
                if doc.doc_type == "Task"
                    emit [doc._id] null;
                if doc.stream
                    emit [doc.task, doc.step] doc.stream
                return
        """,
        'reduce': """(key, values, rereduce) ->
                if rereduce
                    items = [];
                    while values.length
                        items = items.concat values.pop()
                else
                    items = values

                unique = {};
                while items.length
                    entry = items.pop
                    if entry != null
                        unique[entry] = true;

                result = [];
                for key in unique
                    result.push(key);
                return result
        """
    },
    'lines': {
        'map': '''(doc) ->
        if doc.stream && doc.line
            emit [doc.step, doc.stream, doc.lineno] doc.line
        return
        '''
    }
}


lists = {
    "lines": """(head, req) ->
          start headers: { "Content-Type": "text/plain"}
          while row = getRow()
            send row.value
          return
"""
}

rewrites = [
    {
        'from': '/lines/:step/:stream',
        'to': '_list/lines/lines/',
        'query': {
            'startkey': [':step', ':stream'],
            'endkey': [':step', ':stream', {}],
        },
    },
]

def showone(name, *path):
    print name, path
    origin = globals()[name]
    design = ddoc[name]
    for item in path:
        origin = origin[item]
        design = design[item]
    print origin
    print '-----'
    print design


def makeviews(data, path = ()):
    if isinstance(data, str):
        try:
            return coffeescript.compile(data, bare=True)
        except Exception, e:
            e.args =  (path,) + e.args
            raise
    else:
        return dict((k, makeviews(v, path + (k,))) for k, v in data.items())

ddoc = {
    '_id': '_design/glas_process',
    'views': makeviews(views),
    'lists': makeviews(lists),
    'rewrites': rewrites,
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.