From f00a66b46eaea1137302ed93b8769f45b1ad9e57 Mon Sep 17 00:00:00 2001 From: Peter Schrammel Date: Mon, 4 Oct 2010 14:08:43 +0200 Subject: [PATCH 1/3] allowing to load a default configuration, alows erb in configuration --- lib/workling.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/workling.rb b/lib/workling.rb index 7640642..bdc9093 100644 --- a/lib/workling.rb +++ b/lib/workling.rb @@ -164,6 +164,11 @@ def self.config return nil unless File.exists?(config_path) + yaml_config= YAML.load(ERB.new(IO.read(config_path)).result) + config_name = (yaml_config[env] ? env : (yaml_config['development'] ? 'development' : 'default')) + config=yaml_config[config_name] + raise "Can't find a configuration for the environments #{env}, development or default" unless config + @@config ||= YAML.load_file(config_path)[env || 'development'].symbolize_keys @@config[:memcache_options].symbolize_keys! if @@config[:memcache_options] @@config From 3dba9835787ef455cce8a5bc9393c3d8b663e562 Mon Sep 17 00:00:00 2001 From: Peter Schrammel Date: Wed, 6 Oct 2010 09:47:55 +0200 Subject: [PATCH 2/3] require right_aws in 'load' --- lib/workling/clients/sqs_client.rb | 14 ++++++++++++-- test/extensions/clients/sqs_client_test.rb | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/workling/clients/sqs_client.rb b/lib/workling/clients/sqs_client.rb index 68ac70e..b239eb2 100644 --- a/lib/workling/clients/sqs_client.rb +++ b/lib/workling/clients/sqs_client.rb @@ -1,5 +1,4 @@ require 'json' -require 'right_aws' # # An SQS client @@ -37,7 +36,18 @@ class SqsClient < Workling::Clients::BrokerBase DEFAULT_VISIBILITY_TIMEOUT = 30 DEFAULT_VISIBILITY_RESERVE = 10 end - + + def self.load + begin + require 'right_aws' + rescue Exception => e + raise WorklingError.new( + "WORKLING: couldn't find the ruby aws client - you need it for the sqs runner. " \ + "Install it with sudo gem install right_aws " + ) + end + end + # Mainly exposed for testing purposes attr_reader :sqs_options attr_reader :messages_per_req diff --git a/test/extensions/clients/sqs_client_test.rb b/test/extensions/clients/sqs_client_test.rb index c97b144..34a0ae0 100644 --- a/test/extensions/clients/sqs_client_test.rb +++ b/test/extensions/clients/sqs_client_test.rb @@ -1,4 +1,5 @@ require File.dirname(__FILE__) + '/../../test_helper' +require 'right_aws' context "The SQS client" do From bec4de95d1d09fa484baf0c906ae04cf4bd70be1 Mon Sep 17 00:00:00 2001 From: Peter Schrammel Date: Wed, 6 Oct 2010 11:23:20 +0200 Subject: [PATCH 3/3] better implementation of load and installed with tests --- lib/workling/clients/sqs_client.rb | 15 ++++++++++----- test/extensions/clients/sqs_client_test.rb | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/workling/clients/sqs_client.rb b/lib/workling/clients/sqs_client.rb index b239eb2..d7c3201 100644 --- a/lib/workling/clients/sqs_client.rb +++ b/lib/workling/clients/sqs_client.rb @@ -38,16 +38,21 @@ class SqsClient < Workling::Clients::BrokerBase end def self.load - begin - require 'right_aws' - rescue Exception => e raise WorklingError.new( "WORKLING: couldn't find the ruby aws client - you need it for the sqs runner. " \ "Install it with sudo gem install right_aws " - ) - end + ) unless installed? end + def self.installed? + begin + gem 'right_aws' + require 'right_aws' + rescue LoadError + end + + Object.const_defined? "RightAws" + end # Mainly exposed for testing purposes attr_reader :sqs_options attr_reader :messages_per_req diff --git a/test/extensions/clients/sqs_client_test.rb b/test/extensions/clients/sqs_client_test.rb index 34a0ae0..33f13a9 100644 --- a/test/extensions/clients/sqs_client_test.rb +++ b/test/extensions/clients/sqs_client_test.rb @@ -20,6 +20,22 @@ @client.stubs(:env).returns('test') @client.connect end + + context "loading" do + + specify "should be installed" do + Workling::Clients::SqsClient.installed?.should == true + end + + specify "should be able to load" do + lambda { Workling::Clients::SqsClient.load}.should.not.raise + end + + specify "should raise on load if not installed" do + Workling::Clients::SqsClient.stubs(:installed?).returns(false) + lambda { Workling::Clients::SqsClient.load}.should.raise Workling::WorklingError + end + end context "when connecting" do