diff --git a/lib/api_keys.rb b/lib/api_keys.rb new file mode 100644 index 0000000..89f78ab --- /dev/null +++ b/lib/api_keys.rb @@ -0,0 +1,14 @@ +require 'yaml' + +class ApiKeys + class << self + def init + @keys ||= YAML::load(File.open('./api_keys.yaml')) + end + + def key_for(service) + init + @keys[service]['key'] + end + end +end diff --git a/lib/services.rb b/lib/services.rb new file mode 100644 index 0000000..773f6b7 --- /dev/null +++ b/lib/services.rb @@ -0,0 +1,25 @@ +require 'yaml' + +class Services + class << self + + def init + @services ||= YAML::load(File.open('./services.yaml')) + end + + def services + init + @services + end + + def service_url(service_name, post_code) + init + @services[service_name]['where'].gsub(':post_code', post_code) + end + + def local_services + init + @services.select {|_, service_obj| service_obj['internal']} + end + end +end diff --git a/lib/they_work_for_you.rb b/lib/they_work_for_you.rb new file mode 100644 index 0000000..985b4d7 --- /dev/null +++ b/lib/they_work_for_you.rb @@ -0,0 +1,20 @@ +require 'sinatra' +require 'twfy' +require './lib/api_keys.rb' +require 'json' + +helpers do + def the_twfy_client + @twfy_client ||= Twfy::Client.new(ApiKeys.key_for('they_work_for_you')) + end + + def mp_url(the_mp) + %Q{http://www.theyworkforyou.com/mp/#{the_mp.full_name.downcase.gsub(' ','_')}/#{the_mp.constituency.name.downcase.gsub(' ','_').gsub('&','and')}} + end +end + +get '/twfy/mp/:post_code' do + @mp = the_twfy_client.mp(:postcode => params[:post_code]) + erb :'twfy/mp' +end + \ No newline at end of file diff --git a/one_stop_shop.rb b/one_stop_shop.rb index 51c99ff..1558276 100644 --- a/one_stop_shop.rb +++ b/one_stop_shop.rb @@ -1,5 +1,6 @@ require 'rubygems' require 'sinatra' +require 'lib/services' helpers do def urlify_post_code(post_code) @@ -15,6 +16,10 @@ def valid_post_code?(post_code) post_code =~ /^([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\ [0-9][ABD-HJLNP-UW-Z]{2}|(GIR\ 0AA)|(SAN\ TA1)|(BFPO\ (C\/O\ )?[0-9]{1,4})|((ASCN|BBND|[BFS]IQQ|PCRN|STHL|TDCU|TKCA)\ 1ZZ))$/ end + def paramify_post_code(post_code) + post_code.gsub(' ','').downcase + end + def are_we_sorry? if @sorry erb :sorry @@ -39,6 +44,7 @@ def are_we_sorry? get '/for/:post_code' do @post_code = deurlify_post_code(params[:post_code]) if valid_post_code?(@post_code) + @post_code_as_param = paramify_post_code(@post_code) erb :post_code else redirect '/sorry' @@ -48,4 +54,8 @@ def are_we_sorry? get '/sorry' do @sorry = true erb :index +end + +Services.local_services.map do |service_id, service_obj| + load "./lib/#{service_obj['service_provider']}.rb" end \ No newline at end of file diff --git a/public/scripts/prototype.js b/public/scripts/prototype.js new file mode 100644 index 0000000..dfe8ab4 --- /dev/null +++ b/public/scripts/prototype.js @@ -0,0 +1,4320 @@ +/* Prototype JavaScript framework, version 1.6.0.3 + * (c) 2005-2008 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0.3', + + Browser: { + IE: !!(window.attachEvent && + navigator.userAgent.indexOf('Opera') === -1), + Opera: navigator.userAgent.indexOf('Opera') > -1, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && + navigator.userAgent.indexOf('KHTML') === -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + SelectorsAPI: !!document.querySelector, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div')['__proto__'] && + document.createElement('div')['__proto__'] !== + document.createElement('form')['__proto__'] + }, + + ScriptFragment: '