parliament-ruby 1.0.1 → 1.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 +4 -4
- data/.ruby-version +1 -1
- data/README.md +3 -168
- data/lib/parliament/builder/base_response_builder.rb +1 -1
- data/lib/parliament/request/base_request.rb +12 -9
- data/lib/parliament/request/url_request.rb +2 -4
- data/lib/parliament/version.rb +1 -1
- data/parliament-ruby.gemspec +2 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 798b518850479eb9ebbb0ca1b660bfa7bb11c473
|
4
|
+
data.tar.gz: 6288812a80c05e34237acd34916738f5e3cc5cd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f3e2c54ee9792720f702a81cab0e48c33f26b8be1186927e35806d210099ead3a8a0d0f95ce507c36130dd371e69ab5eaba4a98e66dbe0eb0f5e743570595dd
|
7
|
+
data.tar.gz: e36a0edf790c51c58e0c767bae8323948360fafc4d4cfe223af8d38de1b27f9ecdab041f92c4d16c58bc7aa11b7a6f14d9ad1fe8a60e00bc7a2f8250aeb47ab4
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.1
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Parliament Data API Wrapper (Ruby)
|
2
|
-
[parliament-ruby][parliament-ruby] is a gem created by the [Parliamentary Digital Service][pds] to allow easy communication with the internal parliament data
|
2
|
+
[parliament-ruby][parliament-ruby] is a gem created by the [Parliamentary Digital Service][pds] to allow easy communication with the internal parliament data API.
|
3
3
|
|
4
4
|
[![Gem][shield-gem]][info-gem] [![Build Status][shield-travis]][info-travis] [![Test Coverage][shield-coveralls]][info-coveralls] [![License][shield-license]][info-license]
|
5
5
|
|
@@ -40,14 +40,13 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
## Installation
|
43
|
-
This gem is currently not available on RubyGems. To use it in an application, install it directly from GitHub via your Gemfile
|
44
43
|
```bash
|
45
|
-
gem 'parliament
|
44
|
+
gem 'parliament-ruby'
|
46
45
|
```
|
47
46
|
|
48
47
|
|
49
48
|
## Usage
|
50
|
-
This gem's main function is fetching an n-
|
49
|
+
This gem's main function is fetching an n-triples from a remote server and converting it into linked ruby objects.
|
51
50
|
|
52
51
|
> **Note:** Comprehensive class documentation can be found on [rubydocs][rubydocs].
|
53
52
|
|
@@ -111,170 +110,6 @@ Parliament::Request.new.headers #=> { 'Accept' => 'Test' }
|
|
111
110
|
# You can still override the headers on an instance by instance basis
|
112
111
|
Parliament::Request.new(headers: { 'Accept' => 'Test2' }).headers #=> { 'Accept' => 'Test2' }
|
113
112
|
```
|
114
|
-
### Methods
|
115
|
-
[parliament-ruby][parliament-ruby] comes with the following common methods:
|
116
|
-
|
117
|
-
| Method | Description |
|
118
|
-
|----------------------------------------|-------------|
|
119
|
-
| [`#get`](#get) | **Make a GET request** - Make a HTTP GET request to the endpoint we have built, and create Ruby objects. |
|
120
|
-
| [`#filter`](#filter) | **Filter the response** - After making a GET request, filter the objects returned by type attribute. |
|
121
|
-
| [`#sort_by`](#sort_by) | **Sort the response (ASC)** - After making a GET request, sort the result in ascending order. |
|
122
|
-
| [`#reverse_sort_by`](#reverse_sort_by) | **Sort the response (DESC)** - After making a GET request, sort the result in descending order. |
|
123
|
-
|
124
|
-
> **Note:** Comprehensive class documentation can be found on [rubydocs][rubydocs].
|
125
|
-
|
126
|
-
#### `#get`
|
127
|
-
Once you've built your endpoint (`parliament.people.current`), we use the `#get` method to tell us you're ready to get the data.
|
128
|
-
|
129
|
-
```ruby
|
130
|
-
# Target endpoint: 'http://test.com/people/123/letters/456'
|
131
|
-
response = parliament.people('123').letters('456').get #=> #<Parliament::Response [...]>
|
132
|
-
|
133
|
-
response.each do |node|
|
134
|
-
# If your n-triple file contains a literal object it is stored into an instance variable accessible via the predicate
|
135
|
-
# name. For example, with the following triple:
|
136
|
-
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/name> 'Matthew Rayner' .
|
137
|
-
#
|
138
|
-
# You would be able to access the `name` attribute like so:
|
139
|
-
puts node.name #=> 'Matthew Rayner'
|
140
|
-
|
141
|
-
# 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
|
142
|
-
# be created, allowing you to 'connect' the two objects. For example, with the following triples:
|
143
|
-
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/name> 'Matthew Rayner' .
|
144
|
-
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/partyMembership> <http://id.ukpds.org/5678> .
|
145
|
-
# <http://id.ukpds.org/5678> <http://id.ukpds.org/schema/startDate> "1992-04-09"^^<http://www.w3.org/2001/XMLSchema#date> .
|
146
|
-
#
|
147
|
-
# You would be able to access the start date attribute on the linked object like so:
|
148
|
-
puts node.graph_id #=> '12345'
|
149
|
-
puts node.name #=> 'Matthew Rayner'
|
150
|
-
puts node.partyMembership #=> [#<Grom::Node @startDate=...>]
|
151
|
-
|
152
|
-
puts node.partyMembership.first.startDate #=> "1992-04-09"
|
153
|
-
end
|
154
|
-
```
|
155
|
-
|
156
|
-
`#get` returns a `Parliament::Response` object which contains all of the nodes from our n-triple response.
|
157
|
-
|
158
|
-
#### `#filter`
|
159
|
-
If your n-triple file contains a number of different objects you can filter based on type attribute.
|
160
|
-
|
161
|
-
```ruby
|
162
|
-
# Target endpoint: 'http://test.com/people/members/current'
|
163
|
-
response = parliament.people.members.current.get #=> #<Parliament::Response [...]>
|
164
|
-
|
165
|
-
# Given the below set of triples, you will be able to filter on 'type' attribute.
|
166
|
-
# <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> .
|
167
|
-
# <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> .
|
168
|
-
# <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> .
|
169
|
-
# <http://id.ukpds.org/HouseOfCommons> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://id.ukpds.org/schema/House> .
|
170
|
-
#
|
171
|
-
# The filter method returns an array of filtered responses. Each response holding just items with the given type attribute.
|
172
|
-
filtered_responses = response.filter('http://id.ukpds.org/schema/Person', 'http://id.ukpds.org/schema/Party', 'http://id.ukpds.org/schema/Constituency')
|
173
|
-
filtered_responses #=> [<#Parliament::Response [...]>, <#Parliament::Response []>, <#Parliament::Response [...]>]
|
174
|
-
```
|
175
|
-
|
176
|
-
#### `#sort_by`
|
177
|
-
Once you have a `Parliament::Response` object, you can perform an ascending sort on the results by using the `#sort_by` method.
|
178
|
-
|
179
|
-
> **`#sort_by`** is an ascending order sort i.e. (a..z, 0..9)
|
180
|
-
|
181
|
-
```ruby
|
182
|
-
# Target endpoint: 'http://test.com/people/members/current'
|
183
|
-
response = parliament.people.members.current.get #=> #<Parliament::Response [...]>
|
184
|
-
|
185
|
-
# Given the below set of triples, you can sort ascending like so:
|
186
|
-
# <http://id.ukpds.org/1234> <http://id.ukpds.org/schema/startDate> "1997-01-01"^^<http://www.w3.org/2001/XMLSchema#date> .
|
187
|
-
# <http://id.ukpds.org/5678> <http://id.ukpds.org/schema/startDate> "1991-03-15"^^<http://www.w3.org/2001/XMLSchema#date> .
|
188
|
-
# <http://id.ukpds.org/9101> <http://id.ukpds.org/schema/startDate> "2011-09-04"^^<http://www.w3.org/2001/XMLSchema#date> .
|
189
|
-
# <http://id.ukpds.org/1121> <http://id.ukpds.org/schema/startDate> "1981-07-31"^^<http://www.w3.org/2001/XMLSchema#date> .
|
190
|
-
# <http://id.ukpds.org/3141> <http://id.ukpds.org/schema/endDate> "1997-07-31"^^<http://www.w3.org/2001/XMLSchema#date> .
|
191
|
-
#
|
192
|
-
# The sort_by method returns a sorted array of Grom::Nodes, sorted by one, or many, symbols passed to it.
|
193
|
-
sorted_response = response.sort_by(:startDate)
|
194
|
-
|
195
|
-
# Output each of the graph_id and startDate values
|
196
|
-
sorted_response.each { |node| puts "#{node.graph_id} - #{node.respond_to?(:startDate) ? node.startDate : 'undefined'}" }
|
197
|
-
# http://id.ukpds.org/3141 - undefined
|
198
|
-
# http://id.ukpds.org/1121 - 1981-07-31
|
199
|
-
# http://id.ukpds.org/5678 - 1991-03-15
|
200
|
-
# http://id.ukpds.org/1234 - 1997-01-01
|
201
|
-
# http://id.ukpds.org/9101 - 2011-09-04
|
202
|
-
```
|
203
|
-
|
204
|
-
> **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`.
|
205
|
-
|
206
|
-
#### `#reverse_sort_by`
|
207
|
-
`#reverse_sort_by` simple implements `#sort_by` and calls `#reverse!` on the resulting array. The above example would become:
|
208
|
-
|
209
|
-
```ruby
|
210
|
-
# http://id.ukpds.org/9101 - 2011-09-04
|
211
|
-
# http://id.ukpds.org/1234 - 1997-01-01
|
212
|
-
# http://id.ukpds.org/5678 - 1991-03-15
|
213
|
-
# http://id.ukpds.org/1121 - 1981-07-31
|
214
|
-
# http://id.ukpds.org/3141 - undefined
|
215
|
-
```
|
216
|
-
|
217
|
-
### `Parliament::Utils`
|
218
|
-
Included with [parliament-ruby][parliament-ruby] is `Parliament::Utils`. This module includes helper methods commonly used throughout parliament.uk.
|
219
|
-
|
220
|
-
#### Methods
|
221
|
-
|
222
|
-
| Method | Description |
|
223
|
-
|-------------------------------------------------------|-------------|
|
224
|
-
| [`#sort_by`](#parliamentutilssort_by) | **Sort an enumerable thing (ASC)** - An implementation of ruby's `#sort_by` method that allows nil sorts. |
|
225
|
-
| [`#reverse_sort_by`](#parliamentutilsreverse_sort_by) | **Sort an enumerable thing (DESC)** - Reverse the result of `Parliament::Utils.reverse_sort_by` |
|
226
|
-
|
227
|
-
|
228
|
-
##### `Parliament::Utils.sort_by`
|
229
|
-
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.
|
230
|
-
|
231
|
-
Because we working with graph databases, a node without an endDate simply has no method when converted to an object with [GROM][grom].
|
232
|
-
|
233
|
-
The `Parliament::Utils.sort_by` method takes a hash of options, detailed below:
|
234
|
-
|
235
|
-
```ruby
|
236
|
-
response = parliament.people('123').get.filter('http://id.ukpds.org/schema/Person')
|
237
|
-
|
238
|
-
objects = response.first.incumbencies
|
239
|
-
|
240
|
-
options = {
|
241
|
-
list: objects, # An enumerable of objects (most commonly an Array)
|
242
|
-
parameters: [:endDate], # An array of actions which we will sort by
|
243
|
-
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
|
244
|
-
}
|
245
|
-
|
246
|
-
sorted_list = Parliament::Util.sort_by(options)
|
247
|
-
|
248
|
-
sorted_list.each { |incumbency| puts incumbency.respond_to?(:endDate) ? incumbency.endDate : 'Current' }
|
249
|
-
# http://id.ukpds.org/1121 - 1981-07-31
|
250
|
-
# http://id.ukpds.org/5678 - 1991-03-15
|
251
|
-
# http://id.ukpds.org/1234 - 1997-01-01
|
252
|
-
# http://id.ukpds.org/9101 - 2011-09-04
|
253
|
-
# http://id.ukpds.org/3141 - Current
|
254
|
-
```
|
255
|
-
|
256
|
-
##### `Parliament::Utils.reverse_sort_by`
|
257
|
-
This method, under the hood, calls `Parliament::Utils.sort_by` and runs `#reverse!` on the result.
|
258
|
-
|
259
|
-
Following the above example, and changing:
|
260
|
-
```ruby
|
261
|
-
sorted_list = Parliament::Util.sort_by(options)
|
262
|
-
```
|
263
|
-
|
264
|
-
to:
|
265
|
-
```ruby
|
266
|
-
sorted_list = Parliament::Util.reverse_sort_by(options)
|
267
|
-
```
|
268
|
-
|
269
|
-
should result in:
|
270
|
-
```ruby
|
271
|
-
# http://id.ukpds.org/3141 - Current
|
272
|
-
# http://id.ukpds.org/9101 - 2011-09-04
|
273
|
-
# http://id.ukpds.org/1234 - 1997-01-01
|
274
|
-
# http://id.ukpds.org/5678 - 1991-03-15
|
275
|
-
# http://id.ukpds.org/1121 - 1981-07-31
|
276
|
-
```
|
277
|
-
|
278
113
|
|
279
114
|
## Getting Started with Development
|
280
115
|
To clone the repository and set up the dependencies, run the following:
|
@@ -3,7 +3,7 @@ module Parliament
|
|
3
3
|
# Base response builder, allowing the user to return the body of an HTTPResponse.
|
4
4
|
# @since 0.7.5
|
5
5
|
class BaseResponseBuilder
|
6
|
-
# Creates a new
|
6
|
+
# Creates a new BaseResponseBuilder.
|
7
7
|
# @param [HTTPResponse] response an HTTP response.
|
8
8
|
# @param [Module] decorators a namespace which contains modules used to decorate the objects we receive. It is not used directly by the BaseResponseBuilder, but is there for API completeness.
|
9
9
|
def initialize(response:, decorators: nil)
|
@@ -6,8 +6,9 @@ module Parliament
|
|
6
6
|
#
|
7
7
|
# @since 0.7.5
|
8
8
|
#
|
9
|
-
# @attr_reader [String] base_url the base url of our api. (
|
9
|
+
# @attr_reader [String] base_url the base url of our api. (eg: http://example.com - without the trailing slash).
|
10
10
|
# @attr_reader [Hash] headers the headers being sent in the request.
|
11
|
+
# @attr_reader [Hash] query_params any query parameters to be sent in the request.
|
11
12
|
class BaseRequest
|
12
13
|
TIMEOUT = 40.freeze
|
13
14
|
CONNECTTIMEOUT = 5.freeze
|
@@ -17,7 +18,7 @@ module Parliament
|
|
17
18
|
#
|
18
19
|
# An interesting note for #initialize is that setting base_url on the class, or using the environment variable
|
19
20
|
# PARLIAMENT_BASE_URL means you don't need to pass in a base_url. You can pass one anyway to override the
|
20
|
-
# environment variable or class parameter. Similarly, headers can be set by either
|
21
|
+
# environment variable or class parameter. Similarly, headers can be set by either setting the headers on the class, or passing headers in.
|
21
22
|
#
|
22
23
|
# @example Setting the base_url on the class
|
23
24
|
# Parliament::Request::BaseRequest.base_url = 'http://example.com'
|
@@ -58,7 +59,7 @@ module Parliament
|
|
58
59
|
# @param [String] base_url the base url of our api. (expected: http://example.com - without the trailing slash).
|
59
60
|
# @param [Hash] headers the headers being sent in the request.
|
60
61
|
# @param [Parliament::Builder] builder the builder to use in order to build a response.
|
61
|
-
# @
|
62
|
+
# @param [Module] decorators the decorator modules to use in order to provide possible alias methods for any objects created by the builder.
|
62
63
|
def initialize(base_url: nil, headers: nil, builder: nil, decorators: nil)
|
63
64
|
@base_url = base_url || self.class.base_url
|
64
65
|
@headers = headers || self.class.headers || {}
|
@@ -70,7 +71,7 @@ module Parliament
|
|
70
71
|
# Makes an HTTP GET request and process results into a response.
|
71
72
|
#
|
72
73
|
# @example HTTP GET request
|
73
|
-
# request = Parliament::Request::BaseRequest.new(base_url: 'http://example.com/people/123'
|
74
|
+
# request = Parliament::Request::BaseRequest.new(base_url: 'http://example.com/people/123')
|
74
75
|
#
|
75
76
|
# # url: http://example.com/people/123
|
76
77
|
#
|
@@ -88,6 +89,8 @@ module Parliament
|
|
88
89
|
# @raise [Parliament::NoContentResponseError] when the response body is empty.
|
89
90
|
#
|
90
91
|
# @param [Hash] params (optional) additional URI encoded form values to be added to the URI.
|
92
|
+
# @param [Integer] timeout (optional) time limit for the entire request in seconds.
|
93
|
+
# @param [Integer] connecttimeout (optional) time limit for just the connection in seconds.
|
91
94
|
#
|
92
95
|
# @return [Parliament::Response::BaseResponse] a Parliament::Response::BaseResponse object containing all of the data returned from the URL.
|
93
96
|
def get(params: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT)
|
@@ -134,7 +137,8 @@ module Parliament
|
|
134
137
|
#
|
135
138
|
# @param [Hash] params (optional) additional URI encoded form values to be added to the URI.
|
136
139
|
# @param [String] body (optional) body of the post request.
|
137
|
-
# @param [Integer] timeout (optional)
|
140
|
+
# @param [Integer] timeout (optional) time limit for the entire request in seconds.
|
141
|
+
# @param [Integer] connecttimeout (optional) time limit for just the connection in seconds.
|
138
142
|
#
|
139
143
|
# @return [Parliament::Response::BaseResponse] a Parliament::Response::BaseResponse object containing all of the data returned from the URL.
|
140
144
|
def post(params: nil, body: nil, timeout: TIMEOUT, connecttimeout: CONNECTTIMEOUT)
|
@@ -162,7 +166,7 @@ module Parliament
|
|
162
166
|
|
163
167
|
private
|
164
168
|
|
165
|
-
# @attr [String] base_url the base url of our api. (
|
169
|
+
# @attr [String] base_url the base url of our api. (eg: http://example.com - without the trailing slash).
|
166
170
|
# @attr [Hash] headers the headers being sent in the request.
|
167
171
|
class << self
|
168
172
|
attr_accessor :base_url, :headers
|
@@ -187,7 +191,7 @@ module Parliament
|
|
187
191
|
def handle_errors(response)
|
188
192
|
exception_class = if response.success? # 2xx Status
|
189
193
|
Parliament::NoContentResponseError if response.headers&.[]('Content-Length') == '0' ||
|
190
|
-
|
194
|
+
(response.headers&.[]('Content-Length').nil? && response.body.empty?)
|
191
195
|
elsif /\A4\w{2}/.match(response.code.to_s) # 4xx Status
|
192
196
|
Parliament::ClientError
|
193
197
|
elsif /\A5\w{2}/.match(response.code.to_s) # 5xx Status
|
@@ -205,7 +209,7 @@ module Parliament
|
|
205
209
|
if endpoint.query
|
206
210
|
# Returns [ ["key", "value"], ["key", "value"] ]
|
207
211
|
key_value_array = URI.decode_www_form(endpoint.query)
|
208
|
-
key_value_array.map! { |key_value_pair| [
|
212
|
+
key_value_array.map! { |key_value_pair| [key_value_pair[0].to_sym, key_value_pair[1]] }
|
209
213
|
temp_params = key_value_array.to_h
|
210
214
|
end
|
211
215
|
|
@@ -219,4 +223,3 @@ module Parliament
|
|
219
223
|
end
|
220
224
|
end
|
221
225
|
end
|
222
|
-
|
@@ -4,8 +4,6 @@ module Parliament
|
|
4
4
|
#
|
5
5
|
# @since 0.7.5
|
6
6
|
#
|
7
|
-
# @attr_reader [String] base_url the endpoint for our API which we will build our requests on. (expected: http://example.com - without the trailing slash).
|
8
|
-
# @attr_reader [Hash] headers the headers being sent in the request.
|
9
7
|
class UrlRequest < Parliament::Request::BaseRequest
|
10
8
|
# Creates a new instance of Parliament::Request::UrlRequest.
|
11
9
|
#
|
@@ -26,7 +24,7 @@ module Parliament
|
|
26
24
|
super
|
27
25
|
end
|
28
26
|
|
29
|
-
# Overrides
|
27
|
+
# Overrides Ruby's method_missing to allow creation of URLs through method calls.
|
30
28
|
#
|
31
29
|
# @example Adding a simple URL part
|
32
30
|
# request = Parliament::Request::UrlRequest.new(base_url: 'http://example.com')
|
@@ -48,7 +46,7 @@ module Parliament
|
|
48
46
|
#
|
49
47
|
# @param [Symbol] method the 'method' (url part) we are processing.
|
50
48
|
# @param [Array<Object>] params parameters passed to the specified method (url part).
|
51
|
-
# @param [Block] block additional block (kept for compatibility with method_missing
|
49
|
+
# @param [Block] block additional block (kept for compatibility with method_missing interface).
|
52
50
|
#
|
53
51
|
# @return [Parliament::Request::UrlRequest] self (this is to allow method chaining).
|
54
52
|
def method_missing(method, *params, &block)
|
data/lib/parliament/version.rb
CHANGED
data/parliament-ruby.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'parliament/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'parliament-ruby'
|
8
8
|
spec.version = Parliament::VERSION
|
9
|
-
spec.authors = ['Matt Rayner']
|
10
|
-
spec.email = ['mattrayner1@gmail.com']
|
9
|
+
spec.authors = ['Matt Rayner', 'Rebecca Appleyard', 'Giuseppe De Santis']
|
10
|
+
spec.email = ['mattrayner1@gmail.com', 'rklappleyard@gmail.com']
|
11
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'
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parliament-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Rayner
|
8
|
+
- Rebecca Appleyard
|
9
|
+
- Giuseppe De Santis
|
8
10
|
autorequire:
|
9
11
|
bindir: exe
|
10
12
|
cert_chain: []
|
11
|
-
date: 2019-
|
13
|
+
date: 2019-02-13 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: typhoeus
|
@@ -153,6 +155,7 @@ dependencies:
|
|
153
155
|
description: Internal parliamentary data API wrapper for ruby
|
154
156
|
email:
|
155
157
|
- mattrayner1@gmail.com
|
158
|
+
- rklappleyard@gmail.com
|
156
159
|
executables: []
|
157
160
|
extensions: []
|
158
161
|
extra_rdoc_files: []
|