breadboard 0.2.0 → 1.0.0.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/.rvmrc +1 -0
- data/CHANGELOG +8 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +46 -0
- data/PUBLIC_DOMAIN +103 -0
- data/VERSION +1 -0
- data/features/active_resource.feature +62 -0
- data/features/configure.feature +28 -0
- data/features/reset.feature +7 -0
- data/features/step_definitions/active_resource_steps.rb +159 -0
- data/features/step_definitions/configure_steps.rb +89 -0
- data/features/step_definitions/reset_steps.rb +16 -0
- data/features/support/env.rb +4 -0
- data/features/support/hooks.rb +3 -0
- data/lib/breadboard.rb +4 -2
- data/lib/breadboard/active_resource.rb +11 -0
- data/lib/breadboard/breadboard.rb +83 -50
- data/lib/breadboard/config.rb +49 -0
- data/lib/breadboard/environment.rb +19 -0
- data/{README.rdoc → readme.md} +4 -4
- metadata +76 -22
- data/spec/lib_specs/breadboard_spec.rb +0 -76
- data/spec/spec_helper.rb +0 -11
data/.gitignore
ADDED
data/.rvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
rvm gemset use breadboard
|
data/CHANGELOG
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
breadboard (1.0.0)
|
|
5
|
+
activeresource (~> 3.0)
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: http://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
activemodel (3.0.7)
|
|
11
|
+
activesupport (= 3.0.7)
|
|
12
|
+
builder (~> 2.1.2)
|
|
13
|
+
i18n (~> 0.5.0)
|
|
14
|
+
activeresource (3.0.7)
|
|
15
|
+
activemodel (= 3.0.7)
|
|
16
|
+
activesupport (= 3.0.7)
|
|
17
|
+
activesupport (3.0.7)
|
|
18
|
+
builder (2.1.2)
|
|
19
|
+
cucumber (0.10.2)
|
|
20
|
+
builder (>= 2.1.2)
|
|
21
|
+
diff-lcs (>= 1.1.2)
|
|
22
|
+
gherkin (>= 2.3.5)
|
|
23
|
+
json (>= 1.4.6)
|
|
24
|
+
term-ansicolor (>= 1.0.5)
|
|
25
|
+
diff-lcs (1.1.2)
|
|
26
|
+
gherkin (2.3.6)
|
|
27
|
+
json (>= 1.4.6)
|
|
28
|
+
i18n (0.5.0)
|
|
29
|
+
json (1.5.1)
|
|
30
|
+
rspec (2.4.0)
|
|
31
|
+
rspec-core (~> 2.4.0)
|
|
32
|
+
rspec-expectations (~> 2.4.0)
|
|
33
|
+
rspec-mocks (~> 2.4.0)
|
|
34
|
+
rspec-core (2.4.0)
|
|
35
|
+
rspec-expectations (2.4.0)
|
|
36
|
+
diff-lcs (~> 1.1.2)
|
|
37
|
+
rspec-mocks (2.4.0)
|
|
38
|
+
term-ansicolor (1.0.5)
|
|
39
|
+
|
|
40
|
+
PLATFORMS
|
|
41
|
+
ruby
|
|
42
|
+
|
|
43
|
+
DEPENDENCIES
|
|
44
|
+
breadboard!
|
|
45
|
+
cucumber (~> 0.10.0)
|
|
46
|
+
rspec (~> 2.4.0)
|
data/PUBLIC_DOMAIN
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
This software is PUBLIC DOMAIN
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
5
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
6
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
7
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
8
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
9
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;iiii;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
10
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;ijffffffffffffffffji;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
11
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;iffffffffffffffffffffffffffi;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
12
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, iffffffffffffffffffffffffffffffi ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
13
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ijffffffffffffffffffffffffffffffffffji,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
14
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,iffffffffffffffffffffffffffffffffffffffffi,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
15
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,jffffffffffffffffffffffffffffffffffffffffffffj,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
16
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,tfffffffffffffffffffffffffffffffffffffffffffffft,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
17
|
+
,,,,,,,,,,,,,,,,,,,,,,,,;ffffffffffffffffffffffffffffffffffffffffffffffffff;,,,,,,,,,,,,,,,,,,,,,,,,
|
|
18
|
+
,,,,,,,,,,,,,,,,,,,,,,,ffffffffffffffffffffffjt;;,,;;tjffffffffffffffffffffff,,,,,,,,,,,,,,,,,,,,,,,
|
|
19
|
+
,,,,,,,,,,,,,,,,,,,,,;fffffffffffffffffft: :tffffffffffffffffff;,,,,,,,,,,,,,,,,,,,,,
|
|
20
|
+
,,,,,,,,,,,,,,,,,,,,,jfffffffffffffffft. .tffffffffffffffffj,,,,,,,,,,,,,,,,,,,,,
|
|
21
|
+
,,,,,,,,,,,,,,,,,,,ifffffffffffffffi: :ifffffffffffffffi,,,,,,,,,,,,,,,,,,,
|
|
22
|
+
,,,,,,,,,,,,,,,,,,tffffffffffffffi ifffffffffffffft,,,,,,,,,,,,,,,,,,
|
|
23
|
+
,,,,,,,,,,,,,,,,,ifffffffffffff, ,fffffffffffffi,,,,,,,,,,,,,,,,,
|
|
24
|
+
,,,,,,,,,,,,,,,,,fffffffffffffi ifffffffffffff,,,,,,,,,,,,,,,,,
|
|
25
|
+
,,,,,,,,,,,,,,,;jffffffffffff ffffffffffffj;,,,,,,,,,,,,,,,
|
|
26
|
+
,,,,,,,,,,,,,,,ffffffffffff: jffffffffffffff,,,,,,,,,,,,,,,
|
|
27
|
+
,,,,,,,,,,,,,,ffffffffffff. jffffffffffffffff,,,,,,,,,,,,,,
|
|
28
|
+
,,,,,,,,,,,,,;ffffffffffft :fffffffffffffffff;,,,,,,,,,,,,,
|
|
29
|
+
,,,,,,,,,,,,,ffffffffffft ,tfffffft; jfffffffffffffffffff,,,,,,,,,,,,,
|
|
30
|
+
,,,,,,,,,,,,tffffffffff. ;ffffffffffffffff; jfffffffffffffffffffft,,,,,,,,,,,,
|
|
31
|
+
,,,,,,,,,,,jffffffffff: ,ffffffffffffffffffffff, jffffffffffffffffffffffj,,,,,,,,,,,
|
|
32
|
+
,,,,,,,,,,,fffffffffff :ffffffffffffffffffffffff: :ffffffffffffffffffffffff,,,,,,,,,,,
|
|
33
|
+
,,,,,,,,,,iffffffffff ,jfffffffffffffffffffffffff jfffffffffffffffffffffffffi,,,,,,,,,,
|
|
34
|
+
,,,,,,,,,,ffffffffffi tffffffffffffffffffffffffff jfffffffffffffff iffffffffff,,,,,,,,,,
|
|
35
|
+
,,,,,,,,,ifffffffff, jfffffffffffffffffffffffff, jfffffffffffffff ,fffffffffi,,,,,,,,,
|
|
36
|
+
,,,,,,,,,jfffffffff :ffffffffffffffffffffffffff :fffffffffffffff; fffffffffj,,,,,,,,,
|
|
37
|
+
,,,,,,,, fffffffffi jffffffffffffffffffffffffff jfffffffffffffff ifffffffff ,,,,,,,,
|
|
38
|
+
,,,,,,,,ifffffffff tffffffffffffffffffffffffff jfffffffffffffff fffffffffi,,,,,,,,
|
|
39
|
+
,,,,,,,;fffffffffi :fffffffffffffffffffffffff, jfffffffffffffff ifffffffff;,,,,,,,
|
|
40
|
+
,,,,,,,ifffffffff: jfffffffffffffffffffffffff :fffffffffffffff; :fffffffffi,,,,,,,
|
|
41
|
+
,,,,,,,ffffffffff :fffffffffffffffffffffffff jfffffffffffffff ffffffffff,,,,,,,
|
|
42
|
+
,,,,,,,ffffffffft ,fffffffffffffffff; jfffffffffffffff t, tfffffffff,,,,,,,
|
|
43
|
+
,,,,,,;fffffffff ffffffffffffffff jfffffffffffffff tff fffffffff;,,,,,,
|
|
44
|
+
,,,,,,ifffffffft fffffffffffffff, :fffffffffffffff;.fff tffffffffi,,,,,,
|
|
45
|
+
,,,,,,jffffffff: ;ffffffffffffff. jfffffffffffffff .ffff; :ffffffffj,,,,,,
|
|
46
|
+
,,,,,,fffffffff ffffffffffffff, jfffffffffffffff tffffff fffffffff,,,,,,
|
|
47
|
+
,,,,,,fffffffff fffffffffffff jfffffffffffffff tfffffff fffffffff,,,,,,
|
|
48
|
+
,,,,,,fffffffff fffffffffffff :fffffffffffffff; ........ fffffffff,,,,,,
|
|
49
|
+
,,,,,;ffffffffj ,ffffffffffff; jfffffffffffffff jffffffff;,,,,,
|
|
50
|
+
,,,,,;ffffffffi tffffffffffff jfffffffffffffff iffffffff;,,,,,
|
|
51
|
+
,,,,,;ffffffff; fffffffffffff jfffffffffffffff ;ffffffff;,,,,,
|
|
52
|
+
,,,,,;ffffffff; fffffffffffff :fffffffffffffff; ;ffffffff;,,,,,
|
|
53
|
+
,,,,,iffffffff, fffffffffffff jfffffffffffffff ,ffffffffi,,,,,
|
|
54
|
+
,,,,,iffffffff, fffffffffffff jfffffffffffffff ,ffffffffi,,,,,
|
|
55
|
+
,,,,,;ffffffff; fffffffffffff jfffffffffffffff ;ffffffff;,,,,,
|
|
56
|
+
,,,,,;ffffffff; fffffffffffff :fffffffffffffff; ;ffffffff;,,,,,
|
|
57
|
+
,,,,,;ffffffffi tffffffffffff jfffffffffffffff iffffffff;,,,,,
|
|
58
|
+
,,,,,;ffffffffj ,fffffffffff jfffffffffffffff jffffffff;,,,,,
|
|
59
|
+
,,,,,,fffffffff fffffffff, jfffffffffffffff jjjjjjjjjjjjj fffffffff,,,,,,
|
|
60
|
+
,,,,,,fffffffff fffffffff :fffffffffffffff; .fffffffffffff fffffffff,,,,,,
|
|
61
|
+
,,,,,,fffffffff ffffffff jfffffffffffffff ,ffffffffffffff fffffffff,,,,,,
|
|
62
|
+
,,,,,,jffffffff: ;ffffff jfffffffffffffff .ffffffffffffff; :ffffffffj,,,,,,
|
|
63
|
+
,,,,,,ifffffffft ffff, jfffffffffffffff ,fffffffffffffff tffffffffi,,,,,,
|
|
64
|
+
,,,,,,;fffffffff ffff :fffffffffffffff; ffffffffffffffff fffffffff;,,,,,,
|
|
65
|
+
,,,,,,,ffffffffft ,ff jfffffffffffffff ifffffffffffffffff, tfffffffff,,,,,,,
|
|
66
|
+
,,,,,,,ffffffffff : jfffffffffffffff tfffffffffffffffffffffff: ffffffffff,,,,,,,
|
|
67
|
+
,,,,,,,ifffffffff: jfffffffffffffff tfffffffffffffffffffffffj :fffffffffi,,,,,,,
|
|
68
|
+
,,,,,,,;fffffffffi :fffffffffffffff;.ffffffffffffffffffffffff: ifffffffff;,,,,,,,
|
|
69
|
+
,,,,,,,,ifffffffff jfffffffffffffff .fffffffffffffffffffffffft fffffffffi,,,,,,,,
|
|
70
|
+
,,,,,,,, fffffffffi jfffffffffffffff tffffffffffffffffffffffffj ifffffffff ,,,,,,,,
|
|
71
|
+
,,,,,,,,,jfffffffff jfffffffffffffff tffffffffffffffffffffffff: fffffffffj,,,,,,,,,
|
|
72
|
+
,,,,,,,,,ifffffffff, :fffffffffffffff;.ffffffffffffffffffffffffj ,fffffffffi,,,,,,,,,
|
|
73
|
+
,,,,,,,,,,ffffffffffi jfffffffffffffff .fffffffffffffffffffffffft iffffffffff,,,,,,,,,,
|
|
74
|
+
,,,,,,,,,,iffffffffff jfffffffffffffff tfffffffffffffffffffffffj, ffffffffffi,,,,,,,,,,
|
|
75
|
+
,,,,,,,,,,,ffffffffffffffffffffffffff tfffffffffffffffffffffff: fffffffffff,,,,,,,,,,,
|
|
76
|
+
,,,,,,,,,,,jffffffffffffffffffffffff; ,ffffffffffffffffffffff, :ffffffffffj,,,,,,,,,,,
|
|
77
|
+
,,,,,,,,,,,,tffffffffffffffffffffff ;ffffffffffffffff; .fffffffffft,,,,,,,,,,,,
|
|
78
|
+
,,,,,,,,,,,,,fffffffffffffffffffff ,tfffffft; tfffffffffff,,,,,,,,,,,,,
|
|
79
|
+
,,,,,,,,,,,,,;fffffffffffffffffff tfffffffffff;,,,,,,,,,,,,,
|
|
80
|
+
,,,,,,,,,,,,,,ffffffffffffffffff; .ffffffffffff,,,,,,,,,,,,,,
|
|
81
|
+
,,,,,,,,,,,,,,,ffffffffffffffff :ffffffffffff,,,,,,,,,,,,,,,
|
|
82
|
+
,,,,,,,,,,,,,,,;jfffffffffffff ffffffffffffj;,,,,,,,,,,,,,,,
|
|
83
|
+
,,,,,,,,,,,,,,,,,fffffffffffffi ifffffffffffff,,,,,,,,,,,,,,,,,
|
|
84
|
+
,,,,,,,,,,,,,,,,,ifffffffffffff, ,fffffffffffffi,,,,,,,,,,,,,,,,,
|
|
85
|
+
,,,,,,,,,,,,,,,,,,tffffffffffffffi ifffffffffffffft,,,,,,,,,,,,,,,,,,
|
|
86
|
+
,,,,,,,,,,,,,,,,,,,ifffffffffffffffi: :ifffffffffffffffi,,,,,,,,,,,,,,,,,,,
|
|
87
|
+
,,,,,,,,,,,,,,,,,,,,,jfffffffffffffffft. .tffffffffffffffffj,,,,,,,,,,,,,,,,,,,,,
|
|
88
|
+
,,,,,,,,,,,,,,,,,,,,,;fffffffffffffffffft: :tffffffffffffffffff;,,,,,,,,,,,,,,,,,,,,,
|
|
89
|
+
,,,,,,,,,,,,,,,,,,,,,,,ffffffffffffffffffffffjt;;,,;;tjffffffffffffffffffffff,,,,,,,,,,,,,,,,,,,,,,,
|
|
90
|
+
,,,,,,,,,,,,,,,,,,,,,,,,;ffffffffffffffffffffffffffffffffffffffffffffffffff;,,,,,,,,,,,,,,,,,,,,,,,,
|
|
91
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,tfffffffffffffffffffffffffffffffffffffffffffffft,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
92
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,jffffffffffffffffffffffffffffffffffffffffffffj,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
93
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,iffffffffffffffffffffffffffffffffffffffffi,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
94
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ijffffffffffffffffffffffffffffffffffji,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
95
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, iffffffffffffffffffffffffffffffi ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
96
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;iffffffffffffffffffffffffffi;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
97
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;ijffffffffffffffffji;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
98
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;iiii;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
99
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
100
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
101
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
102
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
103
|
+
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.0.alpha.1
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
Feature: ActiveResource::Base looks up site config in breadboard
|
|
2
|
+
|
|
3
|
+
Scenario: Site configuration on the model itself takes highest precedence
|
|
4
|
+
Given an ActiveResource model with a site attribute
|
|
5
|
+
And a Breadboard configuration for that model
|
|
6
|
+
When I call the model's site method
|
|
7
|
+
Then I should recieve the value configured directly on the model
|
|
8
|
+
And ActiveResource should ignore the configuration in Breadboard
|
|
9
|
+
|
|
10
|
+
Scenario: Specific environment configuration for an exact model match in Breadboard should take the next highest precedence
|
|
11
|
+
Given an ActiveResource model without a site attribute
|
|
12
|
+
And a Breadboard configuration with 'production' environment settings for that model
|
|
13
|
+
And my Rails environment is "production"
|
|
14
|
+
When I call the model's site method
|
|
15
|
+
Then I should recieve the value configured in the Breadboard "production" environment settings for that model
|
|
16
|
+
And ActiveResource should ignore more generic configurations in Breadboard
|
|
17
|
+
|
|
18
|
+
Scenario: "all" configuration for an exact model match in Breadboard should take the next highest precedence
|
|
19
|
+
Given an ActiveResource model without a site attribute
|
|
20
|
+
And a Breadboard configuration with 'all' environment settings for that model
|
|
21
|
+
And my Rails environment is "production"
|
|
22
|
+
When I call the model's site method
|
|
23
|
+
Then I should recieve the value configured in the Breadboard "all" environment settings for that model
|
|
24
|
+
And ActiveResource should ignore more generic configurations in Breadboard
|
|
25
|
+
|
|
26
|
+
Scenario: Specific environment configuration in Breadboard for an ancestor of the model should take the next highest precedence
|
|
27
|
+
Given an ActiveResource model without a site attribute
|
|
28
|
+
And a Breadboard configuration with 'production' environment settings for an ancestor of that model
|
|
29
|
+
And my Rails environment is "production"
|
|
30
|
+
When I call the model's site method
|
|
31
|
+
Then I should recieve the value configured in the Breadboard "production" environment settings for the ancestor of that model
|
|
32
|
+
And ActiveResource should ignore more generic configurations in Breadboard
|
|
33
|
+
|
|
34
|
+
Scenario: "all" environment configuration in Breadboard for an ancestor of the model should take the next highest precedence
|
|
35
|
+
Given an ActiveResource model without a site attribute
|
|
36
|
+
And a Breadboard configuration with 'all' environment settings for an ancestor of that model
|
|
37
|
+
And my Rails environment is "production"
|
|
38
|
+
When I call the model's site method
|
|
39
|
+
Then I should recieve the value configured in the Breadboard "all" environment settings for the ancestor of that model
|
|
40
|
+
And ActiveResource should ignore more generic configurations in Breadboard
|
|
41
|
+
|
|
42
|
+
Scenario: Specific environment configuration in Breadboard set in the defaults should take the next highest precedence
|
|
43
|
+
Given an ActiveResource model without a site attribute
|
|
44
|
+
And a Breadboard configuration with 'production' environment settings in the breadboard defaults section
|
|
45
|
+
And my Rails environment is "production"
|
|
46
|
+
When I call the model's site method
|
|
47
|
+
Then I should recieve the value configured in the Breadboard "production" environment settings in the breadboard defaults section
|
|
48
|
+
And ActiveResource should ignore more generic configurations in Breadboard
|
|
49
|
+
|
|
50
|
+
Scenario: "all" configuration in Breadboard set in the defaults should take the next highest precedence
|
|
51
|
+
Given an ActiveResource model without a site attribute
|
|
52
|
+
And a Breadboard configuration with 'all' environment settings in the breadboard defaults section
|
|
53
|
+
And my Rails environment is "production"
|
|
54
|
+
When I call the model's site method
|
|
55
|
+
Then I should recieve the value configured in the Breadboard "all" environment settings in the breadboard defaults section
|
|
56
|
+
|
|
57
|
+
Scenario: no applicable configuration in Breadboard
|
|
58
|
+
Given an ActiveResource model without a site attribute
|
|
59
|
+
And an empty Breadboard configuration
|
|
60
|
+
And my Rails environment is "production"
|
|
61
|
+
When I call the model's site method
|
|
62
|
+
Then I should recieve an empty string
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
Feature: Configuring Breadboard
|
|
2
|
+
As a programmer
|
|
3
|
+
I want to be able to configure breadboard in ruby (not YAML)
|
|
4
|
+
So that my engines can each update the breadboard configuration
|
|
5
|
+
|
|
6
|
+
Scenario: Configure Breadboard with Ruby, not YAML
|
|
7
|
+
Given I have required breadboard
|
|
8
|
+
Then I should be able to configure breadboard via Ruby blocks
|
|
9
|
+
|
|
10
|
+
Scenario: default configuration
|
|
11
|
+
Given I have required breadboard
|
|
12
|
+
Then I should be able to create a default configuration via the "default" Config method
|
|
13
|
+
|
|
14
|
+
Scenario: configuring a model by lowercase methods
|
|
15
|
+
Given I have required breadboard
|
|
16
|
+
Then I should be able to configure models via their lowercased, underscored method equivalents
|
|
17
|
+
|
|
18
|
+
Scenario: configuring a model via the "model" method
|
|
19
|
+
Given I have required breadboard
|
|
20
|
+
Then I should be able to configure a model by passing the constant for the model to the "model" method
|
|
21
|
+
|
|
22
|
+
Scenario: configuring multiple models via the "models" method
|
|
23
|
+
Given I have required breadboard
|
|
24
|
+
Then I should be able to configure multiple models simultaneously by passing their constants to the "models" method
|
|
25
|
+
|
|
26
|
+
Scenario: configuring the method for determining the Rails environment
|
|
27
|
+
Given I have required breadboard
|
|
28
|
+
Then I should be able to override the default Rails.env environment retrieval in case I'm not in a rails app
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Feature: Resetting Breadboard
|
|
2
|
+
|
|
3
|
+
Scenario: Resetting Breadboard should clear out all configuration data
|
|
4
|
+
Given I have required breadboard
|
|
5
|
+
And I have configured breadboard
|
|
6
|
+
When I call the method Breadboard.reset
|
|
7
|
+
Then the Breadboard configuration should be reset to an empty configuration
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
Given /^an ActiveResource model with a site attribute$/ do
|
|
2
|
+
class SomeModel < ActiveResource::Base
|
|
3
|
+
self.site = "http://set.on.model.com"
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^a Breadboard configuration for that model$/ do
|
|
8
|
+
Breadboard.configure do
|
|
9
|
+
model SomeModel do
|
|
10
|
+
all "http://set.in.breadboard.com"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
When /^I call the model's site method$/ do
|
|
16
|
+
@site = SomeModel.site
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Then /^I should recieve the value configured directly on the model$/ do
|
|
20
|
+
@site.to_s.should == "http://set.on.model.com"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Then /^ActiveResource should ignore the configuration in Breadboard$/ do
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Given /^an ActiveResource model without a site attribute$/ do
|
|
27
|
+
class Parent < ActiveResource::Base; end
|
|
28
|
+
class NoSiteAttribute < Parent; end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Given /^a Breadboard configuration with 'production' environment settings for that model$/ do
|
|
32
|
+
Breadboard.configure do
|
|
33
|
+
model NoSiteAttribute do
|
|
34
|
+
production "http://set.in.breadboard.exact.match.com"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
model Parent do
|
|
38
|
+
production "http://set.in.breadboard.on.parent.com"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
default do
|
|
42
|
+
production "http://default.production.com"
|
|
43
|
+
all "http://default.all.com"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Given /^a Breadboard configuration with 'all' environment settings for that model$/ do
|
|
49
|
+
Breadboard.configure do
|
|
50
|
+
model NoSiteAttribute do
|
|
51
|
+
all "http://set.in.breadboard.exact.match.com"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
model Parent do
|
|
55
|
+
production "http://set.in.breadboard.on.parent.com"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
default do
|
|
59
|
+
production "http://default.production.com"
|
|
60
|
+
all "http://default.all.com"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Given /^a Breadboard configuration with 'production' environment settings for an ancestor of that model$/ do
|
|
66
|
+
Breadboard.configure do
|
|
67
|
+
model NoSiteAttribute do
|
|
68
|
+
test "http://set.in.breadboard.exact.match.test.com"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
model Parent do
|
|
72
|
+
production "http://set.in.breadboard.on.parent.com"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
default do
|
|
76
|
+
production "http://default.production.com"
|
|
77
|
+
all "http://default.all.com"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
Given /^a Breadboard configuration with 'all' environment settings for an ancestor of that model$/ do
|
|
83
|
+
Breadboard.configure do
|
|
84
|
+
model NoSiteAttribute do
|
|
85
|
+
test "http://set.in.breadboard.exact.match.test.com"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
model Parent do
|
|
89
|
+
all "http://set.in.breadboard.on.parent.com"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
default do
|
|
93
|
+
production "http://default.production.com"
|
|
94
|
+
all "http://default.all.com"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
Given /^a Breadboard configuration with 'production' environment settings in the breadboard defaults section$/ do
|
|
100
|
+
Breadboard.configure do
|
|
101
|
+
model NoSiteAttribute do
|
|
102
|
+
test "http://set.in.breadboard.exact.match.test.com"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
model Parent do
|
|
106
|
+
preview "http://set.in.breadboard.on.parent.com"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
default do
|
|
110
|
+
production "http://default.production.com"
|
|
111
|
+
all "http://default.all.com"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
Given /^a Breadboard configuration with 'all' environment settings in the breadboard defaults section$/ do
|
|
117
|
+
Breadboard.configure do
|
|
118
|
+
model NoSiteAttribute do
|
|
119
|
+
test "http://set.in.breadboard.exact.match.test.com"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
model Parent do
|
|
123
|
+
preview "http://set.in.breadboard.on.parent.com"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
default do
|
|
127
|
+
all "http://default.all.com"
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
Given /^my Rails environment is "([^"]*)"$/ do |environment|
|
|
133
|
+
unless defined? Rails
|
|
134
|
+
Rails = double "Rails"
|
|
135
|
+
end
|
|
136
|
+
Rails.stub(:env).and_return environment
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
Then /^I should recieve the value configured in the Breadboard "([^"]*)" environment settings for that model$/ do |environment|
|
|
140
|
+
NoSiteAttribute.site.to_s.should == Breadboard.config.NoSiteAttribute.send(environment.to_sym)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
Then /^I should recieve the value configured in the Breadboard "([^"]*)" environment settings for the ancestor of that model$/ do |environment|
|
|
144
|
+
NoSiteAttribute.site.to_s.should == Breadboard.config.Parent.send(environment.to_sym)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
Then /^I should recieve the value configured in the Breadboard "([^"]*)" environment settings in the breadboard defaults section$/ do |environment|
|
|
148
|
+
NoSiteAttribute.site.to_s.should == Breadboard.config.default.send(environment.to_sym)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
Then /^ActiveResource should ignore more generic configurations in Breadboard$/ do
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
Given /^an empty Breadboard configuration$/ do
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
Then /^I should recieve an empty string$/ do
|
|
158
|
+
NoSiteAttribute.site.to_s.should be_empty
|
|
159
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
class Particle; end
|
|
2
|
+
class Yarticle; end
|
|
3
|
+
class Article; end
|
|
4
|
+
class Smarticle; end
|
|
5
|
+
|
|
6
|
+
Given /^I have required breadboard$/ do
|
|
7
|
+
require 'breadboard'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Then /^I should be able to configure breadboard via Ruby blocks$/ do
|
|
11
|
+
Breadboard.config.default.all.should == nil
|
|
12
|
+
|
|
13
|
+
Breadboard.configure do
|
|
14
|
+
default do
|
|
15
|
+
all "http://localhost:3000"
|
|
16
|
+
production "http://test.com"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Breadboard.config.default.all.should == "http://localhost:3000"
|
|
21
|
+
Breadboard.config.default.production.should == "http://test.com"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Then /^I should be able to create a default configuration via the "default" Config method$/ do
|
|
25
|
+
Breadboard.config.default.all.should == nil
|
|
26
|
+
|
|
27
|
+
Breadboard.configure do
|
|
28
|
+
default do
|
|
29
|
+
all "http://localhost:3000"
|
|
30
|
+
production "http://test.com"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Breadboard.config.default.all.should == "http://localhost:3000"
|
|
35
|
+
Breadboard.config.default.production.should == "http://test.com"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Then /^I should be able to configure models via their lowercased, underscored method equivalents$/ do
|
|
39
|
+
Breadboard.config.Article.production.should == nil
|
|
40
|
+
|
|
41
|
+
Breadboard.configure do
|
|
42
|
+
article do
|
|
43
|
+
production "haha"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Breadboard.config.Article.production.should == "haha"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Then /^I should be able to configure a model by passing the constant for the model to the "model" method$/ do
|
|
51
|
+
Breadboard.config.Smarticle.production.should == nil
|
|
52
|
+
|
|
53
|
+
Breadboard.configure do
|
|
54
|
+
model Smarticle do
|
|
55
|
+
production "haha"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Breadboard.config.Smarticle.production.should == "haha"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Then /^I should be able to configure multiple models simultaneously by passing their constants to the "models" method$/ do
|
|
63
|
+
Breadboard.config.Particle.production.should == nil
|
|
64
|
+
Breadboard.config.Yarticle.production.should == nil
|
|
65
|
+
|
|
66
|
+
Breadboard.configure do
|
|
67
|
+
models Particle, Yarticle do
|
|
68
|
+
production "haha"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
Breadboard.config.Particle.production.should == "haha"
|
|
73
|
+
Breadboard.config.Yarticle.production.should == "haha"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
Then /^I should be able to override the default Rails\.env environment retrieval in case I'm not in a rails app$/ do
|
|
77
|
+
unless defined? Rails
|
|
78
|
+
Rails = double "Rails"
|
|
79
|
+
end
|
|
80
|
+
Rails.stub(:env).and_return "rails-breadboard-test"
|
|
81
|
+
Rails.env.should == "rails-breadboard-test"
|
|
82
|
+
Breadboard.env.should == "rails-breadboard-test"
|
|
83
|
+
Breadboard.configure do
|
|
84
|
+
env do
|
|
85
|
+
"override!"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
Breadboard.env.should == "override!"
|
|
89
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Given /^I have configured breadboard$/ do
|
|
2
|
+
Breadboard.configure do
|
|
3
|
+
default do
|
|
4
|
+
all "http://test.com"
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When /^I call the method Breadboard\.reset$/ do
|
|
10
|
+
Breadboard.config.default.all.should == "http://test.com"
|
|
11
|
+
Breadboard.reset
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Then /^the Breadboard configuration should be reset to an empty configuration$/ do
|
|
15
|
+
Breadboard.config.default.all.should be_nil
|
|
16
|
+
end
|
data/lib/breadboard.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require 'active_resource'
|
|
2
|
-
require 'active_support'
|
|
2
|
+
require 'active_support/core_ext/string'
|
|
3
3
|
require 'breadboard/breadboard'
|
|
4
|
-
|
|
4
|
+
require 'breadboard/config'
|
|
5
|
+
require 'breadboard/environment'
|
|
6
|
+
require 'breadboard/active_resource'
|
|
@@ -1,58 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def initialize(config_yml)
|
|
7
|
-
@config = YAML.load config_yml
|
|
1
|
+
module Breadboard
|
|
2
|
+
extend self
|
|
3
|
+
|
|
4
|
+
def config
|
|
5
|
+
Config
|
|
8
6
|
end
|
|
9
|
-
|
|
10
|
-
def
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
|
|
8
|
+
def env
|
|
9
|
+
Config.env
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def configure(&block)
|
|
13
|
+
Config.instance_eval &block
|
|
16
14
|
end
|
|
17
15
|
|
|
18
|
-
def service_for(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
klass = klass.superclass
|
|
16
|
+
def service_for(model, environment=nil)
|
|
17
|
+
environment ||= Config.env.to_s.to_sym rescue :all
|
|
18
|
+
model_superclass_chain = [model] + model.ancestors
|
|
19
|
+
model_superclass_chain.each do |klass|
|
|
20
|
+
klass_symbol = klass.to_s.to_sym
|
|
21
|
+
site = config.send(klass_symbol).send(environment) || config.send(klass_symbol).send(:all)
|
|
22
|
+
return site if site
|
|
26
23
|
end
|
|
27
|
-
|
|
28
|
-
(@config['default'][environment] rescue nil) ||
|
|
29
|
-
(@config['default']['all'] rescue nil) ||
|
|
30
|
-
''
|
|
24
|
+
return config.default.send(environment) || config.default.send(:all)
|
|
31
25
|
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class ActiveResource::Base
|
|
35
|
-
class << self
|
|
36
|
-
def site_with_breadboard
|
|
37
|
-
if defined?(BREAD_BOARD)
|
|
38
|
-
unless @site
|
|
39
|
-
self.site = BREAD_BOARD.service_for(self)
|
|
40
|
-
end
|
|
41
|
-
@site
|
|
42
|
-
else
|
|
43
|
-
self.site_without_breadboard
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
26
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def connection_with_breadboard(refresh = false)
|
|
50
|
-
# setting @connection = nil would trigger Connection.new(site...
|
|
51
|
-
# @connection is set to nil when calling self.site = 'url' as well
|
|
52
|
-
@connection = nil
|
|
53
|
-
connection_without_breadboard
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
alias_method_chain :connection, :breadboard
|
|
27
|
+
def reset
|
|
28
|
+
Config.reset
|
|
57
29
|
end
|
|
58
30
|
end
|
|
31
|
+
|
|
32
|
+
#
|
|
33
|
+
#
|
|
34
|
+
# class Breadboard
|
|
35
|
+
# attr_reader :config
|
|
36
|
+
#
|
|
37
|
+
# class EnvironmentUnknownError < StandardError; end
|
|
38
|
+
#
|
|
39
|
+
# def initialize(config_yml)
|
|
40
|
+
# @config = YAML.load config_yml
|
|
41
|
+
# end
|
|
42
|
+
#
|
|
43
|
+
# def environment
|
|
44
|
+
# begin
|
|
45
|
+
# RAILS_ENV
|
|
46
|
+
# rescue
|
|
47
|
+
# raise EnvironmentUnknownError, "RAILS_ENV environment unknown"
|
|
48
|
+
# end
|
|
49
|
+
# end
|
|
50
|
+
#
|
|
51
|
+
# def service_for(klass)
|
|
52
|
+
# serv = nil
|
|
53
|
+
# while serv.nil? && klass != ActiveResource::Base do
|
|
54
|
+
# table = klass.to_s.tableize.singularize
|
|
55
|
+
# serv = (@config[table][environment] rescue nil) ||
|
|
56
|
+
# (@config[table]['all'] rescue nil) ||
|
|
57
|
+
# nil
|
|
58
|
+
# klass = klass.superclass
|
|
59
|
+
# end
|
|
60
|
+
# serv ||
|
|
61
|
+
# (@config['default'][environment] rescue nil) ||
|
|
62
|
+
# (@config['default']['all'] rescue nil) ||
|
|
63
|
+
# ''
|
|
64
|
+
# end
|
|
65
|
+
# end
|
|
66
|
+
# #
|
|
67
|
+
# # class ActiveResource::Base
|
|
68
|
+
# # class << self
|
|
69
|
+
# # def site_with_breadboard
|
|
70
|
+
# # if defined?(BREAD_BOARD)
|
|
71
|
+
# # unless @site
|
|
72
|
+
# # self.site = BREAD_BOARD.service_for(self)
|
|
73
|
+
# # end
|
|
74
|
+
# # @site
|
|
75
|
+
# # else
|
|
76
|
+
# # self.site_without_breadboard
|
|
77
|
+
# # end
|
|
78
|
+
# # end
|
|
79
|
+
# #
|
|
80
|
+
# # alias_method_chain :site, :breadboard
|
|
81
|
+
# #
|
|
82
|
+
# # def connection_with_breadboard(refresh = false)
|
|
83
|
+
# # # setting @connection = nil would trigger Connection.new(site...
|
|
84
|
+
# # # @connection is set to nil when calling self.site = 'url' as well
|
|
85
|
+
# # @connection = nil
|
|
86
|
+
# # connection_without_breadboard
|
|
87
|
+
# # end
|
|
88
|
+
# #
|
|
89
|
+
# # alias_method_chain :connection, :breadboard
|
|
90
|
+
# # end
|
|
91
|
+
# # end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Breadboard
|
|
2
|
+
module Config
|
|
3
|
+
extend self
|
|
4
|
+
|
|
5
|
+
def config
|
|
6
|
+
@config ||= {}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def env(&block)
|
|
10
|
+
@env ||= proc { Rails.env }
|
|
11
|
+
return @env.call unless block
|
|
12
|
+
@env = block
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def default(&block)
|
|
16
|
+
config_or_access :default, &block
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def model(model_name, &block)
|
|
20
|
+
config_or_access model_name, &block
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def reset
|
|
24
|
+
@config = {}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def models(*model_classes, &block)
|
|
28
|
+
raise "You must pass a block to the `models` method" if block.nil?
|
|
29
|
+
|
|
30
|
+
model_classes.each do |model_class|
|
|
31
|
+
config_or_access model_class, &block
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def method_missing(method_name, *args, &block)
|
|
36
|
+
config_or_access method_name.to_s.camelize.constantize, &block
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
def config_or_access(model, &block)
|
|
41
|
+
config[model] ||= Environment.new
|
|
42
|
+
if block
|
|
43
|
+
config[model].instance_eval &block
|
|
44
|
+
else
|
|
45
|
+
config[model]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Breadboard
|
|
2
|
+
module Config
|
|
3
|
+
class Environment
|
|
4
|
+
def initialize
|
|
5
|
+
@environments = {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test(url=nil)
|
|
9
|
+
return @environments[:test] if url.nil?
|
|
10
|
+
@environments[:test] = url
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def method_missing(method_name, *args, &block)
|
|
14
|
+
return @environments[method_name] if args.length == 0
|
|
15
|
+
@environments[method_name] = args.first
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/{README.rdoc → readme.md}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
#Introduction
|
|
2
2
|
|
|
3
3
|
breadboard.yml is to ActiveResource as database.yml is to ActiveRecord, taking the data source configuration out of the models and putting it where it belongs, in a configuration file. If the services you connect your ActiveResource models to depends on your RAILS_ENV, then breadboard is for you.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
##Install
|
|
6
6
|
|
|
7
7
|
Breadboard is available as a gem:
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ If you'd like to use this in your rails project, add the following to your confi
|
|
|
12
12
|
|
|
13
13
|
config.gem 'breadboard'
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
##Usage
|
|
16
16
|
|
|
17
17
|
All you have to do is create a breadboard.yml file in your RAILS_ROOT/config directory.
|
|
18
18
|
|
|
@@ -50,4 +50,4 @@ Now suppose you have a 'Book' model that needs to connect to a different service
|
|
|
50
50
|
book:
|
|
51
51
|
production: http://my.book.production.service.provider
|
|
52
52
|
|
|
53
|
-
I think you can see where this is going...
|
|
53
|
+
I think you can see where this is going...
|
metadata
CHANGED
|
@@ -1,40 +1,72 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: breadboard
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
5
|
-
prerelease:
|
|
4
|
+
hash: -3702664322
|
|
5
|
+
prerelease: 6
|
|
6
6
|
segments:
|
|
7
|
+
- 1
|
|
7
8
|
- 0
|
|
8
|
-
- 2
|
|
9
9
|
- 0
|
|
10
|
-
|
|
10
|
+
- alpha
|
|
11
|
+
- 1
|
|
12
|
+
version: 1.0.0.alpha.1
|
|
11
13
|
platform: ruby
|
|
12
14
|
authors:
|
|
13
15
|
- Matt Parker
|
|
14
|
-
- Steve Koppelman
|
|
15
16
|
autorequire:
|
|
16
17
|
bindir: bin
|
|
17
18
|
cert_chain: []
|
|
18
19
|
|
|
19
|
-
date:
|
|
20
|
+
date: 2011-04-26 00:00:00 -04:00
|
|
20
21
|
default_executable:
|
|
21
22
|
dependencies:
|
|
22
23
|
- !ruby/object:Gem::Dependency
|
|
23
|
-
name:
|
|
24
|
+
name: activeresource
|
|
24
25
|
prerelease: false
|
|
25
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
26
27
|
none: false
|
|
27
28
|
requirements:
|
|
28
|
-
- -
|
|
29
|
+
- - ~>
|
|
29
30
|
- !ruby/object:Gem::Version
|
|
30
|
-
hash:
|
|
31
|
+
hash: 7
|
|
31
32
|
segments:
|
|
32
|
-
- 2
|
|
33
|
-
- 3
|
|
34
33
|
- 3
|
|
35
|
-
|
|
34
|
+
- 0
|
|
35
|
+
version: "3.0"
|
|
36
36
|
type: :runtime
|
|
37
37
|
version_requirements: *id001
|
|
38
|
+
- !ruby/object:Gem::Dependency
|
|
39
|
+
name: cucumber
|
|
40
|
+
prerelease: false
|
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ~>
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
hash: 55
|
|
47
|
+
segments:
|
|
48
|
+
- 0
|
|
49
|
+
- 10
|
|
50
|
+
- 0
|
|
51
|
+
version: 0.10.0
|
|
52
|
+
type: :development
|
|
53
|
+
version_requirements: *id002
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rspec
|
|
56
|
+
prerelease: false
|
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
58
|
+
none: false
|
|
59
|
+
requirements:
|
|
60
|
+
- - ~>
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
hash: 31
|
|
63
|
+
segments:
|
|
64
|
+
- 2
|
|
65
|
+
- 4
|
|
66
|
+
- 0
|
|
67
|
+
version: 2.4.0
|
|
68
|
+
type: :development
|
|
69
|
+
version_requirements: *id003
|
|
38
70
|
description: "Breadboard allows you to define what services your ActiveResource derived classes connect to based on your rails environment. "
|
|
39
71
|
email: moonmaster9000@gmail.com
|
|
40
72
|
executables: []
|
|
@@ -42,20 +74,36 @@ executables: []
|
|
|
42
74
|
extensions: []
|
|
43
75
|
|
|
44
76
|
extra_rdoc_files:
|
|
45
|
-
-
|
|
77
|
+
- readme.md
|
|
46
78
|
files:
|
|
47
|
-
-
|
|
79
|
+
- .gitignore
|
|
80
|
+
- .rvmrc
|
|
81
|
+
- CHANGELOG
|
|
82
|
+
- Gemfile
|
|
83
|
+
- Gemfile.lock
|
|
84
|
+
- PUBLIC_DOMAIN
|
|
85
|
+
- VERSION
|
|
86
|
+
- features/active_resource.feature
|
|
87
|
+
- features/configure.feature
|
|
88
|
+
- features/reset.feature
|
|
89
|
+
- features/step_definitions/active_resource_steps.rb
|
|
90
|
+
- features/step_definitions/configure_steps.rb
|
|
91
|
+
- features/step_definitions/reset_steps.rb
|
|
92
|
+
- features/support/env.rb
|
|
93
|
+
- features/support/hooks.rb
|
|
48
94
|
- lib/breadboard.rb
|
|
95
|
+
- lib/breadboard/active_resource.rb
|
|
49
96
|
- lib/breadboard/breadboard.rb
|
|
50
|
-
-
|
|
51
|
-
-
|
|
97
|
+
- lib/breadboard/config.rb
|
|
98
|
+
- lib/breadboard/environment.rb
|
|
99
|
+
- readme.md
|
|
52
100
|
has_rdoc: true
|
|
53
101
|
homepage: http://github.com/moonmaster9000/breadboard
|
|
54
102
|
licenses: []
|
|
55
103
|
|
|
56
104
|
post_install_message:
|
|
57
|
-
rdoc_options:
|
|
58
|
-
|
|
105
|
+
rdoc_options: []
|
|
106
|
+
|
|
59
107
|
require_paths:
|
|
60
108
|
- lib
|
|
61
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -79,10 +127,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
79
127
|
requirements: []
|
|
80
128
|
|
|
81
129
|
rubyforge_project:
|
|
82
|
-
rubygems_version: 1.
|
|
130
|
+
rubygems_version: 1.6.2
|
|
83
131
|
signing_key:
|
|
84
132
|
specification_version: 3
|
|
85
|
-
summary:
|
|
133
|
+
summary: Simple, environment-based service provider configuration for ActiveResource
|
|
86
134
|
test_files:
|
|
87
|
-
-
|
|
88
|
-
-
|
|
135
|
+
- features/active_resource.feature
|
|
136
|
+
- features/configure.feature
|
|
137
|
+
- features/reset.feature
|
|
138
|
+
- features/step_definitions/active_resource_steps.rb
|
|
139
|
+
- features/step_definitions/configure_steps.rb
|
|
140
|
+
- features/step_definitions/reset_steps.rb
|
|
141
|
+
- features/support/env.rb
|
|
142
|
+
- features/support/hooks.rb
|
|
@@ -1,76 +0,0 @@
|
|
|
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\n\n" +
|
|
10
|
-
"genre:\n all: http://all.genre.services.com\n\n" +
|
|
11
|
-
"sub_genre:\n production: http://all.sub.genre.services.com"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
describe "#initialize" do
|
|
15
|
-
it "should accept a yml file string" do
|
|
16
|
-
proc { Breadboard.new(@yml) }.should_not raise_error
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should require that the yml be valid" do
|
|
20
|
-
proc { Breadboard.new(true) }.should raise_error
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
it "should parse the configuration and store it internally" do
|
|
24
|
-
Breadboard.new(@yml).config["default"]["all"].should == "http://services.com"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should configure any ActiveResource::Base derived class with the appropriate site" do
|
|
28
|
-
define_const "RAILS_ENV", "development"
|
|
29
|
-
class Book < ActiveResource::Base; end
|
|
30
|
-
class Author < ActiveResource::Base; end
|
|
31
|
-
class Article < ActiveResource::Base; end
|
|
32
|
-
class Genre < ActiveResource::Base; end
|
|
33
|
-
class SubGenre < Genre; end
|
|
34
|
-
define_const "BREAD_BOARD", Breadboard.new(@yml)
|
|
35
|
-
Book.site.host.should == "all.book.services.com"
|
|
36
|
-
Author.site.host.should == "development.author.services.com"
|
|
37
|
-
Article.site.host.should == "services.com"
|
|
38
|
-
Genre.site.host.should == "all.genre.services.com"
|
|
39
|
-
SubGenre.site.host.should == "all.genre.services.com"
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
describe "#environment" do
|
|
44
|
-
before do
|
|
45
|
-
define_const "RAILS_ENV", 'breadboard_test'
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should return the rails environment if it is set" do
|
|
49
|
-
Breadboard.new(@yml).environment.should == 'breadboard_test'
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should return UNKNOWN_ENVIRONMENT if the rails environment isn't set" do
|
|
53
|
-
undefine_const "RAILS_ENV"
|
|
54
|
-
proc {Breadboard.new(@yml).environment}.should raise_error(Breadboard::EnvironmentUnknownError)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe "#service_for" do
|
|
59
|
-
before do
|
|
60
|
-
@s = Breadboard.new(@yml)
|
|
61
|
-
define_const "RAILS_ENV", 'production'
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should require a class name" do
|
|
65
|
-
proc { @s.service_for }.should raise_error(ArgumentError)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should return the appropriate service for that class" do
|
|
69
|
-
@s.service_for(Article).should == 'http://article.services.com'
|
|
70
|
-
@s.service_for(Author).should == 'http://services.com'
|
|
71
|
-
@s.service_for(Book).should == 'http://all.book.services.com'
|
|
72
|
-
@s.service_for(Genre).should == 'http://all.genre.services.com'
|
|
73
|
-
@s.service_for(SubGenre).should == 'http://all.sub.genre.services.com'
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
data/spec/spec_helper.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
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
|