From 8f56f32d73a77420e1e87e4a1deb0a042798d82c Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sun, 6 Sep 2015 09:15:49 -0400 Subject: [PATCH] Extract bits into a separate file for offline generation --- app.rb | 21 +++++++++++++++++++++ config.ru | 4 ++-- cpi_feed.rb | 23 ----------------------- cpi_fetcher.rb | 24 ++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 25 deletions(-) create mode 100644 app.rb delete mode 100644 cpi_feed.rb create mode 100644 cpi_fetcher.rb diff --git a/app.rb b/app.rb new file mode 100644 index 0000000..15612d0 --- /dev/null +++ b/app.rb @@ -0,0 +1,21 @@ +require 'sinatra/base' +require_relative 'cpi_fetcher' + +class App < Sinatra::Base + get '/' do + current_cpi = fetcher.cpi + halt 502 unless current_cpi + + expires 300, :public, :must_revalidate + content_type :text + "#{current_cpi}\n" + end + + run! if app_file == $PROGRAM_FILE + + private + + def fetcher + @fetcher ||= CPIFetcher.new + end +end diff --git a/config.ru b/config.ru index d29d044..eae1e13 100644 --- a/config.ru +++ b/config.ru @@ -1,3 +1,3 @@ -require './cpi_feed' +require './app' -run CPIFeed +run App diff --git a/cpi_feed.rb b/cpi_feed.rb deleted file mode 100644 index a389d90..0000000 --- a/cpi_feed.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'sinatra/base' -require 'faraday' -require 'json' - -class CPIFeed < Sinatra::Base - DEFAULT_CPI_SERIES_URL = 'http://api.bls.gov/publicAPI/v2/timeseries/data/CUUSA210SA0' - - get '/' do - resp = JSON.parse(Faraday.get(cpi_series_url).body) - - halt 502 unless resp['Results']['series'] - - expires 300, :public, :must_revalidate - content_type :csv - "#{resp['Results']['series'].first['data'].first['value']}\n" - end - - def cpi_series_url - ENV['CPI_SERIES_URL'] || DEFAULT_CPI_SERIES_URL - end - - run! if app_file == $PROGRAM_FILE -end diff --git a/cpi_fetcher.rb b/cpi_fetcher.rb new file mode 100644 index 0000000..c32d551 --- /dev/null +++ b/cpi_fetcher.rb @@ -0,0 +1,24 @@ +require 'faraday' +require 'json' + +class CPIFetcher + DEFAULT_CPI_SERIES_URL = 'http://api.bls.gov/publicAPI/v2/timeseries/data/CUUSA210SA0' + attr_reader :cpi_series_url + + def initialize + @cpi_series_url = (ENV['CPI_SERIES_URL'] || DEFAULT_CPI_SERIES_URL) + end + + def cpi + resp = JSON.parse(Faraday.get(cpi_series_url).body) + + return nil unless resp['Results']['series'] + + resp['Results']['series'].first['data'].first['value'] + end +end + +if $PROGRAM_NAME == __FILE__ + puts CPIFetcher.new.cpi + exit 0 +end