packages feed

darcsden-1.1: src/DarcsDen/State/Schema.hs

module DarcsDen.State.Schema
where

import Text.JSON

repoDesigns, userDesigns, issueDesigns, commentDesigns :: [JSValue]

repoDesigns =
    [ jsobj
        [ ("_id", jsstr "_design/repositories")
        , ("language", jsstr "javascript")
        , ("views", jsobj
            [ ("by_owner_and_name", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.owner && doc.name && !doc.is_private)\n    emit([doc.owner, doc.name], doc);\n}")
                ])

            , ("by_owner", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.owner && !doc.is_private)\n    emit(doc.owner, doc);\n}")
                ])

            , ("by_fork", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.fork_of.Just && !doc.is_private)\n    emit(doc.fork_of.Just, doc);\n}")
                ])

            , ("by_member", jsobj
                [ ("map", jsstr "function(doc) {\n  if (!doc.is_private)\n    for (member in doc.members)\n      emit(doc.members[member], doc._id);\n}")
                ])
            ])
        ]

    , jsobj
        [ ("_id", jsstr "_design/private")
        , ("language", jsstr "javascript")
        , ("views", jsobj
            [ ("by_owner", jsobj
                [ ("map", jsstr "function(doc) {\n  emit(doc.owner, doc);\n}\n")
                ])
            , ("by_owner_and_name", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.owner && doc.name)\n    emit([doc.owner, doc.name], doc);\n}")
                ])
            , ("by_member", jsobj
                [ ("map", jsstr "function(doc) {\n  for (member in doc.members)\n    emit(doc.members[member], [doc.owner, doc.name]);\n}")
                ])
            ])
        ]
    ]

userDesigns =
    [ jsobj
        [ ("_id", jsstr "_design/users")
        , ("language", jsstr "javascript")
        , ("views", jsobj
            [ ("by_email", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.email)\n    emit(doc.email, doc);\n}")
                ])
            , ("by_name", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.name)\n    emit(doc.name, doc);\n}")
                ])
            , ("by_gid", jsobj
                [ ("map", jsstr "function(doc) {\n if (doc.gid)\n     emit (doc.gid, doc);\n}")
                ])
            , ("by_gsub", jsobj
                [ ("map", jsstr "function(doc) {\n if (doc.gsub)\n     emit (doc.gsub, doc);\n}")
                ])
            ])
        ]
    ]

issueDesigns =
    [ jsobj
        [ ("_id", jsstr "_design/issues")
        , ("language", jsstr "javascript")
        , ("views", jsobj
            [ ("by_repository_and_number", jsobj
                [ ("map", jsstr "function(doc) {\n  emit([doc.repository, doc.number], doc);\n}")
                ])
            , ("by_repository", jsobj
                [ ("map", jsstr "function(doc) {\n  emit(doc.repository, doc);\n}")
                ])
            , ("by_repository_open", jsobj
                [ ("map", jsstr "function(doc) {\n  if (!doc.is_closed)\n    emit(doc.repository, doc);\n}")
                ])
            , ("by_repository_closed", jsobj
                [ ("map", jsstr "function(doc) {\n  if (doc.is_closed)\n    emit(doc.repository, doc);\n}")
                ])
            , ("by_repository_and_tag", jsobj
                [ ("map", jsstr "function(doc) {\n  for(var i in doc.tags)\n    emit([doc.repository, doc.tags[i]], doc);\n}")
                ])
            ])
        ]
    ]

commentDesigns =
    [ jsobj
        [ ("_id", jsstr "_design/comments")
        , ("language", jsstr "javascript")
        , ("views", jsobj
            [ ("by_issue", jsobj
                [ ("map", jsstr "function(doc) {\n  emit(doc.issue, doc);\n}")
                ])
            ])
        ]
    ]

jsstr :: String -> JSValue
jsstr = JSString . toJSString

jsobj :: [(String, JSValue)] -> JSValue
jsobj = JSObject . toJSObject