|
/** |
|
* Term: schools.address.state |
|
* |
|
* Stores the state abbreviation for a school's location. |
|
*/ |
|
module.exports = { |
|
table: 'school', // Entity table in DB |
|
|
|
// `?state=tx` is supported (or would throw) here |
|
filter: function(qb, value) { |
|
// Compose query builder to only return schools in this state |
|
qb.andWhere(this.get('column'), value.toUpperCase()); |
|
}, |
|
|
|
// Simple example how the UI was defined. |
|
ui: { |
|
type: 'radio', |
|
query: function() { |
|
// `this` has a dynamic context with services (e.g. `db`) |
|
var qb = this.db('vars__HD2012__STABBR'); |
|
|
|
return qb.select([ |
|
db.raw('label'), |
|
db.raw('code AS value'), |
|
]); |
|
} |
|
}, |
|
|
|
// How to fetch & store the data |
|
warehouse: { |
|
// Map the original column's value dynamically |
|
// (terms are agnostic to exactly where they're stored) |
|
query: function(qb) { |
|
qb.column(qb.knex.raw('HD2012.STABBR as `' + this.get('tableColumn') + '`')); |
|
}, |
|
|
|
// Define the schema needed for the normalized value. |
|
// Any changes here automatically became migrations (e.g. `.index()`) |
|
schema: function(table) { |
|
table.string(this.get('column'), 2).index(); |
|
}, |
|
|
|
// Transform the value (or combine multiple columns, like `${city}, ${state}`) |
|
value: function(row) { |
|
return row[this.get('tableColumn')]; |
|
} |
|
} |
|
}; |