-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsanta.js
125 lines (108 loc) · 2.93 KB
/
santa.js
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env node
"use strict";
require('dotenv').config({silent: true});
const inquirer = require('inquirer');
let client;
if (process.env.NODE_ENV === 'production') {
client = require('twilio')(process.env.ACCOUNT_SID, process.env.AUTH_TOKEN);
}
function send(people, price) {
let name, forName, text;
for (let number in people) {
name = people[number].name;
forName = people[number].santaFor.name;
if (!name || !forName || !price) {
console.error("Incomplete info");
return;
}
text = `Hi ${name}, you have ${forName}. The price limit is $${price}. Happy Holidays from super-secret-santa!`;
if (process.env.NODE_ENV === 'production') {
// only text in production
client.messages.create({
to: number,
from: process.env.PHONE_NUMBER,
body: text,
}, function(err, message) {
if (err) {
return console.error(err);
}
// print messages sent
// console.log(message.body);
});
} else {
console.log(text);
}
};
}
function assign(people, numbers, price) {
// randomization of array adapted from http://stackoverflow.com/a/2450976
let currentIndex = numbers.length;
let temporaryValue, randomIndex;
while (currentIndex !== 0) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = numbers[currentIndex];
numbers[currentIndex] = numbers[randomIndex];
numbers[randomIndex] = temporaryValue;
}
for (let i=0; i < numbers.length - 1; i++) {
people[numbers[i]].santaFor = {
name: people[numbers[i+1]].name
};
}
people[numbers[numbers.length - 1]].santaFor = {
name: people[numbers[0]].name
};
send(people, price);
}
console.log("Welcome to super-secret-santa!");
let people = {};
let numbers = [];
let questions = [
{
type: "input",
name: "name",
message: "Enter a name:"
},
{
type: "input",
name: "phone",
message: "What's a good number?",
validate: function(value) {
var pass = value.match(/^([01]{1})?[\-\.\s]?\(?(\d{3})\)?[\-\.\s]?(\d{3})[\-\.\s]?(\d{4})\s?((?:#|ext\.?\s?|x\.?\s?){1}(?:\d+)?)?$/i);
if (pass) {
return true;
} else {
return "Please enter a valid phone number";
}
}
},
{
type: "confirm",
name: "again",
message: "Add another person?",
default: true
}
];
function ask() {
inquirer.prompt(questions, function(answers) {
people[answers.phone] = { name: answers.name };
numbers.push(answers.phone);
if (answers.again) {
ask();
} else {
inquirer.prompt([
{
type: "list",
name: "price",
message: "Select a price (USD) limit",
choices: ["$ 10", "$ 15", "$ 20", "$ 30", "$ 50"],
filter: function(val) { return val.replace(/[^0-9]/g, ''); }
}
], function(answers) {
assign(people, numbers, answers.price)
});
}
});
}
ask();