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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 792a61423210db4d06e2690193e47bc5949ffc6b
|
4
|
+
data.tar.gz: e0649c47b1ba552d2045cbbde8f37c26ab6365c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c790934d4d403ec1e1a06af7d22c81eb7dea09dcaacc98b2c085ff2025f5ca0aa462c5ae8c2e35b00277e1527b26ee272e45fe5ca1b7e06c93733c03db73c831
|
7
|
+
data.tar.gz: c208d4dab4609203665386c20995500830a88bbae85ff8fe7dbee2aa91d3f457cbc9088ae81b00d1754040b47e66095c1b77142f48e482062850cc5b04544dea
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Makefile
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
test:
|
2
|
-
bundle exec
|
2
|
+
bundle exec rake
|
3
3
|
|
4
4
|
build:
|
5
|
-
gem build parliament-ruby.gemspec
|
5
|
+
gem build parliament-ruby.gemspec
|
6
|
+
|
7
|
+
release: build test
|
8
|
+
gem push parliament-ruby-*.gem
|
9
|
+
rm parliament-ruby-*.gem
|
10
|
+
|
11
|
+
|
12
|
+
|
6
13
|
|
7
|
-
release: build test
|
8
|
-
gem push parliament-ruby-*.gem ; rm parliament-ruby-*.gem
|
data/README.md
CHANGED
@@ -16,7 +16,15 @@
|
|
16
16
|
- [Setting up a connection](#setting-up-a-connection)
|
17
17
|
- [Setting a base URL 'globally'](#setting-a-base-url-globally)
|
18
18
|
- [Building an 'endpoint'](#building-an-endpoint)
|
19
|
-
|
19
|
+
- [Methods](#methods)
|
20
|
+
- [`#get`](#get)
|
21
|
+
- [`#filter`](#filter)
|
22
|
+
- [`#sort_by`](#sort_by)
|
23
|
+
- [`#reverse_sort_by`](#reverse_sort_by)
|
24
|
+
- [`Partliament::Utils`](#partliamentutils)
|
25
|
+
- [Methods](#methods-1)
|
26
|
+
- [`Parliament::Utils.sort_by`](#parliamentutilssort_by)
|
27
|
+
- [`Parliament::Utils.reverse_sort_by`](#parliamentutilsreverse_sort_by)
|
20
28
|
- [Getting Started with Development](#getting-started-with-development)
|
21
29
|
- [Running the tests](#running-the-tests)
|
22
30
|
- [Contributing](#contributing)
|
@@ -41,6 +49,8 @@ gem 'parliament', git: 'https://github.com/ukparliament/parliament-ruby.git', br
|
|
41
49
|
## Usage
|
42
50
|
This gem's main function is fetching an n-triple file from a remote server and converting it into linked ruby objects.
|
43
51
|
|
52
|
+
> **Note:** Comprehensive class documentation can be found on [rubydocs][rubydocs].
|
53
|
+
|
44
54
|
### Setting up a connection
|
45
55
|
In order to connect to a remote server, we first need to set a base_url value, from which we will build an 'endpoint'. The base_url should be the beginning of a url without the trailing slash. For example `http://example.com` instead of `http://example.com/`.
|
46
56
|
```ruby
|
@@ -76,20 +86,182 @@ An endpoint is effectively just a full URL to an n-triple file on a remote serve
|
|
76
86
|
|
77
87
|
Building an endpoint is simple, once you have a Parliament::Request object, you do something like this:
|
78
88
|
```ruby
|
79
|
-
parliament = Parliament::Request.new(base_url: 'http://test.com') #=> #<Parliament::Request>
|
89
|
+
parliament = Parliament::Request.new(base_url: 'http://test.com') #=> #<Parliament::Request [...]>
|
90
|
+
|
91
|
+
# Target endpoint: 'http://test.com/parties/current'
|
92
|
+
parliament.parties.current
|
93
|
+
|
94
|
+
# Target endpoint: 'http://test.com/parties/123/people/current'
|
95
|
+
parliament.parties('123').people.current
|
96
|
+
|
97
|
+
# Target endpoint: 'http://test.com/people/123/letters/456'
|
98
|
+
parliament.people('123').letters('456')
|
99
|
+
```
|
100
|
+
|
101
|
+
|
102
|
+
### Methods
|
103
|
+
[parliament-ruby][parliament-ruby] comes with the following common methods:
|
104
|
+
|
105
|
+
| Method | Description |
|
106
|
+
|----------------------------------------|-------------|
|
107
|
+
| [`#get`](#get) | **Make a GET request** - Make a HTTP GET request to the endpoint we have built, and create Ruby objects. |
|
108
|
+
| [`#filter`](#filter) | **Filter the response** - After making a GET request, filter the objects returned by type attribute. |
|
109
|
+
| [`#sort_by`](#sort_by) | **Sort the response (ASC)** - After making a GET request, sort the result in ascending order. |
|
110
|
+
| [`#reverse_sort_by`](#reverse_sort_by) | **Sort the response (DESC)** - After making a GET request, sort the result in descending order. |
|
111
|
+
|
112
|
+
> **Note:** Comprehensive class documentation can be found on [rubydocs][rubydocs].
|
113
|
+
|
114
|
+
#### `#get`
|
115
|
+
Once you've built your endpoint (`parliament.people.current`), we use the `#get` method to tell us you're ready to get the data.
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
# Target endpoint: 'http://test.com/people/123/letters/456'
|
119
|
+
response = parliament.people('123').letters('456').get #=> #<Parliament::Response [...]>
|
120
|
+
|
121
|
+
response.each do |node|
|
122
|
+
# If your n-triple file contains a literal object it is stored into an instance variable accessible via the predicate
|
123
|
+
# name. For example, with the following triple:
|
124
|
+
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/name> 'Matthew Rayner' .
|
125
|
+
#
|
126
|
+
# You would be able to access the `name` attribute like so:
|
127
|
+
puts node.name #=> 'Matthew Rayner'
|
128
|
+
|
129
|
+
# If your n-triple file contains a triple who's object is a URI, and that URI is defined within your file, a link will
|
130
|
+
# be created, allowing you to 'connect' the two objects. For example, with the following triples:
|
131
|
+
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/name> 'Matthew Rayner' .
|
132
|
+
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/partyMembership> <http://id.ukpds.org/5678> .
|
133
|
+
# <http://id.ukpds.org/5678> <http://id.ukpds.org/schema/startDate> "1992-04-09"^^<http://www.w3.org/2001/XMLSchema#date> .
|
134
|
+
#
|
135
|
+
# You would be able to access the start date attribute on the linked object like so:
|
136
|
+
puts node.graph_id #=> '12345'
|
137
|
+
puts node.name #=> 'Matthew Rayner'
|
138
|
+
puts node.partyMembership #=> [#<Grom::Node @startDate=...>]
|
139
|
+
|
140
|
+
puts node.partyMembership.first.startDate #=> "1992-04-09"
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
144
|
+
`#get` returns a `Parliament::Response` object which contains all of the nodes from our n-triple response.
|
145
|
+
|
146
|
+
#### `#filter`
|
147
|
+
If your n-triple file contains a number of different objects you can filter based on type attribute.
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
# Target endpoint: 'http://test.com/people/members/current'
|
151
|
+
response = parliament.people.members.current.get #=> #<Parliament::Response [...]>
|
152
|
+
|
153
|
+
# Given the below set of triples, you will be able to filter on 'type' attribute.
|
154
|
+
# <http://id.ukpds.org/cea89432-e046-4013-a9ba-e93d0468d186> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://id.ukpds.org/schema/Person> .
|
155
|
+
# <http://id.ukpds.org/4ef6c7b7-a5c8-4dde-a5a5-29c9f80d8a27> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://id.ukpds.org/schema/Constituency> .
|
156
|
+
# <http://id.ukpds.org/80234c90-f86a-4942-b6ae-d1e57a0b378d> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://id.ukpds.org/schema/Party> .
|
157
|
+
# <http://id.ukpds.org/HouseOfCommons> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://id.ukpds.org/schema/House> .
|
158
|
+
#
|
159
|
+
# The filter method returns an array of filtered responses. Each response holding just items with the given type attribute.
|
160
|
+
filtered_responses = response.filter('http://id.ukpds.org/schema/Person', 'http://id.ukpds.org/schema/Party', 'http://id.ukpds.org/schema/Constituency')
|
161
|
+
filtered_responses #=> [<#Parliament::Response [...]>, <#Parliament::Response []>, <#Parliament::Response [...]>]
|
162
|
+
```
|
80
163
|
|
81
|
-
|
82
|
-
|
164
|
+
#### `#sort_by`
|
165
|
+
Once you have a `Parliament::Response` object, you can perform an ascending sort on the results by using the `#sort_by` method.
|
83
166
|
|
84
|
-
|
85
|
-
parliament.parties('123').people.current.get
|
167
|
+
> **`#sort_by`** is an ascending order sort i.e. (a..z, 0..9)
|
86
168
|
|
87
|
-
|
88
|
-
|
169
|
+
```ruby
|
170
|
+
# Target endpoint: 'http://test.com/people/members/current'
|
171
|
+
response = parliament.people.members.current.get #=> #<Parliament::Response [...]>
|
172
|
+
|
173
|
+
# Given the below set of triples, you can sort ascending like so:
|
174
|
+
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/startDate> "1997-01-01"^^<http://www.w3.org/2001/XMLSchema#date> .
|
175
|
+
# <http://id.ukpds.org/5678> <http://id.ukpds.org/schema/startDate> "1991-03-15"^^<http://www.w3.org/2001/XMLSchema#date> .
|
176
|
+
# <http://id.ukpds.org/9101> <http://id.ukpds.org/schema/startDate> "2011-09-04"^^<http://www.w3.org/2001/XMLSchema#date> .
|
177
|
+
# <http://id.ukpds.org/1121> <http://id.ukpds.org/schema/startDate> "1981-07-31"^^<http://www.w3.org/2001/XMLSchema#date> .
|
178
|
+
# <http://id.ukpds.org/3141> <http://id.ukpds.org/schema/endDate> "1997-07-31"^^<http://www.w3.org/2001/XMLSchema#date> .
|
179
|
+
#
|
180
|
+
# The sort_by method returns a sorted array of Grom::Nodes, sorted by one, or many, symbols passed to it.
|
181
|
+
sorted_response = response.sort_by(:startDate)
|
182
|
+
|
183
|
+
# Output each of the graph_id and startDate values
|
184
|
+
sorted_response.each { |node| puts "#{node.graph_id} - #{node.respond_to?(:startDate) ? node.startDate : 'undefined'}" }
|
185
|
+
# http://id.ukpds.org/3141 - undefined
|
186
|
+
# http://id.ukpds.org/1121 - 1981-07-31
|
187
|
+
# http://id.ukpds.org/5678 - 1991-03-15
|
188
|
+
# http://id.ukpds.org/1234 - 1997-01-01
|
189
|
+
# http://id.ukpds.org/9101 - 2011-09-04
|
190
|
+
```
|
191
|
+
|
192
|
+
> **NOTE:** `#sort_by` places all `nil` responses at the start of the sort. For a more custom sort, take a look at `Parliament::Utils.sort_by`.
|
193
|
+
|
194
|
+
#### `#reverse_sort_by`
|
195
|
+
`#reverse_sort_by` simple implements `#sort_by` and calls `#reverse!` on the resulting array. The above example would become:
|
196
|
+
|
197
|
+
```ruby
|
198
|
+
# http://id.ukpds.org/9101 - 2011-09-04
|
199
|
+
# http://id.ukpds.org/1234 - 1997-01-01
|
200
|
+
# http://id.ukpds.org/5678 - 1991-03-15
|
201
|
+
# http://id.ukpds.org/1121 - 1981-07-31
|
202
|
+
# http://id.ukpds.org/3141 - undefined
|
89
203
|
```
|
90
204
|
|
91
|
-
|
92
|
-
|
205
|
+
### `Partliament::Utils`
|
206
|
+
Included with [parliament-ruby][parliament-ruby] is `Parliament::Utils`. This module includes helper methods commonly used throughout parliament.uk.
|
207
|
+
|
208
|
+
#### Methods
|
209
|
+
|
210
|
+
| Method | Description |
|
211
|
+
|-------------------------------------------------------|-------------|
|
212
|
+
| [`#sort_by`](#parliamentutilssort_by) | **Sort an enumerable thing (ASC)** - An implementation of ruby's `#sort_by` method that allows nil sorts. |
|
213
|
+
| [`#reverse_sort_by`](#parliamentutilsreverse_sort_by) | **Sort an enumerable thing (DESC)** - Reverse the result of `Parliament::Utils.reverse_sort_by` |
|
214
|
+
|
215
|
+
|
216
|
+
##### `Parliament::Utils.sort_by`
|
217
|
+
One of the common use cases we have is sorting objects by a date (e.g. seat incumbency end date) where an object without an end date is considered 'current' and should be sorted to the top (or bottom) of a list.
|
218
|
+
|
219
|
+
Because we working with graph databases, a node without an endDate simply has no method when converted to an object with [GROM][grom].
|
220
|
+
|
221
|
+
The `Parliament::Utils.sort_by` method takes a hash of options, detailed below:
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
response = parliament.people('123').get.filter('http://id.ukpds.org/schema/Person')
|
225
|
+
|
226
|
+
objects = response.first.incumbencies
|
227
|
+
|
228
|
+
options = {
|
229
|
+
list: objects, # An enumerable of objects (most commonly an Array)
|
230
|
+
parameters: [:endDate], # An array of actions which we will sort by
|
231
|
+
prepend_rejected: false # {optional default=true} Should any objects that are 'rejected' be prepended to the sorted list, or appended. i.e. where to put objects that don't respond to parameters provided
|
232
|
+
}
|
233
|
+
|
234
|
+
sorted_list = Parliament::Util.sort_by(options)
|
235
|
+
|
236
|
+
sorted_list.each { |incumbency| puts incumbency.respond_to?(:endDate) ? incumbency.endDate : 'Current' }
|
237
|
+
# http://id.ukpds.org/1121 - 1981-07-31
|
238
|
+
# http://id.ukpds.org/5678 - 1991-03-15
|
239
|
+
# http://id.ukpds.org/1234 - 1997-01-01
|
240
|
+
# http://id.ukpds.org/9101 - 2011-09-04
|
241
|
+
# http://id.ukpds.org/3141 - Current
|
242
|
+
```
|
243
|
+
|
244
|
+
##### `Parliament::Utils.reverse_sort_by`
|
245
|
+
This method, under the hood, calls `Parliament::Utils.sort_by` and runs `#reverse!` on the result.
|
246
|
+
|
247
|
+
Following the above example, and changing:
|
248
|
+
```ruby
|
249
|
+
sorted_list = Parliament::Util.sort_by(options)
|
250
|
+
```
|
251
|
+
|
252
|
+
to:
|
253
|
+
```ruby
|
254
|
+
sorted_list = Parliament::Util.reverse_sort_by(options)
|
255
|
+
```
|
256
|
+
|
257
|
+
should result in:
|
258
|
+
```ruby
|
259
|
+
# http://id.ukpds.org/3141 - Current
|
260
|
+
# http://id.ukpds.org/9101 - 2011-09-04
|
261
|
+
# http://id.ukpds.org/1234 - 1997-01-01
|
262
|
+
# http://id.ukpds.org/5678 - 1991-03-15
|
263
|
+
# http://id.ukpds.org/1121 - 1981-07-31
|
264
|
+
```
|
93
265
|
|
94
266
|
|
95
267
|
## Getting Started with Development
|
@@ -127,9 +299,11 @@ If you wish to submit a bug fix or feature, you can create a pull request and it
|
|
127
299
|
[parliament-ruby]: https://github.com/ukparliament/parliament-ruby
|
128
300
|
[pds]: https://www.parliament.uk/mps-lords-and-offices/offices/bicameral/parliamentary-digital-service/
|
129
301
|
[ruby-version]: https://github.com/ukparliament/parliament-ruby/blob/master/.ruby-version
|
302
|
+
[grom]: https://github.com/ukparliament/grom
|
303
|
+
[rubydocs]: http://www.rubydoc.info/github/ukparliament/parliament-ruby/master/file/README.md
|
130
304
|
|
131
305
|
[info-gem]: https://rubygems.org/gems/parliament-ruby
|
132
|
-
[shield-gem]: https://img.shields.io/gem/v/
|
306
|
+
[shield-gem]: https://img.shields.io/gem/v/parliament-ruby.svg
|
133
307
|
|
134
308
|
[info-travis]: https://travis-ci.org/ukparliament/parliament-ruby
|
135
309
|
[shield-travis]: https://img.shields.io/travis/ukparliament/parliament-ruby.svg
|
data/Rakefile
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Parliament
|
2
|
+
# An error raised when a 4xx status code is returned by Net::HTTP inside of Parliament::Request.
|
3
|
+
#
|
4
|
+
# @see Parliament::ServerError
|
5
|
+
#
|
6
|
+
# @since 0.6.0
|
7
|
+
class ClientError < Parliament::NetworkError
|
8
|
+
# @param [String] url the url that caused the Parliament::ClientError
|
9
|
+
# @param [Net::HTTPClientError] response the Net:HTTPClientError that caused the Parliament::ClientError
|
10
|
+
#
|
11
|
+
# @example Creating a Parliament::ClientError
|
12
|
+
# url = 'http://localhost:3030/foo/bar'
|
13
|
+
#
|
14
|
+
# response = Net::HTTP.get_response(URI(url))
|
15
|
+
#
|
16
|
+
# raise Parliament::ClientError.new(url, response) if response.is_a?(Net::HTTPClientError)
|
17
|
+
def initialize(url, response)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Decorator
|
3
|
+
# Decorator namespace for Grom::Node instances with type: http://id.ukpds.org/schema/ConstituencyArea
|
4
|
+
module ConstituencyArea
|
5
|
+
# Alias constituencyAreaLatitude with fallback.
|
6
|
+
#
|
7
|
+
# @return [String, String] the latitude of the Grom::Node or an empty string.
|
8
|
+
def latitude
|
9
|
+
respond_to?(:constituencyAreaLatitude) ? constituencyAreaLatitude : ''
|
10
|
+
end
|
11
|
+
|
12
|
+
# Alias constituencyAreaLongitude with fallback.
|
13
|
+
#
|
14
|
+
# @return [String, String] the longitude of the Grom::Node or an empty string.
|
15
|
+
def longitude
|
16
|
+
respond_to?(:constituencyAreaLongitude) ? constituencyAreaLongitude : ''
|
17
|
+
end
|
18
|
+
|
19
|
+
# Alias constituencyAreaExtent with fallback.
|
20
|
+
#
|
21
|
+
# @return [String, String] the polygon of the Grom::Node or an empty string.
|
22
|
+
def polygon
|
23
|
+
respond_to?(:constituencyAreaExtent) ? constituencyAreaExtent : ''
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,22 +1,38 @@
|
|
1
1
|
module Parliament
|
2
|
-
module
|
2
|
+
module Decorator
|
3
|
+
# Decorator namespace for Grom::Node instances with type: http://id.ukpds.org/schema/ConstituencyGroup
|
3
4
|
module ConstituencyGroup
|
5
|
+
# Alias constituencyGroupName with fallback.
|
6
|
+
#
|
7
|
+
# @return [String, String] the name of the Grom::Node or an empty string.
|
4
8
|
def name
|
5
9
|
respond_to?(:constituencyGroupName) ? constituencyGroupName : ''
|
6
10
|
end
|
7
11
|
|
12
|
+
# Alias constituencyGroupStartDate with fallback.
|
13
|
+
#
|
14
|
+
# @return [DateTime, nil] the start date of the Grom::Node or nil.
|
8
15
|
def start_date
|
9
16
|
respond_to?(:constituencyGroupStartDate) ? DateTime.parse(constituencyGroupStartDate) : nil
|
10
17
|
end
|
11
18
|
|
19
|
+
# Alias constituencyGroupEndDate with fallback.
|
20
|
+
#
|
21
|
+
# @return [DateTime, nil] the end date of the Grom::Node or nil.
|
12
22
|
def end_date
|
13
23
|
respond_to?(:constituencyGroupEndDate) ? DateTime.parse(constituencyGroupEndDate) : nil
|
14
24
|
end
|
15
25
|
|
26
|
+
# Alias constituencyGroupHasHouseSeat with fallback.
|
27
|
+
#
|
28
|
+
# @return [Array, Array] the house seats of the Grom::Node or an empty array.
|
16
29
|
def seats
|
17
30
|
respond_to?(:constituencyGroupHasHouseSeat) ? constituencyGroupHasHouseSeat : []
|
18
31
|
end
|
19
32
|
|
33
|
+
# Alias houseSeatHasSeatIncumbency with fallback.
|
34
|
+
#
|
35
|
+
# @return [Array, Array] the seat incumbencies of the Grom::Node or an empty array.
|
20
36
|
def seat_incumbencies
|
21
37
|
return @seat_incumbencies unless @seat_incumbencies.nil?
|
22
38
|
|
@@ -28,6 +44,9 @@ module Parliament
|
|
28
44
|
@seat_incumbencies = seat_incumbencies.flatten.uniq
|
29
45
|
end
|
30
46
|
|
47
|
+
# Alias incumbencyHasMember with fallback.
|
48
|
+
#
|
49
|
+
# @return [Array, Array] the members of the Grom::Node or an empty array.
|
31
50
|
def members
|
32
51
|
return @members unless @members .nil?
|
33
52
|
|
@@ -39,10 +58,16 @@ module Parliament
|
|
39
58
|
@members = members.flatten.uniq
|
40
59
|
end
|
41
60
|
|
61
|
+
# Alias constituencyGroupHasConstituencyArea with fallback.
|
62
|
+
#
|
63
|
+
# @return [Grom::Node, nil] a Grom::Node with type http://id.ukpds.org/schema/ConstituencyArea or nil.
|
42
64
|
def area
|
43
65
|
respond_to?(:constituencyGroupHasConstituencyArea) ? constituencyGroupHasConstituencyArea.first : nil
|
44
66
|
end
|
45
67
|
|
68
|
+
# Alias incumbencyHasContactPoint with fallback.
|
69
|
+
#
|
70
|
+
# @return [Array, Array] the contact points of the Grom::Node or an empty array.
|
46
71
|
def contact_points
|
47
72
|
return @contact_points unless @contact_points.nil?
|
48
73
|
|
@@ -54,6 +79,9 @@ module Parliament
|
|
54
79
|
@contact_points = contact_points.flatten.uniq
|
55
80
|
end
|
56
81
|
|
82
|
+
# Checks if Grom::Node has an end date.
|
83
|
+
#
|
84
|
+
# @return [Boolean] a boolean depending on whether or not the Grom::Node has an end date.
|
57
85
|
def current?
|
58
86
|
has_end_date = respond_to?(:constituencyGroupEndDate)
|
59
87
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Decorator
|
3
|
+
# Decorator namespace for Grom::Node instances with type: http://id.ukpds.org/schema/ContactPoint
|
4
|
+
module ContactPoint
|
5
|
+
# Alias contactPointHasPostalAddress with fallback.
|
6
|
+
#
|
7
|
+
# @return [Array, Array] an array of the postal addresses for the Grom::Node or an empty array.
|
8
|
+
def postal_addresses
|
9
|
+
respond_to?(:contactPointHasPostalAddress) ? contactPointHasPostalAddress : []
|
10
|
+
end
|
11
|
+
|
12
|
+
# Alias email with fallback.
|
13
|
+
#
|
14
|
+
# @return [String, String] the email of the Grom::Node or an empty string.
|
15
|
+
def email
|
16
|
+
instance_variable_get('@email'.to_sym).nil? ? '' : instance_variable_get('@email'.to_sym)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Alias phoneNumber with fallback.
|
20
|
+
#
|
21
|
+
# @return [String, String] the phone number of the Grom::Node or an empty string.
|
22
|
+
def phone_number
|
23
|
+
respond_to?(:phoneNumber) ? phoneNumber : ''
|
24
|
+
end
|
25
|
+
|
26
|
+
# Alias faxNumber with fallback.
|
27
|
+
#
|
28
|
+
# @return [String, String] the fax number of the Grom::Node or an empty string.
|
29
|
+
def fax_number
|
30
|
+
respond_to?(:faxNumber) ? faxNumber : ''
|
31
|
+
end
|
32
|
+
|
33
|
+
# Alias contactPointHasPerson with fallback.
|
34
|
+
#
|
35
|
+
# @return [Array, Array] the person connected to the Grom::Node or an empty array.
|
36
|
+
def person
|
37
|
+
respond_to?(:contactPointHasPerson) ? contactPointHasPerson : []
|
38
|
+
end
|
39
|
+
|
40
|
+
# Alias contactPointHasIncumbency with fallback.
|
41
|
+
#
|
42
|
+
# @return [Grom::Node, nil] the incumbency of the Grom::Node or nil.
|
43
|
+
def incumbency
|
44
|
+
respond_to?(:contactPointHasIncumbency) ? contactPointHasIncumbency.first : nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|