arbetsformedlingen 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +138 -0
- data/Rakefile +6 -0
- data/arbetsformedlingen.gemspec +33 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/locales/errors.yml +16 -0
- data/data/country-codes.csv +237 -0
- data/data/municipality-codes.csv +292 -0
- data/lib/arbetsformedlingen.rb +56 -0
- data/lib/arbetsformedlingen/client.rb +25 -0
- data/lib/arbetsformedlingen/codes/country_code.rb +24 -0
- data/lib/arbetsformedlingen/codes/drivers_license_code.rb +33 -0
- data/lib/arbetsformedlingen/codes/experience_required_code.rb +21 -0
- data/lib/arbetsformedlingen/codes/municipality_code.rb +31 -0
- data/lib/arbetsformedlingen/codes/salary_type_code.rb +21 -0
- data/lib/arbetsformedlingen/models/application_method.rb +20 -0
- data/lib/arbetsformedlingen/models/company.rb +50 -0
- data/lib/arbetsformedlingen/models/document.rb +28 -0
- data/lib/arbetsformedlingen/models/dry/predicates.rb +66 -0
- data/lib/arbetsformedlingen/models/dry/types.rb +34 -0
- data/lib/arbetsformedlingen/models/model.rb +25 -0
- data/lib/arbetsformedlingen/models/packet.rb +39 -0
- data/lib/arbetsformedlingen/models/position.rb +56 -0
- data/lib/arbetsformedlingen/models/publication.rb +30 -0
- data/lib/arbetsformedlingen/models/qualification.rb +23 -0
- data/lib/arbetsformedlingen/models/salary.rb +20 -0
- data/lib/arbetsformedlingen/models/schedule.rb +56 -0
- data/lib/arbetsformedlingen/output_builder.rb +226 -0
- data/lib/arbetsformedlingen/response.rb +34 -0
- data/lib/arbetsformedlingen/version.rb +3 -0
- metadata +178 -0
@@ -0,0 +1,292 @@
|
|
1
|
+
Unspecified workplace within Sweden,9090
|
2
|
+
Any country outside of Sweden,9999
|
3
|
+
Ale,1440
|
4
|
+
Alingsås,1489
|
5
|
+
Alvesta,0764
|
6
|
+
Aneby,0604
|
7
|
+
Arboga,1984
|
8
|
+
Arjeplog,2506
|
9
|
+
Arvidsjaur,2505
|
10
|
+
Arvika,1784
|
11
|
+
Askersund,1882
|
12
|
+
Avesta,2084
|
13
|
+
Bengtsfors,1460
|
14
|
+
Berg,2326
|
15
|
+
Bjurholm,2403
|
16
|
+
Bjuv,1260
|
17
|
+
Boden,2582
|
18
|
+
Bollebygd,1443
|
19
|
+
Bollnäs,2183
|
20
|
+
Borgholm,0885
|
21
|
+
Borlänge,2081
|
22
|
+
Borås,1490
|
23
|
+
Botkyrka,0127
|
24
|
+
Boxholm,0560
|
25
|
+
Bromölla,1272
|
26
|
+
Bräcke,2305
|
27
|
+
Burlöv,1231
|
28
|
+
Båstad,1278
|
29
|
+
Dals-Ed,1438
|
30
|
+
Danderyd,0162
|
31
|
+
Degerfors,1862
|
32
|
+
Dorotea,2425
|
33
|
+
Eda,1730
|
34
|
+
Ekerö,0125
|
35
|
+
Eksjö,0686
|
36
|
+
Emmaboda,0862
|
37
|
+
Enköping,0381
|
38
|
+
Eskilstuna,0484
|
39
|
+
Eslöv,1285
|
40
|
+
Essunga,1445
|
41
|
+
Fagersta,1982
|
42
|
+
Falkenberg,1382
|
43
|
+
Falköping,1499
|
44
|
+
Falun,2080
|
45
|
+
Filipstad,1782
|
46
|
+
Finspång,0562
|
47
|
+
Flen,0482
|
48
|
+
Forshaga,1763
|
49
|
+
Färgelanda,1439
|
50
|
+
Gagnef,2026
|
51
|
+
Gislaved,0662
|
52
|
+
Gnesta,0461
|
53
|
+
Gnosjö,0617
|
54
|
+
Gotland,0980
|
55
|
+
Grums,1764
|
56
|
+
Grästorp,1444
|
57
|
+
Gullspång,1447
|
58
|
+
Gällivare,2523
|
59
|
+
Gävle,2180
|
60
|
+
Göteborg,1480
|
61
|
+
Götene,1471
|
62
|
+
Habo,0643
|
63
|
+
Hagfors,1783
|
64
|
+
Hallsberg,1861
|
65
|
+
Hallstahammar,1961
|
66
|
+
Halmstad,1380
|
67
|
+
Hammarö,1761
|
68
|
+
Haninge,0136
|
69
|
+
Haparanda,2583
|
70
|
+
Heby,0331
|
71
|
+
Hedemora,2083
|
72
|
+
Helsingborg,1283
|
73
|
+
Herrljunga,1466
|
74
|
+
Hjo,1497
|
75
|
+
Hofors,2104
|
76
|
+
Huddinge,0126
|
77
|
+
Hudiksvall,2184
|
78
|
+
Hultsfred,0860
|
79
|
+
Hylte,1315
|
80
|
+
Håbo,0305
|
81
|
+
Hällefors,1863
|
82
|
+
Härjedalen,2361
|
83
|
+
Härnösand,2280
|
84
|
+
Härryda,1401
|
85
|
+
Hässleholm,1293
|
86
|
+
Höganäs,1284
|
87
|
+
Högsby,0821
|
88
|
+
Hörby,1266
|
89
|
+
Höör,1267
|
90
|
+
Jokkmokk,2510
|
91
|
+
Järfälla,0123
|
92
|
+
Jönköping,0680
|
93
|
+
Kalix,2514
|
94
|
+
Kalmar,0880
|
95
|
+
Karlsborg,1446
|
96
|
+
Karlshamn,1082
|
97
|
+
Karlskoga,1883
|
98
|
+
Karlskrona,1080
|
99
|
+
Karlstad,1780
|
100
|
+
Katrineholm,0483
|
101
|
+
Kil,1715
|
102
|
+
Kinda,0513
|
103
|
+
Kiruna,2584
|
104
|
+
Klippan,1276
|
105
|
+
Knivsta,0330
|
106
|
+
Kramfors,2282
|
107
|
+
Kristianstad,1290
|
108
|
+
Kristinehamn,1781
|
109
|
+
Krokom,2309
|
110
|
+
Kumla,1881
|
111
|
+
Kungsbacka,1384
|
112
|
+
Kungsör,1960
|
113
|
+
Kungälv,1482
|
114
|
+
Kävlinge,1261
|
115
|
+
Köping,1983
|
116
|
+
Laholm,1381
|
117
|
+
Landskrona,1282
|
118
|
+
Laxå,1860
|
119
|
+
Lekeberg,1814
|
120
|
+
Leksand,2029
|
121
|
+
Lerum,1441
|
122
|
+
Lessebo,0761
|
123
|
+
Lidingö,0186
|
124
|
+
Lidköping,1494
|
125
|
+
Lilla Edet,1462
|
126
|
+
Lindesberg,1885
|
127
|
+
Linköping,0580
|
128
|
+
Ljungby,0781
|
129
|
+
Ljusdal,2161
|
130
|
+
Ljusnarsberg,1864
|
131
|
+
Lomma,1262
|
132
|
+
Ludvika,2085
|
133
|
+
Luleå,2580
|
134
|
+
Lund,1281
|
135
|
+
Lycksele,2481
|
136
|
+
Lysekil,1484
|
137
|
+
Malmö,1280
|
138
|
+
Malung,2023
|
139
|
+
Malå,2418
|
140
|
+
Mariestad,1493
|
141
|
+
Mark,1463
|
142
|
+
Markaryd,0767
|
143
|
+
Mellerud,1461
|
144
|
+
Mjölby,0586
|
145
|
+
Mora,2062
|
146
|
+
Motala,0583
|
147
|
+
Mullsjö,0642
|
148
|
+
Munkedal,1430
|
149
|
+
Munkfors,1762
|
150
|
+
Mölndal,1481
|
151
|
+
Mönsterås,0861
|
152
|
+
Mörbylånga,0840
|
153
|
+
Nacka,0182
|
154
|
+
Nora,1884
|
155
|
+
Norberg,1962
|
156
|
+
Nordanstig,2132
|
157
|
+
Nordmaling,2401
|
158
|
+
Norrköping,0581
|
159
|
+
Norrtälje,0188
|
160
|
+
Norsjö,2417
|
161
|
+
Nybro,0881
|
162
|
+
Nykvarn,0140
|
163
|
+
Nyköping,0480
|
164
|
+
Nynäshamn,0192
|
165
|
+
Nässjö,0682
|
166
|
+
Ockelbo,2101
|
167
|
+
Olofström,1060
|
168
|
+
Orsa,2034
|
169
|
+
Orust,1421
|
170
|
+
Osby,1273
|
171
|
+
Oskarshamn,0882
|
172
|
+
Ovanåker,2121
|
173
|
+
Oxelösund,0481
|
174
|
+
Pajala,2521
|
175
|
+
Partille,1402
|
176
|
+
Perstorp,1275
|
177
|
+
Piteå,2581
|
178
|
+
Ragunda,2303
|
179
|
+
Robertsfors,2409
|
180
|
+
Ronneby,1081
|
181
|
+
Rättvik,2031
|
182
|
+
Sala,1981
|
183
|
+
Salem,0128
|
184
|
+
Sandviken,2181
|
185
|
+
Sigtuna,0191
|
186
|
+
Simrishamn,1291
|
187
|
+
Sjöbo,1265
|
188
|
+
Skara,1495
|
189
|
+
Skellefteå,2482
|
190
|
+
Skinnskatteberg,1904
|
191
|
+
Skurup,1264
|
192
|
+
Skövde,1496
|
193
|
+
Smedjebacken,2061
|
194
|
+
Sollefteå,2283
|
195
|
+
Sollentuna,0163
|
196
|
+
Solna,0184
|
197
|
+
Sorsele,2422
|
198
|
+
Sotenäs,1427
|
199
|
+
Staffanstorp,1230
|
200
|
+
Stenungsund,1415
|
201
|
+
Stockholm,0180
|
202
|
+
Storfors,1760
|
203
|
+
Storuman,2421
|
204
|
+
Strängnäs,0486
|
205
|
+
Strömstad,1486
|
206
|
+
Strömsund,2313
|
207
|
+
Sundbyberg,0183
|
208
|
+
Sundsvall,2281
|
209
|
+
Sunne,1766
|
210
|
+
Surahammar,1907
|
211
|
+
Svalöv,1214
|
212
|
+
Svedala,1263
|
213
|
+
Svenljunga,1465
|
214
|
+
Säffle,1785
|
215
|
+
Säter,2082
|
216
|
+
Sävsjö,0684
|
217
|
+
Söderhamn,2182
|
218
|
+
Söderköping,0582
|
219
|
+
Södertälje,0181
|
220
|
+
Sölvesborg,1083
|
221
|
+
Tanum,1435
|
222
|
+
Tibro,1472
|
223
|
+
Tidaholm,1498
|
224
|
+
Tierp,0360
|
225
|
+
Timrå,2262
|
226
|
+
Tingsryd,0763
|
227
|
+
Tjörn,1419
|
228
|
+
Tomelilla,1270
|
229
|
+
Torsby,1737
|
230
|
+
Torsås,0834
|
231
|
+
Tranemo,1452
|
232
|
+
Tranås,0687
|
233
|
+
Trelleborg,1287
|
234
|
+
Trollhättan,1488
|
235
|
+
Trosa,0488
|
236
|
+
Tyresö,0138
|
237
|
+
Täby,0160
|
238
|
+
Töreboda,1473
|
239
|
+
Uddevalla,1485
|
240
|
+
Ulricehamn,1491
|
241
|
+
Umeå,2480
|
242
|
+
Upplands Väsby,0114
|
243
|
+
Upplands-Bro,0139
|
244
|
+
Uppsala,0380
|
245
|
+
Uppvidinge,0760
|
246
|
+
Vadstena,0584
|
247
|
+
Vaggeryd,0665
|
248
|
+
Valdemarsvik,0563
|
249
|
+
Vallentuna,0115
|
250
|
+
Vansbro,2021
|
251
|
+
Vara,1470
|
252
|
+
Varberg,1383
|
253
|
+
Vaxholm,0187
|
254
|
+
Vellinge,1233
|
255
|
+
Vetlanda,0685
|
256
|
+
Vilhelmina,2462
|
257
|
+
Vimmerby,0884
|
258
|
+
Vindeln,2404
|
259
|
+
Vingåker,0428
|
260
|
+
Vårgårda,1442
|
261
|
+
Vänersborg,1487
|
262
|
+
Vännäs,2460
|
263
|
+
Värmdö,0120
|
264
|
+
Värnamo,0683
|
265
|
+
Västervik,0883
|
266
|
+
Västerås,1980
|
267
|
+
Växjö,0780
|
268
|
+
Ydre,0512
|
269
|
+
Ystad,1286
|
270
|
+
Åmål,1492
|
271
|
+
Ånge,2260
|
272
|
+
Åre,2321
|
273
|
+
Årjäng,1765
|
274
|
+
Åsele,2463
|
275
|
+
Åstorp,1277
|
276
|
+
Åtvidaberg,0561
|
277
|
+
Älmhult,0765
|
278
|
+
Älvdalen,2039
|
279
|
+
Älvkarleby,0319
|
280
|
+
Älvsbyn,2560
|
281
|
+
Ängelholm,1292
|
282
|
+
Öckerö,1407
|
283
|
+
Ödeshög,0509
|
284
|
+
Örebro,1880
|
285
|
+
Örkelljunga,1257
|
286
|
+
Örnsköldsvik,2284
|
287
|
+
Östersund,2380
|
288
|
+
Österåker,0117
|
289
|
+
Östhammar,0382
|
290
|
+
Östra Göinge,1256
|
291
|
+
Överkalix,2513
|
292
|
+
Övertorneå,2518
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
require 'dry-validation'
|
6
|
+
require 'dry-types'
|
7
|
+
|
8
|
+
require 'arbetsformedlingen/version'
|
9
|
+
|
10
|
+
require 'arbetsformedlingen/codes/country_code'
|
11
|
+
require 'arbetsformedlingen/codes/drivers_license_code'
|
12
|
+
require 'arbetsformedlingen/codes/experience_required_code'
|
13
|
+
require 'arbetsformedlingen/codes/municipality_code'
|
14
|
+
require 'arbetsformedlingen/codes/salary_type_code'
|
15
|
+
|
16
|
+
require 'arbetsformedlingen/models/dry/types'
|
17
|
+
require 'arbetsformedlingen/models/dry/predicates'
|
18
|
+
|
19
|
+
require 'arbetsformedlingen/output_builder'
|
20
|
+
require 'arbetsformedlingen/client'
|
21
|
+
|
22
|
+
require 'arbetsformedlingen/models/model'
|
23
|
+
require 'arbetsformedlingen/models/document'
|
24
|
+
require 'arbetsformedlingen/models/company'
|
25
|
+
require 'arbetsformedlingen/models/publication'
|
26
|
+
require 'arbetsformedlingen/models/position'
|
27
|
+
require 'arbetsformedlingen/models/qualification'
|
28
|
+
require 'arbetsformedlingen/models/salary'
|
29
|
+
require 'arbetsformedlingen/models/schedule'
|
30
|
+
require 'arbetsformedlingen/models/application_method'
|
31
|
+
require 'arbetsformedlingen/models/packet'
|
32
|
+
|
33
|
+
module Arbetsformedlingen
|
34
|
+
def self.post_job(packet)
|
35
|
+
Client.post_job(OutputBuilder.new(packet).to_xml)
|
36
|
+
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
attr_accessor :config
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.configure
|
43
|
+
self.config ||= Configuration.new
|
44
|
+
block_given? ? yield(config) : config
|
45
|
+
end
|
46
|
+
|
47
|
+
class Configuration
|
48
|
+
attr_accessor :test
|
49
|
+
|
50
|
+
def initialize
|
51
|
+
@test = false
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Arbetsformedlingen.configure
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'arbetsformedlingen/response'
|
2
|
+
|
3
|
+
module Arbetsformedlingen
|
4
|
+
class Client
|
5
|
+
BASE_URL = 'http://api.arbetsformedlingen.se/ledigtarbete'.freeze
|
6
|
+
ROUTES = {
|
7
|
+
post_job_url: "#{BASE_URL}/apiledigtarbete/hrxml",
|
8
|
+
test_post_job_url: "#{BASE_URL}/apiledigtarbete/test/hrxml"
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
HEADERS = {
|
12
|
+
'Content-type' => 'text/xml'
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
def self.post_job(xml)
|
16
|
+
response = HTTParty.post(post_job_url, body: xml, headers: HEADERS)
|
17
|
+
Response.new(response, xml)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.post_job_url
|
21
|
+
return ROUTES.fetch(:test_post_job_url) if Arbetsformedlingen.config.test
|
22
|
+
ROUTES.fetch(:post_job_url)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'csv'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module Arbetsformedlingen
|
5
|
+
class CountryCode
|
6
|
+
CODES = CSV.read(
|
7
|
+
File.expand_path('../../../../data/country-codes.csv', __FILE__)
|
8
|
+
).to_h.freeze
|
9
|
+
|
10
|
+
COUNTRY_CODES = Set.new(CODES.values).freeze
|
11
|
+
|
12
|
+
def self.to_code(country_code)
|
13
|
+
normalize(country_code)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.valid?(country_code)
|
17
|
+
COUNTRY_CODES.include?(normalize(country_code))
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.normalize(country_code)
|
21
|
+
country_code.to_s.upcase
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Arbetsformedlingen
|
4
|
+
module DriversLicenseCode
|
5
|
+
CODES = Set.new([
|
6
|
+
'AM', 'A1', 'A2', 'A', 'B', 'Utökad B', 'BE', 'C1', 'C1E', 'C', 'CE', 'D1', 'D1E', 'D', 'DE'
|
7
|
+
]).freeze
|
8
|
+
|
9
|
+
def self.codes
|
10
|
+
CODES.to_a
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.to_code(drivers_license)
|
14
|
+
normalize(drivers_license)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.valid?(drivers_license)
|
18
|
+
to_a(drivers_license).all? { |dl| CODES.include?(dl) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.normalize(drivers_license)
|
22
|
+
to_a(drivers_license).join(',')
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.to_a(drivers_license)
|
26
|
+
drivers_license.to_s.
|
27
|
+
split(',').
|
28
|
+
map(&:strip).
|
29
|
+
reject(&:empty?).
|
30
|
+
map(&:upcase)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Arbetsformedlingen
|
4
|
+
class ExperienceRequiredCode
|
5
|
+
CODES_MAP = {
|
6
|
+
'true' => '1',
|
7
|
+
'false' => '4'
|
8
|
+
}.freeze
|
9
|
+
CODES_MAP_INVERTED = CODES_MAP.invert.freeze
|
10
|
+
|
11
|
+
def self.to_code(value)
|
12
|
+
CODES_MAP.fetch(value.to_s) do
|
13
|
+
value.to_s if CODES_MAP_INVERTED[value.to_s]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.valid?(value)
|
18
|
+
!to_code(value).nil?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|