iww 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -0
  3. data/lib/iww/version.rb +3 -2
  4. data/lib/iww.rb +373 -55
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bc2c0872c301e06b53991b8dd6194733fc247dcf3e6473226f22528fa26af02
4
- data.tar.gz: a7d267ed33f9732bf323d5ed2096bd4269696942cd854b4b87a9265242c606b9
3
+ metadata.gz: 773b18ced0bed79c44d2465f4c62e07008c27bd51a7438d54641fccdeed14b56
4
+ data.tar.gz: 7a3479d56b5e8457f847a7a525b172360f5fcd8a751732601f2077934627da44
5
5
  SHA512:
6
- metadata.gz: 1bf39cccc5a8ce9071f45e04286b1806c41b0ebca46edf612849806808a07ff2b6e6fe399c5d723ffe05b82b57c2e24a481a72b6fa6fc1cf2bf79216a7d3b304
7
- data.tar.gz: ddf42e48034ef89c41c76182975b621a898719379349b6bffea60f47c1aaa472b8d66d875091ae951085a5d1a7287179192477a11a6e3ec47bd3fc9239bd5188
6
+ metadata.gz: c29fe455af59df928f7b0b45a9d7d3e3b9f3ac98735e1fdb2295860662bcfd683ecc251405d891c3e6b609f3aeef893751e415cbec56ca50e535fd30673562eb
7
+ data.tar.gz: d4632d4082697367eacf970dec64924be8a55f0e0beeed809683c40f9bba9223ced2539d7c628e8222575a7d7f5c818f023b09f1cdf965120f6d621e0bec64a0
data/Rakefile CHANGED
@@ -1,4 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
+ require "yard"
5
+
6
+ YARD::Rake::YardocTask.new do |t|
7
+ t.files = ['lib/**/*.rb']
8
+ t.options = ['--markup', 'markdown', '--protected', '--private']
9
+ end
10
+
4
11
  task default: %i[]
data/lib/iww/version.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Iww
4
- # current version.
5
- VERSION = "0.1.3"
4
+ # Current version of the Iww gem
5
+ # @return [String] the version number
6
+ VERSION = "0.1.4"
6
7
  end
data/lib/iww.rb CHANGED
@@ -2,10 +2,25 @@
2
2
 
3
3
  require_relative "iww/version"
4
4
 
5
- # The Iww Module
5
+ # The Iww module provides convenient access to information and helpers
6
+ # related to the Industrial Workers of the World ("One Big Union").
7
+ #
8
+ # @example Get the I.W.W. preamble
9
+ # Iww.preamble
10
+ #
11
+ # @example Lookup a division by job
12
+ # Iww["programmer"]
13
+ # #=> {"570"=>"Communications and Internet Technology"}
14
+ #
15
+ # @example Get the join link
16
+ # Iww.join!
17
+ # #=> "https://redcard.iww.org/user/register"
6
18
  module Iww
7
- class Error < StandardError; end # :nodoc:
19
+ # Custom error class for Iww module
20
+ class Error < StandardError; end
8
21
 
22
+ # Logo and image URLs for the I.W.W.
23
+ # @return [Hash] hash of image URLs with symbol keys
9
24
  @@LOGO = {
10
25
  black: %[https://redcard.iww.org/sites/default/files/iww-logo.png],
11
26
  white: %[https://www.iww.org/wp-content/uploads/2023/08/globe-2.svg],
@@ -13,30 +28,49 @@ module Iww
13
28
  cat: %[https://i0.wp.com/www.buckeyemuse.com/wp-content/uploads/2020/10/1024px-Anarchist_black_cat.png?ssl=1],
14
29
  seal: %[https://www.iww.org/wp-content/uploads/2023/09/entitled-iww-logo-white.svg]
15
30
  }
16
- # images
31
+
32
+ # Returns available I.W.W. logos and images
33
+ # @return [Hash] hash containing image URLs with symbol keys (:black, :white, :red, :cat, :seal)
34
+ # @example Get all available images
35
+ # Iww.image
36
+ # #=> {:black=>"https://redcard.iww.org/sites/default/files/iww-logo.png", ...}
17
37
  def self.image
18
38
  @@LOGO
19
39
  end
20
- # sign up link
40
+
41
+ # Returns the I.W.W. membership registration link
42
+ # @return [String] URL for joining the I.W.W.
43
+ # @example Get the join link
44
+ # Iww.join!
45
+ # #=> "https://redcard.iww.org/user/register"
21
46
  def self.join!
22
47
  %[https://redcard.iww.org/user/register]
23
48
  end
24
49
 
50
+ # I.W.W. Constitution Preamble text
51
+ # @return [Array<String>] array containing the preamble text as individual lines
25
52
  @@OLD = [
26
53
  %[The working class and the employing class have nothing in common.],
27
54
  %[There can be no peace so long as hunger and want are found among millions of the working people and the few, who make up the employing class, have all the good things of life.],
28
55
  %[Between these two classes a struggle must go on until the workers of the world organise as a class, take possession of the means of production, abolish the wage system, and live in harmony with the earth.],
29
56
  %[We find that the centering of the management of industries into fewer and fewer hands makes the trade unions unable to cope with the evergrowing power of the employing class. The trade unions foster a state of affairs which allows one set of workers to be pitted against another set of workers in the same industry, thereby helping defeat one another in wage wars. Moreover, the trade unions aid the employing class to mislead the workers into the belief that the working class have interests in common with their employers.],
30
57
  %[These conditions can be changed and the interest of the working class upheld only by an organization formed in such a way that all its members in any one industry, or in all industries if necessary, cease work whenever a strike or lockout is on in any department thereof, thus making an injury to one an injury to all.],
31
- %[Instead of the conservative motto, ‘’A fair days wage for a fair days work,” we must inscribe on our banner the revolutionary watchword, ‘’Abolition of the wage system.”],
58
+ %[Instead of the conservative motto, ''A fair day's wage for a fair day's work," we must inscribe on our banner the revolutionary watchword, ''Abolition of the wage system."],
32
59
  %[It is the historic mission of the working class to do away with capitalism. The army of prod uction must be organised, not only for everyday struggle with capitalists, but also to carry on production when capitalism shall have been overthrown. By organizing industrially we are forming the structure of the new society within the shell of the old.],
33
60
  %[Knowing, therefore, that such an organization is absolutely necessary for emancipation, we unite under the following set of guiding principles and rules:]
34
61
  ]
35
- # I.W.W. Constitution Preamble.
62
+
63
+ # Returns the I.W.W. Constitution Preamble
64
+ # @return [Array<String>] array containing the preamble text as individual lines
65
+ # @example Get the preamble
66
+ # Iww.preamble
67
+ # #=> ["The working class and the employing class have nothing in common.", ...]
36
68
  def self.preamble
37
69
  @@OLD
38
70
  end
39
71
 
72
+ # I.W.W. industrial divisions mapping
73
+ # @return [Hash<String, String>] hash mapping division numbers to division names
40
74
  @@DIV = {
41
75
  "110" => "Agricultural",
42
76
  "120" => "Lumber",
@@ -77,64 +111,348 @@ module Iww
77
111
  "690" => "Sex Industry"
78
112
  }
79
113
 
80
- # union divisions
114
+ # Returns all I.W.W. industrial divisions
115
+ # @return [Hash<String, String>] hash mapping division numbers to division names
116
+ # @example Get all divisions
117
+ # Iww.divisions
118
+ # #=> {"110"=>"Agricultural", "120"=>"Lumber", ...}
81
119
  def self.divisions
82
120
  @@DIV
83
121
  end
84
122
 
123
+ # Job titles to division numbers mapping
124
+ # @return [Hash<String, Array<String>>] hash mapping job titles to arrays of division numbers
85
125
  @@MAP = {
86
- "uber" => ["631"],
87
- "driver" => ["530","540","631"],
88
- "pedicabber" => ["530"],
89
- "courier" => ["540"],
90
- "dancer" => ["630","690"],
91
- "entertainer" => ["630","690"],
92
- "onlyfans" => ["630","690"],
93
- "farmer" => ["110"],
94
- "artist" => ["631"],
95
- "cook" => ["460","640"],
96
- "chef" => ["640"],
97
- "bartender" => ["640"],
98
- "barista" => ["640"],
99
- "writer" => ["450"],
100
- "fisherman" => ["130"],
101
- "landscaper" => ["340"],
102
- "pilot" => ["550"],
103
- "sailor" => ["510"],
104
- "construction" => ["310"],
105
- "accountant" => ["650"],
106
- "nurse" => ["610"],
107
- "orderly" => ["610"],
108
- "doctor" => ["610"],
109
- "busser" => ["670"],
110
- "musician" => ["630"],
111
- "performer" => ["630"],
112
- "character" => ["630"],
113
- "producer" => ["590"],
114
- "sales" => ["660"],
115
- "fundraiser" => ["580"],
116
- "influencer" => ["580"],
117
- "programmer" => ["570"],
118
- "developer" => ["570"],
119
- "teacher" => ["620"],
120
- "clerk" => ["660"],
121
- "budtender" => ["660"]
126
+ # Agricultural (110)
127
+ "farmer" => ["110"], "farmworker" => ["110"], "agricultural worker" => ["110"], "rancher" => ["110"],
128
+ "crop picker" => ["110"], "harvester" => ["110"], "farmhand" => ["110"], "livestock worker" => ["110"],
129
+ "gardener" => ["110","340"], "horticulturist" => ["110"], "agronomist" => ["110"], "farm manager" => ["110"],
130
+ "irrigation worker" => ["110"], "pesticide applicator" => ["110"], "farm equipment operator" => ["110"],
131
+ "migrant farmworker" => ["110"], "seasonal farmworker" => ["110"],
132
+
133
+ # Lumber (120)
134
+ "lumberjack" => ["120"], "logger" => ["120"], "forester" => ["120"], "sawmill worker" => ["120"],
135
+ "woodcutter" => ["120"], "tree faller" => ["120"], "timber worker" => ["120"], "pulpwood worker" => ["120"],
136
+ "forest worker" => ["120"], "silviculturist" => ["120"], "log truck driver" => ["120","530"],
137
+ "sawyer" => ["120"], "planer operator" => ["120"], "kiln operator" => ["120"],
138
+
139
+ # Fishery (130)
140
+ "fisherman" => ["130"], "fisher" => ["130"], "fishing boat worker" => ["130"], "deckhand" => ["130","510"],
141
+ "fish processor" => ["130","460"], "seafood worker" => ["130","460"], "fishmonger" => ["130","640"],
142
+ "shrimper" => ["130"], "crabber" => ["130"], "lobsterman" => ["130"], "oysterman" => ["130"],
143
+ "clam digger" => ["130"], "aquaculture worker" => ["130"], "fish farm worker" => ["130"],
144
+
145
+ # Greenhouse (140)
146
+ "greenhouse worker" => ["140"], "nursery worker" => ["140"], "hydroponics worker" => ["140"],
147
+ "florist" => ["140","640"], "plant grower" => ["140"], "horticulture worker" => ["140"],
148
+ "garden center worker" => ["140","640"], "landscape designer" => ["140","340"], "arborist" => ["140","340"],
149
+ "tree surgeon" => ["140","340"],
150
+
151
+ # Mining (210)
152
+ "miner" => ["210"], "coal miner" => ["210"], "gold miner" => ["210"], "silver miner" => ["210"],
153
+ "copper miner" => ["210"], "iron ore miner" => ["210"], "quarry worker" => ["210"], "rock miner" => ["210"],
154
+ "salt miner" => ["210"], "diamond miner" => ["210"], "surface miner" => ["210"], "underground miner" => ["210"],
155
+ "blaster" => ["210"], "explosives worker" => ["210"], "mine safety worker" => ["210"],
156
+ "geological technician" => ["210"], "drill operator" => ["210"], "construction equipment operator" => ["210","310"],
157
+
158
+ # Energy (220)
159
+ "oil worker" => ["220"], "gas worker" => ["220"], "petroleum worker" => ["220"], "refinery worker" => ["220"],
160
+ "pipeline worker" => ["220"], "drilling rig worker" => ["220"], "offshore oil worker" => ["220"],
161
+ "solar panel installer" => ["220"], "wind turbine technician" => ["220"], "renewable energy worker" => ["220"],
162
+ "power plant worker" => ["220"], "electrical utility worker" => ["220","670"], "lineman" => ["220","670"],
163
+ "energy technician" => ["220"], "nuclear plant worker" => ["220"], "hydroelectric worker" => ["220"],
164
+
165
+ # Civil Construction (310)
166
+ "construction" => ["310"], "construction worker" => ["310"], "carpenter" => ["310"], "electrician" => ["310"],
167
+ "plumber" => ["310"], "pipefitter" => ["310"], "ironworker" => ["310"], "steelworker" => ["310"],
168
+ "cement mason" => ["310"], "concrete worker" => ["310"], "bricklayer" => ["310"], "roofer" => ["310"],
169
+ "glazier" => ["310"], "insulation worker" => ["310"], "drywall installer" => ["310"], "painter" => ["310"],
170
+ "crane operator" => ["310"], "excavator operator" => ["310"], "bulldozer operator" => ["310"],
171
+ "road worker" => ["310"], "highway worker" => ["310"], "bridge worker" => ["310"], "tunnel worker" => ["310"],
172
+ "demolition worker" => ["310"], "welder" => ["310"], "construction foreman" => ["310"],
173
+ "site supervisor" => ["310"], "safety coordinator" => ["310"],
174
+
175
+ # Ship and Boat Builders (330)
176
+ "shipbuilder" => ["330"], "boat builder" => ["330"], "shipwright" => ["330"], "marine carpenter" => ["330"],
177
+ "boatwright" => ["330"], "naval architect" => ["330"], "ship fitter" => ["330"], "hull worker" => ["330"],
178
+ "marine welder" => ["330"], "boat repair worker" => ["330"], "marina worker" => ["330"],
179
+
180
+ # Building Maintenance and Landscaping (340)
181
+ "landscaper" => ["340"], "groundskeeper" => ["340"], "maintenance worker" => ["340"], "janitor" => ["340"],
182
+ "cleaner" => ["340"], "custodian" => ["340"], "building maintenance" => ["340"], "facility manager" => ["340"],
183
+ "pest control worker" => ["340"], "lawn care worker" => ["340"], "tree trimmer" => ["340"],
184
+ "snow removal worker" => ["340"], "cleaning service" => ["340"], "housekeeper" => ["340"],
185
+ "hotel housekeeper" => ["340"],
186
+
187
+ # Textile and Leather (410)
188
+ "textile worker" => ["410"], "seamstress" => ["410"], "tailor" => ["410"], "garment worker" => ["410"],
189
+ "clothing maker" => ["410"], "pattern maker" => ["410"], "cutter" => ["410"], "sewer" => ["410"],
190
+ "upholsterer" => ["410"], "leather worker" => ["410"], "shoemaker" => ["410"], "tanner" => ["410"],
191
+ "weaver" => ["410"], "knitter" => ["410"], "dyer" => ["410"], "spinner" => ["410"],
192
+ "textile designer" => ["410"], "fabric worker" => ["410"],
193
+
194
+ # Wood Processing and Furniture (420)
195
+ "furniture maker" => ["420"], "cabinet maker" => ["420"], "woodworker" => ["420"], "furniture finisher" => ["420"],
196
+ "furniture designer" => ["420"], "wood finisher" => ["420"], "furniture assembler" => ["420"],
197
+ "furniture installer" => ["420"], "cabinet installer" => ["420"], "millworker" => ["420"],
198
+
199
+ # Chemical (430)
200
+ "chemical worker" => ["430"], "chemist" => ["430"], "pharmaceutical worker" => ["430"],
201
+ "chemical plant worker" => ["430"], "chemical engineer" => ["430"], "research chemist" => ["430"],
202
+ "quality control chemist" => ["430"], "chemical mixer" => ["430"], "chemical operator" => ["430"],
203
+ "plastics worker" => ["430"], "rubber worker" => ["430"], "paint manufacturer" => ["430"],
204
+ "cosmetics worker" => ["430"], "soap maker" => ["430"],
205
+
206
+ # Printing and Publishing (450)
207
+ "writer" => ["450"], "editor" => ["450"], "journalist" => ["450"], "reporter" => ["450"],
208
+ "publisher" => ["450"], "printer" => ["450"], "press operator" => ["450"], "typesetter" => ["450"],
209
+ "graphic designer" => ["450"], "layout artist" => ["450"], "proofreader" => ["450"], "copy editor" => ["450"],
210
+ "blogger" => ["450"], "copywriter" => ["450"], "book designer" => ["450"], "illustrator" => ["450"],
211
+
212
+ # Food Product (460)
213
+ "cook" => ["460","640"], "chef" => ["460","640"], "food worker" => ["460"], "food processor" => ["460"],
214
+ "food manufacturer" => ["460"], "baker" => ["460"], "butcher" => ["460"], "meat cutter" => ["460"],
215
+ "meat packer" => ["460"], "food preparer" => ["460"], "kitchen worker" => ["460"],
216
+ "food packer" => ["460"], "food inspector" => ["460"], "brewery worker" => ["460"],
217
+ "winery worker" => ["460"], "distillery worker" => ["460"], "cheese maker" => ["460"],
218
+
219
+ # Electronics and Instrument (470)
220
+ "electronics worker" => ["470"], "electrical engineer" => ["470"], "electronics technician" => ["470"],
221
+ "circuit board assembler" => ["470"], "solderer" => ["470"], "electronics tester" => ["470"],
222
+ "instrument maker" => ["470"], "precision instrument worker" => ["470"], "appliance repair" => ["470"],
223
+ "electronics repair" => ["470"], "computer hardware technician" => ["470"], "semiconductor worker" => ["470"],
224
+ "microchip fabricator" => ["470"],
225
+
226
+ # Glass, Pottery, and Mineral (480)
227
+ "glass worker" => ["480"], "glass blower" => ["480"], "potter" => ["480"], "ceramics worker" => ["480"],
228
+ "tile maker" => ["480"], "brick maker" => ["480"], "stone worker" => ["480"], "mason" => ["480"],
229
+ "ceramic artist" => ["480"], "glass cutter" => ["480"], "ceramic engineer" => ["480"],
230
+
231
+ # Pulp and Paper Mill (490)
232
+ "paper mill worker" => ["490"], "pulp worker" => ["490"], "paper maker" => ["490"],
233
+ "paper machine operator" => ["490"], "paper converter" => ["490"], "paper finisher" => ["490"],
234
+ "paper packer" => ["490"], "cardboard worker" => ["490"], "packaging worker" => ["490"],
235
+
236
+ # Marine (510)
237
+ "sailor" => ["510"], "seaman" => ["510"], "mariner" => ["510"], "merchant marine" => ["510"],
238
+ "boat worker" => ["510"], "ship worker" => ["510"], "ship officer" => ["510"], "captain" => ["510"],
239
+ "mate" => ["510"], "able seaman" => ["510"], "ordinary seaman" => ["510"], "fisheries observer" => ["510"],
240
+ "marine surveyor" => ["510"], "port worker" => ["510","560"], "stevedore" => ["510","560"],
241
+ "longshoreman" => ["510","560"],
242
+
243
+ # Railroad (520)
244
+ "railroad worker" => ["520"], "train engineer" => ["520"], "conductor" => ["520"], "brakeman" => ["520"],
245
+ "railroad maintainer" => ["520"], "track worker" => ["520"], "signal maintainer" => ["520"],
246
+ "yardmaster" => ["520"], "switchman" => ["520"], "locomotive engineer" => ["520"],
247
+ "rail car mechanic" => ["520"], "railroad operator" => ["520"], "transit worker" => ["520"],
248
+ "subway worker" => ["520"],
249
+
250
+ # Ground Transportation and Transit (530)
251
+ "driver" => ["530","540","631"], "truck driver" => ["530"], "delivery driver" => ["530","540"],
252
+ "bus driver" => ["530"], "taxi driver" => ["530"], "rideshare driver" => ["530"], "uber" => ["530","631"],
253
+ "lyft" => ["530","631"], "transit operator" => ["530"], "shuttle driver" => ["530"], "van driver" => ["530"],
254
+ "chauffeur" => ["530"], "limo driver" => ["530"], "school bus driver" => ["530"], "motor coach operator" => ["530"],
255
+ "pedicabber" => ["530"], "rickshaw driver" => ["530"], "bike messenger" => ["530","540"],
256
+
257
+ # Postal Express and Message Delivery (540)
258
+ "courier" => ["540"], "mail carrier" => ["540"], "postal worker" => ["540"], "letter carrier" => ["540"],
259
+ "mail handler" => ["540"], "postal clerk" => ["540"], "delivery person" => ["540"], "messenger" => ["540"],
260
+ "package handler" => ["540"], "shipping clerk" => ["540"], "receiving clerk" => ["540"],
261
+ "fulfillment worker" => ["540","560"], "amazon worker" => ["540","560"], "fedex worker" => ["540"],
262
+ "ups worker" => ["540"], "dhl worker" => ["540"],
263
+
264
+ # Air Transport (550)
265
+ "pilot" => ["550"], "airline pilot" => ["550"], "flight attendant" => ["550"], "air traffic controller" => ["550"],
266
+ "airport worker" => ["550"], "ground crew" => ["550"], "ramp agent" => ["550"], "baggage handler" => ["550"],
267
+ "gate agent" => ["550"], "ticket agent" => ["550"], "aircraft mechanic" => ["550"], "aviation technician" => ["550"],
268
+ "flight engineer" => ["550"], "cargo pilot" => ["550"], "charter pilot" => ["550"], "flight instructor" => ["550"],
269
+
270
+ # General Distribution (560)
271
+ "distribution worker" => ["560"], "logistics worker" => ["560"], "stocker" => ["560"],
272
+ "inventory worker" => ["560"], "picker" => ["560"], "packer" => ["560"], "shipper" => ["560"],
273
+ "receiver" => ["560"], "forklift operator" => ["560"], "material handler" => ["560"],
274
+ "supply chain worker" => ["560"], "freight handler" => ["560"], "mover" => ["560"],
275
+
276
+ # Communications and Internet Technology (570)
277
+ "programmer" => ["570"], "developer" => ["570"], "software engineer" => ["570"], "web developer" => ["570"],
278
+ "front-end developer" => ["570"], "back-end developer" => ["570"], "full-stack developer" => ["570"],
279
+ "mobile developer" => ["570"], "app developer" => ["570"], "data analyst" => ["570"],
280
+ "machine learning engineer" => ["570"], "AI engineer" => ["570"], "database administrator" => ["570"],
281
+ "system administrator" => ["570"], "network administrator" => ["570"], "IT support" => ["570"],
282
+ "help desk" => ["570"], "technical support" => ["570"], "cybersecurity analyst" => ["570"],
283
+ "information security" => ["570"], "cloud engineer" => ["570"], "devops engineer" => ["570"],
284
+ "site reliability engineer" => ["570"], "QA tester" => ["570"], "software tester" => ["570"],
285
+ "UX designer" => ["570"], "UI designer" => ["570"], "product designer" => ["570"],
286
+ "game developer" => ["570"], "game designer" => ["570"], "api developer" => ["570"],
287
+ "blockchain developer" => ["570"], "cryptocurrency developer" => ["570"],
288
+
289
+ # Information Service (580)
290
+ "fundraiser" => ["580"], "influencer" => ["580"], "social media manager" => ["580"],
291
+ "digital marketer" => ["580"], "SEO specialist" => ["580"], "marketing manager" => ["580"],
292
+ "public relations" => ["580"], "communications specialist" => ["580"], "brand manager" => ["580"],
293
+ "advertising worker" => ["580"], "media planner" => ["580"], "market researcher" => ["580"],
294
+ "business analyst" => ["580"], "management consultant" => ["580"], "research analyst" => ["580"],
295
+ "statistician" => ["580"], "economist" => ["580"], "records manager" => ["580"],
296
+ "information manager" => ["580"],
297
+
298
+ # Video, Audio, and Film Production (590)
299
+ "producer" => ["590"], "director" => ["590"], "filmmaker" => ["590"], "videographer" => ["590"],
300
+ "cinematographer" => ["590"], "camera operator" => ["590"], "video editor" => ["590"], "film editor" => ["590"],
301
+ "sound engineer" => ["590"], "audio engineer" => ["590"], "sound technician" => ["590"],
302
+ "lighting technician" => ["590"], "grip" => ["590"], "gaffer" => ["590"], "production assistant" => ["590"],
303
+ "screenwriter" => ["590"], "scriptwriter" => ["590"], "storyboard artist" => ["590"],
304
+ "special effects artist" => ["590"], "visual effects artist" => ["590"], "animation artist" => ["590"],
305
+ "animator" => ["590"], "motion graphics designer" => ["590"], "broadcast technician" => ["590"],
306
+ "video producer" => ["590"], "podcast producer" => ["590"], "radio producer" => ["590"],
307
+ "streaming producer" => ["590"],
308
+
309
+ # Health Services (610)
310
+ "nurse" => ["610"], "doctor" => ["610"], "physician" => ["610"], "surgeon" => ["610"],
311
+ "medical assistant" => ["610"], "physician assistant" => ["610"], "medical technician" => ["610"],
312
+ "phlebotomist" => ["610"], "radiology technician" => ["610"], "x-ray technician" => ["610"],
313
+ "pharmacist" => ["610"], "dentist" => ["610"], "dental hygienist" => ["610"], "dental assistant" => ["610"],
314
+ "veterinarian" => ["610"], "veterinary technician" => ["610"], "physical therapist" => ["610"],
315
+ "occupational therapist" => ["610"], "respiratory therapist" => ["610"], "speech therapist" => ["610"],
316
+ "orderly" => ["610"], "medical orderly" => ["610"], "hospital worker" => ["610"],
317
+ "healthcare worker" => ["610"], "caregiver" => ["610"], "home health aide" => ["610"],
318
+ "personal care aide" => ["610"], "mental health worker" => ["610"], "counselor" => ["610"],
319
+ "therapist" => ["610"], "social worker" => ["610"], "psychologist" => ["610"], "psychiatrist" => ["610"],
320
+ "medical coder" => ["610"], "medical biller" => ["610"], "medical records" => ["610"],
321
+ "health information technician" => ["610"],
322
+
323
+ # Incarcerated (613)
324
+ "prison worker" => ["613"], "incarcerated worker" => ["613"], "jail worker" => ["613"],
325
+ "detention worker" => ["613"], "correctional worker" => ["613"],
326
+
327
+ # Education and Research (620)
328
+ "teacher" => ["620"], "professor" => ["620"], "educator" => ["620"], "school teacher" => ["620"],
329
+ "college professor" => ["620"], "university professor" => ["620"], "researcher" => ["620"], "scientist" => ["620"],
330
+ "academic researcher" => ["620"], "postdoc" => ["620"], "graduate assistant" => ["620"],
331
+ "teaching assistant" => ["620"], "substitute teacher" => ["620"], "tutor" => ["620"],
332
+ "instructor" => ["620"], "trainer" => ["620"], "education administrator" => ["620"],
333
+ "principal" => ["620"], "school administrator" => ["620"], "curriculum developer" => ["620"],
334
+ "educational consultant" => ["620"], "academic advisor" => ["620"], "student advisor" => ["620"],
335
+
336
+ # Performing arts, Recreation, and Tourism (630)
337
+ "musician" => ["630"], "performer" => ["630"], "character" => ["630"], "dancer" => ["630","690"],
338
+ "entertainer" => ["630","690"], "actor" => ["630"], "actress" => ["630"], "singer" => ["630"],
339
+ "vocalist" => ["630"], "comedian" => ["630"], "magician" => ["630"], "juggler" => ["630"],
340
+ "circus performer" => ["630"], "theater worker" => ["630"], "stagehand" => ["630"],
341
+ "theater technician" => ["630"], "concert technician" => ["630"], "roadie" => ["630"],
342
+ "tour manager" => ["630"], "band manager" => ["630"], "artist" => ["630"], "visual artist" => ["630"],
343
+ "sculptor" => ["630"], "photographer" => ["630"], "graphic artist" => ["630"], "model" => ["630"],
344
+ "fashion model" => ["630"], "runway model" => ["630"], "fitness instructor" => ["630"],
345
+ "yoga instructor" => ["630"], "personal trainer" => ["630"], "recreation worker" => ["630"],
346
+ "camp counselor" => ["630"], "lifeguard" => ["630"], "swim instructor" => ["630"],
347
+ "ski instructor" => ["630"], "snowboard instructor" => ["630"], "tour guide" => ["630"],
348
+ "museum guide" => ["630"], "gallery attendant" => ["630"], "tourism worker" => ["630"],
349
+ "hospitality worker" => ["630"], "hotel worker" => ["630"], "concierge" => ["630"],
350
+ "bellhop" => ["630"], "doorman" => ["630"], "event planner" => ["630"], "party planner" => ["630"],
351
+ "wedding planner" => ["630"], "caterer" => ["630"], "dj" => ["630"], "disc jockey" => ["630"],
352
+ "mc" => ["630"], "master of ceremonies" => ["630"], "emcee" => ["630"],
353
+ "streamer" => ["630"], "twitch streamer" => ["630"], "youtube creator" => ["630"],
354
+ "tiktok creator" => ["630"],
355
+
356
+ # Freelance and Temporary (631)
357
+ "freelancer" => ["631"], "freelance writer" => ["631"], "freelance designer" => ["631"],
358
+ "freelance developer" => ["631"], "freelance artist" => ["631"], "freelance photographer" => ["631"],
359
+ "freelance consultant" => ["631"], "contractor" => ["631"], "independent contractor" => ["631"],
360
+ "temp worker" => ["631"], "temporary worker" => ["631"], "seasonal worker" => ["631"],
361
+ "gig worker" => ["631"], "on-call worker" => ["631"], "self-employed" => ["631"],
362
+ "solopreneur" => ["631"], "small business owner" => ["631"],
363
+
364
+ # Food and Retail Workers (640)
365
+ "bartender" => ["640"], "barista" => ["640"], "server" => ["640"], "waiter" => ["640"],
366
+ "waitress" => ["640"], "hostess" => ["640"], "busser" => ["640","670"], "busboy" => ["640","670"],
367
+ "busgirl" => ["640","670"], "dishwasher" => ["640"], "retail worker" => ["640"], "sales associate" => ["640"],
368
+ "cashier" => ["640"], "stock clerk" => ["640"], "customer service" => ["640"],
369
+ "customer service representative" => ["640"], "call center worker" => ["640"], "fast food worker" => ["640"],
370
+ "restaurant worker" => ["640"], "coffee shop worker" => ["640"], "bakery worker" => ["640"],
371
+ "deli worker" => ["640"], "grocery worker" => ["640"], "supermarket worker" => ["640"],
372
+ "convenience store worker" => ["640"], "gas station worker" => ["640"], "beauty salon worker" => ["640"],
373
+ "hair stylist" => ["640"], "barber" => ["640"], "nail technician" => ["640"], "esthetician" => ["640"],
374
+ "massage therapist" => ["640"], "spa worker" => ["640"], "fitness center worker" => ["640"],
375
+ "gym worker" => ["640"],
376
+
377
+ # Financial Office (650)
378
+ "accountant" => ["650"], "bookkeeper" => ["650"], "financial advisor" => ["650"],
379
+ "insurance agent" => ["650"], "insurance adjuster" => ["650"], "claims adjuster" => ["650"],
380
+ "underwriter" => ["650"], "loan officer" => ["650"], "mortgage broker" => ["650"],
381
+ "real estate agent" => ["650"], "real estate broker" => ["650"], "tax preparer" => ["650"],
382
+ "payroll clerk" => ["650"], "billing clerk" => ["650"], "accounts payable" => ["650"],
383
+ "accounts receivable" => ["650"], "financial clerk" => ["650"], "budget analyst" => ["650"],
384
+ "cost analyst" => ["650"], "actuary" => ["650"], "comptroller" => ["650"], "controller" => ["650"],
385
+ "cfo" => ["650"], "financial manager" => ["650"],
386
+
387
+ # Government (651)
388
+ "government worker" => ["651"], "civil servant" => ["651"], "public servant" => ["651"],
389
+ "federal employee" => ["651"], "state employee" => ["651"], "municipal employee" => ["651"],
390
+ "city worker" => ["651"], "county worker" => ["651"], "administrative assistant" => ["651"],
391
+ "secretary" => ["651"], "receptionist" => ["651"], "office worker" => ["651"], "bureaucrat" => ["651"],
392
+ "public administrator" => ["651"], "policy analyst" => ["651"], "regulatory worker" => ["651"],
393
+ "inspector" => ["651"], "compliance officer" => ["651"], "auditor" => ["651"], "tax collector" => ["651"],
394
+ "social services worker" => ["651"], "public health worker" => ["651"], "election worker" => ["651"],
395
+ "court worker" => ["651"], "legal assistant" => ["651"], "paralegal" => ["651"],
396
+
397
+ # Retail (660)
398
+ "sales" => ["660"], "salesperson" => ["660"], "sales clerk" => ["660"], "retail sales" => ["660"],
399
+ "commission sales" => ["660"], "car salesperson" => ["660"], "real estate salesperson" => ["660"],
400
+ "insurance salesperson" => ["660"], "door-to-door sales" => ["660"], "shop clerk" => ["660"],
401
+ "retail clerk" => ["660"], "budtender" => ["660"], "cannabis worker" => ["660"], "dispensary worker" => ["660"],
402
+ "tobacco worker" => ["660"], "liquor store worker" => ["660"], "wine shop worker" => ["660"],
403
+ "beer store worker" => ["660"],
404
+
405
+ # Utility and Sanitation (670)
406
+ "sanitation worker" => ["670"], "garbage collector" => ["670"], "waste management" => ["670"],
407
+ "recycling worker" => ["670"], "environmental services" => ["670"], "sewer worker" => ["670"],
408
+ "water treatment worker" => ["670"], "wastewater treatment" => ["670"], "cleaning crew" => ["670"],
409
+ "janitorial staff" => ["670"], "maintenance staff" => ["670"], "environmental services worker" => ["670"],
410
+ "housekeeping" => ["670"], "laundry worker" => ["670"], "linen worker" => ["670"],
411
+
412
+ # Sex Industry (690)
413
+ "sex worker" => ["690"], "escort" => ["690"], "prostitute" => ["690"], "street worker" => ["690"],
414
+ "brothel worker" => ["690"], "erotic massage" => ["690"], "strip club worker" => ["690"],
415
+ "stripper" => ["690"], "exotic dancer" => ["690"], "peep show worker" => ["690"],
416
+ "adult film worker" => ["690"], "porn star" => ["690"], "adult performer" => ["690"],
417
+ "phone sex operator" => ["690"], "dominatrix" => ["690"], "professional submissive" => ["690"],
418
+ "sugar baby" => ["690"], "sugar daddy" => ["690"], "onlyfans" => ["690"], "fansly" => ["690"],
419
+ "adult content creator" => ["690"]
122
420
  }
123
- # List of all jobs and divisions represented.
421
+
422
+ # Returns a flattened list of all job titles and division names
423
+ # @return [Array<String>] array containing all job titles and division names
424
+ # @example Get all jobs and divisions
425
+ # Iww.jobs
426
+ # #=> ["uber", "driver", "pedicabber", ..., "Agricultural", "Lumber", ...]
124
427
  def self.jobs
125
428
  [ @@MAP.keys, @@DIV.values ].flatten
126
- end
127
-
128
- # add job +j+ to division +k+.
129
- def self.job k, j
130
- if !@@MAP.has_key? k.to_s
131
- @@MAP[k.to_s] = []
132
- end
133
- @@MAP[k.to_s] << j
134
- end
429
+ end
430
+
431
+ # Adds a job title to a division number mapping
432
+ # @param k [String, Symbol] the job title key
433
+ # @param j [String] the division number to add
434
+ # @example Add a new job mapping
435
+ # Iww.job("mechanic", "310")
436
+ def self.job k, j
437
+ if !@@MAP.has_key? k.to_s
438
+ @@MAP[k.to_s] = []
439
+ end
440
+ @@MAP[k.to_s] << j
441
+ end
135
442
 
136
- # job lookup.
137
- def self.[] x
443
+ # Lookup divisions by job title, division number, or division name
444
+ # @param x [String, Symbol, Integer] the search query (job title, division number, or division name)
445
+ # @return [Hash<String, String>, false] hash mapping division numbers to names, or false if not found
446
+ # @example Lookup by job title
447
+ # Iww["programmer"]
448
+ # #=> {"570"=>"Communications and Internet Technology"}
449
+ # @example Lookup by division number
450
+ # Iww["570"]
451
+ # #=> {"570"=>"Communications and Internet Technology"}
452
+ # @example Lookup by division name
453
+ # Iww["Communications and internet technology"]
454
+ # #=> {"570"=>"Communications and Internet Technology"}
455
+ def self.[] x
138
456
  xx = x.to_s.downcase
139
457
  if @@MAP.has_key? xx
140
458
  o = {}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iww
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Olson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-01-23 00:00:00.000000000 Z
11
+ date: 2026-01-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A helpful ruby library to do union division lookups by job, number, or
14
14
  description.