conferred 0.0.1 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 74cdb870ec36b40a9ad371cea4a3185b425e26a5
4
- data.tar.gz: 8366467352a259c984fbafdd76388447c2fea3b7
3
+ metadata.gz: d37687a4734e2bbd21bc79d368a6a69510027223
4
+ data.tar.gz: 50bab863bc36a9e863d641db70f19f98ae2a39c3
5
5
  SHA512:
6
- metadata.gz: 1129869d03ba0f50789a2f2ca63d5e08790f19a6e2c541ab2c3aad2bf4ef1201263da0ab5af1c0e4dc75dd864d8852ac5a73e53a2f745810bb6876897be73f2c
7
- data.tar.gz: 315f7a2cadb86af6fc08f44d29d72ac481aa6f473b40ee27ba59ae7f7749f7501b0ba758a0658a25f2cf3f3dfb61bfecec893cd579f669315e619c1db9b76911
6
+ metadata.gz: 470ce41582ee20909870f7b9516bf8391e9316f1b9114bfc71992e33530cf3fd9a02063b3eb3443c2595629673632ecc14a186682ab1bd88409b58a7e45fddae
7
+ data.tar.gz: 60dab8126270cf4f7ed233d7e1317dda111e20998b90ef201b6eee6ef98ba5d426e1e17885339d0646e56b6a26108d9ac88cbdba1635e0c3182af7490b573d69
data/README.rdoc CHANGED
@@ -23,6 +23,12 @@ to access the environment use:
23
23
  # returns ENV['GMAIL_USER'] if it has a non blank value
24
24
  # otherwise raises an error
25
25
 
26
+ to access etcd settings
27
+
28
+ Conferred.provider = :etcd
29
+ Conferred.namespace = :my_app
30
+ Conferred.gmail_user
31
+ # returns the value of etcd key at "http://localhost:2379/v2/keys/:my_app/gmail_user"
26
32
 
27
33
 
28
34
  == Contributing to conferred
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.1
data/conferred.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: conferred 0.0.1 ruby lib
5
+ # stub: conferred 0.1.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "conferred"
9
- s.version = "0.0.1"
9
+ s.version = "0.1.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Ian Kenney"]
14
- s.date = "2014-06-25"
14
+ s.date = "2015-11-17"
15
15
  s.description = "inspired by the 12 factor app http://12factor.net/config "
16
16
  s.email = "ian@lostock.co.uk"
17
17
  s.extra_rdoc_files = [
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  ]
35
35
  s.homepage = "http://github.com/ikenney/conferred"
36
36
  s.licenses = ["MIT"]
37
- s.rubygems_version = "2.3.0"
37
+ s.rubygems_version = "2.4.8"
38
38
  s.summary = "manage environment based config settings"
39
39
 
40
40
  if s.respond_to? :specification_version then
data/lib/conferred.rb CHANGED
@@ -1,27 +1,71 @@
1
- class Conferred
1
+ require 'json'
2
2
 
3
+ class Conferred
4
+ @@provider = "env"
3
5
  class << self
6
+ attr_accessor :namespace
7
+
8
+ def provider=(value)
9
+ @@provider=value
10
+ end
11
+
12
+ def provider
13
+ @@provider || "env"
14
+ end
15
+
4
16
  def method_missing(setting, *args, &block)
5
- method = :env_value
6
- method = :env_value? if setting[-1] == "?"
7
- method = :env_value! if setting[-1] == "!"
8
- self.send method, setting
17
+ if setting =~ /#{provider}_setting_value/
18
+ super
19
+ return
20
+ end
21
+ method = :setting_value
22
+ method = :setting_value? if setting[-1] == "?"
23
+ method = :setting_value! if setting[-1] == "!"
24
+ self.send method, setting
9
25
  end
10
26
 
11
- def env_name(method_name)
27
+ def setting_name(method_name)
12
28
  method_name.to_s.chomp("!").chomp("?").upcase
13
29
  end
14
30
 
15
- def env_value(env)
16
- ENV[self.env_name(env)]
31
+ def setting_value(key)
32
+ #raise "iConferred: Undefined provider (#{@@provider})" unless self.responds_to setting_method_name
33
+ self.send(setting_method_name, key)
34
+ end
35
+
36
+ def setting_value?(key)
37
+ self.setting_value(key) != nil
38
+ end
39
+
40
+ def setting_value!(key)
41
+ self.setting_value(key) || raise("#{self.setting_name(key)} missing from environment")
42
+ end
43
+
44
+ private
45
+
46
+ def env_setting_value(key)
47
+ ENV[self.setting_name(key)]
48
+ end
49
+
50
+ def etcd_setting_value(key)
51
+ begin
52
+ resp = JSON.parse(Net::HTTP.get(etcd_setting_endpoint(key)))
53
+ resp["node"]["value"]
54
+ rescue
55
+ ""
56
+ end
57
+ end
58
+
59
+ def etcd_setting_endpoint(key)
60
+ URI("http://localhost:2379/#{etcd_setting_namespace}#{key}")
17
61
  end
18
62
 
19
- def env_value?(env)
20
- self.env_value(env) != nil
63
+ def etcd_setting_namespace
64
+ self.namespace ? "#{self.namespace}/" : ""
21
65
  end
22
66
 
23
- def env_value!(env)
24
- self.env_value(env) || raise("#{self.env_name(env)} missing from environment")
67
+ def setting_method_name
68
+ "#{self.provider}_setting_value".to_sym
25
69
  end
26
70
  end
27
71
  end
@@ -39,4 +39,51 @@ describe "Conferred" do
39
39
  end
40
40
  end
41
41
  end
42
+
43
+
44
+ describe "providers" do
45
+ describe "#provider" do
46
+ it "defaults to 'env'" do
47
+ expect(Conferred.provider).to eq "env"
48
+ end
49
+
50
+ it "raises on missing provider" do
51
+ Conferred.provider = "none"
52
+ expect{Conferred.foo}.to raise_error NoMethodError
53
+ end
54
+
55
+ it "sets a provider" do
56
+ Conferred.provider = "etcd"
57
+ expect(Conferred.provider).to eq "etcd"
58
+ end
59
+ end
60
+
61
+ describe "#namespace" do
62
+ before do
63
+ Conferred.provider = "etcd"
64
+ Conferred.namespace = "section"
65
+ end
66
+
67
+ it "sets a namespace" do
68
+ expect(Conferred.namespace).to eq "section"
69
+ end
70
+
71
+ it "passes the namespace to etcd" do
72
+ expect(Net::HTTP).to receive(:get)
73
+ .with(URI('http://localhost:2379/section/secret'))
74
+ Conferred.secret
75
+ end
76
+ end
77
+
78
+ describe "etcd" do
79
+ it "calls the correct lookup function based on provider" do
80
+ Conferred.provider="etcd"
81
+ Conferred.namespace=nil
82
+ allow(Net::HTTP).to receive(:get)
83
+ .with(URI('http://localhost:2379/secret'))
84
+ .and_return('{"action":"get","node":{"key":"/secret","value":"foo","modifiedIndex":2962,"createdIndex":2962}}')
85
+ expect(Conferred.secret).to eq "foo"
86
+ end
87
+ end
88
+ end
42
89
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conferred
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Kenney
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-25 00:00:00.000000000 Z
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  requirements: []
136
136
  rubyforge_project:
137
- rubygems_version: 2.3.0
137
+ rubygems_version: 2.4.8
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: manage environment based config settings