my_representatives 0.0.2
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 +4 -0
- data/Gemfile +3 -0
- data/LICENSE.md +8 -0
- data/README.md +60 -0
- data/lib/my_representatives/abbreviatable.rb +29 -0
- data/lib/my_representatives/act/csv_lower.rb +118 -0
- data/lib/my_representatives/act/merge_lower.rb +38 -0
- data/lib/my_representatives/act/web_index.rb +37 -0
- data/lib/my_representatives/act/web_index_row.rb +86 -0
- data/lib/my_representatives/act/web_lower.rb +65 -0
- data/lib/my_representatives/act/web_show.rb +46 -0
- data/lib/my_representatives/commonwealth/commonwealth.rb +5 -0
- data/lib/my_representatives/commonwealth/csv_email.rb +93 -0
- data/lib/my_representatives/commonwealth/csv_lower.rb +130 -0
- data/lib/my_representatives/commonwealth/csv_upper.rb +129 -0
- data/lib/my_representatives/commonwealth/merge_lower.rb +54 -0
- data/lib/my_representatives/commonwealth/merge_upper.rb +54 -0
- data/lib/my_representatives/commonwealth/web_index.rb +57 -0
- data/lib/my_representatives/commonwealth/web_lower.rb +55 -0
- data/lib/my_representatives/commonwealth/web_show.rb +99 -0
- data/lib/my_representatives/commonwealth/web_upper.rb +54 -0
- data/lib/my_representatives/electorate.rb +146 -0
- data/lib/my_representatives/errors.rb +7 -0
- data/lib/my_representatives/fileable.rb +11 -0
- data/lib/my_representatives/guessable.rb +120 -0
- data/lib/my_representatives/hashable.rb +11 -0
- data/lib/my_representatives/nsw/csv_lower.rb +115 -0
- data/lib/my_representatives/nsw/csv_upper.rb +115 -0
- data/lib/my_representatives/nsw/merge_lower.rb +41 -0
- data/lib/my_representatives/nsw/merge_upper.rb +41 -0
- data/lib/my_representatives/nsw/web_index.rb +56 -0
- data/lib/my_representatives/nsw/web_lower.rb +54 -0
- data/lib/my_representatives/nsw/web_show.rb +140 -0
- data/lib/my_representatives/nsw/web_upper.rb +54 -0
- data/lib/my_representatives/nt/web_index.rb +46 -0
- data/lib/my_representatives/nt/web_lower.rb +54 -0
- data/lib/my_representatives/nt/web_show.rb +134 -0
- data/lib/my_representatives/person.rb +197 -0
- data/lib/my_representatives/qld/csv_lower.rb +117 -0
- data/lib/my_representatives/qld/merge_lower.rb +37 -0
- data/lib/my_representatives/qld/web_index.rb +47 -0
- data/lib/my_representatives/qld/web_lower.rb +54 -0
- data/lib/my_representatives/qld/web_show.rb +146 -0
- data/lib/my_representatives/sa/csv_lower.rb +120 -0
- data/lib/my_representatives/sa/csv_upper.rb +115 -0
- data/lib/my_representatives/sa/merge_lower.rb +39 -0
- data/lib/my_representatives/sa/merge_upper.rb +39 -0
- data/lib/my_representatives/sa/web_index_lower.rb +42 -0
- data/lib/my_representatives/sa/web_index_upper.rb +43 -0
- data/lib/my_representatives/sa/web_lower.rb +54 -0
- data/lib/my_representatives/sa/web_show.rb +158 -0
- data/lib/my_representatives/sa/web_upper.rb +54 -0
- data/lib/my_representatives/static.rb +5 -0
- data/lib/my_representatives/tas/csv_lower.rb +125 -0
- data/lib/my_representatives/tas/csv_upper.rb +125 -0
- data/lib/my_representatives/version.rb +5 -0
- data/lib/my_representatives/vic/csv_lower.rb +99 -0
- data/lib/my_representatives/vic/csv_upper.rb +97 -0
- data/lib/my_representatives/vic/merge_lower.rb +37 -0
- data/lib/my_representatives/vic/merge_upper.rb +37 -0
- data/lib/my_representatives/vic/web_index.rb +58 -0
- data/lib/my_representatives/vic/web_lower.rb +54 -0
- data/lib/my_representatives/vic/web_show.rb +118 -0
- data/lib/my_representatives/vic/web_upper.rb +54 -0
- data/lib/my_representatives/wa/csv_lower.rb +144 -0
- data/lib/my_representatives/wa/csv_upper.rb +131 -0
- data/lib/my_representatives/wa/merge_lower.rb +41 -0
- data/lib/my_representatives/wa/merge_upper.rb +37 -0
- data/lib/my_representatives/wa/web_index.rb +45 -0
- data/lib/my_representatives/wa/web_lower.rb +54 -0
- data/lib/my_representatives/wa/web_show.rb +195 -0
- data/lib/my_representatives/wa/web_upper.rb +54 -0
- data/lib/my_representatives.rb +150 -0
- data/my_representatives.gemspec +25 -0
- metadata +204 -0
@@ -0,0 +1,146 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
class Electorate
|
3
|
+
class Error < StandardError; end
|
4
|
+
class ElectorateNameMissingError < Error; end
|
5
|
+
class StateNameMissingError < Error; end
|
6
|
+
class StateNameInvalidError < Error; end
|
7
|
+
|
8
|
+
include MyRepresentatives::Hashable
|
9
|
+
|
10
|
+
attr_accessor :name, :house, :state, :lower_house, :state_government
|
11
|
+
|
12
|
+
def initialize(name)
|
13
|
+
raise ElectorateNameMissingError unless name && name.is_a?(String)
|
14
|
+
@name = name
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_hash
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def commonwealth_lower!(state)
|
22
|
+
raise StateNameMissingError unless state
|
23
|
+
raise StateNameInvalidError unless MyRepresentatives::Static::STATES.include?(state)
|
24
|
+
self.name = self.name
|
25
|
+
self.house = "House of Representatives"
|
26
|
+
self.state = state
|
27
|
+
self.state_government = false
|
28
|
+
self.lower_house = true
|
29
|
+
end
|
30
|
+
|
31
|
+
def commonwealth_upper!(state)
|
32
|
+
raise StateNameMissingError unless state
|
33
|
+
raise StateNameInvalidError unless MyRepresentatives::Static::STATES.include?(state)
|
34
|
+
self.name = self.name
|
35
|
+
self.house = "Senate"
|
36
|
+
self.state = state
|
37
|
+
self.state_government = false
|
38
|
+
self.lower_house = false
|
39
|
+
end
|
40
|
+
|
41
|
+
def state_act_lower!
|
42
|
+
self.name = self.name
|
43
|
+
self.house = "Legislative Assembly"
|
44
|
+
self.state = "ACT"
|
45
|
+
self.state_government = true
|
46
|
+
self.lower_house = true
|
47
|
+
end
|
48
|
+
|
49
|
+
def state_nsw_lower!
|
50
|
+
self.name = self.name
|
51
|
+
self.house = "Legislative Assembly"
|
52
|
+
self.state = "NSW"
|
53
|
+
self.state_government = true
|
54
|
+
self.lower_house = true
|
55
|
+
end
|
56
|
+
|
57
|
+
def state_nsw_upper!
|
58
|
+
self.name = self.name
|
59
|
+
self.house = "Legislative Council"
|
60
|
+
self.state = "NSW"
|
61
|
+
self.state_government = true
|
62
|
+
self.lower_house = false
|
63
|
+
end
|
64
|
+
|
65
|
+
def state_nt_lower!
|
66
|
+
self.name = self.name
|
67
|
+
self.house = "Legislative Assembly"
|
68
|
+
self.state = "NT"
|
69
|
+
self.state_government = true
|
70
|
+
self.lower_house = true
|
71
|
+
end
|
72
|
+
|
73
|
+
def state_qld_lower!
|
74
|
+
self.name = self.name
|
75
|
+
self.house = "Legislative Assembly"
|
76
|
+
self.state = "QLD"
|
77
|
+
self.state_government = true
|
78
|
+
self.lower_house = true
|
79
|
+
end
|
80
|
+
|
81
|
+
def state_sa_lower!
|
82
|
+
self.name = self.name
|
83
|
+
self.house = "House of Assembly"
|
84
|
+
self.state = "SA"
|
85
|
+
self.state_government = true
|
86
|
+
self.lower_house = true
|
87
|
+
end
|
88
|
+
|
89
|
+
def state_sa_upper!
|
90
|
+
self.name = self.name
|
91
|
+
self.house = "Legislative Council"
|
92
|
+
self.state = "SA"
|
93
|
+
self.state_government = true
|
94
|
+
self.lower_house = false
|
95
|
+
end
|
96
|
+
|
97
|
+
def state_tas_lower!
|
98
|
+
self.name = self.name
|
99
|
+
self.house = "House of Assembly"
|
100
|
+
self.state = "TAS"
|
101
|
+
self.state_government = true
|
102
|
+
self.lower_house = true
|
103
|
+
end
|
104
|
+
|
105
|
+
def state_tas_upper!
|
106
|
+
self.name = self.name
|
107
|
+
self.house = "Legislative Council"
|
108
|
+
self.state = "TAS"
|
109
|
+
self.state_government = true
|
110
|
+
self.lower_house = false
|
111
|
+
end
|
112
|
+
|
113
|
+
def state_vic_lower!
|
114
|
+
self.name = self.name
|
115
|
+
self.house = "Legislative Assembly"
|
116
|
+
self.state = "VIC"
|
117
|
+
self.state_government = true
|
118
|
+
self.lower_house = true
|
119
|
+
end
|
120
|
+
|
121
|
+
def state_vic_upper!
|
122
|
+
self.name = self.name
|
123
|
+
self.house = "Legislative Council"
|
124
|
+
self.state = "VIC"
|
125
|
+
self.state_government = true
|
126
|
+
self.lower_house = false
|
127
|
+
end
|
128
|
+
|
129
|
+
def state_wa_lower!
|
130
|
+
self.name = self.name
|
131
|
+
self.house = "Legislative Assembly"
|
132
|
+
self.state = "WA"
|
133
|
+
self.state_government = true
|
134
|
+
self.lower_house = true
|
135
|
+
end
|
136
|
+
|
137
|
+
def state_wa_upper!
|
138
|
+
self.name = self.name
|
139
|
+
self.house = "Legislative Council"
|
140
|
+
self.state = "WA"
|
141
|
+
self.state_government = true
|
142
|
+
self.lower_house = false
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module Guessable
|
3
|
+
|
4
|
+
def guess_first(str)
|
5
|
+
name = str
|
6
|
+
name.gsub!(/\((.+?)\)\s/,"")
|
7
|
+
|
8
|
+
if name
|
9
|
+
|
10
|
+
name = if name.start_with?("Hon ")
|
11
|
+
name.gsub("Hon ", "")
|
12
|
+
elsif name.start_with?("The Hon. Dr ")
|
13
|
+
name.gsub("The Hon. Dr ", "")
|
14
|
+
elsif name.start_with?("Reverend the Hon. ")
|
15
|
+
name.gsub("Reverend the Hon. ", "")
|
16
|
+
elsif name.start_with?("Hon. ")
|
17
|
+
name.gsub("Hon. ", "")
|
18
|
+
elsif name.start_with?("Senator the Hon ")
|
19
|
+
name.gsub("Senator the Hon ", "")
|
20
|
+
elsif name.start_with?("The Hon. ")
|
21
|
+
name.gsub("The Hon. ", "")
|
22
|
+
elsif name.start_with?("The Hon ")
|
23
|
+
name.gsub("The Hon ", "")
|
24
|
+
elsif name.start_with?("Senator ")
|
25
|
+
name.gsub("Senator ", "")
|
26
|
+
elsif name.start_with?("Mrs ")
|
27
|
+
name.gsub("Mrs ", "")
|
28
|
+
elsif name.start_with?("Miss ")
|
29
|
+
name.gsub("Miss ", "")
|
30
|
+
elsif name.start_with?("Ms ")
|
31
|
+
name.gsub("Ms ", "")
|
32
|
+
elsif name.start_with?("Mr ")
|
33
|
+
name.gsub("Mr ", "")
|
34
|
+
elsif name.start_with?("Dr ")
|
35
|
+
name.gsub("Dr ", "")
|
36
|
+
else
|
37
|
+
name
|
38
|
+
end
|
39
|
+
|
40
|
+
name = name.split(" ")
|
41
|
+
name[0]
|
42
|
+
|
43
|
+
else
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def guess_last(str)
|
49
|
+
name = str
|
50
|
+
if name
|
51
|
+
name.gsub(" MLA", "").gsub(" MLC", "").gsub(" MP", "").gsub(" QC", "").gsub(" AO", "").gsub(" AOM", "").gsub(" OAM", "").gsub(" CSC", "").gsub(",","").strip.split(" ").last
|
52
|
+
else
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
def guess_preferred(str)
|
57
|
+
name = str
|
58
|
+
regex = /\((.+?)\)/
|
59
|
+
match = name.match(regex)
|
60
|
+
|
61
|
+
if match
|
62
|
+
match[1]
|
63
|
+
else
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
def guess_gender(str)
|
70
|
+
if str
|
71
|
+
if str == "Mrs"
|
72
|
+
"Female"
|
73
|
+
elsif str == "Miss"
|
74
|
+
"Female"
|
75
|
+
elsif str == "Ms"
|
76
|
+
"Female"
|
77
|
+
elsif str == "Mr"
|
78
|
+
"Male"
|
79
|
+
else
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
else
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def guess_title(str)
|
88
|
+
name = str
|
89
|
+
if name
|
90
|
+
name = if name.start_with?("Hon ")
|
91
|
+
"Hon"
|
92
|
+
elsif name.start_with?("The Hon")
|
93
|
+
"The Hon"
|
94
|
+
elsif name.start_with?("Senator the Hon ")
|
95
|
+
"Senator the Hon"
|
96
|
+
elsif name.start_with?("Senator ")
|
97
|
+
"Senator"
|
98
|
+
elsif name.start_with?("Mrs ")
|
99
|
+
"Mrs"
|
100
|
+
elsif name.start_with?("Miss ")
|
101
|
+
"Miss"
|
102
|
+
elsif name.start_with?("Ms ")
|
103
|
+
"Ms"
|
104
|
+
elsif name.start_with?("Mr ")
|
105
|
+
"Mr"
|
106
|
+
elsif name.start_with?("Dr ")
|
107
|
+
"Dr"
|
108
|
+
else
|
109
|
+
""
|
110
|
+
end
|
111
|
+
name
|
112
|
+
else
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
end # Guessable
|
120
|
+
end # MyRepresentatives
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module NSW
|
3
|
+
class CSVLower
|
4
|
+
include MyRepresentatives::Fileable
|
5
|
+
include MyRepresentatives::Guessable
|
6
|
+
|
7
|
+
attr_accessor :csv_url, :csv_filename, :people
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@csv_url = "https://www.parliament.nsw.gov.au/_layouts/15/NSWParliament/memberlistservice.aspx?members=LA&format=Excel"
|
11
|
+
@csv_filename = "tmp/csv_nsw_lower.csv"
|
12
|
+
@people = []
|
13
|
+
|
14
|
+
csv_from_url
|
15
|
+
people_from_csv
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def csv_from_url
|
21
|
+
create_tmp
|
22
|
+
begin
|
23
|
+
open(@csv_filename, "wb") do |file|
|
24
|
+
open(@csv_url) do |uri|
|
25
|
+
file.write(uri.read)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
rescue SocketError => err
|
29
|
+
@logger.debug("Unable to connect to #{@csv_url}")
|
30
|
+
raise err
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def people_from_csv
|
35
|
+
CSV.foreach(@csv_filename, headers: true) do |row|
|
36
|
+
|
37
|
+
# Setup the electorate
|
38
|
+
electorate_name = find_electorate(row)
|
39
|
+
electorate = Electorate.new(electorate_name)
|
40
|
+
electorate.state_nsw_lower!
|
41
|
+
|
42
|
+
# Setup the Representative (Person)
|
43
|
+
person = Person.new(electorate)
|
44
|
+
|
45
|
+
person.first_name = find_first_name(row)
|
46
|
+
person.last_name = find_last_name(row)
|
47
|
+
person.title = find_title(row)
|
48
|
+
person.honorifics = find_honorifics(row)
|
49
|
+
person.email = find_email(row)
|
50
|
+
person.phone = find_phone(row)
|
51
|
+
person.party_name = find_party(row)
|
52
|
+
person.salutation = find_salutation(row)
|
53
|
+
person.formal_name = format_formal_name(person)
|
54
|
+
person.physical_address = format_physical_address(row)
|
55
|
+
person.postal_address = format_postal_address(row)
|
56
|
+
person.gender = guess_gender(person.title)
|
57
|
+
person.preferred_name = nil
|
58
|
+
person.image_url = nil
|
59
|
+
person.homepage_url = nil
|
60
|
+
|
61
|
+
@people << person
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def find_first_name(arr)
|
66
|
+
arr["INITIALS"]
|
67
|
+
end
|
68
|
+
|
69
|
+
def find_last_name(arr)
|
70
|
+
arr["SURNAME"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_title(arr)
|
74
|
+
arr["TITLE"]
|
75
|
+
end
|
76
|
+
|
77
|
+
def find_honorifics(arr)
|
78
|
+
arr["POST-NOMINALS"]
|
79
|
+
end
|
80
|
+
|
81
|
+
def find_electorate(arr)
|
82
|
+
arr["ELECTORATE"]
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_email(arr)
|
86
|
+
arr["CONTACT ADDRESS EMAIL"]
|
87
|
+
end
|
88
|
+
|
89
|
+
def find_party(arr)
|
90
|
+
arr["PARTY"]
|
91
|
+
end
|
92
|
+
|
93
|
+
def find_phone(arr)
|
94
|
+
arr["CONTACT ADDRESS PHONE"]
|
95
|
+
end
|
96
|
+
|
97
|
+
def find_salutation(arr)
|
98
|
+
arr["SALUTATION"]
|
99
|
+
end
|
100
|
+
|
101
|
+
def format_formal_name(person)
|
102
|
+
"#{person.title} #{person.first_name} #{person.last_name} #{person.honorifics}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def format_physical_address(arr)
|
106
|
+
"#{arr["CONTACT ADDRESS LINE1"]}\n#{arr["CONTACT ADDRESS LINE2"]}\n#{arr["CONTACT ADDRESS LINE3"]}\n #{arr["CONTACT ADDRESS SUBURB"]} #{arr["CONTACT ADDRESS STATE"]} #{arr["CONTACT ADDRESS POSTCODE"]}"
|
107
|
+
end
|
108
|
+
|
109
|
+
def format_postal_address(arr)
|
110
|
+
"#{arr["CONTACT ADDRESS POBOX"]}\n#{arr["CONTACT ADDRESS POBOX SUBURB"]} #{arr["CONTACT ADDRESS POBOX STATE"]} #{arr["CONTACT ADDRESS POBOX POSTCODE"]}"
|
111
|
+
end
|
112
|
+
|
113
|
+
end # CSVLower
|
114
|
+
end # NSW
|
115
|
+
end # MyRepresentatives
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module NSW
|
3
|
+
class CSVUpper
|
4
|
+
include MyRepresentatives::Fileable
|
5
|
+
include MyRepresentatives::Guessable
|
6
|
+
|
7
|
+
attr_accessor :csv_url, :csv_filename, :people
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@csv_url = "https://www.parliament.nsw.gov.au/_layouts/15/NSWParliament/memberlistservice.aspx?members=LC&format=Excel"
|
11
|
+
@csv_filename = "tmp/csv_nsw_upper.csv"
|
12
|
+
@people = []
|
13
|
+
|
14
|
+
csv_from_url
|
15
|
+
people_from_csv
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def csv_from_url
|
21
|
+
create_tmp
|
22
|
+
begin
|
23
|
+
open(@csv_filename, "wb") do |file|
|
24
|
+
open(@csv_url) do |uri|
|
25
|
+
file.write(uri.read)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
rescue SocketError => err
|
29
|
+
@logger.debug("Unable to connect to #{@csv_url}")
|
30
|
+
raise err
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def people_from_csv
|
35
|
+
CSV.foreach(@csv_filename, headers: true) do |row|
|
36
|
+
|
37
|
+
# Setup the electorate
|
38
|
+
electorate_name = find_electorate
|
39
|
+
electorate = Electorate.new(electorate_name)
|
40
|
+
electorate.state_nsw_upper!
|
41
|
+
|
42
|
+
# Setup the Representative (Person)
|
43
|
+
person = Person.new(electorate)
|
44
|
+
|
45
|
+
person.first_name = find_first_name(row)
|
46
|
+
person.last_name = find_last_name(row)
|
47
|
+
person.title = find_title(row)
|
48
|
+
person.honorifics = find_honorifics(row)
|
49
|
+
person.email = find_email(row)
|
50
|
+
person.phone = find_phone(row)
|
51
|
+
person.party_name = find_party(row)
|
52
|
+
person.salutation = find_salutation(row)
|
53
|
+
person.formal_name = format_formal_name(person)
|
54
|
+
person.physical_address = format_physical_address(row)
|
55
|
+
person.postal_address = format_postal_address(row)
|
56
|
+
person.gender = guess_gender(person.title)
|
57
|
+
person.preferred_name = nil
|
58
|
+
person.image_url = nil
|
59
|
+
person.homepage_url = nil
|
60
|
+
|
61
|
+
@people << person
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def find_first_name(arr)
|
66
|
+
arr["INITIALS"]
|
67
|
+
end
|
68
|
+
|
69
|
+
def find_last_name(arr)
|
70
|
+
arr["SURNAME"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def find_title(arr)
|
74
|
+
arr["TITLE"]
|
75
|
+
end
|
76
|
+
|
77
|
+
def find_honorifics(arr)
|
78
|
+
arr["POST-NOMINALS"]
|
79
|
+
end
|
80
|
+
|
81
|
+
def find_electorate
|
82
|
+
"All NSW"
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_email(arr)
|
86
|
+
arr["CONTACT ADDRESS EMAIL"]
|
87
|
+
end
|
88
|
+
|
89
|
+
def find_party(arr)
|
90
|
+
arr["PARTY"]
|
91
|
+
end
|
92
|
+
|
93
|
+
def find_phone(arr)
|
94
|
+
arr["CONTACT ADDRESS PHONE"]
|
95
|
+
end
|
96
|
+
|
97
|
+
def find_salutation(arr)
|
98
|
+
arr["SALUTATION"]
|
99
|
+
end
|
100
|
+
|
101
|
+
def format_formal_name(person)
|
102
|
+
"#{person.title} #{person.first_name} #{person.last_name} #{person.honorifics}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def format_physical_address(arr)
|
106
|
+
"#{arr["CONTACT ADDRESS LINE1"]}\n#{arr["CONTACT ADDRESS LINE2"]}\n#{arr["CONTACT ADDRESS LINE3"]}\n#{arr["CONTACT ADDRESS SUBURB"]} #{arr["CONTACT ADDRESS STATE"]} #{arr["CONTACT ADDRESS POSTCODE"]}"
|
107
|
+
end
|
108
|
+
|
109
|
+
def format_postal_address(arr)
|
110
|
+
"#{arr["CONTACT ADDRESS LINE1"]}\n#{arr["CONTACT ADDRESS LINE2"]}\n#{arr["CONTACT ADDRESS LINE3"]}\n#{arr["CONTACT ADDRESS SUBURB"]} #{arr["CONTACT ADDRESS STATE"]} #{arr["CONTACT ADDRESS POSTCODE"]}"
|
111
|
+
end
|
112
|
+
|
113
|
+
end # CSVUpper
|
114
|
+
end # NSW
|
115
|
+
end #MyRepresentatives
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module NSW
|
3
|
+
class MergeLower
|
4
|
+
attr_accessor :csv_people, :web_people, :people
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@csv_people = MyRepresentatives::NSW::CSVLower.new.people
|
8
|
+
@web_people = MyRepresentatives::NSW::WebLower.new.people
|
9
|
+
@people = []
|
10
|
+
check_and_update_person
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def check_and_update_person
|
16
|
+
@csv_people.each do |person|
|
17
|
+
if @web_people.any? { |wp| wp.phone == person.phone} || @web_people.any? { |wp| wp.email == person.email}
|
18
|
+
index = @web_people.find_index {|wp| wp.phone == person.phone}
|
19
|
+
|
20
|
+
if !index
|
21
|
+
index = @web_people.find_index { |wp| wp.email == person.email }
|
22
|
+
end
|
23
|
+
|
24
|
+
if index
|
25
|
+
person.formal_name = @web_people[index].formal_name
|
26
|
+
person.first_name = @web_people[index].first_name
|
27
|
+
person.preferred_name = @web_people[index].preferred_name
|
28
|
+
person.email = @web_people[index].email unless person.email
|
29
|
+
person.homepage_url = @web_people[index].homepage_url
|
30
|
+
person.image_url = @web_people[index].image_url
|
31
|
+
person.successful_merge = true
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
@people << person
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end # MergeLower
|
40
|
+
end # NSW
|
41
|
+
end # MyRepresentatives
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module NSW
|
3
|
+
class MergeUpper
|
4
|
+
attr_accessor :csv_people, :web_people, :people
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@csv_people = MyRepresentatives::NSW::CSVUpper.new.people
|
8
|
+
@web_people = MyRepresentatives::NSW::WebUpper.new.people
|
9
|
+
@people = []
|
10
|
+
check_and_update_person
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def check_and_update_person
|
16
|
+
@csv_people.each do |person|
|
17
|
+
if @web_people.any? { |wp| wp.phone == person.phone} || @web_people.any? { |wp| wp.email == person.email}
|
18
|
+
index = @web_people.find_index {|wp| wp.phone == person.phone}
|
19
|
+
|
20
|
+
if !index
|
21
|
+
index = @web_people.find_index { |wp| wp.email == person.email }
|
22
|
+
end
|
23
|
+
|
24
|
+
if index
|
25
|
+
person.formal_name = @web_people[index].formal_name
|
26
|
+
person.first_name = @web_people[index].first_name
|
27
|
+
person.preferred_name = @web_people[index].preferred_name
|
28
|
+
person.email = @web_people[index].email unless person.email
|
29
|
+
person.homepage_url = @web_people[index].homepage_url
|
30
|
+
person.image_url = @web_people[index].image_url
|
31
|
+
person.successful_merge = true
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
@people << person
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end # MergeUpper
|
40
|
+
end # NSW
|
41
|
+
end # MyRepresentatives
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module MyRepresentatives
|
2
|
+
module NSW
|
3
|
+
class WebIndex
|
4
|
+
attr_accessor :index_url, :document, :upper_urls, :lower_urls
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@logger = Logger.new(STDOUT)
|
8
|
+
@index_url = nil
|
9
|
+
@document = nil
|
10
|
+
@lower_urls = []
|
11
|
+
@upper_urls = []
|
12
|
+
|
13
|
+
# Lower House
|
14
|
+
@index_url = "https://www.parliament.nsw.gov.au/members/pages/all-members.aspx?house=LA"
|
15
|
+
@document = find_representatives
|
16
|
+
representative_urls_from_document( { lower_house: true } )
|
17
|
+
|
18
|
+
# Upper House
|
19
|
+
@index_url = "https://www.parliament.nsw.gov.au/members/pages/all-members.aspx?house=LC"
|
20
|
+
@document = find_representatives
|
21
|
+
representative_urls_from_document( { lower_house: false } )
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def find_representatives
|
29
|
+
begin
|
30
|
+
request = open(@index_url)
|
31
|
+
Nokogiri::HTML(request)
|
32
|
+
rescue SocketError => err
|
33
|
+
@logger.debug("Unable to connect to #{@index_url}")
|
34
|
+
raise err
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def representative_urls_from_document(options = { lower_house: true } )
|
39
|
+
begin
|
40
|
+
representatives = @document.css("table").css("a.prl-name-link.green") if options[:lower_house]
|
41
|
+
representatives = @document.css("table").css("a.prl-name-link.maroon") if !options[:lower_house]
|
42
|
+
rescue
|
43
|
+
end
|
44
|
+
|
45
|
+
representatives.each do |row|
|
46
|
+
begin
|
47
|
+
@lower_urls << "https://www.parliament.nsw.gov.au" + row.attr("href") if options[:lower_house]
|
48
|
+
@upper_urls << "https://www.parliament.nsw.gov.au" + row.attr("href") if !options[:lower_house]
|
49
|
+
rescue
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end # WebIndex
|
55
|
+
end # NSW
|
56
|
+
end # MyRepresentatives
|