1 | module.exports = function(grunt) {
|
2 |
|
3 | var compileType = function() {
|
4 | var type = this.data.type;
|
5 | var template = grunt.file.read('templates/types.js');
|
6 | var anon = grunt.file.read('templates/anon.js');
|
7 | var files = grunt.file.expand([
|
8 | 'src/' + type + '/*.js'
|
9 | ]);
|
10 | var regexp = /\}\(this, function \(numeral\) \{\s([\s\S]+)(?:\s\}\)\);)/;
|
11 | var content = '';
|
12 | var file;
|
13 | var i;
|
14 |
|
15 | for (i = 0; i < files.length; i++) {
|
16 | file = grunt.file.read(files[i]);
|
17 |
|
18 | content += '\n' + grunt.template.process(anon, {
|
19 | data: {
|
20 | content: file.match(regexp)[1]
|
21 | }
|
22 | }) + '\n';
|
23 | }
|
24 |
|
25 | grunt.file.write('temp/' + type + '.js', content);
|
26 |
|
27 | if (type === 'locales') {
|
28 | grunt.file.write('locales.js', grunt.template.process(template, {
|
29 | data: {
|
30 | type: type,
|
31 | content: content
|
32 | }
|
33 | }));
|
34 | }
|
35 | },
|
36 | compileNumeral = function() {
|
37 | var regexp = /([\s])return numeral;(?:\s\}\)\);)/;
|
38 | var numeral = grunt.file.read('src/numeral.js');
|
39 | var formats = grunt.file.read('temp/formats.js');
|
40 | var index = numeral.indexOf('return numeral;');
|
41 |
|
42 | numeral = numeral.substr(0, index) + '\n' + formats + numeral.substr(index);
|
43 |
|
44 | grunt.file.write('numeral.js', numeral);
|
45 | };
|
46 |
|
47 | require('load-grunt-tasks')(grunt);
|
48 |
|
49 | grunt.initConfig({
|
50 | mochaTest : {
|
51 | all: [
|
52 | 'tests/numeral.js',
|
53 | 'tests/formats/*.js',
|
54 | 'tests/locales/*.js'
|
55 | ]
|
56 | },
|
57 | karma: {
|
58 | options: {
|
59 | files: [
|
60 | 'numeral.js',
|
61 | 'locales.js',
|
62 | 'tests/numeral.js',
|
63 | 'tests/formats/*.js',
|
64 | 'tests/locales/*.js'
|
65 | ],
|
66 | frameworks: [
|
67 | 'mocha',
|
68 | 'chai'
|
69 | ],
|
70 | singleRun: true,
|
71 | autoWatch: false
|
72 | },
|
73 | local: {
|
74 | browsers: [
|
75 | 'Chrome',
|
76 | 'Firefox'
|
77 | ]
|
78 | },
|
79 | ci: {
|
80 | configFile: 'karma-ci.conf.js'
|
81 | }
|
82 | },
|
83 | copy: {
|
84 | locales: {
|
85 | files: [
|
86 | {
|
87 | expand: true,
|
88 | cwd: 'src/',
|
89 | src: [
|
90 | 'locales/*.js'
|
91 | ],
|
92 | dest: './'
|
93 | }
|
94 | ]
|
95 | }
|
96 | },
|
97 | compile: {
|
98 | locales: {
|
99 | type: 'locales'
|
100 | },
|
101 | formats: {
|
102 | type: 'formats'
|
103 | }
|
104 | },
|
105 | uglify: {
|
106 | min: {
|
107 | files: [
|
108 | {
|
109 | expand: true,
|
110 | cwd: 'src/',
|
111 | src: [
|
112 | 'locales/*.js'
|
113 | ],
|
114 | dest: 'min/',
|
115 | ext: '.min.js'
|
116 | },
|
117 | {
|
118 | expand: true,
|
119 | src: [
|
120 | 'numeral.js',
|
121 | 'locales.js'
|
122 | ],
|
123 | dest: 'min/',
|
124 | ext: '.min.js'
|
125 | }
|
126 | ]
|
127 | },
|
128 | options: {
|
129 | preserveComments: 'some'
|
130 | }
|
131 | },
|
132 | jshint: {
|
133 | all: [
|
134 | 'Gruntfile.js',
|
135 | 'src/**/*.js'
|
136 | ],
|
137 | options: {
|
138 | 'node': true,
|
139 | 'browser': true,
|
140 | 'curly': true,
|
141 | 'devel': false,
|
142 | 'eqeqeq': true,
|
143 | 'eqnull': true,
|
144 | 'newcap': true,
|
145 | 'noarg': true,
|
146 | 'undef': true,
|
147 | 'sub': true,
|
148 | 'strict': false,
|
149 | 'quotmark': 'single',
|
150 | 'globals': {
|
151 | 'define': true
|
152 | }
|
153 | }
|
154 | }
|
155 | });
|
156 |
|
157 | grunt.registerTask('default', [
|
158 | 'test'
|
159 | ]);
|
160 |
|
161 | grunt.registerMultiTask('compile', compileType);
|
162 |
|
163 | grunt.registerTask('compile:numeral', compileNumeral);
|
164 |
|
165 | grunt.registerTask('build', [
|
166 | 'jshint',
|
167 | 'compile',
|
168 | 'compile:numeral',
|
169 | 'copy'
|
170 | ]);
|
171 |
|
172 | grunt.registerTask('test', [
|
173 | 'build',
|
174 | 'mochaTest',
|
175 | 'karma:local'
|
176 | ]);
|
177 |
|
178 | grunt.registerTask('test:npm', [
|
179 | 'build',
|
180 | 'mochaTest'
|
181 | ]);
|
182 |
|
183 | grunt.registerTask('test:browser', [
|
184 | 'build',
|
185 | 'karma:local'
|
186 | ]);
|
187 |
|
188 | grunt.registerTask('dist', [
|
189 | 'build',
|
190 | 'uglify'
|
191 | ]);
|
192 |
|
193 | grunt.registerTask('version', function (version) {
|
194 | if (!version || version.split('.').length !== 3) {
|
195 | grunt.fail.fatal('malformed version. Use\n\n grunt version:1.2.3');
|
196 | }
|
197 |
|
198 | grunt.config('string-replace.json', {
|
199 | files: {
|
200 | 'package.json': 'package.json',
|
201 | 'component.json': 'component.json',
|
202 | 'bower.json': 'bower.json'
|
203 | },
|
204 | options: {
|
205 | replacements: [
|
206 | {
|
207 | pattern: /"version": .*/,
|
208 | replacement: '"version": "' + version + '",'
|
209 | }
|
210 | ]
|
211 | }
|
212 | });
|
213 |
|
214 | grunt.config('string-replace.numeral', {
|
215 | files: {
|
216 | 'src/numeral.js': 'src/numeral.js'
|
217 | },
|
218 | options: {
|
219 | replacements: [
|
220 | {
|
221 | pattern: /version : .*/,
|
222 | replacement: 'version : ' + version
|
223 | },
|
224 | {
|
225 | pattern: /VERSION = .*/,
|
226 | replacement: 'VERSION = \'' + version + '\','
|
227 | }
|
228 | ]
|
229 | }
|
230 | });
|
231 |
|
232 | grunt.config('string-replace.templates', {
|
233 | files: {
|
234 | 'templates/types.js': 'templates/types.js'
|
235 | },
|
236 | options: {
|
237 | replacements: [
|
238 | {
|
239 | pattern: /: .*/,
|
240 | replacement: ': ' + version
|
241 | }
|
242 | ]
|
243 | }
|
244 | });
|
245 |
|
246 | grunt.task.run([
|
247 | 'string-replace:json',
|
248 | 'string-replace:templates',
|
249 | 'string-replace:numeral'
|
250 | ]);
|
251 | });
|
252 |
|
253 |
|
254 | grunt.registerTask('travis', [
|
255 | 'build',
|
256 | 'mochaTest',
|
257 | 'karma:ci'
|
258 | ]);
|
259 | };
|