From 0d6a81896ba821dd8ed59eab4438d737168dc3c0 Mon Sep 17 00:00:00 2001 From: jonschlinkert Date: Sat, 9 Jan 2016 16:49:38 -0500 Subject: [PATCH] first commit. --- .editorconfig | 22 +++++++++ .eslintrc.json | 122 +++++++++++++++++++++++++++++++++++++++++++++++++ .gitattributes | 10 ++++ .gitignore | 15 ++++++ .verb.md | 50 ++++++++++++++++++++ LICENSE | 21 +++++++++ README.md | 87 +++++++++++++++++++++++++++++++++++ index.js | 1 + package.json | 68 +++++++++++++++++++++++++++ updatefile.js | 40 ++++++++++++++++ 10 files changed, 436 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintrc.json create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .verb.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 index.js create mode 100644 package.json create mode 100644 updatefile.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1ff40e6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +end_of_line = lf +charset = utf-8 +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false +insert_final_newline = false + +[{,test/}{actual,fixtures}/**] +trim_trailing_whitespace = false +insert_final_newline = false + +[templates/**] +trim_trailing_whitespace = false +insert_final_newline = false diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..948dbdb --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,122 @@ +{ + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true + }, + + "env": { + "browser": false, + "es6": true, + "node": true, + "mocha": true + }, + + "globals": { + "document": false, + "navigator": false, + "window": false + }, + + "rules": { + "accessor-pairs": 2, + "arrow-spacing": [2, { "before": true, "after": true }], + "block-spacing": [2, "always"], + "brace-style": [2, "1tbs", { "allowSingleLine": true }], + "comma-dangle": [2, "never"], + "comma-spacing": [2, { "before": false, "after": true }], + "comma-style": [2, "last"], + "constructor-super": 2, + "curly": [2, "multi-line"], + "dot-location": [2, "property"], + "eol-last": 2, + "eqeqeq": [2, "allow-null"], + "generator-star-spacing": [2, { "before": true, "after": true }], + "handle-callback-err": [2, "^(err|error)$" ], + "indent": [2, 2, { "SwitchCase": 1 }], + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "keyword-spacing": [2, { "before": true, "after": true }], + "new-cap": [2, { "newIsCap": true, "capIsNew": false }], + "new-parens": 2, + "no-array-constructor": 2, + "no-caller": 2, + "no-class-assign": 2, + "no-cond-assign": 2, + "no-const-assign": 2, + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-dupe-args": 2, + "no-dupe-class-members": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty-character-class": 2, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": [2, "functions"], + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inner-declarations": [2, "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, { "max": 1 }], + "no-native-reassign": 0, + "no-negated-in-lhs": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-require": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-proto": 0, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-return-assign": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 0, + "no-undef": 2, + "no-undef-init": 2, + "no-unexpected-multiline": 2, + "no-unneeded-ternary": [2, { "defaultAssignment": false }], + "no-unreachable": 2, + "no-unused-vars": [2, { "vars": "all", "args": "none" }], + "no-useless-call": 0, + "no-with": 2, + "one-var": [0, { "initialized": "never" }], + "operator-linebreak": [0, "after", { "overrides": { "?": "before", ":": "before" } }], + "padded-blocks": [0, "never"], + "quotes": [2, "single", "avoid-escape"], + "radix": 2, + "semi": [2, "always"], + "semi-spacing": [2, { "before": false, "after": true }], + "space-before-blocks": [2, "always"], + "space-before-function-paren": [2, "never"], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-unary-ops": [2, { "words": true, "nonwords": false }], + "spaced-comment": [0, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }], + "use-isnan": 2, + "valid-typeof": 2, + "wrap-iife": [2, "any"], + "yoda": [2, "never"] + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..660957e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +# Enforce Unix newlines +* text eol=lf + +# binaries +*.ai binary +*.psd binary +*.jpg binary +*.gif binary +*.png binary +*.jpeg binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..80a228c --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.DS_Store +*.sublime-* +_gh_pages +bower_components +node_modules +npm-debug.log +actual +test/actual +temp +tmp +TODO.md +vendor +.idea +benchmark +coverage diff --git a/.verb.md b/.verb.md new file mode 100644 index 0000000..15dfd94 --- /dev/null +++ b/.verb.md @@ -0,0 +1,50 @@ +--- +toc: false +--- +## What is "Update"? + +Update is a new, open-source developer framework for automating updates of any kind to code projects. For more information: + +- Visit the [update project](https://github.com/update/update) +- Visit the [update documentation](https://github.com/update/update) +- Find [updaters on npm](https://www.npmjs.com/browse/keyword/update-updater) (help us [author updaters](https://github.com/update/update/blob/master/docs/updaters.md)) + +## Install + +**Install update** + +If you haven't already installed [update][] globally, you can do that now with the following command: + +```sh +$ npm i -g update +``` + +**Install updater-example** + +Then install this module: + +```sh +$ npm i -g update-example +``` + +## Usage + +Add a file named `example.txt` to the current working directory, then run the updater with the following command: + +```sh +$ update example +``` + +**What will happen?** + +This updater will only modify a file named `example.txt` in the current working directory. By default it just adds the string `foo`. + +Try the following steps to get familiarized with how update works: + +- [ ] run `update example` to execute the default task, which will append the string `foo` to the file's contents. +- [ ] run `update example:foo` to execute the `foo` task, appending the string `foo` to the file's contents +- [ ] run `update example:bar` to execute the `bar` task, appending the string `bar` to the file's contents +- [ ] run `update example.abc` to execute the default task on the `abc` (sub-)updater, appending the string `abc:one` to the file's contents +- [ ] run `update example.abc:one` to execute the `one` task on the `abc` (sub-)updater, appending the string `abc:one` to the file's contents + +See [the code](updatefile.js) for more details. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6525171 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5283c9e --- /dev/null +++ b/README.md @@ -0,0 +1,87 @@ +# updater-example [![NPM version](https://img.shields.io/npm/v/updater-example.svg?style=flat)](https://www.npmjs.com/package/updater-example) [![NPM downloads](https://img.shields.io/npm/dm/updater-example.svg?style=flat)](https://npmjs.org/package/updater-example) + +Example updater. Very basic demonstration of how updaters work. + +## What is "Update"? + +Update is a new, open-source developer framework for automating updates of any kind to code projects. For more information: + +* Visit the [update project](https://github.com/update/update) +* Visit the [update documentation](https://github.com/update/update) +* Find [updaters on npm](https://www.npmjs.com/browse/keyword/update-updater) (help us [author updaters](https://github.com/update/update/blob/master/docs/updaters.md)) + +## Install + +**Install update** + +If you haven't already installed [update](https://github.com/update/update) globally, you can do that now with the following command: + +```sh +$ npm i -g update +``` + +**Install updater-example** + +Then install this module: + +```sh +$ npm i -g update-example +``` + +## Usage + +Add a file named `example.txt` to the current working directory, then run the updater with the following command: + +```sh +$ update example +``` + +**What will happen?** + +This updater will only modify a file named `example.txt` in the current working directory. By default it just adds the string `foo`. + +Try the following steps to get familiarized with how update works: + +* [ ] run `update example` to execute the default task, which will append the string `foo` to the file's contents. +* [ ] run `update example:foo` to execute the `foo` task, appending the string `foo` to the file's contents +* [ ] run `update example:bar` to execute the `bar` task, appending the string `bar` to the file's contents +* [ ] run `update example.abc` to execute the default task on the `abc` (sub-)updater, appending the string `abc:one` to the file's contents +* [ ] run `update example.abc:one` to execute the `one` task on the `abc` (sub-)updater, appending the string `abc:one` to the file's contents + +See [the code](updatefile.js) for more details. + +## Related projects + +You might also be interested in these projects: + +* [generate](https://www.npmjs.com/package/generate): The Santa Claus machine for GitHub projects. Scaffolds out new projects, or creates any kind… [more](https://github.com/generate/generate) | [homepage](https://github.com/generate/generate "The Santa Claus machine for GitHub projects. Scaffolds out new projects, or creates any kind of required file or document from any given templates or source materials.") +* [update](https://www.npmjs.com/package/update): Easily keep anything in your project up-to-date by installing the updaters you want to use… [more](https://github.com/update/update) | [homepage](https://github.com/update/update "Easily keep anything in your project up-to-date by installing the updaters you want to use and running `update` in the command line! Update the copyright date, licence type, ensure that a project uses your latest eslint or jshint configuration, remove dep") +* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb "Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.") + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +## Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +## Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/update/updater-example/blob/master/LICENSE). + +*** + +_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on June 28, 2016._ \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..af43846 --- /dev/null +++ b/index.js @@ -0,0 +1 @@ +module.exports = require('./updatefile'); diff --git a/package.json b/package.json new file mode 100644 index 0000000..48890b3 --- /dev/null +++ b/package.json @@ -0,0 +1,68 @@ +{ + "name": "updater-example", + "description": "Example updater. Very basic demonstration of how updaters work.", + "version": "0.1.0", + "homepage": "https://github.com/update/updater-example", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "update/updater-example", + "bugs": { + "url": "https://github.com/jonschlinkert/updater-example/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "through2": "^2.0.1" + }, + "devDependencies": { + "gulp-format-md": "^0.1.9" + }, + "keywords": [ + "example", + "fix", + "lint", + "linter", + "maintain", + "plugin", + "plugins", + "up-to-date", + "update", + "update-plugin", + "update-updater", + "updater", + "updaterplugin" + ], + "verb": { + "toc": false, + "layout": "common-minimal", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "update", + "generate", + "verb" + ] + }, + "reflinks": [ + "update", + "verb", + "verb-readme-generator" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/updatefile.js b/updatefile.js new file mode 100644 index 0000000..ce2e388 --- /dev/null +++ b/updatefile.js @@ -0,0 +1,40 @@ +'use strict'; + +var through = require('through2'); + +module.exports = function(app) { + var cwd = app.options.dest || app.cwd; + + app.task('foo', function() { + // here, "this" is the task instance + return app.src('example.txt', {cwd: cwd}) + .pipe(append(this.name)) + .pipe(app.dest(cwd)); + }); + + app.task('bar', function() { + return app.src('example.txt', {cwd: cwd}) + .pipe(append(this.name)) + .pipe(app.dest(cwd)); + }); + + // register an updater (this could be required from node_modules instead) + app.register('abc', function(abc) { + // here, "this" is the updater instance (abc) + this.task('one', function() { + return app.src('example.txt', {cwd: cwd}) + .pipe(append(abc.name + ':' + this.name)) + .pipe(app.dest(cwd)); + }); + this.task('default', ['one']); + }); + + app.task('default', ['foo']); +}; + +function append(str) { + return through.obj(function(file, enc, next) { + file.contents = new Buffer(file.contents.toString() + str + '\n'); + next(null, file); + }); +}