dot-object 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dot-object might be problematic. Click here for more details.
- package/.npmignore +6 -0
- package/bin/dotob +84 -0
- package/index.js +21 -1
- package/package.json +5 -2
- package/gulpfile.js +0 -29
package/.npmignore
ADDED
package/bin/dotob
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
// vim: set filetype=javascript:
|
3
|
+
'use strict';
|
4
|
+
|
5
|
+
var glob = require('glob');
|
6
|
+
var fs = require('fs');
|
7
|
+
|
8
|
+
/**
|
9
|
+
*
|
10
|
+
* dotob <pattern> -f require -t dependencies.npm
|
11
|
+
*
|
12
|
+
*/
|
13
|
+
var dotob = require('../index.js')();
|
14
|
+
var program = require('commander');
|
15
|
+
var pkg = require('../package.json');
|
16
|
+
|
17
|
+
program
|
18
|
+
.version(pkg.version)
|
19
|
+
.usage('[options]')
|
20
|
+
.option('-p, --pattern [pattern]', 'Pattern to match')
|
21
|
+
.option('-f, --from [path]', 'From path')
|
22
|
+
.option('-t, --to [path]', 'To path')
|
23
|
+
.option('-m, --merge', 'Merge into target')
|
24
|
+
.option('-v, --verbose', 'Be verbose')
|
25
|
+
.option('-d, --dry', 'Dry run do not modify files')
|
26
|
+
.parse(process.argv);
|
27
|
+
|
28
|
+
function must(program, option) {
|
29
|
+
if(!program.hasOwnProperty(option)) {
|
30
|
+
console.log([
|
31
|
+
'The', option, 'is required'
|
32
|
+
].join(' '));
|
33
|
+
process.exit(1);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
must(program, 'pattern');
|
38
|
+
must(program, 'from');
|
39
|
+
must(program, 'to');
|
40
|
+
|
41
|
+
var g = glob(program.pattern);
|
42
|
+
|
43
|
+
function finish(program, file, orig, json) {
|
44
|
+
|
45
|
+
return function(err) {
|
46
|
+
if (err) {
|
47
|
+
throw err;
|
48
|
+
} else {
|
49
|
+
if (program.verbose) {
|
50
|
+
if (JSON.stringify(orig) !== JSON.stringify(json)) {
|
51
|
+
console.log(file + ': updated.');
|
52
|
+
} else {
|
53
|
+
console.log(file + ': no matches.');
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}
|
57
|
+
};
|
58
|
+
}
|
59
|
+
|
60
|
+
function processFile(file) {
|
61
|
+
|
62
|
+
fs.readFile(file, 'utf8', function(err, contents) {
|
63
|
+
var json, orig;
|
64
|
+
try {
|
65
|
+
orig = JSON.parse(contents);
|
66
|
+
json = JSON.parse(contents);
|
67
|
+
dotob.move(program.from, program.to, json, program.merge);
|
68
|
+
if(program.dry) {
|
69
|
+
console.log(json);
|
70
|
+
finish(program, file, orig, json)();
|
71
|
+
} else {
|
72
|
+
fs.writeFile(file, JSON.stringify(json, null, 2), finish(
|
73
|
+
program, file, orig, json
|
74
|
+
));
|
75
|
+
}
|
76
|
+
} catch (e) {
|
77
|
+
console.log(file + ': ', e);
|
78
|
+
}
|
79
|
+
});
|
80
|
+
}
|
81
|
+
|
82
|
+
g.on('match', function(file) {
|
83
|
+
processFile(file);
|
84
|
+
});
|
package/index.js
CHANGED
@@ -171,6 +171,27 @@ DotObject.prototype.transfer = function(source, target, obj1, obj2, merge) {
|
|
171
171
|
|
172
172
|
};
|
173
173
|
|
174
|
+
/**
|
175
|
+
*
|
176
|
+
* Copy a property from one object to another object.
|
177
|
+
*
|
178
|
+
* If the source path does not exist (undefined)
|
179
|
+
* the property on the other object will not be set.
|
180
|
+
*
|
181
|
+
* @param {String} source
|
182
|
+
* @param {String} target
|
183
|
+
* @param {Object} obj1
|
184
|
+
* @param {Object} obj2
|
185
|
+
* @param {Boolean} merge
|
186
|
+
*/
|
187
|
+
DotObject.prototype.copy = function(source, target, obj1, obj2, merge) {
|
188
|
+
|
189
|
+
this.set(target, this.pick(source, obj1, false), obj2, merge);
|
190
|
+
|
191
|
+
return obj2;
|
192
|
+
|
193
|
+
};
|
194
|
+
|
174
195
|
function isObject(val) {
|
175
196
|
return Object.prototype.toString.call(val) === '[object Object]';
|
176
197
|
}
|
@@ -188,7 +209,6 @@ DotObject.prototype.set = function(path, val, obj, merge) {
|
|
188
209
|
var i;
|
189
210
|
var k;
|
190
211
|
var keys;
|
191
|
-
var isArray;
|
192
212
|
|
193
213
|
// Do not operate if the value is undefined.
|
194
214
|
if (typeof val === 'undefined') {
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "dot-object",
|
3
3
|
"description": "dot-object makes it possible to transform and read (JSON) objects using dot notation.",
|
4
|
-
"version": "0.
|
4
|
+
"version": "0.6.0",
|
5
5
|
"author": {
|
6
6
|
"name": "Rob Halff",
|
7
7
|
"email": "rob.halff@gmail.com"
|
@@ -34,5 +34,8 @@
|
|
34
34
|
"transform",
|
35
35
|
"dot notation",
|
36
36
|
"dot"
|
37
|
-
]
|
37
|
+
],
|
38
|
+
"dependencies": {
|
39
|
+
"commander": "^2.5.0"
|
40
|
+
}
|
38
41
|
}
|
package/gulpfile.js
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
'use strict';
|
2
|
-
|
3
|
-
var gulp = require('gulp');
|
4
|
-
var jshint = require('gulp-jshint');
|
5
|
-
var jscs = require('gulp-jscs');
|
6
|
-
var mocha = require('gulp-mocha');
|
7
|
-
|
8
|
-
var paths = ['gulpfile.js', 'index.js', 'test/**/*.js'];
|
9
|
-
|
10
|
-
gulp.task('jscheck', function() {
|
11
|
-
gulp.src(paths)
|
12
|
-
.pipe(jscs())
|
13
|
-
.pipe(jshint({
|
14
|
-
maxlen: 80,
|
15
|
-
quotmark: 'single'
|
16
|
-
}))
|
17
|
-
.pipe(jshint.reporter('default'));
|
18
|
-
});
|
19
|
-
|
20
|
-
gulp.task('test', function() {
|
21
|
-
gulp.src(['test/**/*.js'])
|
22
|
-
.pipe(mocha());
|
23
|
-
});
|
24
|
-
|
25
|
-
gulp.task('watch', function() {
|
26
|
-
gulp.watch(paths, ['default']);
|
27
|
-
});
|
28
|
-
|
29
|
-
gulp.task('default', ['jscheck', 'test']);
|