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.
Files changed (37) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +138 -0
  8. data/Rakefile +6 -0
  9. data/arbetsformedlingen.gemspec +33 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/config/locales/errors.yml +16 -0
  13. data/data/country-codes.csv +237 -0
  14. data/data/municipality-codes.csv +292 -0
  15. data/lib/arbetsformedlingen.rb +56 -0
  16. data/lib/arbetsformedlingen/client.rb +25 -0
  17. data/lib/arbetsformedlingen/codes/country_code.rb +24 -0
  18. data/lib/arbetsformedlingen/codes/drivers_license_code.rb +33 -0
  19. data/lib/arbetsformedlingen/codes/experience_required_code.rb +21 -0
  20. data/lib/arbetsformedlingen/codes/municipality_code.rb +31 -0
  21. data/lib/arbetsformedlingen/codes/salary_type_code.rb +21 -0
  22. data/lib/arbetsformedlingen/models/application_method.rb +20 -0
  23. data/lib/arbetsformedlingen/models/company.rb +50 -0
  24. data/lib/arbetsformedlingen/models/document.rb +28 -0
  25. data/lib/arbetsformedlingen/models/dry/predicates.rb +66 -0
  26. data/lib/arbetsformedlingen/models/dry/types.rb +34 -0
  27. data/lib/arbetsformedlingen/models/model.rb +25 -0
  28. data/lib/arbetsformedlingen/models/packet.rb +39 -0
  29. data/lib/arbetsformedlingen/models/position.rb +56 -0
  30. data/lib/arbetsformedlingen/models/publication.rb +30 -0
  31. data/lib/arbetsformedlingen/models/qualification.rb +23 -0
  32. data/lib/arbetsformedlingen/models/salary.rb +20 -0
  33. data/lib/arbetsformedlingen/models/schedule.rb +56 -0
  34. data/lib/arbetsformedlingen/output_builder.rb +226 -0
  35. data/lib/arbetsformedlingen/response.rb +34 -0
  36. data/lib/arbetsformedlingen/version.rb +3 -0
  37. 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