parliament-ruby 0.5.19 → 0.6.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -3
- data/.travis.yml +0 -1
- data/Gemfile +2 -0
- data/Makefile +9 -4
- data/README.md +185 -11
- data/Rakefile +1 -1
- data/lib/parliament/client_error.rb +21 -0
- data/lib/parliament/decorator/constituency_area.rb +27 -0
- data/lib/parliament/{decorators → decorator}/constituency_group.rb +29 -1
- data/lib/parliament/decorator/contact_point.rb +48 -0
- data/lib/parliament/decorator/gender.rb +13 -0
- data/lib/parliament/decorator/gender_identity.rb +13 -0
- data/lib/parliament/decorator/house.rb +41 -0
- data/lib/parliament/decorator/house_incumbency.rb +50 -0
- data/lib/parliament/decorator/house_seat.rb +27 -0
- data/lib/parliament/decorator/incumbency.rb +57 -0
- data/lib/parliament/decorator/party.rb +27 -0
- data/lib/parliament/decorator/party_membership.rb +36 -0
- data/lib/parliament/decorator/person.rb +224 -0
- data/lib/parliament/{decorators → decorator}/postal_address.rb +5 -1
- data/lib/parliament/decorator/seat_incumbency.rb +64 -0
- data/lib/parliament/decorator.rb +7 -0
- data/lib/parliament/network_error.rb +13 -0
- data/lib/parliament/no_content_response_error.rb +19 -0
- data/lib/parliament/request.rb +112 -33
- data/lib/parliament/response.rb +76 -9
- data/lib/parliament/server_error.rb +21 -0
- data/lib/parliament/utils.rb +113 -13
- data/lib/parliament/version.rb +1 -1
- data/lib/parliament.rb +8 -4
- data/parliament-ruby.gemspec +6 -6
- metadata +32 -28
- data/lib/parliament/decorators/constituency_area.rb +0 -17
- data/lib/parliament/decorators/contact_point.rb +0 -29
- data/lib/parliament/decorators/gender.rb +0 -9
- data/lib/parliament/decorators/gender_identity.rb +0 -9
- data/lib/parliament/decorators/house.rb +0 -28
- data/lib/parliament/decorators/house_incumbency.rb +0 -31
- data/lib/parliament/decorators/house_seat.rb +0 -17
- data/lib/parliament/decorators/incumbency.rb +0 -35
- data/lib/parliament/decorators/party.rb +0 -17
- data/lib/parliament/decorators/party_membership.rb +0 -23
- data/lib/parliament/decorators/person.rb +0 -152
- data/lib/parliament/decorators/seat_incumbency.rb +0 -39
- data/lib/parliament/no_content_error.rb +0 -9
data/lib/parliament/utils.rb
CHANGED
@@ -1,35 +1,135 @@
|
|
1
1
|
module Parliament
|
2
|
+
# Namespace for helper methods used with parliament-ruby.
|
3
|
+
#
|
4
|
+
# @since 0.6.0
|
2
5
|
module Utils
|
6
|
+
# Sort an Array of Objects in ascending order. The major difference between this implementation of sort_by and the
|
7
|
+
# standard one is that our implementation includes objects that return nil for our parameter values.
|
8
|
+
#
|
9
|
+
# @see Parliament::Utils.reverse_sort_by
|
10
|
+
#
|
11
|
+
# @example Sorting a list of objects by date
|
12
|
+
# response = parliament.people('123').get.filter('http://id.ukpds.org/schema/Person')
|
13
|
+
#
|
14
|
+
# objects = response.first.incumbencies
|
15
|
+
#
|
16
|
+
# args = {
|
17
|
+
# list: objects,
|
18
|
+
# parameters: [:endDate],
|
19
|
+
# prepend_rejected: false
|
20
|
+
# }
|
21
|
+
#
|
22
|
+
# sorted_list = Parliament::Util.sort_by(args)
|
23
|
+
#
|
24
|
+
# sorted_list.each { |incumbency| puts incumbency.respond_to?(:endDate) ? incumbency.endDate : 'Current' }
|
25
|
+
# # http://id.ukpds.org/1121 - 1981-07-31
|
26
|
+
# # http://id.ukpds.org/5678 - 1991-03-15
|
27
|
+
# # http://id.ukpds.org/1234 - 1997-01-01
|
28
|
+
# # http://id.ukpds.org/9101 - 2011-09-04
|
29
|
+
# # http://id.ukpds.org/3141 - Current
|
30
|
+
#
|
31
|
+
# @param [Hash] args a hash of arguments.
|
32
|
+
# @option args [Array<Object>] :list the 'list' which we are sorting.
|
33
|
+
# @option args [Array<Symbol>] :parameters an array of parameters we are sorting by.
|
34
|
+
# @option args [Boolean] :prepend_rejected (true) should objects that do not respond to our parameters be prepended?
|
35
|
+
#
|
36
|
+
# @return [Array<Object>] a sorted array of objects using the args passed in.
|
3
37
|
def self.sort_by(args)
|
4
38
|
rejected = []
|
5
39
|
args = sort_defaults.merge(args)
|
6
40
|
list = args[:list].dup
|
7
41
|
parameters = args[:parameters]
|
8
42
|
|
9
|
-
list
|
10
|
-
rejected << object unless parameters.all? { |param| !object.send(param).nil? if object.respond_to?(param) }
|
11
|
-
end
|
43
|
+
list, rejected = prune_list(list, rejected, parameters)
|
12
44
|
|
13
|
-
list
|
14
|
-
parameters.map do |param|
|
15
|
-
object.send(param).is_a?(String) ? I18n.transliterate(object.send(param)).downcase : object.send(param)
|
16
|
-
end
|
17
|
-
end
|
45
|
+
list = sort_list(list, parameters)
|
18
46
|
|
19
47
|
# Any rejected (nil) values will be added to the start of the result unless specified otherwise
|
20
48
|
args[:prepend_rejected] ? rejected.concat(list) : list.concat(rejected)
|
21
49
|
end
|
22
50
|
|
51
|
+
# Sort an Array of Objects in descending order. Largely, this implementation runs Parliament::Utils.sort_by and
|
52
|
+
# calls reverse! on the result.
|
53
|
+
#
|
54
|
+
# @see Parliament::Utils.sort_by
|
55
|
+
#
|
56
|
+
# @example Sorting a list of objects by date
|
57
|
+
# response = parliament.people('123').get.filter('http://id.ukpds.org/schema/Person')
|
58
|
+
#
|
59
|
+
# objects = response.first.incumbencies
|
60
|
+
#
|
61
|
+
# args = {
|
62
|
+
# list: objects,
|
63
|
+
# parameters: [:endDate],
|
64
|
+
# prepend_rejected: false
|
65
|
+
# }
|
66
|
+
#
|
67
|
+
# sorted_list = Parliament::Util.reverse_sort_by(args)
|
68
|
+
#
|
69
|
+
# sorted_list.each { |incumbency| puts incumbency.respond_to?(:endDate) ? incumbency.endDate : 'Current' }
|
70
|
+
# # http://id.ukpds.org/3141 - Current
|
71
|
+
# # http://id.ukpds.org/9101 - 2011-09-04
|
72
|
+
# # http://id.ukpds.org/1234 - 1997-01-01
|
73
|
+
# # http://id.ukpds.org/5678 - 1991-03-15
|
74
|
+
# # http://id.ukpds.org/1121 - 1981-07-31
|
75
|
+
#
|
76
|
+
# @param [Hash] args a hash of arguments.
|
77
|
+
# @option args [Array<Object>] :list the 'list' which we are sorting.
|
78
|
+
# @option args [Array<Symbol>] :parameters an array of parameters we are sorting by.
|
79
|
+
# @option args [Boolean] :prepend_rejected (true) should objects that do not respond to our parameters be prepended?
|
80
|
+
#
|
81
|
+
# @return [Array<Object>] a sorted array of objects using the args passed in.
|
23
82
|
def self.reverse_sort_by(args)
|
24
83
|
Parliament::Utils.sort_by(args).reverse!
|
25
84
|
end
|
26
85
|
|
27
|
-
|
28
|
-
|
86
|
+
# Default arguments hash for #sort_by and #reverse_sort_by.
|
87
|
+
#
|
88
|
+
# @see Parliament::Utils.sort_by
|
89
|
+
# @see Parliament::Utils.reverse_sort_by
|
90
|
+
#
|
91
|
+
# @return [Hash] default arguments used in sorting methods.
|
29
92
|
def self.sort_defaults
|
30
|
-
{
|
31
|
-
|
32
|
-
|
93
|
+
{ prepend_rejected: true }
|
94
|
+
end
|
95
|
+
|
96
|
+
# @!method self.prune_list(list, rejected, parameters)
|
97
|
+
# Prune all objects that do not respond to a given array of parameters.
|
98
|
+
#
|
99
|
+
# @private
|
100
|
+
# @!scope class
|
101
|
+
# @!visibility private
|
102
|
+
#
|
103
|
+
# @param [Array<Object>] list the 'list' of objects we are pruning from.
|
104
|
+
# @param [Array<Object>] rejected the objects we have pruned from list.
|
105
|
+
# @param [Array<Symbol>] parameters an array of parameters we are checking.
|
106
|
+
#
|
107
|
+
# @return [Array<Array<Object>, Array<Object>>] an array containing first, the pruned list and secondly, the rejected list.
|
108
|
+
private_class_method def self.prune_list(list, rejected, parameters)
|
109
|
+
list.delete_if do |object|
|
110
|
+
rejected << object unless parameters.all? { |param| !object.send(param).nil? if object.respond_to?(param) }
|
111
|
+
end
|
112
|
+
|
113
|
+
[list, rejected]
|
114
|
+
end
|
115
|
+
|
116
|
+
# @!method self.sort_list(list, parameters)
|
117
|
+
# Sort a given list of objects by a list of parameters.
|
118
|
+
#
|
119
|
+
# @private
|
120
|
+
# @!scope class
|
121
|
+
# @!visibility private
|
122
|
+
#
|
123
|
+
# @param [Array<Object>] list the 'list' of objects we are pruning from.
|
124
|
+
# @param [Array<Symbol>] parameters an array of parameters we are checking.
|
125
|
+
#
|
126
|
+
# @return [Array<Object>] our sorted list.
|
127
|
+
private_class_method def self.sort_list(list, parameters)
|
128
|
+
list.sort_by! do |object|
|
129
|
+
parameters.map do |param|
|
130
|
+
object.send(param).is_a?(String) ? I18n.transliterate(object.send(param)).downcase : object.send(param)
|
131
|
+
end
|
132
|
+
end
|
33
133
|
end
|
34
134
|
end
|
35
135
|
end
|
data/lib/parliament/version.rb
CHANGED
data/lib/parliament.rb
CHANGED
@@ -5,11 +5,15 @@ require 'parliament/version'
|
|
5
5
|
require 'parliament/request'
|
6
6
|
require 'parliament/response'
|
7
7
|
require 'parliament/utils'
|
8
|
-
require 'parliament/
|
8
|
+
require 'parliament/decorator'
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
require 'parliament/network_error'
|
11
|
+
require 'parliament/client_error'
|
12
|
+
require 'parliament/server_error'
|
13
|
+
require 'parliament/no_content_response_error'
|
12
14
|
|
15
|
+
# Namespace for classes and modules that handle connections to, and processing of data from the parliamentary API.
|
16
|
+
# @since 0.0.1
|
13
17
|
module Parliament
|
14
|
-
#
|
18
|
+
# Currently just a namespace definition
|
15
19
|
end
|
data/parliament-ruby.gemspec
CHANGED
@@ -8,10 +8,10 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Parliament::VERSION
|
9
9
|
spec.authors = ['Matt Rayner']
|
10
10
|
spec.email = ['mattrayner1@gmail.com']
|
11
|
-
spec.summary = %q{Internal parliamentary
|
11
|
+
spec.summary = %q{Internal parliamentary API wrapper}
|
12
12
|
spec.description = %q{Internal parliamentary data API wrapper for ruby}
|
13
13
|
spec.homepage = 'http://github.com/ukparliament/parliament_ruby'
|
14
|
-
spec.license = '
|
14
|
+
spec.license = 'Nonstandard'
|
15
15
|
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
27
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
-
spec.add_development_dependency 'rubocop', '~> 0.47
|
30
|
-
spec.add_development_dependency 'simplecov', '~> 0.12
|
31
|
-
spec.add_development_dependency 'vcr', '~> 3.0
|
32
|
-
spec.add_development_dependency 'webmock', '~> 2.3
|
29
|
+
spec.add_development_dependency 'rubocop', '~> 0.47'
|
30
|
+
spec.add_development_dependency 'simplecov', '~> 0.12'
|
31
|
+
spec.add_development_dependency 'vcr', '~> 3.0'
|
32
|
+
spec.add_development_dependency 'webmock', '~> 2.3'
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parliament-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Rayner
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grom
|
@@ -72,56 +72,56 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.47
|
75
|
+
version: '0.47'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.47
|
82
|
+
version: '0.47'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.12
|
89
|
+
version: '0.12'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.12
|
96
|
+
version: '0.12'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: vcr
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 3.0
|
103
|
+
version: '3.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 3.0
|
110
|
+
version: '3.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: webmock
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 2.3
|
117
|
+
version: '2.3'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 2.3
|
124
|
+
version: '2.3'
|
125
125
|
description: Internal parliamentary data API wrapper for ruby
|
126
126
|
email:
|
127
127
|
- mattrayner1@gmail.com
|
@@ -144,29 +144,33 @@ files:
|
|
144
144
|
- bin/console
|
145
145
|
- bin/setup
|
146
146
|
- lib/parliament.rb
|
147
|
-
- lib/parliament/
|
148
|
-
- lib/parliament/
|
149
|
-
- lib/parliament/
|
150
|
-
- lib/parliament/
|
151
|
-
- lib/parliament/
|
152
|
-
- lib/parliament/
|
153
|
-
- lib/parliament/
|
154
|
-
- lib/parliament/
|
155
|
-
- lib/parliament/
|
156
|
-
- lib/parliament/
|
157
|
-
- lib/parliament/
|
158
|
-
- lib/parliament/
|
159
|
-
- lib/parliament/
|
160
|
-
- lib/parliament/
|
161
|
-
- lib/parliament/
|
147
|
+
- lib/parliament/client_error.rb
|
148
|
+
- lib/parliament/decorator.rb
|
149
|
+
- lib/parliament/decorator/constituency_area.rb
|
150
|
+
- lib/parliament/decorator/constituency_group.rb
|
151
|
+
- lib/parliament/decorator/contact_point.rb
|
152
|
+
- lib/parliament/decorator/gender.rb
|
153
|
+
- lib/parliament/decorator/gender_identity.rb
|
154
|
+
- lib/parliament/decorator/house.rb
|
155
|
+
- lib/parliament/decorator/house_incumbency.rb
|
156
|
+
- lib/parliament/decorator/house_seat.rb
|
157
|
+
- lib/parliament/decorator/incumbency.rb
|
158
|
+
- lib/parliament/decorator/party.rb
|
159
|
+
- lib/parliament/decorator/party_membership.rb
|
160
|
+
- lib/parliament/decorator/person.rb
|
161
|
+
- lib/parliament/decorator/postal_address.rb
|
162
|
+
- lib/parliament/decorator/seat_incumbency.rb
|
163
|
+
- lib/parliament/network_error.rb
|
164
|
+
- lib/parliament/no_content_response_error.rb
|
162
165
|
- lib/parliament/request.rb
|
163
166
|
- lib/parliament/response.rb
|
167
|
+
- lib/parliament/server_error.rb
|
164
168
|
- lib/parliament/utils.rb
|
165
169
|
- lib/parliament/version.rb
|
166
170
|
- parliament-ruby.gemspec
|
167
171
|
homepage: http://github.com/ukparliament/parliament_ruby
|
168
172
|
licenses:
|
169
|
-
-
|
173
|
+
- Nonstandard
|
170
174
|
metadata: {}
|
171
175
|
post_install_message:
|
172
176
|
rdoc_options: []
|
@@ -184,8 +188,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
188
|
version: '0'
|
185
189
|
requirements: []
|
186
190
|
rubyforge_project:
|
187
|
-
rubygems_version: 2.6.
|
191
|
+
rubygems_version: 2.6.10
|
188
192
|
signing_key:
|
189
193
|
specification_version: 4
|
190
|
-
summary: Internal parliamentary
|
194
|
+
summary: Internal parliamentary API wrapper
|
191
195
|
test_files: []
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Parliament
|
2
|
-
module Decorators
|
3
|
-
module ConstituencyArea
|
4
|
-
def latitude
|
5
|
-
respond_to?(:constituencyAreaLatitude) ? constituencyAreaLatitude : ''
|
6
|
-
end
|
7
|
-
|
8
|
-
def longitude
|
9
|
-
respond_to?(:constituencyAreaLongitude) ? constituencyAreaLongitude : ''
|
10
|
-
end
|
11
|
-
|
12
|
-
def polygon
|
13
|
-
respond_to?(:constituencyAreaExtent) ? constituencyAreaExtent : ''
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Parliament
|
2
|
-
module Decorators
|
3
|
-
module ContactPoint
|
4
|
-
def postal_addresses
|
5
|
-
respond_to?(:contactPointHasPostalAddress) ? contactPointHasPostalAddress : []
|
6
|
-
end
|
7
|
-
|
8
|
-
def email
|
9
|
-
instance_variable_get('@email'.to_sym).nil? ? '' : instance_variable_get('@email'.to_sym)
|
10
|
-
end
|
11
|
-
|
12
|
-
def phone_number
|
13
|
-
respond_to?(:phoneNumber) ? phoneNumber : ''
|
14
|
-
end
|
15
|
-
|
16
|
-
def fax_number
|
17
|
-
respond_to?(:faxNumber) ? faxNumber : ''
|
18
|
-
end
|
19
|
-
|
20
|
-
def person
|
21
|
-
respond_to?(:contactPointHasPerson) ? contactPointHasPerson : []
|
22
|
-
end
|
23
|
-
|
24
|
-
def incumbency
|
25
|
-
respond_to?(:contactPointHasIncumbency) ? contactPointHasIncumbency.first : nil
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Parliament
|
2
|
-
module Decorators
|
3
|
-
module House
|
4
|
-
def name
|
5
|
-
respond_to?(:houseName) ? houseName : ''
|
6
|
-
end
|
7
|
-
|
8
|
-
def seat_incumbencies
|
9
|
-
return @seat_incumbencies unless @seat_incumbencies.nil?
|
10
|
-
|
11
|
-
seat_incumbencies = []
|
12
|
-
seats.each do |seat|
|
13
|
-
seat_incumbencies << seat.seat_incumbencies
|
14
|
-
end
|
15
|
-
|
16
|
-
@seat_incumbencies = seat_incumbencies.flatten.uniq
|
17
|
-
end
|
18
|
-
|
19
|
-
def seats
|
20
|
-
respond_to?(:houseHasHouseSeat) ? houseHasHouseSeat : []
|
21
|
-
end
|
22
|
-
|
23
|
-
def house_incumbencies
|
24
|
-
respond_to?(:houseHasHouseIncumbency) ? houseHasHouseIncumbency : []
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Parliament
|
2
|
-
module Decorators
|
3
|
-
module HouseIncumbency
|
4
|
-
def start_date
|
5
|
-
respond_to?(:incumbencyStartDate) ? DateTime.parse(incumbencyStartDate) : nil
|
6
|
-
end
|
7
|
-
|
8
|
-
def end_date
|
9
|
-
respond_to?(:incumbencyEndDate) ? DateTime.parse(incumbencyEndDate) : nil
|
10
|
-
end
|
11
|
-
|
12
|
-
def current?
|
13
|
-
has_end_date = respond_to?(:incumbencyEndDate)
|
14
|
-
|
15
|
-
!has_end_date
|
16
|
-
end
|
17
|
-
|
18
|
-
def house
|
19
|
-
respond_to?(:houseIncumbencyHasHouse) ? houseIncumbencyHasHouse.first : nil
|
20
|
-
end
|
21
|
-
|
22
|
-
def member
|
23
|
-
respond_to?(:incumbencyHasMember) ? incumbencyHasMember.first : nil
|
24
|
-
end
|
25
|
-
|
26
|
-
def contact_points
|
27
|
-
respond_to?(:incumbencyHasContactPoint) ? incumbencyHasContactPoint : []
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|