node package manager

gist-db

Treat your gist account like a database

Gist-DB

Treat your gist account like a database. Powered by TaffyDB and Github.

npm install gist-db
var config = {
	github:{
		username:"mcwhittemore"
	}
}

var GISTDB = require("gist-db");

var _db = GISTDB(config);

_db.event.on('refreshing', function(){
  //MIGHT WANT TO LOCK DOWN THINGS FOR A BIT
  console.log("LETS DO THIS");
});

_db.event.on('refreshed', function(err){
  _db().each(function(file){
    console.log(file);
  });
});
{
	id = gist_id+"_"+filename,
	filename = filename,
	gist_id = gist_id,
	error: undefined,
	raw: "THE RAW VALUE OF THE FILE",
	type: "mime type",
	language: "language the file is written in",
	raw_url: "https path to the raw text version of the file",
	size: numeric size of the file,
	gist: {
		id: gist_id
		public: boolean,
		created_at: date object,
		updated_at: date object,
		description: "the gist description"
	}
}

Please refer to the TaffyDB docs for more details

Create a new gist-db.

Parameters

  • config: A settings object.

    Required: {
      github:{
        username:"SOME_USER_NAME"
      }
    }
    
    Defaults: {
    	refreshMin: 10,
    	github: {
    		per_page: 100,
    		timeout: 5000,
    		version: "3.0.0"
    	},
    	local: {
    		save: "NEVER", //NEVER, ON_REFRESH, ALWAYS 
    		location: undefined
    	}
    }
    
    Available: {
    	refreshMin: 10,
    	github: {
    		per_page: 100,
    		timeout: 5000
    		version: "3.0.0",
    		authenticate: {
    			type: "basic or oauth",
    			username: "your_username_if_basic",
    			password: "your_password_if_basic",
    			token: "your_oauth_token_if_oauth"
    		},
    		local: {
    			save: "NEVER OR NEVER OR ON_REFRESH OR ALWAYS"
    			location: "path and filename"
    		}
    	}
    }
    
  • fileInit: function(file). A function that returns the file obj if it should be added to the DB and undefined if it should be excluded.

  • fileSave: function(file, callback). A function that allows for further parameter work on files after the raw data has been received. A functioning implementation of this MUST pass the file object as a parameter to callback to save changes to the DB. Note: this will perform an update to the database.

  • TaffyDB: Yes
  • Returns: All rows that meet the passed criteria. Not passing an object, will return all rows.

Inserts records into the database.

  • TaffyDB: Yes
  • Returns: A query pointing to the inserted records

Full use of the github module passed the github subsection of your config file.

An implementation of require("events").EventEmitter

Use to be notified when gist-db is connecting gist for a refresh.

Use to be notified when gist-db is done its current refresh. If err is set, this refresh was ended due to error.

Use to be notified of errors in gathering data on the gist files.

Parameters

  • err: The error object that triggered this event
  • file: The file object that was being gathered when the error occurred

Use to be notified of errors when connecting with github.

Parameters

  • err: the github module error object that triggered this event
  • res: The github module response object. Might contain good data about the error.
  • Added gist object to file for meta data on the gist the file is from.
  • Changed database refresh to use merge rather than insert so items won't duplicate
  • Added check just before getRawFile and the add to database that checks if the file is in the db and if it is compares if the gist.updated_at of the new file is newer than that of the old file. This was can lower the number of calls to github and speed up the code a bit.
  • Changed github module to be my fork which supports since on the gist endpoints. Will change back once a new version of node-github is in NPM
  • Added since param to github calls, so we will only return gists added/edited since our last call.
  • Added github authentication and thus the ability to access private gists
  • Added userFileSave function, which allows users to do custom (async) actions to a file after the raw data has been pulled in.
  • Request was being requried before each use, which was causing a timeout problems. Updated the code to use a single request object.
  • Add local file loading
  • Add local file saving
  • Add tests
  • Add Update gist.github
  • Add Insert gist.github
  • Add Delete gist.github

All code not otherwise specified is Copyright 2013 Matthew Chase Whittemore and is released under the MIT License.

All code found in the node_modules directory is Copyrighted by its creators. Please see each module for further details.