All files / src/services/tables/builders NearbyDriversTableBuilder.js

96.43% Statements 27/28
75% Branches 3/4
100% Functions 3/3
96.43% Lines 27/28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78    1x 1x     1x   1x   1x       1x   1x 3x     1x   1x 3x     1x       1x             1x 1x         1x 2x 1x 1x       3x             3x             3x 3x   3x 1x   2x 2x            
'use es6'
 
import emoji from 'node-emoji';
import {
  List,Map
} from 'immutable';
import Table from 'cli-table2';
 
import DistanceCalculator from '../../calculators/DistanceCalculator';
 
import NearbyDriverFormatter from '../formatters/NearbyDriverFormatter';
 
export default class NearbyDriversTableBuilder {
  static build(nearbyDrivers) {
    let table = NearbyDriversTableBuilder.buildInitialTable(nearbyDrivers.location.name);
 
    let nearbyDriverRows = nearbyDrivers.nearbyDrivers.map((nearbyDriver) => {
      return NearbyDriversTableBuilder.buildNearbyDriverRow(nearbyDriver);
    });
 
    nearbyDriverRows = nearbyDriverRows.sort(NearbyDriversTableBuilder.sortByRideType);
 
    nearbyDriverRows.forEach((nearbyDriverRow) => {
      table.push(nearbyDriverRow);
    });
 
    return table.toString();
  }
 
  static getTableHeaders() {
    return List.of(
      emoji.get('red_car'),
      emoji.get('straight_ruler')
    );
  }
 
  static buildInitialTable(locationName) {
    let table = new Table();
    table.push([{
      colSpan: 2,
      content: `${emoji.get('round_pushpin')} ${locationName}`,
      hAlign: 'center'
    }]);
    let formattedHeaders = List(NearbyDriversTableBuilder.getTableHeaders()
                              .map(header => Map({ content: header, hAlign: 'center' })));
    table.push(formattedHeaders.toJS());
    return table;
  }
 
  static buildNearbyDriverRow(nearbyDriver) {
    return [
      NearbyDriverFormatter.formatRideType(nearbyDriver.rideType),
      NearbyDriversTableBuilder.buildDistance(NearbyDriverFormatter.formatDistance(nearbyDriver.distance)).toJS(),
    ];
  }
 
  static buildDistance(distance) {
    return Map({
      content: distance,
      hAlign: 'center',
    })
  }
 
  static sortByRideType(nearbyDriver1, nearbyDriver2) {
    const displayName1 = nearbyDriver1[0].toLowerCase();
    const displayName2 = nearbyDriver2[0].toLowerCase();
 
    if (displayName1 < displayName2) {
      return -1;
    }
    Eif (displayName1 > displayName2) {
      return 1;
    }
 
    return 0;
  }
}