parliament-utils 0.1.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 +7 -0
- data/.gitignore +15 -0
- data/.hound.yml +4 -0
- data/.rspec +2 -0
- data/.rubocop.yml +55 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Instructions - Steps to include in app.md +95 -0
- data/LICENSE +7 -0
- data/Makefile +16 -0
- data/README.md +177 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/locales/en.yml +387 -0
- data/config/puma.rb +20 -0
- data/lib/parliament/utils/config/initializers/airbrake.rb +76 -0
- data/lib/parliament/utils/config/initializers/assets.rb +11 -0
- data/lib/parliament/utils/config/initializers/backtrace_silencers.rb +7 -0
- data/lib/parliament/utils/config/initializers/bandiera.rb +3 -0
- data/lib/parliament/utils/config/initializers/cookies_serializer.rb +3 -0
- data/lib/parliament/utils/config/initializers/filter_parameter_logging.rb +4 -0
- data/lib/parliament/utils/config/initializers/inflections.rb +16 -0
- data/lib/parliament/utils/config/initializers/mime_types.rb +7 -0
- data/lib/parliament/utils/config/initializers/session_store.rb +3 -0
- data/lib/parliament/utils/config/initializers/timeout.rb +1 -0
- data/lib/parliament/utils/config/initializers/wrap_parameters.rb +9 -0
- data/lib/parliament/utils/config/initializers.rb +16 -0
- data/lib/parliament/utils/helpers/application_helper.rb +68 -0
- data/lib/parliament/utils/helpers/flag_helper.rb +29 -0
- data/lib/parliament/utils/helpers/format_helper.rb +18 -0
- data/lib/parliament/utils/helpers/houses_helper.rb +80 -0
- data/lib/parliament/utils/helpers/parliament_helper.rb +22 -0
- data/lib/parliament/utils/helpers/postcode_helper.rb +72 -0
- data/lib/parliament/utils/helpers/request_helper.rb +30 -0
- data/lib/parliament/utils/helpers/translation_helper.rb +12 -0
- data/lib/parliament/utils/helpers/v_card_helper.rb +57 -0
- data/lib/parliament/utils/helpers.rb +18 -0
- data/lib/parliament/utils/railtie.rb +12 -0
- data/lib/parliament/utils/test_helpers/bandiera_helper.rb +19 -0
- data/lib/parliament/utils/test_helpers/rails_helper.rb +42 -0
- data/lib/parliament/utils/test_helpers/rspec_helper.rb +76 -0
- data/lib/parliament/utils/test_helpers/simplecov_helper.rb +20 -0
- data/lib/parliament/utils/test_helpers/vcr_helper.rb +83 -0
- data/lib/parliament/utils/test_helpers/webmock_helper.rb +13 -0
- data/lib/parliament/utils/test_helpers.rb +19 -0
- data/lib/parliament/utils/version.rb +5 -0
- data/lib/parliament/utils.rb +10 -0
- data/log/test.log +0 -0
- data/parliament-utils.gemspec +41 -0
- metadata +318 -0
@@ -0,0 +1,387 @@
|
|
1
|
+
# Files in the config/locales directory are used for internationalization
|
2
|
+
# and are automatically loaded by Rails. If you want to use locales other
|
3
|
+
# than English, add the necessary files in this directory.
|
4
|
+
#
|
5
|
+
# To use the locales, use `I18n.t`:
|
6
|
+
#
|
7
|
+
# I18n.t 'hello'
|
8
|
+
#
|
9
|
+
# In views, this is aliased to just `t`:
|
10
|
+
#
|
11
|
+
# <%= t('hello') %>
|
12
|
+
#
|
13
|
+
# To use a different locale, set it with `I18n.locale`:
|
14
|
+
#
|
15
|
+
# I18n.locale = :es
|
16
|
+
#
|
17
|
+
# This would use the information in config/locales/es.yml.
|
18
|
+
#
|
19
|
+
# To learn more, please read the Rails Internationalization guide
|
20
|
+
# available at http://guides.rubyonrails.org/i18n.html.
|
21
|
+
|
22
|
+
en:
|
23
|
+
# global people translations
|
24
|
+
mp: 'MP'
|
25
|
+
mp_plural: 'MPs'
|
26
|
+
lord: 'Lord'
|
27
|
+
lord_plural: 'Lords'
|
28
|
+
mps_and_lords: 'MPs and Lords'
|
29
|
+
mp_count:
|
30
|
+
zero: 'MPs'
|
31
|
+
one: 'MP'
|
32
|
+
other: 'MPs'
|
33
|
+
lord_count:
|
34
|
+
zero: 'Lords'
|
35
|
+
one: 'Lord'
|
36
|
+
other: 'Lords'
|
37
|
+
house_of_commons_speaker: 'The Speaker of the House of Commons'
|
38
|
+
# global constituency translations
|
39
|
+
constituency: 'constituency'
|
40
|
+
constituency_plural: 'constituencies'
|
41
|
+
# global party translations
|
42
|
+
party: 'party'
|
43
|
+
party_plural: 'parties'
|
44
|
+
parties_and_groups: 'parties and groups'
|
45
|
+
member: 'member'
|
46
|
+
member_plural: 'members'
|
47
|
+
# global house translations
|
48
|
+
house: 'house'
|
49
|
+
house_plural: 'houses'
|
50
|
+
house_of_commons: 'House of Commons'
|
51
|
+
house_of_lords: 'House of Lords'
|
52
|
+
commons: 'Commons'
|
53
|
+
lords: 'Lords'
|
54
|
+
# global parliaments translations
|
55
|
+
parliament: 'parliament'
|
56
|
+
parliament_plural: 'parliaments'
|
57
|
+
# global generic translations
|
58
|
+
view_all: 'view all'
|
59
|
+
all: 'all'
|
60
|
+
find: 'find'
|
61
|
+
current: 'current'
|
62
|
+
former: 'former'
|
63
|
+
current_and_former: 'current and former'
|
64
|
+
to_present: 'to present'
|
65
|
+
to: 'to'
|
66
|
+
from: 'from'
|
67
|
+
of_the: 'of the'
|
68
|
+
in_the: 'in the'
|
69
|
+
search: 'search'
|
70
|
+
find_results: 'Find results from current parliament.uk websites.'
|
71
|
+
does_not_search_beta: "This search doesn't search beta.parliament.uk"
|
72
|
+
open_new_window: "website opens in a new window"
|
73
|
+
# global a-z navigation translations
|
74
|
+
a_to_z:
|
75
|
+
select_letter: 'select a letter'
|
76
|
+
aria_label: 'Paged navigation'
|
77
|
+
# global time format translations
|
78
|
+
time:
|
79
|
+
formats:
|
80
|
+
default: '%-d %b %Y'
|
81
|
+
# global error message translations
|
82
|
+
error:
|
83
|
+
no_constituency: "we couldn't find the postcode you entered."
|
84
|
+
lookup_unavailable: 'postcode check is currently unavailable.'
|
85
|
+
postcode_invalid: "we couldn't find the postcode you entered."
|
86
|
+
no_mp: "We couldn't find an MP for that postcode. Your constituency is"
|
87
|
+
# people translations
|
88
|
+
people:
|
89
|
+
index:
|
90
|
+
title: '%{current_and_former} %{mps_and_lords}'
|
91
|
+
a_to_z:
|
92
|
+
title: # needs title
|
93
|
+
letters:
|
94
|
+
title: '%{current_and_former} %{mps_and_lords}'
|
95
|
+
lookup_by_letters:
|
96
|
+
title: '%{current_and_former} %{mps_and_lords}'
|
97
|
+
members:
|
98
|
+
index:
|
99
|
+
title: '%{current_and_former} %{mps_and_lords}'
|
100
|
+
a_to_z:
|
101
|
+
title: # needs title
|
102
|
+
letters:
|
103
|
+
title: '%{current_and_former} %{mps_and_lords}'
|
104
|
+
current:
|
105
|
+
title: '%{current} %{mps_and_lords}'
|
106
|
+
current_letters:
|
107
|
+
title: '%{current} %{mps_and_lords}'
|
108
|
+
show:
|
109
|
+
mp_for: 'MP for'
|
110
|
+
contact: 'contact'
|
111
|
+
membership_history: 'membership history'
|
112
|
+
election_history: 'election history'
|
113
|
+
roles: 'roles'
|
114
|
+
check_mp: 'Check if %{name} is your MP'
|
115
|
+
check_mp_alternative: 'Check if this is your MP'
|
116
|
+
correct_mp: '%{name} is the MP for the postcode entered.'
|
117
|
+
incorrect_mp: '%{name} is not the MP for the postcode entered. Your MP is '
|
118
|
+
constituencies:
|
119
|
+
index:
|
120
|
+
title: '%{current_and_former} %{constituency_plural}'
|
121
|
+
current:
|
122
|
+
title: '%{current} %{constituency}'
|
123
|
+
contact_points:
|
124
|
+
index:
|
125
|
+
houses:
|
126
|
+
index:
|
127
|
+
title: '%{current_and_former} %{house_plural}'
|
128
|
+
current:
|
129
|
+
title: '%{current} %{house}'
|
130
|
+
parties:
|
131
|
+
index:
|
132
|
+
title: '%{current_and_former} %{parties_and_groups}'
|
133
|
+
current:
|
134
|
+
title: '%{current} %{party}'
|
135
|
+
# contact points translations
|
136
|
+
contact_points:
|
137
|
+
index:
|
138
|
+
web-title: 'contact points'
|
139
|
+
page-title: 'contact details'
|
140
|
+
email: 'email'
|
141
|
+
phone: 'phone'
|
142
|
+
fax: 'fax'
|
143
|
+
address: 'address'
|
144
|
+
download: 'download'
|
145
|
+
add_address_book: 'add to address book'
|
146
|
+
# constituencies translations
|
147
|
+
constituencies:
|
148
|
+
index:
|
149
|
+
title: '%{current_and_former} %{constituency_plural}'
|
150
|
+
a_to_z:
|
151
|
+
title: # needs title
|
152
|
+
letters:
|
153
|
+
title: '%{current_and_former} %{constituency_plural}'
|
154
|
+
lookup_by_letters:
|
155
|
+
title: '%{current_and_former} %{constituency_plural}'
|
156
|
+
current:
|
157
|
+
title: '%{current} %{constituency}'
|
158
|
+
a_to_z_current:
|
159
|
+
title: # needs title
|
160
|
+
show:
|
161
|
+
title: # title does not require translation
|
162
|
+
members:
|
163
|
+
index:
|
164
|
+
title: '%{current_and_former} %{mp_plural}'
|
165
|
+
current:
|
166
|
+
title: '%{current} %{mp}'
|
167
|
+
current_letters:
|
168
|
+
title: '%{current} %{constituency_plural}'
|
169
|
+
map:
|
170
|
+
title: # title does not require translation
|
171
|
+
contact_points:
|
172
|
+
index:
|
173
|
+
title: # title does not require translation
|
174
|
+
shared_translations:
|
175
|
+
vacant: 'Vacant'
|
176
|
+
constituency:
|
177
|
+
title: # title does not require translation
|
178
|
+
correct_constituency: "this is the constituency for your postcode"
|
179
|
+
incorrect_constituency: 'this is not your constituency.'
|
180
|
+
constituency_for_postcode: 'is the constituency for'
|
181
|
+
check_constituency: 'check if this is your constituency'
|
182
|
+
former_constituency: 'This is a former constituency. %{current_constituencies_link}.'
|
183
|
+
current_constituencies_link: 'view current constituencies'
|
184
|
+
constituency_map_fallback: 'Map of constituency is unavailable.'
|
185
|
+
# parties translations
|
186
|
+
parties:
|
187
|
+
index:
|
188
|
+
title: '%{current_and_former} %{parties_and_groups}'
|
189
|
+
a_to_z:
|
190
|
+
title: # needs title
|
191
|
+
letters:
|
192
|
+
title: '%{current_and_former} %{parties_and_groups}'
|
193
|
+
lookup_by_letters:
|
194
|
+
title: '%{current_and_former} %{parties_and_groups}'
|
195
|
+
current:
|
196
|
+
title: '%{current} %{parties_and_groups}'
|
197
|
+
show:
|
198
|
+
title: # title does not require translation
|
199
|
+
party_no_current_members: 'There are no MPs or Lords in this party.'
|
200
|
+
members:
|
201
|
+
index:
|
202
|
+
title: '%{current_and_former} %{member_plural}'
|
203
|
+
a_to_z:
|
204
|
+
title: # needs title
|
205
|
+
letters:
|
206
|
+
title: '%{current_and_former} %{member_plural}'
|
207
|
+
current:
|
208
|
+
title: '%{current} %{member_plural}'
|
209
|
+
a_to_z_current:
|
210
|
+
title: # needs title
|
211
|
+
current_letters:
|
212
|
+
title: '%{current} %{member_plural}'
|
213
|
+
# houses translations
|
214
|
+
houses:
|
215
|
+
index:
|
216
|
+
title: '%{house_plural}'
|
217
|
+
all_mps_info: 'MPs, parties and constituencies in the House of Commons'
|
218
|
+
all_lords_info: 'Lords, parties and groups in the House of Lords'
|
219
|
+
show:
|
220
|
+
title: # title does not require translation
|
221
|
+
area_they_represent: 'by the area they represent'
|
222
|
+
members:
|
223
|
+
index:
|
224
|
+
title: '%{current_and_former} %{member_type}'
|
225
|
+
a_to_z:
|
226
|
+
title: # needs title
|
227
|
+
letters:
|
228
|
+
title: '%{current_and_former} %{member_type}'
|
229
|
+
current:
|
230
|
+
title: '%{current} %{member_type}'
|
231
|
+
a_to_z_current:
|
232
|
+
title: # needs title
|
233
|
+
current_letters:
|
234
|
+
title: '%{current} %{member_type}'
|
235
|
+
parties:
|
236
|
+
index:
|
237
|
+
title: '%{current_and_former} %{parties_and_groups}'
|
238
|
+
current:
|
239
|
+
title: '%{current} %{parties_and_groups}'
|
240
|
+
show:
|
241
|
+
title: # title does not require translation
|
242
|
+
house_no_current_party_members: 'There are currently no members of this party in this House.'
|
243
|
+
members:
|
244
|
+
index:
|
245
|
+
title: '%{current_and_former} %{member_type}'
|
246
|
+
a_to_z:
|
247
|
+
title: # needs title
|
248
|
+
letters:
|
249
|
+
title: '%{current_and_former} %{member_type}'
|
250
|
+
current:
|
251
|
+
title: '%{current} %{member_type}'
|
252
|
+
a_to_z_current:
|
253
|
+
title: # needs title
|
254
|
+
current_letters:
|
255
|
+
title: '%{current} %{member_type}'
|
256
|
+
# postcodes translations
|
257
|
+
postcodes:
|
258
|
+
find_mp_constituency: 'Find your MP and constituency'
|
259
|
+
index:
|
260
|
+
title: 'find your constituency'
|
261
|
+
show:
|
262
|
+
title: # title does not require translation
|
263
|
+
check_different_postcode: 'Check for a different postcode'
|
264
|
+
no_mp: 'There is currently no MP for your constituency.'
|
265
|
+
results_for: 'Results for'
|
266
|
+
postcode_lookup:
|
267
|
+
title: # title does not require translation
|
268
|
+
search_by_postcode: 'Enter your full postcode, for example SW1A 0AA.'
|
269
|
+
do_not_know_postcode: "Don't know your postcode? Find it on the %{link}."
|
270
|
+
do_not_know_postcode_link: 'Royal Mail postcode finder'
|
271
|
+
|
272
|
+
# parliament translations
|
273
|
+
parliaments:
|
274
|
+
find_mp_a_to_z: 'Find an MP by A-Z list'
|
275
|
+
find_mp_area: 'Find an MP by the area they represented'
|
276
|
+
find_party_a_to_z: 'Find a party by A-Z list'
|
277
|
+
a_to_z: 'A to Z'
|
278
|
+
showing_results: 'showing results for'
|
279
|
+
index:
|
280
|
+
show:
|
281
|
+
find_mp_house: 'Find an MP by house'
|
282
|
+
constituencies:
|
283
|
+
find_constituency_a_to_z: 'Find a constituency by A-Z list'
|
284
|
+
# no content translations
|
285
|
+
no_content:
|
286
|
+
empty_list:
|
287
|
+
constituencies:
|
288
|
+
description: "Sorry there are no results for '%{letter}'"
|
289
|
+
houses:
|
290
|
+
description: "Sorry there are no results for '%{letter}'"
|
291
|
+
parties:
|
292
|
+
description: "Sorry there are no results for '%{letter}'"
|
293
|
+
no_mp: 'There is currently no MP for your constituency.'
|
294
|
+
# shared partial translations
|
295
|
+
shared:
|
296
|
+
dissolution_message:
|
297
|
+
description_text: 'There are currently no MPs because Parliament has been dissolved before the general election on 8 June.'
|
298
|
+
description_link: 'Find your constituency'
|
299
|
+
description_text_2: 'to find your constituency and its former MPs.'
|
300
|
+
dissolution_singular:
|
301
|
+
description_text: 'There is currently no MP because Parliament has been dissolved before the general election on 8 June.'
|
302
|
+
election_message:
|
303
|
+
description_singular: 'There is currently no MP. Vote today in the general election to choose yours.'
|
304
|
+
description_text: 'There are currently no MPs. Vote today in the general election to choose yours.'
|
305
|
+
post_election_message:
|
306
|
+
description_text: "As new MPs are announced following the general election, we're updating our pages."
|
307
|
+
# homepage translations
|
308
|
+
home:
|
309
|
+
index:
|
310
|
+
title: 'Welcome to the UK Parliament test website'
|
311
|
+
new_website: 'We’re building a %{link}. These pages are being tested and improved – they may be inaccurate or misleading.'
|
312
|
+
new_website_link: 'new website for Parliament'
|
313
|
+
old_website: 'Test pages are separate from the current %{link} website.'
|
314
|
+
old_website_link: 'parliament.uk'
|
315
|
+
feedback:
|
316
|
+
title: 'Give feedback'
|
317
|
+
provide: 'We want your feedback to %{link} further.'
|
318
|
+
provide_link: 'help us improve these pages'
|
319
|
+
whats_on:
|
320
|
+
title: "What's on our test website"
|
321
|
+
members_info:
|
322
|
+
title: 'MPs and Lords information'
|
323
|
+
current_mps: 'View all current members of the House of Commons.'
|
324
|
+
current_lords: 'View all current members of the House of Lords.'
|
325
|
+
current_constituencies: 'Find current MPs by the area they represent.'
|
326
|
+
current_parties: 'Find current MPs and Lords by their party or group.'
|
327
|
+
latest_members:
|
328
|
+
blog: 'Read the %{link}.'
|
329
|
+
blog_link: 'MPs and Lords information blog post'
|
330
|
+
search:
|
331
|
+
blog: 'Read the %{link}.'
|
332
|
+
blog_link: 'Search blog post'
|
333
|
+
follow_progress:
|
334
|
+
title: 'Follow our progress'
|
335
|
+
blog: 'Follow all %{link}.'
|
336
|
+
blog_link: 'new website developments on our blog'
|
337
|
+
mps:
|
338
|
+
find_mp: 'Find your MP'
|
339
|
+
a_z_surname: 'A - Z by surname'
|
340
|
+
view_list_constituencies: 'View list of constituencies'
|
341
|
+
find_mp_party: 'Find an MP by party.'
|
342
|
+
find_mp_date_range: 'Find a former MP by date range'
|
343
|
+
speaker_link: 'The Speaker'
|
344
|
+
speaker_clarification: '%{speaker_link} is not a member of a party.'
|
345
|
+
# meta information translations
|
346
|
+
meta:
|
347
|
+
index:
|
348
|
+
title: 'Meta information'
|
349
|
+
cookie_policy:
|
350
|
+
title: 'Cookies on beta.parliament.uk'
|
351
|
+
subtitle:
|
352
|
+
ga: 'Google Analytics cookies'
|
353
|
+
hj: 'HotJar cookies'
|
354
|
+
which_cookies: 'Which cookies do we use?'
|
355
|
+
cookie:
|
356
|
+
definition: 'Cookies are small files put on your device to let us know how you use our website.'
|
357
|
+
explanations:
|
358
|
+
ga: 'We use Google Analytics cookies to collect information about how you use our services. This helps us meet your needs and improve our website.'
|
359
|
+
hj: 'We use HotJar to find out how you use our website to improve your experience.'
|
360
|
+
anonymous_statement: 'All the information we collect is anonymous.'
|
361
|
+
cookie_table:
|
362
|
+
meta:
|
363
|
+
name: 'Name'
|
364
|
+
purpose: 'Purpose'
|
365
|
+
expires: 'Expires'
|
366
|
+
expiration:
|
367
|
+
minutes:
|
368
|
+
one: 'After 1 minute.'
|
369
|
+
other: 'After %{count} minutes.'
|
370
|
+
years:
|
371
|
+
one: 'After 1 year.'
|
372
|
+
other: 'After %{count} years.'
|
373
|
+
explanations:
|
374
|
+
ga: 'This helps us know how many people have visited beta.parliament.uk by telling us if you’ve visited before.'
|
375
|
+
gat: 'This helps us know how long you spend on a page.'
|
376
|
+
hjdonepolls: 'This ensures a poll will not reappear once you have completed it.'
|
377
|
+
hjminimizedpolls: 'This ensures a poll remains minimised when you move through our site.'
|
378
|
+
hjdonetesterswidgets: 'This ensures a form does not reappear once you have completed it.'
|
379
|
+
hjminimizedtesterswidgets: 'This ensures a form remains minimised when you move through our site.'
|
380
|
+
hjincludedinsample: 'This informs Hotjar whether your visit is included in their sample set.'
|
381
|
+
managing_cookies:
|
382
|
+
title: 'How to manage your cookies'
|
383
|
+
subtitle: 'Most web browsers allow you to control cookies through browser settings.'
|
384
|
+
find_out: "Find out how to %{link}."
|
385
|
+
find_out_link: "manage and delete cookies"
|
386
|
+
opt_out: "You can %{link}."
|
387
|
+
opt_out_link: "opt out of %{service} cookies"
|
data/config/puma.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
worker_count = ENV['WEB_CONCURRENCY']
|
2
|
+
worker_count ||= Rails.env.development? ? 1 : 2
|
3
|
+
|
4
|
+
thread_count = ENV['RAILS_MAX_THREADS']
|
5
|
+
thread_count ||= Rails.env.development? ? 1 : 5
|
6
|
+
|
7
|
+
workers Integer(worker_count)
|
8
|
+
threads Integer(thread_count), Integer(thread_count)
|
9
|
+
|
10
|
+
preload_app!
|
11
|
+
|
12
|
+
rackup DefaultRackup
|
13
|
+
port ENV['PORT'] || 3000
|
14
|
+
environment ENV['RACK_ENV'] || 'development'
|
15
|
+
|
16
|
+
on_worker_boot do
|
17
|
+
# Worker specific setup for Rails 4.1+
|
18
|
+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
|
19
|
+
# ActiveRecord::Base.establish_connection
|
20
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
if ENV['AIRBRAKE_PROJECT_ID'].present? && ENV['AIRBRAKE_PROJECT_KEY'].present?
|
2
|
+
# Airbrake is an online tool that provides robust exception tracking in your Rails
|
3
|
+
# applications. In doing so, it allows you to easily review errors, tie an error
|
4
|
+
# to an individual piece of code, and trace the cause back to recent
|
5
|
+
# changes. Airbrake enables for easy categorization, searching, and prioritization
|
6
|
+
# of exceptions so that when errors occur, your team can quickly determine the
|
7
|
+
# root cause.
|
8
|
+
#
|
9
|
+
# Configuration details:
|
10
|
+
# https://github.com/airbrake/airbrake-ruby#configuration
|
11
|
+
Airbrake.configure do |c|
|
12
|
+
# You must set both project_id & project_key. To find your project_id and
|
13
|
+
# project_key navigate to your project's General Settings and copy the values
|
14
|
+
# from the right sidebar.
|
15
|
+
# https://github.com/airbrake/airbrake-ruby#project_id--project_key
|
16
|
+
c.project_id = ENV['AIRBRAKE_PROJECT_ID']
|
17
|
+
c.project_key = ENV['AIRBRAKE_PROJECT_KEY']
|
18
|
+
|
19
|
+
# Configures the root directory of your project. Expects a String or a
|
20
|
+
# Pathname, which represents the path to your project. Providing this option
|
21
|
+
# helps us to filter out repetitive data from backtrace frames and link to
|
22
|
+
# GitHub files from our dashboard.
|
23
|
+
# https://github.com/airbrake/airbrake-ruby#root_directory
|
24
|
+
c.root_directory = Rails.root
|
25
|
+
|
26
|
+
# By default, Airbrake Ruby outputs to STDOUT. In Rails apps it makes sense to
|
27
|
+
# use the Rails' logger.
|
28
|
+
# https://github.com/airbrake/airbrake-ruby#logger
|
29
|
+
c.logger = Rails.logger
|
30
|
+
|
31
|
+
# Configures the environment the application is running in. Helps the Airbrake
|
32
|
+
# dashboard to distinguish between exceptions occurring in different
|
33
|
+
# environments.
|
34
|
+
# NOTE: This option must be set in order to make the 'ignore_environments'
|
35
|
+
# option work.
|
36
|
+
# https://github.com/airbrake/airbrake-ruby#environment
|
37
|
+
c.environment = Rails.env
|
38
|
+
|
39
|
+
# Setting this option allows Airbrake to filter exceptions occurring in
|
40
|
+
# unwanted environments such as :test.
|
41
|
+
# NOTE: This option *does not* work if you don't set the 'environment' option.
|
42
|
+
# https://github.com/airbrake/airbrake-ruby#ignore_environments
|
43
|
+
c.ignore_environments = %w[test]
|
44
|
+
|
45
|
+
# A list of parameters that should be filtered out of what is sent to
|
46
|
+
# Airbrake. By default, all "password" attributes will have their contents
|
47
|
+
# replaced.
|
48
|
+
# https://github.com/airbrake/airbrake-ruby#blacklist_keys
|
49
|
+
c.blacklist_keys = [/password/i, /authorization/i]
|
50
|
+
|
51
|
+
# Alternatively, you can integrate with Rails' filter_parameters.
|
52
|
+
# Read more: https://goo.gl/gqQ1xS
|
53
|
+
# c.blacklist_keys = Rails.application.config.filter_parameters
|
54
|
+
end
|
55
|
+
|
56
|
+
# A filter that collects request body information. Enable it if you are sure you
|
57
|
+
# don't send sensitive information to Airbrake in your body (such as passwords).
|
58
|
+
# https://github.com/airbrake/airbrake#requestbodyfilter
|
59
|
+
# Airbrake.add_filter(Airbrake::Rack::RequestBodyFilter.new)
|
60
|
+
|
61
|
+
# A filter method that chooses which errors to ignore before sending them to
|
62
|
+
# Airbrake. This can be based on type, message, file, region or any other part
|
63
|
+
# of the error's JSON
|
64
|
+
Airbrake.add_filter do |notice|
|
65
|
+
if notice[:errors].any? { |error| error[:type] == 'ActionController::RoutingError' }
|
66
|
+
notice.ignore!
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# If you want to convert your log messages to Airbrake errors, we offer an
|
71
|
+
# integration with the Logger class from stdlib.
|
72
|
+
# https://github.com/airbrake/airbrake#logger
|
73
|
+
# Rails.logger = Airbrake::AirbrakeLogger.new(Rails.logger)
|
74
|
+
else
|
75
|
+
puts 'WARNING: Airbrake environment variables are not set - no Airbrake logging will occur.'
|
76
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Version of your assets, change this if you want to expire all your assets.
|
4
|
+
Rails.application.config.assets.version = '1.0'
|
5
|
+
|
6
|
+
# Add additional assets to the asset load path
|
7
|
+
# Rails.application.config.assets.paths << Emoji.images_path
|
8
|
+
|
9
|
+
# Precompile additional assets.
|
10
|
+
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
11
|
+
# Rails.application.config.assets.precompile += %w( search.js )
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format. Inflections
|
4
|
+
# are locale specific, and you may define rules for as many different
|
5
|
+
# locales as you wish. All of these examples are active by default:
|
6
|
+
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
7
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
8
|
+
# inflect.singular /^(ox)en/i, '\1'
|
9
|
+
# inflect.irregular 'person', 'people'
|
10
|
+
# inflect.uncountable %w( fish sheep )
|
11
|
+
# end
|
12
|
+
|
13
|
+
# These inflection rules are supported but not enabled by default:
|
14
|
+
# ActiveSupport::Inflector.inflections(:en) do |inflect|
|
15
|
+
# inflect.acronym 'RESTful'
|
16
|
+
# end
|
@@ -0,0 +1 @@
|
|
1
|
+
Rack::Timeout.timeout = 20
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
+
# is enabled by default.
|
5
|
+
|
6
|
+
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
+
ActiveSupport.on_load(:action_controller) do
|
8
|
+
wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
|
9
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Dir["parliament/utils/initializers/*.rb"].each {|file| require file }
|
2
|
+
# Dir["parliament-utils/lib/parliament/utils/config/initializers/*.rb"].each { |f| require f }
|
3
|
+
# Dir[File.expand_path "lib/parliament/utils/config/initializers/*.rb"].each{|f| require_relative f}
|
4
|
+
# Dir[File.join(File.dirname(__FILE__), '../parliament/utils/config/initializers', '*.rb')].each { |file| require file }
|
5
|
+
|
6
|
+
require 'parliament/utils/config/initializers/airbrake'
|
7
|
+
require 'parliament/utils/config/initializers/assets'
|
8
|
+
require 'parliament/utils/config/initializers/backtrace_silencers'
|
9
|
+
require 'parliament/utils/config/initializers/bandiera'
|
10
|
+
require 'parliament/utils/config/initializers/cookies_serializer'
|
11
|
+
require 'parliament/utils/config/initializers/filter_parameter_logging'
|
12
|
+
require 'parliament/utils/config/initializers/inflections'
|
13
|
+
require 'parliament/utils/config/initializers/mime_types'
|
14
|
+
require 'parliament/utils/config/initializers/session_store'
|
15
|
+
require 'parliament/utils/config/initializers/timeout'
|
16
|
+
require 'parliament/utils/config/initializers/wrap_parameters'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Parliament
|
2
|
+
module Utils
|
3
|
+
module Helpers
|
4
|
+
module ApplicationHelper
|
5
|
+
# Sets the title for a page.
|
6
|
+
#
|
7
|
+
# @param [String] page_title the title of the page.
|
8
|
+
# @return [String] the title of the page.
|
9
|
+
def title(page_title)
|
10
|
+
content_for(:title) { page_title }
|
11
|
+
page_title
|
12
|
+
end
|
13
|
+
# Before every request that provides data, see if the user is requesting a format that can be served by the data API.
|
14
|
+
# If they are, transparently redirect them with a '302: Found' status code
|
15
|
+
def data_check
|
16
|
+
# Check format to see if it is available from the data API
|
17
|
+
return if !Parliament::Utils::Helpers::FormatHelper::DATA_FORMATS.include?(request.formats.first) || (params[:controller] == 'constituencies' && params[:action] == 'map')
|
18
|
+
|
19
|
+
# Find the current controller/action's API url
|
20
|
+
@data_url = data_url
|
21
|
+
|
22
|
+
# Catch potential nil values
|
23
|
+
raise StandardError, 'Data URL does not exist' if @data_url.nil?
|
24
|
+
|
25
|
+
response.headers['Accept'] = request.formats.first
|
26
|
+
redirect_to(@data_url.call(params).query_url) && return
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get the data URL for our current controller and action OR raise a StandardError
|
30
|
+
#
|
31
|
+
# @raises [StandardError] if there is no Proc available for a controller and action pair, we raise a StandardError
|
32
|
+
#
|
33
|
+
# @return [Proc] a Proc which can be called to generate a data URL
|
34
|
+
def data_url
|
35
|
+
self.class::ROUTE_MAP[params[:action].to_sym] || raise(StandardError, "You must provide a ROUTE_MAP proc for #{params[:controller]}##{params[:action]}")
|
36
|
+
end
|
37
|
+
|
38
|
+
# Populates @request with a data url which can be used within controllers.
|
39
|
+
def build_request
|
40
|
+
@request = data_url.call(params)
|
41
|
+
|
42
|
+
populate_alternates(@request.query_url)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Populates Pugin.alternates with a list of data formats and corresponding urls
|
46
|
+
#
|
47
|
+
# @param [String] url the url where alternatives can be found
|
48
|
+
def populate_alternates(url)
|
49
|
+
alternates = []
|
50
|
+
|
51
|
+
Parliament::Utils::Helpers::FormatHelper::DATA_FORMATS.each do |format|
|
52
|
+
alternates << { type: format, href: url }
|
53
|
+
end
|
54
|
+
|
55
|
+
Pugin.alternates = alternates
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# Before every request, reset Pugin's list of alternates to prevent showing rel-alternate tags on pages without data
|
61
|
+
def reset_alternates
|
62
|
+
Pugin.alternates = []
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|