breadboard 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1 @@
1
+ breadboard.yml is to ActiveResource as database.yml is to ActiveRecord
data/lib/breadboard.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'active_resource'
2
+ require 'breadboard/breadboard'
3
+ Breadboard.new((File.open(RAILS_ROOT + "/config/breadboard.yml") rescue "")) if defined?(RAILS_ROOT)
@@ -0,0 +1,35 @@
1
+ class Breadboard
2
+ attr_reader :config
3
+
4
+ class EnvironmentUnknownError < StandardError; end
5
+
6
+ def initialize(config_yml)
7
+ @config = YAML.load config_yml
8
+ configure_services
9
+ end
10
+
11
+ def environment
12
+ begin
13
+ RAILS_ENV
14
+ rescue
15
+ raise EnvironmentUnknownError, "RAILS_ENV environment unknown"
16
+ end
17
+ end
18
+
19
+ def service_for(klass)
20
+ klass = klass.downcase
21
+ (@config[klass][environment] rescue nil) ||
22
+ (@config[klass]['all'] rescue nil) ||
23
+ (@config['default'][environment] rescue nil) ||
24
+ (@config['default']['all'] rescue nil) ||
25
+ ''
26
+ end
27
+
28
+ private
29
+ def configure_services
30
+ classes = ActiveResource::Base.send(:subclasses)
31
+ classes.each do |klass|
32
+ klass.constantize.site = service_for(klass)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,70 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Breadboard do
4
+ before do
5
+ @yml =
6
+ "default:\n all: http://services.com\n\n" +
7
+ "article:\n production: http://article.services.com\n\n" +
8
+ "author:\n development: http://development.author.services.com\n\n" +
9
+ "book:\n all: http://all.book.services.com"
10
+ end
11
+
12
+ describe "#initialize" do
13
+ it "should accept a yml file string" do
14
+ proc { Breadboard.new(@yml) }.should_not raise_error
15
+ end
16
+
17
+ it "should require that the yml be valid" do
18
+ proc { Breadboard.new(true) }.should raise_error
19
+ end
20
+
21
+ it "should parse the configuration and store it internally" do
22
+ Breadboard.new(@yml).config["default"]["all"].should == "http://services.com"
23
+ end
24
+
25
+ it "should configure any ActiveResource::Base derived class with the appropriate site" do
26
+ define_const "RAILS_ENV", "development"
27
+ class Book < ActiveResource::Base; end
28
+ class Author < ActiveResource::Base; end
29
+ class Article < ActiveResource::Base; end
30
+ class Genre < ActiveResource::Base; end
31
+ Breadboard.new(@yml)
32
+ Book.site.host.should == "all.book.services.com"
33
+ Author.site.host.should == "development.author.services.com"
34
+ Article.site.host.should == "services.com"
35
+ Genre.site.host.should == "services.com"
36
+ end
37
+ end
38
+
39
+ describe "#environment" do
40
+ before do
41
+ define_const "RAILS_ENV", 'breadboard_test'
42
+ end
43
+
44
+ it "should return the rails environment if it is set" do
45
+ Breadboard.new(@yml).environment.should == 'breadboard_test'
46
+ end
47
+
48
+ it "should return UNKNOWN_ENVIRONMENT if the rails environment isn't set" do
49
+ undefine_const "RAILS_ENV"
50
+ proc {Breadboard.new(@yml).environment}.should raise_error(Breadboard::EnvironmentUnknownError)
51
+ end
52
+ end
53
+
54
+ describe "#service_for" do
55
+ before do
56
+ @s = Breadboard.new(@yml)
57
+ define_const "RAILS_ENV", 'production'
58
+ end
59
+
60
+ it "should require a class name" do
61
+ proc { @s.service_for }.should raise_error(ArgumentError)
62
+ end
63
+
64
+ it "should return the appropriate service for that class" do
65
+ @s.service_for('Article').should == 'http://article.services.com'
66
+ @s.service_for('Author').should == 'http://services.com'
67
+ @s.service_for('Book').should == 'http://all.book.services.com'
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift './lib'
2
+ require 'breadboard'
3
+
4
+ def define_const(const, value)
5
+ Object.send(:remove_const, const.to_sym) if Object.send(:const_defined?, const.to_sym)
6
+ Object.send :const_set, const, value
7
+ end
8
+
9
+ def undefine_const(const)
10
+ Object.send :remove_const, const.to_sym if Object.send(:const_defined?, const.to_sym)
11
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: breadboard
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matt Parker
8
+ - Steve Koppelman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2010-01-21 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 2.3.3
25
+ version:
26
+ description: "Breadboard allows you to define what services your ActiveResource derived classes connect to based on your rails environment. "
27
+ email: moonmaster9000@gmail.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - README.rdoc
34
+ files:
35
+ - README.rdoc
36
+ - lib/breadboard.rb
37
+ - lib/breadboard/breadboard.rb
38
+ has_rdoc: true
39
+ homepage: http://github.com/moonmaster9000/breadboard
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --charset=UTF-8
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ requirements: []
60
+
61
+ rubyforge_project:
62
+ rubygems_version: 1.3.5
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: breadboard.yml is to ActiveResource as database.yml is to ActiveRecord
66
+ test_files:
67
+ - spec/lib_specs/breadboard_spec.rb
68
+ - spec/spec_helper.rb