breadboard 1.0.1 → 1.1.0.rc1

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/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v1.1.0.rc1
2
+ set user, password parameters with block instead of hash (see the README).
3
+
1
4
  v1.0.0
2
5
  No change since beta 2; after using beta 2 in several production apps and not running into any more bugs, i've decided it's good for 1.0.0 GA.
3
6
 
@@ -1,20 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- breadboard (1.0.0)
4
+ breadboard (1.0.2)
5
5
  activeresource (~> 3.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- activemodel (3.0.7)
11
- activesupport (= 3.0.7)
10
+ activemodel (3.0.11)
11
+ activesupport (= 3.0.11)
12
12
  builder (~> 2.1.2)
13
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)
14
+ activeresource (3.0.11)
15
+ activemodel (= 3.0.11)
16
+ activesupport (= 3.0.11)
17
+ activesupport (3.0.11)
18
18
  builder (2.1.2)
19
19
  cucumber (0.10.2)
20
20
  builder (>= 2.1.2)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.1.0.rc1
@@ -26,3 +26,11 @@ Feature: Configuring Breadboard
26
26
  Scenario: configuring the method for determining the Rails environment
27
27
  Given I have required breadboard
28
28
  Then I should be able to override the default Rails.env environment retrieval in case I'm not in a rails app
29
+
30
+ Scenario: Configure Breadboard with hash instead of url
31
+ Given I have required breadboard
32
+ Then I should be able to configure breadboard with hash
33
+
34
+ Scenario: Configure model with user, password
35
+ Given I have required breadboard
36
+ Then I should be able to configure model with user, password
@@ -137,15 +137,15 @@ Given /^my Rails environment is "([^"]*)"$/ do |environment|
137
137
  end
138
138
 
139
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)
140
+ NoSiteAttribute.site.should == Breadboard.config.NoSiteAttribute.send(environment.to_sym).site
141
141
  end
142
142
 
143
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)
144
+ NoSiteAttribute.site.should == Breadboard.config.Parent.send(environment.to_sym).site
145
145
  end
146
146
 
147
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)
148
+ NoSiteAttribute.site.should == Breadboard.config.default.send(environment.to_sym).site
149
149
  end
150
150
 
151
151
  Then /^ActiveResource should ignore more generic configurations in Breadboard$/ do
@@ -87,3 +87,51 @@ Then /^I should be able to override the default Rails\.env environment retrieval
87
87
  end
88
88
  Breadboard.env.should == "override!"
89
89
  end
90
+
91
+ Then /^I should be able to configure breadboard with hash$/ do
92
+ Breadboard.configure do
93
+ default do
94
+ all do
95
+ site "http://localhost:3000"
96
+ user "admin"
97
+ password "password"
98
+ end
99
+
100
+ development "http://test"
101
+ end
102
+ end
103
+
104
+ Breadboard.config.default.all.to_s.should == "http://localhost:3000"
105
+ Breadboard.config.default.all.site.to_s.should == "http://localhost:3000"
106
+ Breadboard.config.default.all.user.should == "admin"
107
+ Breadboard.config.default.all.password.should == "password"
108
+
109
+ Breadboard.config.default.development.to_s.should == "http://test"
110
+ end
111
+
112
+ Then /^I should be able to configure model with user, password$/ do
113
+ class Venue < ActiveResource::Base
114
+ end
115
+
116
+ Breadboard.configure do
117
+ env {"production"}
118
+
119
+ model Venue do
120
+ all do
121
+ site "http://localhost:3000"
122
+ user "admin"
123
+ password "password"
124
+ end
125
+
126
+ production do
127
+ site "http://livesite"
128
+ user "admin"
129
+ password "secret"
130
+ end
131
+ end
132
+ end
133
+
134
+ Venue.site.to_s.should == "http://livesite"
135
+ Venue.password.should == "secret"
136
+ end
137
+
@@ -2,5 +2,6 @@ require 'active_resource'
2
2
  require 'active_support/core_ext/string'
3
3
  require 'breadboard/breadboard'
4
4
  require 'breadboard/config'
5
+ require 'breadboard/env_config'
5
6
  require 'breadboard/environment'
6
7
  require 'breadboard/active_resource'
@@ -1,16 +1,22 @@
1
1
  module ActiveResource
2
2
  class Base
3
3
  class << self
4
- def site_with_breadboard
5
- @site || Breadboard.service_for(self)
4
+ class_eval do
5
+ %w(site user password).each do |attr|
6
+ define_method "#{attr}_with_breadboard" do
7
+ @site || begin
8
+ setting = Breadboard.service_for(self)
9
+ setting.kind_of?(Breadboard::Config::EnvConfig) ? setting.send(attr) : setting
10
+ end
11
+ end
12
+ alias_method_chain attr, :breadboard
13
+ end
6
14
  end
7
15
 
8
16
  def connection_with_breadboard(reset=false)
9
17
  @connection ||= nil
10
18
  connection_without_breadboard(reset)
11
19
  end
12
-
13
- alias_method_chain :site, :breadboard
14
20
  alias_method_chain :connection, :breadboard
15
21
  end
16
22
  end
@@ -19,19 +19,11 @@ module Breadboard
19
19
  model_superclass_chain.each do |klass|
20
20
  klass_symbol = klass.to_s.to_sym
21
21
  site = config.send(klass_symbol).send(environment) || config.send(klass_symbol).send(:all)
22
- if site
23
- site = site.call if site.respond_to? :call
24
- site = URI.parse site
22
+ if site and !site.empty?
25
23
  return site
26
24
  end
27
25
  end
28
-
29
- site = config.default.send(environment) || config.default.send(:all)
30
- if site
31
- site = site.call if site.respond_to? :call
32
- site = URI.parse site
33
- return site
34
- end
26
+ return config.default.send(environment) || config.default.send(:all)
35
27
  end
36
28
 
37
29
  def reset
@@ -0,0 +1,28 @@
1
+ module Breadboard
2
+ module Config
3
+ # holds site, user, password values for an environment instance
4
+ class EnvConfig
5
+ def initialize
6
+ @config = {}
7
+ end
8
+
9
+ def site=(url)
10
+ @config[:site] = url
11
+ end
12
+
13
+ def method_missing(method_name, *args, &block)
14
+ return @config[method_name] if args.length == 0
15
+ @config[method_name] = args.first
16
+ end
17
+
18
+ def to_s
19
+ @config[:site].to_s
20
+ end
21
+
22
+ def empty?
23
+ @config.empty?
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -7,12 +7,21 @@ module Breadboard
7
7
 
8
8
  def test(url=nil)
9
9
  return @environments[:test] if url.nil?
10
- @environments[:test] = url
10
+ @environments[:test] = URI.parse url
11
11
  end
12
12
 
13
13
  def method_missing(method_name, *args, &block)
14
- return @environments[method_name] if args.length == 0
15
- @environments[method_name] = args.first
14
+ if block_given?
15
+ @environments[method_name] ||= EnvConfig.new
16
+ @environments[method_name].instance_eval &block
17
+ else
18
+ if args.length == 0
19
+ @environments[method_name]
20
+ else
21
+ @environments[method_name] ||= EnvConfig.new
22
+ @environments[method_name].site URI.parse args.first
23
+ end
24
+ end
16
25
  end
17
26
  end
18
27
  end
data/readme.md CHANGED
@@ -76,6 +76,19 @@ Now suppose you have a 'Book' model that needs to connect to a different service
76
76
  end
77
77
  end
78
78
 
79
+ If you need to set user and password for a restful service, you can do so with a block
80
+
81
+ Breadboard.configure do
82
+ model Book do
83
+ production do
84
+ site "http://my.book.production.service.provider"
85
+ user "user1"
86
+ password "password"
87
+ end
88
+ end
89
+ end
90
+
91
+
79
92
  ## Configuring the environment
80
93
 
81
94
  By default, Breadboard will check `Rails.env` to see what environment your app is in.
metadata CHANGED
@@ -1,72 +1,80 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: breadboard
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15424039
5
+ prerelease: 6
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 0
10
+ - rc
11
+ - 1
12
+ version: 1.1.0.rc1
6
13
  platform: ruby
7
- authors:
14
+ authors:
8
15
  - Matt Parker
9
16
  autorequire:
10
17
  bindir: bin
11
18
  cert_chain: []
12
- date: 2011-04-26 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
19
+
20
+ date: 2011-04-26 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
15
23
  name: activeresource
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.0'
22
- type: :runtime
23
24
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
+ requirement: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
- requirements:
27
+ requirements:
27
28
  - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '3.0'
30
- - !ruby/object:Gem::Dependency
29
+ - !ruby/object:Gem::Version
30
+ hash: 7
31
+ segments:
32
+ - 3
33
+ - 0
34
+ version: "3.0"
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
31
38
  name: cucumber
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 0.10.0
38
- type: :development
39
39
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
42
- requirements:
42
+ requirements:
43
43
  - - ~>
44
- - !ruby/object:Gem::Version
44
+ - !ruby/object:Gem::Version
45
+ hash: 55
46
+ segments:
47
+ - 0
48
+ - 10
49
+ - 0
45
50
  version: 0.10.0
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 2.4.0
54
51
  type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
55
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
57
  none: false
58
- requirements:
58
+ requirements:
59
59
  - - ~>
60
- - !ruby/object:Gem::Version
60
+ - !ruby/object:Gem::Version
61
+ hash: 31
62
+ segments:
63
+ - 2
64
+ - 4
65
+ - 0
61
66
  version: 2.4.0
62
- description: ! 'Breadboard allows you to define what services your ActiveResource
63
- derived classes connect to based on your rails environment. '
67
+ type: :development
68
+ version_requirements: *id003
69
+ description: "Breadboard allows you to define what services your ActiveResource derived classes connect to based on your rails environment. "
64
70
  email: moonmaster9000@gmail.com
65
71
  executables: []
72
+
66
73
  extensions: []
67
- extra_rdoc_files:
74
+
75
+ extra_rdoc_files:
68
76
  - readme.md
69
- files:
77
+ files:
70
78
  - .gitignore
71
79
  - .rvmrc
72
80
  - CHANGELOG
@@ -87,33 +95,43 @@ files:
87
95
  - lib/breadboard/active_resource.rb
88
96
  - lib/breadboard/breadboard.rb
89
97
  - lib/breadboard/config.rb
98
+ - lib/breadboard/env_config.rb
90
99
  - lib/breadboard/environment.rb
91
100
  - readme.md
92
101
  homepage: http://github.com/moonmaster9000/breadboard
93
102
  licenses: []
103
+
94
104
  post_install_message:
95
105
  rdoc_options: []
96
- require_paths:
106
+
107
+ require_paths:
97
108
  - lib
98
- required_ruby_version: !ruby/object:Gem::Requirement
109
+ required_ruby_version: !ruby/object:Gem::Requirement
99
110
  none: false
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
119
  none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
110
127
  requirements: []
128
+
111
129
  rubyforge_project:
112
- rubygems_version: 1.8.24
130
+ rubygems_version: 1.8.10
113
131
  signing_key:
114
132
  specification_version: 3
115
133
  summary: Simple, environment-based service provider configuration for ActiveResource
116
- test_files:
134
+ test_files:
117
135
  - features/active_resource.feature
118
136
  - features/configure.feature
119
137
  - features/reset.feature