-
Notifications
You must be signed in to change notification settings - Fork 41
/
generate-payroll.rb
executable file
·232 lines (218 loc) · 3.32 KB
/
generate-payroll.rb
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#!/usr/bin/env ruby
def first_names
%w[
Liam
Noah
William
James
Logan
Benjamin
Mason
Elijah
Oliver
Jacob
Oliver
Harry
George
Noah
Jack
Jacob
Leo
Oscar
Charlie
Muhammad
Emma
Olivia
Ava
Isabella
Sophia
Mia
Charlotte
Amelia
Evelyn
Abigail
Olivia
Amelia
Isla
Ava
Emily
Isabella
Mia
Poppy
Ella
Lily
Byron
Leonard
Alberta
Hilary
Tresa
Octavio
Gladis
Nelia
Angie
Levi
Joanna
Veda
Maribeth
Glynis
Ramonita
Andria
Merrie
Rosalyn
Karly
Siu
Elvera
Adelina
Thi
Blondell
Milan
Illa
Brain
Hyman
Louanne
Christiana
Malik
Lizeth
Eva
Jeffry
Ilene
Lauralee
Justina
Gabriele
Grazyna
Shonna
Deeann
Maryrose
Belkis
Robbie
Beata
Fallon
Lettie
Dong
Lyndia
Ashleigh
]
end
def last_names
%w[
Dipasquale
Windsor
Drager
Marenco
Ung
Gajewski
Aguilera
Fugate
Bing
Wingler
Heine
Drumheller
Ptacek
Hedge
Fiorillo
Wehr
Pinnix
Schock
Ormond
Grigg
Hamel
Casale
Aguinaldo
Shiflett
Ransdell
Scioneaux
Merrell
Bonnell
Woodring
Shain
Hannah
Blauvelt
Portwood
Haydel
Gaillard
Pack
Mcgaughey
Perdomo
Campoverde
Ibrahim
Esposito
Kenney
Whitesell
Harriman
Bixler
Aburto
Monzon
Felkins
Ishibashi
]
end
def wage
"#{Random.rand(0..60)}.#{Random.rand(0..99)}".to_f
end
def hours
"#{Random.rand(20..50)}".to_i
end
def office
%w[
Lehi
MountainView
Seattle
Raleigh
NewYork
Concord
Manchester
].shuffle.first
end
def title
%w[
SoftwareEngineer
DevOps
MechanicalEngineer
HumanResources
].shuffle.first
end
def names
retval = []
first_names.each do |fname|
last_names.each do |lname|
retval.push("#{fname} #{lname}")
end
end
retval
end
def rand_year
(1975..2018).to_a.shuffle.first
end
def rand_month
(1..12).to_a.shuffle.first.to_s.rjust(2, "0")
end
def rand_day
(1..28).to_a.shuffle.first.to_s.rjust(2, "0")
end
def start_date
"#{rand_year}/#{rand_month}/#{rand_day}"
end
def constants
[
line("Linus Torvalds", "1599.01", "40", "Lehi", "CEO", "1993/04/16"),
line("Homer Simpson", "15.12", "33", "Springfield", "NuclearPower", "1993/04/16"),
line("Sergey Brin", "1299", "40", "MountainView", "COO", "1993/04/16"),
line("Larry Page", "1299", "40", "MountainView", "VPEng", "1993/04/16"),
line("Benjamin Porter", "678", "40", "Lehi", "Janitor", "1993/04/16"),
]
end
# These argument names look like typos and drive me kind of crazy, but they aren't typos.
# They are to avoid name collision with the functions defined above
def line(nam, wag, hour, offic, titl, start_dat)
"#{nam.split(' ')[0]}\t#{nam.split(' ')[1]}\t#{wag}\t#{hour}\t#{offic}\t#{titl}\t#{start_dat}"
end
File.open('payroll.tsv', 'w') do |file|
file.write("FirstName\tLastName\tHourlyWage\tHoursWorked\tOffice\tTitle\tStartDate\n")
file.write(
names
.map { |emp| line(emp, wage, hours, office, title, start_date) }
.concat(constants)
.shuffle
.join("\n")
)
end