envconfig 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ae15014bb2a42caac46541701ad0eeedecf4945
4
- data.tar.gz: 291af5950eae465a0ebe2a411374ddcde9ddff16
3
+ metadata.gz: 3ab09a9d9d16863e549d99b9e6d4e98185e66ed2
4
+ data.tar.gz: b679e231ef2f5c3287ab1673210bd982d921145b
5
5
  SHA512:
6
- metadata.gz: 5d227e3a0307aad586efe1dc3c81ee7f089920fbea191ff6e0f00a9659f7c6c8089745e1fda711d56316e299446b4c307d8eb7db809d1077a6033deaaf02265b
7
- data.tar.gz: 9ef22e14457b7fc0297061d0a9a97fb1f1cf1bf45701d8dbb4c5135772cc3082cf1aa2ede4163a99699e9c0e0fc544c3fd76eaff034bc462a7f4b558c8cf5fc4
6
+ metadata.gz: 98ddb30963a62b3f0b0a6f45e400843df574675b6dedaf228e3fa710efb648182f34b28672eef8246bd5f9d172bae526efb31df220c33053aa0888ef6ece6ac5
7
+ data.tar.gz: a2fca7e29c93c0302c62aa4d2d98e25a448bedce4088f72357a722c930fa918972791913a3377b5b1f5ef2f526a5e43fc9fab6fd5439990e230f81ab0142d0d5
data/README.md CHANGED
@@ -1,33 +1,65 @@
1
1
  # envconfig
2
2
 
3
- Connect your Rails app to backing services via ENV vars such as those
4
- provided by [Broadstack][broadstack] or [Heroku Addons][heroku_addons].
3
+ Easily configure your Ruby / Rails app to use the backing services specified in
4
+ environment variables such as those provided by [Broadstack][broadstack] or
5
+ [Heroku][heroku_addons] add-ons.
5
6
 
6
- envconfig gathers ENV configuration from known add-on providers, exposes them
7
- as a consistent configuration interface, and configures your Rails application
8
- via initializers.
7
+ This lets you easily switch between providers, or between development and production,
8
+ without having configuration conditionals in your code.
9
9
 
10
- For example if your ENV contains the follow:
10
+ For more on why this makes a lot of sense, read the [Config][12config] and
11
+ [Backing Services][12bs] sections of the excellent [Twelve-Factor App][12factor]
12
+ written by Heroku co-founder Adam Wiggins.
11
13
 
12
- ```
14
+
15
+ ## Services and Providers
16
+
17
+ * [Database](#database): generic `DATABASE_URL`.
18
+ * [memcached](#memcached): MemCachier.
19
+ * [MongoDB](#mongodb): MongoHQ, MongoLab.
20
+ * [Redis](#redis): openredis, RedisCloud, RedisGreen, Redis To Go.
21
+ * [SMTP](#smtp): generic, Mailgun, Mandrill, Postmark, Sendgrid.
22
+
23
+
24
+ ## Examples
25
+
26
+ Given the following ENV vars:
27
+
28
+ ```sh
13
29
  POSTMARK_SMTP_SERVER="smtp.example.org"
14
30
  POSTMARK_API_KEY="bcca0a78abbaed6533f3c8017b804bda"
31
+ MONGOHQ_URL="mongodb://user:pass@mongo.example.com:2468/stack618"
15
32
  ```
16
33
 
17
- Then envconfig's SMTP configuration will look like this:
34
+ Envconfig will look like this:
18
35
 
19
36
  ```ruby
20
- Envconfig.load.smtp.to_h # =>
21
- {
37
+ config = Envconfig.load
38
+
39
+ # Individual keys:
40
+ config.smtp[:address] # => "smtp.example.org"
41
+ config.mongodb[:host] # => "mongo.example.com"
42
+
43
+ # Service configuration:
44
+ config.smtp.to_h # => {
22
45
  port: "25",
23
46
  authentication: :plain,
24
47
  address: "smtp.example.org",
25
48
  user_name: "bcca0a78abbaed6533f3c8017b804bda",
26
49
  password: "bcca0a78abbaed6533f3c8017b804bda"
27
50
  }
51
+ config.mongodb.to_h # => {
52
+ url: "mongodb://user:pass@mongo.example.com:2468/stack618",
53
+ database: "stack618",
54
+ username: "user",
55
+ password: "pass",
56
+ host: "mongo.example.com",
57
+ port: 2468
58
+ }
28
59
  ```
29
60
 
30
- And `ActionMailer` will be auto-configured accordingly.
61
+ And if you're using Rails, ActionMailer will be automatically configured
62
+ to use those SMTP details via `Rails.application.config.action_mailer.smtp_settings`.
31
63
 
32
64
 
33
65
  ## Installation
@@ -39,16 +71,22 @@ or `gem install envconfig`.
39
71
 
40
72
  ## Usage
41
73
 
42
- Add `envconfig-rails` to your `Gemfile` and go.
74
+ ### envconfig
43
75
 
44
- If you're not using Rails, add the base `envconfig` gem, and access the
45
- configuration like this:
76
+ The `envconfig` gem exposes your `ENV` configuration as a consistent interface,
77
+ using its knowledge of many add-on providers.
46
78
 
47
79
  ```ruby
48
80
  Envconfig.load.smtp[:address] => "example.org"
49
81
  Envconfig.load.smtp.to_h # => {address: "example.org", ...}
50
82
  ```
51
83
 
84
+ ### envconfig-rails
85
+
86
+ The `envconfig-rails` gem adds Rails integration, pushing certain configuration
87
+ into the Rails application where it makes sense. Currently this is limited to
88
+ configuring ActionMailer for SMTP; feel free to open issues discussing others.
89
+
52
90
 
53
91
  ## Supported Add-ons
54
92
 
@@ -121,6 +159,28 @@ Envconfig.load.memcached.to_h # =>
121
159
  ```
122
160
 
123
161
 
162
+ ### MongoDB
163
+
164
+ * MongoHQ ([Broadstack](https://broadstack.com/addons/mongohq), [Heroku](https://addons.heroku.com/mongohq))
165
+ * MongoLab ([Heroku](https://addons.heroku.com/mongolab))
166
+
167
+ MongoDB example:
168
+
169
+ ```ruby
170
+ ENV["MONGOHQ_URL"] = "mongodb://user:pass@mhq.example.org:2468/stack618"
171
+
172
+ Envconfig.load.mongodb.to_h # =>
173
+ {
174
+ url: "mongodb://user:secret@mhq.example.org:2468/stack618",
175
+ username: "user",
176
+ password: "secret",
177
+ host: "mhq.example.org",
178
+ port: 2468,
179
+ database: "stack618"
180
+ }
181
+ ```
182
+
183
+
124
184
  ### Redis
125
185
 
126
186
  * openredis ([Heroku](https://addons.heroku.com/openredis))
@@ -156,3 +216,6 @@ Envconfig.load.redis.to_h # =>
156
216
  [backing_services]: http://12factor.net/backing-services
157
217
  [broadstack]: https://broadstack.com
158
218
  [heroku_addons]: https://addons.heroku.com/
219
+ [12factor]: http://12factor.net/
220
+ [12config]: http://12factor.net/config
221
+ [12bs]: http://12factor.net/backing-services
@@ -4,6 +4,7 @@ require "envconfig/url_parser"
4
4
 
5
5
  require "envconfig/database"
6
6
  require "envconfig/memcached"
7
+ require "envconfig/mongodb"
7
8
  require "envconfig/redis"
8
9
  require "envconfig/smtp"
9
10
 
@@ -26,6 +27,7 @@ module Envconfig
26
27
  [
27
28
  :database,
28
29
  :memcached,
30
+ :mongodb,
29
31
  :redis,
30
32
  :smtp,
31
33
  ].inject({}) do |hash, service|
@@ -49,6 +51,14 @@ module Envconfig
49
51
  predicate_for(:memcached)
50
52
  end
51
53
 
54
+ def mongodb
55
+ service_for(:mongodb, Mongodb)
56
+ end
57
+
58
+ def mongodb?
59
+ predicate_for(:mongodb)
60
+ end
61
+
52
62
  def redis
53
63
  service_for(:redis, Redis)
54
64
  end
@@ -0,0 +1,44 @@
1
+ module Envconfig
2
+ class Mongodb
3
+
4
+ include Service
5
+
6
+ def self.providers
7
+ [
8
+ Mongohq,
9
+ Mongolab,
10
+ ]
11
+ end
12
+
13
+ module ConfigFilter
14
+ def filter_config(config)
15
+ url = UrlParser.new(config[:url])
16
+ parts = url.extract_as(
17
+ database: ->(u){ (u.path || "").split("/")[1] },
18
+ username: :user,
19
+ password: :password,
20
+ host: :host,
21
+ port: :port,
22
+ )
23
+ config.merge!(parts).merge!(url.query_values)
24
+ end
25
+ end
26
+
27
+ class Mongohq
28
+ include Provider
29
+ include ConfigFilter
30
+ def mapping
31
+ {url: "MONGOHQ_URL"}
32
+ end
33
+ end
34
+
35
+ class Mongolab
36
+ include Provider
37
+ include ConfigFilter
38
+ def mapping
39
+ {url: "MONGOLAB_URI"}
40
+ end
41
+ end
42
+
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module Envconfig
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe "MongoDB configuration" do
4
+
5
+ let(:env) { {} }
6
+ let(:config) { Envconfig.load(env).mongodb }
7
+
8
+ context "with nothing relevant in ENV" do
9
+ it_behaves_like "empty configuration"
10
+ end
11
+
12
+ %w{
13
+ MONGOHQ_URL
14
+ MONGOLAB_URI
15
+ }.each do |env_key|
16
+ it_behaves_like "mongodb configuration", env_key
17
+ end
18
+
19
+ end
@@ -10,6 +10,7 @@ describe Envconfig::Root do
10
10
  service_methods = [
11
11
  :database,
12
12
  :memcached,
13
+ :mongodb,
13
14
  :redis,
14
15
  :smtp,
15
16
  ]
@@ -43,6 +44,7 @@ describe Envconfig::Root do
43
44
  expect(root.to_h).to eq(
44
45
  database: {},
45
46
  memcached: {},
47
+ mongodb: {},
46
48
  redis: {},
47
49
  smtp: {},
48
50
  )
@@ -100,6 +102,8 @@ describe Envconfig::Root do
100
102
  password: "mcpass",
101
103
  server_strings: ["mc.example.org:11211"]
102
104
  },
105
+ mongodb: {
106
+ },
103
107
  redis: {
104
108
  url: "redis://:orpass@or.example.org:2345",
105
109
  host: "or.example.org",
@@ -17,7 +17,7 @@ shared_examples "empty configuration" do
17
17
  end
18
18
 
19
19
  shared_examples "redis configuration" do |env_key|
20
- context "with openredis in ENV" do
20
+ context "with #{env_key} in ENV" do
21
21
  before do
22
22
  env[env_key] = "redis://:secrettoken@127.0.0.1:1234"
23
23
  end
@@ -35,3 +35,26 @@ shared_examples "redis configuration" do |env_key|
35
35
  end
36
36
  end
37
37
  end
38
+
39
+ shared_examples "mongodb configuration" do |env_key|
40
+ context "with #{env_key} in ENV" do
41
+ before do
42
+ env[env_key] = "mongodb://user:pass@example.org:2468/db?a=b&c=d"
43
+ end
44
+
45
+ {
46
+ url: "mongodb://user:pass@example.org:2468/db?a=b&c=d",
47
+ database: "db",
48
+ username: "user",
49
+ password: "pass",
50
+ host: "example.org",
51
+ port: 2468,
52
+ a: "b",
53
+ c: "d",
54
+ }.each do |key, value|
55
+ it "sets :#{key} to #{value.inspect}" do
56
+ expect(config[key]).to eq(value)
57
+ end
58
+ end
59
+ end
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envconfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Annesley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-16 00:00:00.000000000 Z
11
+ date: 2013-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - lib/envconfig.rb
73
73
  - lib/envconfig/database.rb
74
74
  - lib/envconfig/memcached.rb
75
+ - lib/envconfig/mongodb.rb
75
76
  - lib/envconfig/provider.rb
76
77
  - lib/envconfig/railtie.rb
77
78
  - lib/envconfig/redis.rb
@@ -82,6 +83,7 @@ files:
82
83
  - spec/database_spec.rb
83
84
  - spec/envconfig_spec.rb
84
85
  - spec/memcached_spec.rb
86
+ - spec/mongodb_spec.rb
85
87
  - spec/provider_resolver_spec.rb
86
88
  - spec/redis_spec.rb
87
89
  - spec/root_spec.rb
@@ -109,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
111
  version: '0'
110
112
  requirements: []
111
113
  rubyforge_project:
112
- rubygems_version: 2.1.2
114
+ rubygems_version: 2.0.3
113
115
  signing_key:
114
116
  specification_version: 4
115
117
  summary: Connect your app to backing services via Broadstack/Heroku-style ENV vars.
@@ -117,6 +119,7 @@ test_files:
117
119
  - spec/database_spec.rb
118
120
  - spec/envconfig_spec.rb
119
121
  - spec/memcached_spec.rb
122
+ - spec/mongodb_spec.rb
120
123
  - spec/provider_resolver_spec.rb
121
124
  - spec/redis_spec.rb
122
125
  - spec/root_spec.rb
@@ -124,4 +127,3 @@ test_files:
124
127
  - spec/smtp_spec.rb
125
128
  - spec/spec_helper.rb
126
129
  - spec/url_parser_spec.rb
127
- has_rdoc: