arbetsformedlingen 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c7974cf075a4b0845cf00e7c16a66f8d3112bdd3
4
- data.tar.gz: a45d7d95bc4209c97f730f5f0711eff9f648fc7e
2
+ SHA256:
3
+ metadata.gz: b2eac8d60cee1157e1d0f8ff6f436e4af26d9b12761577edaf0593490487dd9e
4
+ data.tar.gz: 3026994403965b85670d69d74dd4f828c376bff2342823aad11dacb9c61afcda
5
5
  SHA512:
6
- metadata.gz: dcf06f2e719fc148022bf3bf18e66d029228e9c26ec657c6e6255a3f84b3a9a50bd1f4fac8f694dd9b3a047dab183d7d7a0c91b9424a168d444397b30e02ed8c
7
- data.tar.gz: 34e13510b301ab04d176db5381144af159814c200fbc1e4d03725c0de1a17b0c55ab3065044b83e1edf7a63d4327e55cfe54e929601f56b4173fac3550e3f36b
6
+ metadata.gz: 8a9de52e5906afecff66c7cdbba74f0227643a3a99b8efc5ee2890b3eee83d3deeb13957beb5fa2528c0996b2de6e073f719c1d0442fd4897086c61350753ce2
7
+ data.tar.gz: 88a9ab08e8e78d7404a47153946aa50ec9ab1e7779d5bf49348bbe2237e69f414f93a3d4b5b4298556a0d0347d12665de2ee45b6e862bd06a31e0809d301f537
data/README.md CHANGED
@@ -181,8 +181,8 @@ Some requests had to be made to Arbetsförmedlingens TaxonomyService in order to
181
181
 
182
182
  This gem has translated the attribute names in Arbetsförmedlingens (AF) API from Swedish to English. You can find the translations below.
183
183
 
184
- | AF Term | Gem term |
185
- |--------------------- |--------------------|
184
+ | Arbetsförmedlingen Term | Gem term |
185
+ |------------------------ |--------------------|
186
186
  | landområde/värdsdel | areas |
187
187
  | kommun | municipality |
188
188
  | län | counties |
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency 'dry-validation', '~> 0.10'
27
27
  spec.add_dependency 'builder', '~> 3.2'
28
28
 
29
+ spec.add_development_dependency 'nokogiri', '~> 1.8'
29
30
  spec.add_development_dependency 'bundler', '~> 1.14'
30
31
  spec.add_development_dependency 'rake', '~> 10.0'
31
32
  spec.add_development_dependency 'rspec', '~> 3.0'
@@ -60,6 +60,10 @@ module Arbetsformedlingen
60
60
  end
61
61
 
62
62
  # TODO: Should we validate the IDs passed? What if they're invalid? Do we crash?
63
+ #
64
+ # Currently when an invalid value is passed MatchningResult::build returns
65
+ # => KeyError: key not found: "matchningslista"
66
+ # which isn't really helpful..
63
67
 
64
68
  query = {
65
69
  lanid: county_id,
@@ -7,11 +7,6 @@ module Arbetsformedlingen
7
7
  class Request
8
8
  Response = KeyStruct.new(:code, :body, :json)
9
9
 
10
- HEADERS = {
11
- 'Content-Type' => 'application/json',
12
- 'Accept-Language' => 'sv'
13
- }.freeze
14
-
15
10
  attr_reader :locale, :base_url
16
11
 
17
12
  def initialize(base_url: '', locale: 'sv')
@@ -25,7 +20,7 @@ module Arbetsformedlingen
25
20
  http = Net::HTTP.new(uri.host, uri.port)
26
21
 
27
22
  request = Net::HTTP::Get.new(uri)
28
- request['Content-Type'] = HEADERS['Content-Type']
23
+ request['Content-Type'] = 'application/json'
29
24
  request['Accept-Language'] = locale
30
25
 
31
26
  response = http.request(request)
@@ -40,7 +40,7 @@ module Arbetsformedlingen
40
40
 
41
41
  def self.build_application(data)
42
42
  Values::Application.new(
43
- reference: data.fetch('referens'),
43
+ reference: data['referens'],
44
44
  application_url: data.fetch('webbplats'),
45
45
  email: data['epostadress'],
46
46
  last_application_at: data.fetch('sista_ansokningsdag'),
@@ -0,0 +1,49 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ begin
5
+ require 'nokogiri'
6
+ rescue LoadError
7
+ end
8
+
9
+ module Arbetsformedlingen
10
+ module API
11
+ class SOAPRequest
12
+ Response = KeyStruct.new(:code, :body, :xml)
13
+
14
+ attr_reader :locale, :uri, :url
15
+
16
+ def initialize(url, locale: nil)
17
+ unless Object.const_defined?(:Nokogiri)
18
+ raise(ArgumentError, "unable to require 'nokogiri' gem, please install it")
19
+ end
20
+
21
+ @url = url
22
+ @uri = URI(url)
23
+ @locale = locale
24
+ end
25
+
26
+ def post(body)
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true if uri.scheme == 'https'
29
+
30
+ request = Net::HTTP::Post.new(uri)
31
+ request['Content-Type'] = 'text/xml'
32
+ request['Accept-Language'] = locale if locale
33
+ request.body = body
34
+
35
+ response = http.request(request)
36
+
37
+ Response.new(
38
+ code: response.code,
39
+ body: response.read_body,
40
+ xml: parse_xml(response.read_body)
41
+ )
42
+ end
43
+
44
+ def parse_xml(string)
45
+ Nokogiri::XML(string).tap { |doc| doc.remove_namespaces! }
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,60 @@
1
+ require 'arbetsformedlingen/soap_builder'
2
+ require 'arbetsformedlingen/api/soap_request'
3
+
4
+ module Arbetsformedlingen
5
+ module API
6
+ class WSOccupationClient
7
+ attr_reader :request
8
+
9
+ SERVICE_URL = 'https://api.arbetsformedlingen.se/af/v0/Occupation/wsoccupation.asmx'.freeze
10
+
11
+ def initialize
12
+ @request = request || SOAPRequest.new(SERVICE_URL)
13
+ end
14
+
15
+ def occupation(id)
16
+ soap_body = SOAPBuilder.wrap do |body|
17
+ body.GetOccupationById(xmlns: 'urn:ams.se:wsoccupation') do |node|
18
+ node.occupationId(id)
19
+ end
20
+ end
21
+
22
+ request.post(soap_body.to_xml)
23
+ end
24
+
25
+ def find_occupations(name)
26
+ soap_body = SOAPBuilder.wrap do |body|
27
+ body.FindOccupation(xmlns: 'urn:ams.se:wsoccupation') do |node|
28
+ node.name(name)
29
+ end
30
+ end
31
+
32
+ request.post(soap_body.to_xml)
33
+ end
34
+
35
+ def occupations
36
+ soap_body = SOAPBuilder.wrap do |body|
37
+ body.GetAllOccupations(xmlns: 'urn:ams.se:wsoccupation')
38
+ end
39
+
40
+ request.post(soap_body.to_xml)
41
+ end
42
+
43
+ def occupations_short
44
+ soap_body = SOAPBuilder.wrap do |body|
45
+ body.GetAllOccupationsShort(xmlns: 'urn:ams.se:wsoccupation')
46
+ end
47
+
48
+ request.post(soap_body.to_xml)
49
+ end
50
+
51
+ def occupations_detailed
52
+ soap_body = SOAPBuilder.wrap do |body|
53
+ body.GetAllOccupationsDetailed(xmlns: 'urn:ams.se:wsoccupation')
54
+ end
55
+
56
+ request.post(soap_body.to_xml)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,34 @@
1
+ require 'builder'
2
+
3
+ module Arbetsformedlingen
4
+ class SOAPBuilder
5
+ SOAP_ATTRIBUTES = {
6
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
7
+ 'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
8
+ 'xmlns:soap12' => 'http://www.w3.org/2003/05/soap-envelope'
9
+ }.freeze
10
+
11
+ def self.wrap(&block)
12
+ new.wrap(&block)
13
+ end
14
+
15
+ def initialize
16
+ @builder = Builder::XmlMarkup.new(indent: 2)
17
+ @builder.instruct!
18
+
19
+ yield self if block_given?
20
+ end
21
+
22
+ def wrap
23
+ @builder.soap12(:Envelope, SOAP_ATTRIBUTES) do |envelope|
24
+ envelope.soap12(:Body) { |body| yield(body) }
25
+ end
26
+
27
+ self
28
+ end
29
+
30
+ def to_xml
31
+ @builder.target!
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module Arbetsformedlingen
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arbetsformedlingen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Burenstam
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-24 00:00:00.000000000 Z
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -165,10 +179,12 @@ files:
165
179
  - lib/arbetsformedlingen/api/results/ad_result.rb
166
180
  - lib/arbetsformedlingen/api/results/matchning_result.rb
167
181
  - lib/arbetsformedlingen/api/results/soklista_result.rb
182
+ - lib/arbetsformedlingen/api/soap_request.rb
168
183
  - lib/arbetsformedlingen/api/values/ad_result_values.rb
169
184
  - lib/arbetsformedlingen/api/values/create_ad_page.rb
170
185
  - lib/arbetsformedlingen/api/values/matchning_result_values.rb
171
186
  - lib/arbetsformedlingen/api/values/soklista_values.rb
187
+ - lib/arbetsformedlingen/api/ws_occupation_client.rb
172
188
  - lib/arbetsformedlingen/codes/country_code.rb
173
189
  - lib/arbetsformedlingen/codes/drivers_license_code.rb
174
190
  - lib/arbetsformedlingen/codes/experience_required_code.rb
@@ -189,6 +205,7 @@ files:
189
205
  - lib/arbetsformedlingen/models/qualification.rb
190
206
  - lib/arbetsformedlingen/models/salary.rb
191
207
  - lib/arbetsformedlingen/models/schedule.rb
208
+ - lib/arbetsformedlingen/soap_builder.rb
192
209
  - lib/arbetsformedlingen/version.rb
193
210
  homepage: https://github.com/buren/arbetsformedlingen
194
211
  licenses:
@@ -211,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
228
  version: '0'
212
229
  requirements: []
213
230
  rubyforge_project:
214
- rubygems_version: 2.6.13
231
+ rubygems_version: 2.7.6
215
232
  signing_key:
216
233
  specification_version: 4
217
234
  summary: Arbetsförmedlingen API client