mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	Strategy should use better param description
Adds support for more fields sucha as description, required, etc. relates to #182
This commit is contained in:
		
							parent
							
								
									97f6731140
								
							
						
					
					
						commit
						082d5068a8
					
				@ -59,11 +59,14 @@ npm test
 | 
			
		||||
We use database migrations to track database changes. 
 | 
			
		||||
 | 
			
		||||
### Making a schema change
 | 
			
		||||
In order to run migrations you will set the environment variable for DATABASE_URL
 | 
			
		||||
 | 
			
		||||
`export DATABASE_URL=postgres://unleash_user:passord@localhost:5432/unleash`
 | 
			
		||||
 | 
			
		||||
Use db-migrate to create new migrations file. 
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
> ./node_modules/.bin/db-migrate create your-migration-name
 | 
			
		||||
> npm run db-migrate -- create YOUR-MIGRATION-NAME
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
All migrations requires on `up` and one `down` method. 
 | 
			
		||||
@ -86,6 +89,12 @@ exports.down = function (db, cb) {
 | 
			
		||||
};
 | 
			
		||||
``` 
 | 
			
		||||
 | 
			
		||||
Test your migrations:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
> npm run db-migrate -- up
 | 
			
		||||
> npm run db-migrate -- down
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Publishing / Releasing new packages
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,61 @@
 | 
			
		||||
/* eslint camelcase: "off" */
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
const async = require('async');
 | 
			
		||||
 | 
			
		||||
exports.up = function (db, callback) {
 | 
			
		||||
    const populateNewData = (cb) => {
 | 
			
		||||
        db.all('select name, parameters_template from strategies', (err, results) => {
 | 
			
		||||
            const updateSQL = results
 | 
			
		||||
              .map(({ name, parameters_template }) => {
 | 
			
		||||
                  const parameters = [];
 | 
			
		||||
                  Object.keys(parameters_template || {}).forEach(p => {
 | 
			
		||||
                      parameters.push({ name: p, type: parameters_template[p], description: '' });
 | 
			
		||||
                  });
 | 
			
		||||
                  return { name, parameters };
 | 
			
		||||
              })
 | 
			
		||||
              .map(strategy => `
 | 
			
		||||
                UPDATE strategies 
 | 
			
		||||
                SET parameters='${JSON.stringify(strategy.parameters)}'
 | 
			
		||||
                WHERE name='${strategy.name}';`)
 | 
			
		||||
              .join('\n');
 | 
			
		||||
 | 
			
		||||
            db.runSql(updateSQL, cb);
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    async.series([
 | 
			
		||||
        db.addColumn.bind(db, 'strategies', 'parameters', { type: 'json' }),
 | 
			
		||||
        populateNewData.bind(db),
 | 
			
		||||
        db.removeColumn.bind(db, 'strategies', 'parameters_template'),
 | 
			
		||||
    ], callback);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.down = function (db, callback) {
 | 
			
		||||
    const populateOldData = (cb) => {
 | 
			
		||||
        db.all('select name, parameters from strategies', (err, results) => {
 | 
			
		||||
            const updateSQL = results
 | 
			
		||||
              .map(({ name, parameters }) => {
 | 
			
		||||
                  const parameters_template = {};
 | 
			
		||||
                  parameters.forEach(p => {
 | 
			
		||||
                      parameters_template[p.name] = p.type;
 | 
			
		||||
                  });
 | 
			
		||||
 | 
			
		||||
                  return { name, parameters_template };
 | 
			
		||||
              })
 | 
			
		||||
              .map(strategy => `
 | 
			
		||||
                UPDATE strategies 
 | 
			
		||||
                SET parameters_template='${JSON.stringify(strategy.parameters_template)}'
 | 
			
		||||
                WHERE name='${strategy.name}';`)
 | 
			
		||||
              .join('\n');
 | 
			
		||||
 | 
			
		||||
            db.runSql(updateSQL, cb);
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    async.series([
 | 
			
		||||
        db.addColumn.bind(db, 'strategies', 'parameters_template', { type: 'json' }),
 | 
			
		||||
        populateOldData.bind(db),
 | 
			
		||||
        db.removeColumn.bind(db, 'strategies', 'parameters'),
 | 
			
		||||
    ], callback);
 | 
			
		||||
};
 | 
			
		||||
@ -37,8 +37,7 @@
 | 
			
		||||
    "start:dev": "NODE_ENV=development supervisor --ignore ./node_modules/ server.js",
 | 
			
		||||
    "start:dev:pg": "pg_virtualenv npm run start:dev:pg-chain",
 | 
			
		||||
    "start:dev:pg-chain": "export DATABASE_URL=postgres://$PGUSER:$PGPASSWORD@localhost:$PGPORT/postgres ; db-migrate up && npm run start:dev",
 | 
			
		||||
    "db-migrate": "db-migrate up",
 | 
			
		||||
    "db-migrate:down": "db-migrate down",
 | 
			
		||||
    "db-migrate": "db-migrate",
 | 
			
		||||
    "lint": "eslint lib",
 | 
			
		||||
    "pretest": "npm run lint",
 | 
			
		||||
    "test": "PORT=4243 ava test lib/*.test.js lib/**/*.test.js",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user