hdo-storting-importer 0.2.4 → 0.2.6
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.
- data/lib/hdo/storting_importer/api_data_source.rb +22 -4
- data/lib/hdo/storting_importer/caching_data_source.rb +4 -4
- data/lib/hdo/storting_importer/data_source.rb +0 -3
- data/lib/hdo/storting_importer/disk_data_source.rb +4 -4
- data/lib/hdo/storting_importer/parsing_data_source.rb +4 -4
- data/lib/hdo/storting_importer/promise.rb +1 -2
- data/lib/hdo/storting_importer/proposition.rb +2 -2
- data/lib/hdo/storting_importer/representative.rb +4 -7
- data/lib/hdo/storting_importer/version.rb +1 -1
- data/lib/hdo/storting_importer/vote.rb +6 -2
- data/lib/hdo/storting_importer.rb +0 -1
- data/spec/hdo/storting_importer/caching_data_source_spec.rb +5 -3
- data/spec/hdo/storting_importer/representative_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -18
- metadata +2 -45
- data/lib/hdo/storting_importer/converter.rb +0 -40
- data/spec/fixtures/input/categories.xml +0 -1351
- data/spec/fixtures/input/committees.xml +0 -92
- data/spec/fixtures/input/districts.xml +0 -101
- data/spec/fixtures/input/parliament_issues.xml +0 -2852
- data/spec/fixtures/input/parties.xml +0 -42
- data/spec/fixtures/input/promises-a.csv +0 -341
- data/spec/fixtures/input/propositions_2175.xml +0 -64
- data/spec/fixtures/input/propositions_2176.xml +0 -64
- data/spec/fixtures/input/representatives.xml +0 -3218
- data/spec/fixtures/input/representatives_today.xml +0 -4872
- data/spec/fixtures/input/vote_results_2175.xml +0 -4400
- data/spec/fixtures/input/vote_results_2176.xml +0 -4400
- data/spec/fixtures/input/votes.xml +0 -85
- data/spec/fixtures/output/categories.json +0 -1
- data/spec/fixtures/output/committees.json +0 -1
- data/spec/fixtures/output/districts.json +0 -1
- data/spec/fixtures/output/parliament_issues.json +0 -1
- data/spec/fixtures/output/parties.json +0 -1
- data/spec/fixtures/output/representatives.json +0 -1
- data/spec/fixtures/output/votes.json +0 -1
- data/spec/hdo/storting_importer/converter_spec.rb +0 -72
@@ -20,7 +20,16 @@ module Hdo
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
#
|
24
|
+
# fetch representatives for the given period
|
25
|
+
#
|
26
|
+
# @param [String] period
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# data_source.representatives('2009-2013')
|
30
|
+
#
|
31
|
+
|
32
|
+
def representatives(period)
|
24
33
|
fetch "eksport/representanter/?StortingsPeriodeId=#{period}"
|
25
34
|
end
|
26
35
|
|
@@ -28,11 +37,20 @@ module Hdo
|
|
28
37
|
fetch 'eksport/dagensrepresentanter/'
|
29
38
|
end
|
30
39
|
|
31
|
-
|
40
|
+
#
|
41
|
+
# fetch parties for the given session
|
42
|
+
#
|
43
|
+
# @param [String] session
|
44
|
+
#
|
45
|
+
# @example
|
46
|
+
# data_source.representatives('2011-2012')
|
47
|
+
#
|
48
|
+
|
49
|
+
def parties(session_id)
|
32
50
|
fetch "eksport/partier/?sesjonid=#{session_id}"
|
33
51
|
end
|
34
52
|
|
35
|
-
def committees(session_id
|
53
|
+
def committees(session_id)
|
36
54
|
fetch "eksport/komiteer/?SesjonId=#{session_id}"
|
37
55
|
end
|
38
56
|
|
@@ -44,7 +62,7 @@ module Hdo
|
|
44
62
|
fetch "eksport/emner"
|
45
63
|
end
|
46
64
|
|
47
|
-
def parliament_issues(session_id
|
65
|
+
def parliament_issues(session_id)
|
48
66
|
fetch "eksport/saker?sesjonid=#{session_id}"
|
49
67
|
end
|
50
68
|
|
@@ -6,7 +6,7 @@ module Hdo
|
|
6
6
|
@cache = cache
|
7
7
|
end
|
8
8
|
|
9
|
-
def representatives(period
|
9
|
+
def representatives(period)
|
10
10
|
cache :representatives, period do
|
11
11
|
@delegate.representatives(period)
|
12
12
|
end
|
@@ -18,13 +18,13 @@ module Hdo
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def parties(session_id
|
21
|
+
def parties(session_id)
|
22
22
|
cache :parties, session_id do
|
23
23
|
@delegate.parties(session_id)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def committees(session_id
|
27
|
+
def committees(session_id)
|
28
28
|
cache :committees, session_id do
|
29
29
|
@delegate.committees session_id
|
30
30
|
end
|
@@ -42,7 +42,7 @@ module Hdo
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
def parliament_issues(session_id
|
45
|
+
def parliament_issues(session_id)
|
46
46
|
cache :parliament_issues, session_id do
|
47
47
|
@delegate.issues session_id
|
48
48
|
end
|
@@ -6,11 +6,11 @@ module Hdo
|
|
6
6
|
@root = Pathname.new(root)
|
7
7
|
end
|
8
8
|
|
9
|
-
def parties(session_id
|
9
|
+
def parties(session_id)
|
10
10
|
fetch "eksport/partier/index.html?sesjonid=#{session_id}"
|
11
11
|
end
|
12
12
|
|
13
|
-
def committees(session_id
|
13
|
+
def committees(session_id)
|
14
14
|
fetch "eksport/komiteer/index.html?SesjonId=#{session_id}"
|
15
15
|
end
|
16
16
|
|
@@ -22,11 +22,11 @@ module Hdo
|
|
22
22
|
fetch "eksport/emner/index.html"
|
23
23
|
end
|
24
24
|
|
25
|
-
def parliament_issues(session_id
|
25
|
+
def parliament_issues(session_id)
|
26
26
|
fetch "eksport/saker/index.html?sesjonid=#{session_id}"
|
27
27
|
end
|
28
28
|
|
29
|
-
def representatives(period
|
29
|
+
def representatives(period)
|
30
30
|
fetch "eksport/representanter/index.html?StortingsPeriodeId=#{period}"
|
31
31
|
end
|
32
32
|
|
@@ -5,7 +5,7 @@ module Hdo
|
|
5
5
|
@data_source = delegate_data_source
|
6
6
|
end
|
7
7
|
|
8
|
-
def representatives(period
|
8
|
+
def representatives(period)
|
9
9
|
Representative.from_storting_doc @data_source.representatives(period)
|
10
10
|
end
|
11
11
|
|
@@ -13,11 +13,11 @@ module Hdo
|
|
13
13
|
Representative.from_storting_doc @data_source.representatives_today
|
14
14
|
end
|
15
15
|
|
16
|
-
def parties(session_id
|
16
|
+
def parties(session_id)
|
17
17
|
Party.from_storting_doc @data_source.parties(session_id)
|
18
18
|
end
|
19
19
|
|
20
|
-
def committees(session_id
|
20
|
+
def committees(session_id)
|
21
21
|
Committee.from_storting_doc @data_source.committees(session_id)
|
22
22
|
end
|
23
23
|
|
@@ -29,7 +29,7 @@ module Hdo
|
|
29
29
|
Category.from_storting_doc @data_source.categories
|
30
30
|
end
|
31
31
|
|
32
|
-
def parliament_issues(session_id
|
32
|
+
def parliament_issues(session_id)
|
33
33
|
ParliamentIssue.from_storting_doc @data_source.parliament_issues(session_id)
|
34
34
|
end
|
35
35
|
|
@@ -35,11 +35,11 @@ module Hdo
|
|
35
35
|
new(*arr)
|
36
36
|
end
|
37
37
|
|
38
|
-
def self.from_storting_doc(doc,
|
38
|
+
def self.from_storting_doc(doc, date)
|
39
39
|
doc.css("voteringsforslag").map do |n|
|
40
40
|
rep_node = n.css("forslag_levert_av_representant").first
|
41
41
|
if rep_node && rep_node['nil'] != 'true'
|
42
|
-
delivered_by = Representative.from_storting_node(rep_node,
|
42
|
+
delivered_by = Representative.from_storting_node(rep_node, date)
|
43
43
|
else
|
44
44
|
delivered_by = nil
|
45
45
|
end
|
@@ -42,18 +42,15 @@ module Hdo
|
|
42
42
|
nodes = doc.css("dagensrepresentant")
|
43
43
|
nodes += doc.css("representant")
|
44
44
|
|
45
|
-
|
46
|
-
period = Util.period_to_date_range(period_node.text) if period_node
|
47
|
-
|
48
|
-
nodes.map { |e| from_storting_node(e, period) }
|
45
|
+
nodes.map { |e| from_storting_node(e) }
|
49
46
|
end
|
50
47
|
|
51
|
-
def self.from_storting_node(node,
|
48
|
+
def self.from_storting_node(node, date = nil)
|
52
49
|
district_node = node.css("fylke navn").first
|
53
50
|
district = district_node ? district_node.text : ''
|
54
51
|
|
55
|
-
start_date =
|
56
|
-
end_date
|
52
|
+
start_date = date || Date.today
|
53
|
+
end_date = nil
|
57
54
|
|
58
55
|
party_node = node.css("parti id").first
|
59
56
|
if party_node
|
@@ -106,13 +106,17 @@ module Hdo
|
|
106
106
|
short_inspect_string :include => [:external_id, :subject, :time, :counts]
|
107
107
|
end
|
108
108
|
|
109
|
+
def date
|
110
|
+
@date ||= Date.parse(time)
|
111
|
+
end
|
112
|
+
|
109
113
|
def add_storting_propositions(node)
|
110
|
-
@propositions += Proposition.from_storting_doc(node,
|
114
|
+
@propositions += Proposition.from_storting_doc(node, date)
|
111
115
|
end
|
112
116
|
|
113
117
|
def add_storting_results(node)
|
114
118
|
@representatives += node.css("representant_voteringsresultat").map do |n|
|
115
|
-
rep = Representative.from_storting_node(n.css("representant").first)
|
119
|
+
rep = Representative.from_storting_node(n.css("representant").first, date)
|
116
120
|
rep.vote_result = case n.css("votering").text
|
117
121
|
when 'for'
|
118
122
|
'for'
|
@@ -10,10 +10,12 @@ module Hdo
|
|
10
10
|
|
11
11
|
ads = CachingDataSource.new(delegate)
|
12
12
|
|
13
|
-
delegate.should_receive(:representatives).
|
13
|
+
delegate.should_receive(:representatives).twice.and_return "data"
|
14
14
|
|
15
|
-
ads.representatives # not cached
|
16
|
-
ads.representatives # cached
|
15
|
+
ads.representatives('2011-2012') # not cached
|
16
|
+
ads.representatives('2011-2012') # cached
|
17
|
+
ads.representatives('2012-2013') # not cached
|
18
|
+
ads.representatives('2012-2013') # cached
|
17
19
|
end
|
18
20
|
|
19
21
|
end
|
@@ -46,7 +46,7 @@ module Hdo
|
|
46
46
|
rep.last_name.should == 'Dahl'
|
47
47
|
rep.gender.should == 'M'
|
48
48
|
rep.district.should == 'Akershus'
|
49
|
-
rep.parties.should == [PartyMembership.from_hash('externalId' => 'H', 'startDate' =>
|
49
|
+
rep.parties.should == [PartyMembership.from_hash('externalId' => 'H', 'startDate' => Date.today.strftime("%Y-%m-%d"), 'endDate' => nil)]
|
50
50
|
rep.external_id.should == 'ADA'
|
51
51
|
rep.date_of_birth.should == '1975-07-07T00:00:00'
|
52
52
|
rep.date_of_death.should == '0001-01-01T00:00:00'
|
data/spec/spec_helper.rb
CHANGED
@@ -14,24 +14,6 @@ end
|
|
14
14
|
module Hdo
|
15
15
|
module StortingImporter
|
16
16
|
module SpecHelper
|
17
|
-
FIXTURES = Pathname.new(File.expand_path("../fixtures", __FILE__))
|
18
|
-
|
19
|
-
def input_fixture(name)
|
20
|
-
FIXTURES.join(input_path("#{name}.xml")).read
|
21
|
-
end
|
22
|
-
|
23
|
-
def output_fixture(name)
|
24
|
-
FIXTURES.join(output_path("#{name}.json")).read
|
25
|
-
end
|
26
|
-
|
27
|
-
def input_path(filename)
|
28
|
-
FIXTURES.join("input/#{filename}")
|
29
|
-
end
|
30
|
-
|
31
|
-
def output_path(filename)
|
32
|
-
FIXTURES.join("output/#{filename}")
|
33
|
-
end
|
34
|
-
|
35
17
|
def parse(str)
|
36
18
|
doc = Nokogiri::XML.parse(str)
|
37
19
|
doc.remove_namespaces!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hdo-storting-importer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|
@@ -277,7 +277,6 @@ files:
|
|
277
277
|
- lib/hdo/storting_importer/cli.rb
|
278
278
|
- lib/hdo/storting_importer/committee.rb
|
279
279
|
- lib/hdo/storting_importer/committee_membership.rb
|
280
|
-
- lib/hdo/storting_importer/converter.rb
|
281
280
|
- lib/hdo/storting_importer/core_ext/enumerable.rb
|
282
281
|
- lib/hdo/storting_importer/data_source.rb
|
283
282
|
- lib/hdo/storting_importer/disk_data_source.rb
|
@@ -309,31 +308,10 @@ files:
|
|
309
308
|
- lib/hdo/storting_importer/util.rb
|
310
309
|
- lib/hdo/storting_importer/version.rb
|
311
310
|
- lib/hdo/storting_importer/vote.rb
|
312
|
-
- spec/fixtures/input/categories.xml
|
313
|
-
- spec/fixtures/input/committees.xml
|
314
|
-
- spec/fixtures/input/districts.xml
|
315
|
-
- spec/fixtures/input/parliament_issues.xml
|
316
|
-
- spec/fixtures/input/parties.xml
|
317
|
-
- spec/fixtures/input/promises-a.csv
|
318
|
-
- spec/fixtures/input/propositions_2175.xml
|
319
|
-
- spec/fixtures/input/propositions_2176.xml
|
320
|
-
- spec/fixtures/input/representatives.xml
|
321
|
-
- spec/fixtures/input/representatives_today.xml
|
322
|
-
- spec/fixtures/input/vote_results_2175.xml
|
323
|
-
- spec/fixtures/input/vote_results_2176.xml
|
324
|
-
- spec/fixtures/input/votes.xml
|
325
|
-
- spec/fixtures/output/categories.json
|
326
|
-
- spec/fixtures/output/committees.json
|
327
|
-
- spec/fixtures/output/districts.json
|
328
|
-
- spec/fixtures/output/parliament_issues.json
|
329
|
-
- spec/fixtures/output/parties.json
|
330
|
-
- spec/fixtures/output/representatives.json
|
331
|
-
- spec/fixtures/output/votes.json
|
332
311
|
- spec/hdo/storting_importer/caching_data_source_spec.rb
|
333
312
|
- spec/hdo/storting_importer/category_spec.rb
|
334
313
|
- spec/hdo/storting_importer/committee_membership_spec.rb
|
335
314
|
- spec/hdo/storting_importer/committee_spec.rb
|
336
|
-
- spec/hdo/storting_importer/converter_spec.rb
|
337
315
|
- spec/hdo/storting_importer/district_spec.rb
|
338
316
|
- spec/hdo/storting_importer/parliament_issue_spec.rb
|
339
317
|
- spec/hdo/storting_importer/party_membership_spec.rb
|
@@ -372,31 +350,10 @@ summary: Gem to process data from data.stortinget.no
|
|
372
350
|
test_files:
|
373
351
|
- features/convert.feature
|
374
352
|
- features/support/env.rb
|
375
|
-
- spec/fixtures/input/categories.xml
|
376
|
-
- spec/fixtures/input/committees.xml
|
377
|
-
- spec/fixtures/input/districts.xml
|
378
|
-
- spec/fixtures/input/parliament_issues.xml
|
379
|
-
- spec/fixtures/input/parties.xml
|
380
|
-
- spec/fixtures/input/promises-a.csv
|
381
|
-
- spec/fixtures/input/propositions_2175.xml
|
382
|
-
- spec/fixtures/input/propositions_2176.xml
|
383
|
-
- spec/fixtures/input/representatives.xml
|
384
|
-
- spec/fixtures/input/representatives_today.xml
|
385
|
-
- spec/fixtures/input/vote_results_2175.xml
|
386
|
-
- spec/fixtures/input/vote_results_2176.xml
|
387
|
-
- spec/fixtures/input/votes.xml
|
388
|
-
- spec/fixtures/output/categories.json
|
389
|
-
- spec/fixtures/output/committees.json
|
390
|
-
- spec/fixtures/output/districts.json
|
391
|
-
- spec/fixtures/output/parliament_issues.json
|
392
|
-
- spec/fixtures/output/parties.json
|
393
|
-
- spec/fixtures/output/representatives.json
|
394
|
-
- spec/fixtures/output/votes.json
|
395
353
|
- spec/hdo/storting_importer/caching_data_source_spec.rb
|
396
354
|
- spec/hdo/storting_importer/category_spec.rb
|
397
355
|
- spec/hdo/storting_importer/committee_membership_spec.rb
|
398
356
|
- spec/hdo/storting_importer/committee_spec.rb
|
399
|
-
- spec/hdo/storting_importer/converter_spec.rb
|
400
357
|
- spec/hdo/storting_importer/district_spec.rb
|
401
358
|
- spec/hdo/storting_importer/parliament_issue_spec.rb
|
402
359
|
- spec/hdo/storting_importer/party_membership_spec.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Hdo
|
2
|
-
module StortingImporter
|
3
|
-
class Converter
|
4
|
-
|
5
|
-
def initialize(data_source)
|
6
|
-
@data_source = data_source
|
7
|
-
@cache = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
def json_for(name, opts = nil)
|
11
|
-
obj = data_for(name)
|
12
|
-
|
13
|
-
Yajl::Encoder.encode(obj, opts && opts[:pretty])
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def data_for(name)
|
19
|
-
case name
|
20
|
-
when :votes
|
21
|
-
# not ideal
|
22
|
-
issue_ids = fetch(:parliament_issues).map { |e| e.external_id }
|
23
|
-
issue_ids.map { |id| @data_source.votes_for(id) }.flatten.uniq_by { |e| e.external_id }
|
24
|
-
when :districts
|
25
|
-
fetch(name).sort_by { |e| e.name }
|
26
|
-
when :representatives
|
27
|
-
data = fetch(:representatives_today) + fetch(:representatives)
|
28
|
-
data.uniq_by { |e| e.external_id }.sort_by { |e| e.external_id }
|
29
|
-
else
|
30
|
-
fetch(name)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def fetch(name)
|
35
|
-
@cache[name] ||= @data_source.__send__(name)
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|