Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

soca

Sammy On Couch App or Sittin' On a Couch App

What?

A couchapp is method of creating applications that live inside CouchDB's design documents. This can be a simple as an index.html and as complicated as a full interactive JavaScript application. couchapp's inherently have a a bunch of really cool features - easy replication and synchronization, instant access to store and fetch data from CouchDB, and a full JS API. Sammy.js is a perfect fit for couchapps providing a simple programmable controller layer on top of CouchDB's data.

I highly recommend reading the section on couchapps in the CouchDB Book.

soca is a simple command line tool written in ruby for building and pushing couchapps. It is similar to and heavily inspired by the canonical couchapp python tool, couchapp, with a number of key differences.

  • local directories do not have to map 1-1 to the design docs directory
  • lifecycle hooks for easily adding or modifying the design document with ruby tools or plugins.
  • architected around using Sammy.js, instead of Evently, which is bundled with the python tool.
  • super tiny and hackable, with the hope that people will contribute patches and plugins.

Why?

I'm not one to start a language war, I think python is great and the existing couchapp tool works great for most situations. In fact I've built apps using it. I found myself working around the design documents structure, which makes sense when in JSON, but much less sense when mapped to the filesystem. By making a simple tool, that takes a JSON map of directories and files and places them in their expected JSON slot, you make a new sort of couchapp.

Unlike a traditional couchapp, a soca couchapp is actually one way - you're source directory is actually 'compiled' into its final state. This allows you to do things you couldnt before, including bundling js files, using external tools like compass, and just generally following your own preffered directory structure. This does mean that there is no soca clone to get a couchapp out of CouchDB - though replicating works the same as before (and is probably faster because you push only the docs you need or use).

The bottom line is I wanted to build couchapp's with a workflow and structure I had already established - soca lets me do that.

How?

soca is bundled as a ruby gem so installation is easy-peasy. On a system with ruby and ruby gems (OS X for example):

gem install soca

This will give you the soca bin as long as gems are in your path.

soca

Will display all the command options.

The typical workflow would be:

# Generate the app
soca generate myapp # cd into the app
cd myapp
# edit your .couchapprc with the db url
# Do your work, editing app.js, etc
# push the app to couchdb
soca push
# open the app in a browser
soca open

Once you get it set up, you can also use

soca autopush

Which will watch the directory and push your changes automagically.

TODO

  • Better Docs
  • More plugins
  • More generate options (compass scaffold, etc)
  • More example apps

Copyright/License

Copyright (c) 2010 Aaron Quint under the MIT License. See LICENSE for details.

About

Sammy On Couch App

Resources

Stars

156 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages