Git Product home page Git Product logo

node-github-cache's Introduction

Build Status Dependency Status devDependency Status npm version Greenkeeper badge

Caching Layer for Node-GitHub

This is a Node.JS module that transparently adds caching for the node-github project. This library makes use of node-libkv for providing a consistent API layer for multiple different key/value storage backends.

By default if no cachedb is setup, a local leveldb instance will be created.

NPM

Changelog

2.2.0

Thank you to @jdanyow, he put together the PR and commits to make this possible.

  • You can use callbacks or promises just like you can with node-github.
  • You can use just about ANY version of node-github with this now too, however you must use 0.13.1 if you are going to use 0.13.x branch, as 0.13.1 has a fix to expose 304 http error codes.

2.0.0

  • github is no longer a dependency of github-cache, this should allow this library to work with whatever version of github you need to work with now.
  • You must instantiate an instance of node-github and then pass it into the constructor for the caching library.
  • github-cache now uses libkv to provide access to key/value backends, the default still being leveldb
  • The default separator is now /, this allows more key/value backends to be used by default

Installation

Install with Node.JS package manager

$ npm install github-cache

Documentation

You use this class just like you would use node-github.

If you want to not use the cache at any time, add cache: false to your API call.

Settings

  1. cachedb - this is a value passed to the creation of the API object Default: level:///./github-cachedb
  • this can be a string in the format of a URI that is understood by libkv
  • this can be an object with a uri property as well as other options understood by libkv
  • this can be a custom cache object (explained below)
  1. cache - this is a value that can be passed to any API function with a boolean value to disable or enable the cache. Default: true
  2. validateCache - Default: true - Check cached etag using If-None-Match with GitHub API before using the cached data. Ensures you have the latest data at all times. Setting to false allows you to use cached data without making the API call, results in quicker lookups. Especially useful if you are making dozens of API calls or more.
  3. prefix - Default: '' - this will prefix all keys in the key/value storage system
  4. separator - Default: / - this will separate the various layers of key

Example

Using libkv + redis

Redis must be running on the localhost in this example.

var GitHubApi = require('github')
var GitHubCache = require('github-cache')

var github_api = new GitHubApi({
  version: '3.0.0',
  validateCache: true
})

var github = new GitHubCache(github_api, {
  cachedb: 'redis://'
})

github.user.getFollowingFromUser({
  user: 'ekristen',
  cache: false
}, function(err, res) {
  console.log(JSON.stringify(res))
})

github.orgs.getTeams({
  org: 'private',
  validateCache: false
}, function (err, teams) {
  console.log(teams)
})

Using consul library directly

var GitHubCache = require('github-cache')

var consul = require('consul')({
  host: '127.0.0.1'
})

// Need to make the set function available as `put` for the cache library to work.
consul.kv.put = consul.kv.set

// You will want to use a prefix and a `/` separator so that they keys get separated out better in consul.
var github_api = new GitHubAPI({
  version: '3.0.0'
})

var github = new GitHubCache({
  cachedb: consul.kv,
  prefix: 'github-cache',
  separator: '/'
})

github.authenticate({
  type: 'oauth',
  token: process.env.GHTOKEN
})

github.user.getFollowingFromUser({
  user: 'ekristen',
}, function (err, data) {
  console.log(data)
})

Custom CacheDB Instance

You may pass in your own custom cachedb instance to github-cache to be valid and to work you will need the following function available: put, get, del, and batch. For more information see https://github.com/Level/levelup#api

node-github-cache's People

Contributors

ekristen avatar greenkeeperio-bot avatar jdanyow avatar natecavanaugh avatar greenkeeper[bot] avatar

Stargazers

Jan Koriťák avatar Rick Blundell avatar azu avatar  avatar Peter Šándor avatar Michael Anthony avatar Kimmo Brunfeldt avatar  avatar Gerry Power avatar Christophe Hamerling avatar David Weinstein avatar  avatar Jonas Hermsmeier avatar heapwolf avatar

Watchers

 avatar James Cloos avatar Michael Anthony avatar  avatar

node-github-cache's Issues

Level Dependancy

Is it possible to not use level dependency?
I keep trying to install your module, and it fails on leveldown which is a dependency on level.
It wants to do something with python for some reason and seems to fail on a windows machine.

Version 10 of node.js has been released

Version 10 of Node.js (code name Dubnium) has been released! 🎊

To see what happens to your code in Node.js 10, Greenkeeper has created a branch with the following changes:

  • Added the new Node.js version to your .travis.yml

If you’re interested in upgrading this repo to Node.js 10, you can open a PR with these changes. Please note that this issue is just intended as a friendly reminder and the PR as a possible starting point for getting your code running on Node.js 10.

More information on this issue

Greenkeeper has checked the engines key in any package.json file, the .nvmrc file, and the .travis.yml file, if present.

  • engines was only updated if it defined a single version, not a range.
  • .nvmrc was updated to Node.js 10
  • .travis.yml was only changed if there was a root-level node_js that didn’t already include Node.js 10, such as node or lts/*. In this case, the new version was appended to the list. We didn’t touch job or matrix configurations because these tend to be quite specific and complex, and it’s difficult to infer what the intentions were.

For many simpler .travis.yml configurations, this PR should suffice as-is, but depending on what you’re doing it may require additional work or may not be applicable at all. We’re also aware that you may have good reasons to not update to Node.js 10, which is why this was sent as an issue and not a pull request. Feel free to delete it without comment, I’m a humble robot and won’t feel rejected 🤖


FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.