hdo-storting-importer 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,11 +1,32 @@
1
1
  require 'rake'
2
2
  require 'rspec/core/rake_task'
3
+ require 'pry'
3
4
 
4
5
  RSpec::Core::RakeTask.new
5
6
 
6
7
  require 'cucumber/rake/task'
7
8
  Cucumber::Rake::Task.new
8
9
 
10
+ task :env do
11
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
12
+ require 'hdo/storting_importer'
13
+ end
14
+
15
+ namespace :doc do
16
+ task :types => :env do
17
+ Hdo::StortingImporter.print_types
18
+ end
19
+
20
+ desc 'Like `rake docs`, but includes XML examples.'
21
+ task :xml => :env do
22
+ Hdo::StortingImporter.print_types :xml => true
23
+ end
24
+ end
25
+
26
+ desc 'Print docs for each import type.'
27
+ task :doc => %w[doc:types]
28
+
29
+ desc 'Default task runs all tests.'
9
30
  task :default => [:spec, :cucumber]
10
31
 
11
32
  require "bundler/gem_tasks"
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_runtime_dependency "rake"
22
22
  gem.add_runtime_dependency "rest-client"
23
23
  gem.add_runtime_dependency "unicode_utils"
24
+ gem.add_runtime_dependency "multi_json"
24
25
  end
@@ -1,9 +1,10 @@
1
1
  module Hdo
2
2
  module StortingImporter
3
3
  class ApiDataSource < DataSource
4
+ USER_AGENT = "holderdeord-storting-importer"
4
5
 
5
6
  def initialize(url)
6
- @resource = RestClient::Resource.new(URI.parse(url))
7
+ @resource = RestClient::Resource.new(URI.parse(url), )
7
8
  end
8
9
 
9
10
  def representatives(period = DEFAULT_PERIOD)
@@ -52,7 +53,7 @@ module Hdo
52
53
  sub_resource = @resource[path]
53
54
  Hdo::StortingImporter.logger.info "parsing #{sub_resource}"
54
55
 
55
- parse sub_resource.get
56
+ parse sub_resource.get(:user_agent => USER_AGENT)
56
57
  end
57
58
 
58
59
  end
@@ -79,6 +79,15 @@ module Hdo
79
79
  end.compact
80
80
  end
81
81
 
82
+ def self.from_fusion_table(table_id, api_key)
83
+ url = "https://www.googleapis.com/fusiontables/v1/query"
84
+
85
+ resp = RestClient.get(url, :params => {:sql => "select * from #{table_id}", :key => api_key})
86
+ MultiJson.decode(resp).fetch('rows').map { |data| new(*data) }
87
+ rescue RestClient::RequestFailed => ex
88
+ raise "#{ex.message}: #{ex.http_body}"
89
+ end
90
+
82
91
  def initialize(party, body, general, categories, source, page)
83
92
  @party = party
84
93
  @body = body
@@ -103,6 +112,8 @@ module Hdo
103
112
  private
104
113
 
105
114
  def clean_categories(categories)
115
+ categories = categories.split(",") if categories.kind_of?(String)
116
+
106
117
  categories.map(&:strip).
107
118
  reject(&:empty?).
108
119
  map { |e| UnicodeUtils.upcase(e) }
@@ -1,5 +1,5 @@
1
1
  module Hdo
2
2
  module StortingImporter
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -27,6 +27,7 @@ module Hdo
27
27
  Field.new(:externalIssueId, true, :string, "The id (matching the issue's externalId) of the issue being voted on."),
28
28
  Field.new(:counts, true, :element, "An element with <for>, <against> and <absent> counts (see example)."),
29
29
  Field.new(:enacted, true, :boolean, "Whether the proposal was enacted."),
30
+ Field.new(:personal, true, :boolean, "Whether the vote was done using the voting system. If not, we attempt to infer the representative list from other votes on the same day."),
30
31
  Field.new(:subject, true, :string, "The subject of the vote."),
31
32
  Field.new(:method, true, :string, "??"),
32
33
  Field.new(:resultType, true, :string, "??"),
@@ -7,6 +7,8 @@ require 'erb'
7
7
  require 'logger'
8
8
  require 'builder'
9
9
  require 'unicode_utils'
10
+ require 'uri'
11
+ require 'multi_json'
10
12
 
11
13
  module Hdo
12
14
  module StortingImporter
@@ -14,6 +16,63 @@ module Hdo
14
16
  @root ||= File.expand_path("../../..", __FILE__)
15
17
  end
16
18
 
19
+ def self.types
20
+ [
21
+ Party,
22
+ Committee,
23
+ District,
24
+ Representative,
25
+ Category,
26
+ Issue,
27
+ Vote,
28
+ Vote::Proposition,
29
+ Promise
30
+ ]
31
+ end
32
+
33
+ def self.print_types(opts = {})
34
+ out = opts[:io] || $stdout
35
+ xml = !!opts[:xml]
36
+
37
+ max_name_size = 0
38
+ max_type_size = 0
39
+
40
+ type_strings = []
41
+
42
+
43
+ types.each do |type|
44
+ type.fields.each do |e|
45
+ required = 'required' if e.required
46
+ type_strings << (type_string = "#{required}:#{e.type}")
47
+
48
+ max_name_size = [e.name.size, max_name_size].max
49
+ max_type_size = [type_string.size, max_type_size].max
50
+ end
51
+ end
52
+
53
+ types.each_with_index do |type, type_idx|
54
+ out.puts "\x1b[1m#{type.type_name}\x1b[0m\n"
55
+
56
+ type.fields.each_with_index do |field, field_idx|
57
+
58
+ parts = [
59
+ field.name.to_s.rjust(max_name_size + 5),
60
+ type_strings[type_idx + field_idx].rjust(max_type_size),
61
+ "\t#{field.description}"
62
+ ]
63
+
64
+ out.puts parts.join ' '
65
+ end
66
+
67
+ out.puts "\n\n"
68
+
69
+ if xml
70
+ puts type.xml_example.split("\n")
71
+ puts "\n\n"
72
+ end
73
+ end
74
+ end
75
+
17
76
  def self.logger
18
77
  @logger ||= (
19
78
  out = $stderr # should be able to pipe output to a file
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.0.7
4
+ version: 0.0.8
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-07-31 00:00:00.000000000 Z
12
+ date: 2012-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
@@ -107,6 +107,22 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: multi_json
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
110
126
  description: Gem to process data from data.stortinget.no
111
127
  email:
112
128
  - jari.bakken@gmail.com