diff options
| -rw-r--r-- | app/controllers/controller_extension/json_file.rb | 23 | ||||
| -rw-r--r-- | app/controllers/static_config_controller.rb | 11 | ||||
| -rw-r--r-- | app/controllers/v1/configs_controller.rb | 6 | ||||
| -rw-r--r-- | config/defaults.yml | 1 | ||||
| -rw-r--r-- | features/step_definitions/config_steps.rb | 9 | ||||
| -rw-r--r-- | test/functional/static_config_controller_test.rb | 6 | 
6 files changed, 27 insertions, 29 deletions
diff --git a/app/controllers/controller_extension/json_file.rb b/app/controllers/controller_extension/json_file.rb index 5b5e55e..df9cf55 100644 --- a/app/controllers/controller_extension/json_file.rb +++ b/app/controllers/controller_extension/json_file.rb @@ -4,20 +4,25 @@ module ControllerExtension::JsonFile    protected -  def send_file -    if stale?(:last_modified => @file.mtime) -      response.content_type = 'application/json' -      render :text => @file.read +  def send_file(filename) +    file = fetch_file(filename) +    if file.present? +      send_file_or_cache_hit(file) +    else +      not_found      end    end -  def fetch_file -    if File.exist?(@filename) -      @file = File.new(@filename) -    else -      not_found +  def send_file_or_cache_hit(file) +    if stale?(:last_modified => file.mtime) +      response.content_type = 'application/json' +      render :text => file.read      end    end +  def fetch_file(filename) +    File.new(filename) if File.exist?(filename) +  end +  end diff --git a/app/controllers/static_config_controller.rb b/app/controllers/static_config_controller.rb index c78e006..46e7cd2 100644 --- a/app/controllers/static_config_controller.rb +++ b/app/controllers/static_config_controller.rb @@ -5,13 +5,9 @@ class StaticConfigController < ActionController::Base    include ControllerExtension::JsonFile    before_filter :set_minimum_client_version -  before_filter :set_filename -  before_filter :fetch_file - -  PROVIDER_JSON = Rails.root.join('config', 'provider', 'provider.json')    def provider -    send_file +    send_file provider_json    end    protected @@ -23,7 +19,8 @@ class StaticConfigController < ActionController::Base        APP_CONFIG[:minimum_client_version].to_s    end -  def set_filename -    @filename = PROVIDER_JSON +  def provider_json +    Rails.root.join APP_CONFIG[:config_file_paths]['provider']    end +  end diff --git a/app/controllers/v1/configs_controller.rb b/app/controllers/v1/configs_controller.rb index 4a6f455..f0b284e 100644 --- a/app/controllers/v1/configs_controller.rb +++ b/app/controllers/v1/configs_controller.rb @@ -3,15 +3,13 @@ class V1::ConfigsController < ApiController    before_filter :require_login, :unless => :anonymous_access_allowed?    before_filter :sanitize_id, only: :show -  before_filter :lookup_file, only: :show -  before_filter :fetch_file, only: :show    def index      render json: {services: service_paths}    end    def show -    send_file +    send_file lookup_file    end    protected @@ -34,6 +32,6 @@ class V1::ConfigsController < ApiController    def lookup_file      path = APP_CONFIG[:config_file_paths][@id]      not_found if path.blank? -    @filename = Rails.root.join path +    Rails.root.join path    end  end diff --git a/config/defaults.yml b/config/defaults.yml index 844adaa..7e2ea58 100644 --- a/config/defaults.yml +++ b/config/defaults.yml @@ -87,6 +87,7 @@ common: &common      soledad-service: 'public/1/config/soledad-service.json'      eip-service: 'public/1/config/eip-service.json'      smtp-service: 'public/1/config/smtp-service.json' +    provider: 'config/provider/provider.json'    mailer:      from_address: 'noreply' diff --git a/features/step_definitions/config_steps.rb b/features/step_definitions/config_steps.rb index 1fc67f5..a635d06 100644 --- a/features/step_definitions/config_steps.rb +++ b/features/step_definitions/config_steps.rb @@ -4,12 +4,9 @@ Given /there is a config for the (.*)$/ do |config|    @tempfile = Tempfile.new("#{config}.json")    @tempfile.write @dummy_config    @tempfile.close -  if config == 'provider' -    StaticConfigController::PROVIDER_JSON = @tempfile.path -  else -    @orig_config ||= APP_CONFIG.dup -    APP_CONFIG[:config_file_paths].merge! "#{config}-service" => @tempfile.path -  end +  @orig_config ||= APP_CONFIG.dup +  config = "#{config}-service" unless config == 'provider' +  APP_CONFIG[:config_file_paths].merge! config => @tempfile.path  end  # use with @config diff --git a/test/functional/static_config_controller_test.rb b/test/functional/static_config_controller_test.rb index 9c2cfef..7027bf8 100644 --- a/test/functional/static_config_controller_test.rb +++ b/test/functional/static_config_controller_test.rb @@ -1,7 +1,7 @@  require 'test_helper'  # use minitest for stubbing, rather than bloated mocha -require 'minitest/stub_const' +require 'minitest/mock'  class StaticConfigControllerTest < ActionController::TestCase @@ -9,7 +9,7 @@ class StaticConfigControllerTest < ActionController::TestCase    end    def test_provider_success -    StaticConfigController.stub_const(:PROVIDER_JSON, file_path('provider.json')) do +    @controller.stub(:provider_json, file_path('provider.json')) do        get :provider, format: :json        assert_equal 'application/json', @response.content_type        assert_response :success @@ -17,7 +17,7 @@ class StaticConfigControllerTest < ActionController::TestCase    end    def test_provider_not_modified -    StaticConfigController.stub_const(:PROVIDER_JSON, file_path('provider.json')) do +    @controller.stub(:provider_json, file_path('provider.json')) do        request.env["HTTP_IF_MODIFIED_SINCE"] = File.mtime(file_path('provider.json')).rfc2822()        get :provider, format: :json        assert_response 304  | 
