konfig 0.1.1 → 0.2.0
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/README.rdoc +3 -3
- data/VERSION +1 -1
- data/konfig.gemspec +8 -3
- data/lib/konfig.rb +6 -1
- data/lib/konfig/adapter.rb +39 -0
- data/lib/konfig/rails/adapters/asset_expansion_adapter.rb +22 -0
- data/lib/konfig/rails/adapters/smtp_adapter.rb +14 -0
- data/lib/konfig/rails/railtie.rb +49 -0
- data/lib/konfig/store.rb +5 -1
- data/test/fixtures/dynamic.yml +3 -3
- data/test/test_adapter.rb +63 -0
- metadata +10 -5
- data/lib/konfig/railtie.rb +0 -19
data/README.rdoc
CHANGED
@@ -13,7 +13,7 @@ Konfig gives you a better, easier way to manage these config files.
|
|
13
13
|
|
14
14
|
It works like this:
|
15
15
|
|
16
|
-
>
|
16
|
+
> mkdir ./config/settings
|
17
17
|
> cat "bar: baz" > ./config/settings/foo.yml
|
18
18
|
> rails console
|
19
19
|
|
@@ -44,7 +44,7 @@ This code has access to all of the data in the template.
|
|
44
44
|
|
45
45
|
one: 1
|
46
46
|
two: 2
|
47
|
-
one_plus_two:
|
47
|
+
one_plus_two: `data[:one] + data[:two]`
|
48
48
|
|
49
49
|
== Helpers
|
50
50
|
|
@@ -59,7 +59,7 @@ You can also access helper methods in your embedded code.
|
|
59
59
|
- ["Blue", "#0000ff"]
|
60
60
|
|
61
61
|
# This returns {"#ff0000" => "Red", ...etc }
|
62
|
-
color_names:
|
62
|
+
color_names: `names_by_value(:colors)`
|
63
63
|
|
64
64
|
|
65
65
|
== Rails 3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/konfig.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{konfig}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Starr Horne"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-28}
|
13
13
|
s.description = %q{ Automatically loads yaml config files and makes them available to your rails app.}
|
14
14
|
s.email = %q{starr@chromahq.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,13 +25,17 @@ Gem::Specification.new do |s|
|
|
25
25
|
"VERSION",
|
26
26
|
"konfig.gemspec",
|
27
27
|
"lib/konfig.rb",
|
28
|
+
"lib/konfig/adapter.rb",
|
28
29
|
"lib/konfig/evaluator.rb",
|
29
30
|
"lib/konfig/helpers.rb",
|
30
|
-
"lib/konfig/
|
31
|
+
"lib/konfig/rails/adapters/asset_expansion_adapter.rb",
|
32
|
+
"lib/konfig/rails/adapters/smtp_adapter.rb",
|
33
|
+
"lib/konfig/rails/railtie.rb",
|
31
34
|
"lib/konfig/store.rb",
|
32
35
|
"test/fixtures/dynamic.yml",
|
33
36
|
"test/fixtures/static.yml",
|
34
37
|
"test/helper.rb",
|
38
|
+
"test/test_adapter.rb",
|
35
39
|
"test/test_evaluator.rb",
|
36
40
|
"test/test_konfig.rb",
|
37
41
|
"test/test_store.rb"
|
@@ -43,6 +47,7 @@ Gem::Specification.new do |s|
|
|
43
47
|
s.summary = %q{Yaml config file manager for rails 3 apps}
|
44
48
|
s.test_files = [
|
45
49
|
"test/helper.rb",
|
50
|
+
"test/test_adapter.rb",
|
46
51
|
"test/test_evaluator.rb",
|
47
52
|
"test/test_konfig.rb",
|
48
53
|
"test/test_store.rb"
|
data/lib/konfig.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'konfig/evaluator'
|
2
2
|
require 'konfig/store'
|
3
|
+
require 'konfig/adapter'
|
3
4
|
|
4
5
|
if defined?(::Rails::Railtie)
|
5
|
-
require 'konfig/railtie'
|
6
|
+
require 'konfig/rails/railtie'
|
6
7
|
end
|
7
8
|
|
8
9
|
# Provides a global accessor for configuration.
|
@@ -29,4 +30,8 @@ module Konfig
|
|
29
30
|
(@default_store || self).inspect
|
30
31
|
end
|
31
32
|
|
33
|
+
def self.default_store
|
34
|
+
@default_store
|
35
|
+
end
|
36
|
+
|
32
37
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
module Konfig
|
3
|
+
|
4
|
+
# All adapters are subclassed from Konfig::Adapter
|
5
|
+
class Adapter
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def inherited(child_class)
|
10
|
+
children << child_class
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get all child classes
|
14
|
+
# @return [Array] an array of child classes
|
15
|
+
def children
|
16
|
+
@children ||= []
|
17
|
+
end
|
18
|
+
|
19
|
+
# Remove child classes from registry
|
20
|
+
def clear_children
|
21
|
+
@children = []
|
22
|
+
end
|
23
|
+
|
24
|
+
# Evokes the send method on all child classes,
|
25
|
+
# and passes the args along
|
26
|
+
def send_to_children(*args)
|
27
|
+
children.each { |c| c.send(*args) }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Instanciates all child classes and envokes
|
31
|
+
# a method via obj.send
|
32
|
+
def create_and_send_to_children(*args)
|
33
|
+
children.each { |c| c.new.send(*args) }
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Konfig
|
2
|
+
class AssetExpansionAdapter < Adapter
|
3
|
+
def adapt(data)
|
4
|
+
javascripts(data)
|
5
|
+
stylesheets(data)
|
6
|
+
end
|
7
|
+
|
8
|
+
def javascripts(data)
|
9
|
+
return unless (d = data[:_javascript_expansions])
|
10
|
+
ActionView::Helpers::AssetTagHelper.register_javascript_expansion(d)
|
11
|
+
c = d[:_adapted] = true
|
12
|
+
Rails.logger.info "[Konfig] Loaded javascript expansions"
|
13
|
+
end
|
14
|
+
|
15
|
+
def stylesheets(data)
|
16
|
+
return unless (d = data[:_stylesheet_expansions])
|
17
|
+
ActionView::Helpers::AssetTagHelper.register_stylesheet_expansion(d)
|
18
|
+
c = d[:_adapted] = true
|
19
|
+
Rails.logger.info "[Konfig] Loaded stylesheet expansions"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Konfig
|
2
|
+
class SmtpAdapter < Adapter
|
3
|
+
def adapt(data)
|
4
|
+
begin
|
5
|
+
c = data[:_smtp][Rails.env]
|
6
|
+
ActionMailer::Base.smtp_settings = c.symbolize_keys
|
7
|
+
|
8
|
+
c = data[:_smtp][:_adapted] = true
|
9
|
+
Rails.logger.info "[Konfig] Loaded SMTP setting"
|
10
|
+
rescue
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'konfig'
|
2
|
+
require 'rails'
|
3
|
+
|
4
|
+
|
5
|
+
module Konfig
|
6
|
+
|
7
|
+
# @return [String] returns the path where config files are located
|
8
|
+
def self.path
|
9
|
+
@path = File.join(Rails.root, "config", "settings")
|
10
|
+
end
|
11
|
+
|
12
|
+
class InitializeKonfig < Rails::Railtie
|
13
|
+
initializer "initialize_konfig.configure_rails_initialization" do
|
14
|
+
|
15
|
+
path = Konfig.path
|
16
|
+
|
17
|
+
if File.directory?(path)
|
18
|
+
load_settings(path)
|
19
|
+
else
|
20
|
+
Rails.logger.warn "[Konfig Warning] Unable to access #{ path }. Please make sure the directory exists and has the correct permissions."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Set up the Konfig system
|
27
|
+
# @param [String] path the path to the directory containing config files
|
28
|
+
def load_settings(path)
|
29
|
+
|
30
|
+
# Load the data files
|
31
|
+
Konfig.load_directory(path)
|
32
|
+
|
33
|
+
# Load all adapters
|
34
|
+
built_in_adapters = File.join(File.dirname(__FILE__), 'adapters', '*.rb')
|
35
|
+
require_all built_in_adapters
|
36
|
+
|
37
|
+
user_adapters = File.join(path, 'adapters', '*_adapter.rb')
|
38
|
+
require_all user_adapters
|
39
|
+
|
40
|
+
# Apply the adapters to the data
|
41
|
+
Adapter.create_and_send_to_children :adapt, Konfig.default_store.data
|
42
|
+
end
|
43
|
+
|
44
|
+
def require_all(path)
|
45
|
+
Dir[path].each { |file| require file }
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
data/lib/konfig/store.rb
CHANGED
@@ -46,13 +46,17 @@ module Konfig
|
|
46
46
|
@data.inspect
|
47
47
|
end
|
48
48
|
|
49
|
+
def data
|
50
|
+
@data
|
51
|
+
end
|
52
|
+
|
49
53
|
protected
|
50
54
|
|
51
55
|
def process(piece, evaluator)
|
52
56
|
piece.each do |k, v|
|
53
57
|
if v.is_a?(Hash)
|
54
58
|
piece[k] = process(v, evaluator)
|
55
|
-
elsif v.is_a?(String) && v.strip =~ /\A
|
59
|
+
elsif v.is_a?(String) && v.strip =~ /\A`(.*)`\z/
|
56
60
|
piece[k] = evaluator.run($1)
|
57
61
|
end
|
58
62
|
end
|
data/test/fixtures/dynamic.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
one_plus_one:
|
1
|
+
one_plus_one: ` 1 + 1 `
|
2
2
|
five: 5
|
3
3
|
six: 6
|
4
|
-
five_times_six:
|
4
|
+
five_times_six: ` data[:five] * data['six'] `
|
5
5
|
|
6
6
|
parent:
|
7
7
|
child: 5
|
8
|
-
child_plus_one:
|
8
|
+
child_plus_one: ` data[:parent][:child] + 1 `
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestEvaluator < Test::Unit::TestCase
|
4
|
+
|
5
|
+
Konfig::Adapter.clear_children
|
6
|
+
|
7
|
+
context "Adapter with two subclasses" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
|
11
|
+
class FirstAdapter < Konfig::Adapter
|
12
|
+
|
13
|
+
def instance_append(value)
|
14
|
+
value << 9
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.append(value)
|
18
|
+
value << 2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class SecondAdapter < Konfig::Adapter
|
23
|
+
|
24
|
+
def instance_append(value)
|
25
|
+
value << 8
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.append(value)
|
29
|
+
value << 4
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should "have two registered subclasses" do
|
35
|
+
assert_equal 2, Konfig::Adapter.children.size
|
36
|
+
end
|
37
|
+
|
38
|
+
should "have the correct subclasses in registry" do
|
39
|
+
assert_equal FirstAdapter, Konfig::Adapter.children[0]
|
40
|
+
assert_equal SecondAdapter, Konfig::Adapter.children[1]
|
41
|
+
end
|
42
|
+
|
43
|
+
should "not have bleed over to child classes" do
|
44
|
+
assert_equal 0, FirstAdapter.children.size
|
45
|
+
assert_equal 0, SecondAdapter.children.size
|
46
|
+
end
|
47
|
+
|
48
|
+
should "be able to send method calls to children" do
|
49
|
+
values = []
|
50
|
+
Konfig::Adapter.send_to_children(:append, values)
|
51
|
+
assert_equal [2, 4], values
|
52
|
+
end
|
53
|
+
|
54
|
+
should "be able to instanciate all children, and send" do
|
55
|
+
values = []
|
56
|
+
Konfig::Adapter.create_and_send_to_children(:instance_append, values)
|
57
|
+
assert_equal [9, 8], values
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Starr Horne
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-28 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -47,13 +47,17 @@ files:
|
|
47
47
|
- VERSION
|
48
48
|
- konfig.gemspec
|
49
49
|
- lib/konfig.rb
|
50
|
+
- lib/konfig/adapter.rb
|
50
51
|
- lib/konfig/evaluator.rb
|
51
52
|
- lib/konfig/helpers.rb
|
52
|
-
- lib/konfig/
|
53
|
+
- lib/konfig/rails/adapters/asset_expansion_adapter.rb
|
54
|
+
- lib/konfig/rails/adapters/smtp_adapter.rb
|
55
|
+
- lib/konfig/rails/railtie.rb
|
53
56
|
- lib/konfig/store.rb
|
54
57
|
- test/fixtures/dynamic.yml
|
55
58
|
- test/fixtures/static.yml
|
56
59
|
- test/helper.rb
|
60
|
+
- test/test_adapter.rb
|
57
61
|
- test/test_evaluator.rb
|
58
62
|
- test/test_konfig.rb
|
59
63
|
- test/test_store.rb
|
@@ -89,6 +93,7 @@ specification_version: 3
|
|
89
93
|
summary: Yaml config file manager for rails 3 apps
|
90
94
|
test_files:
|
91
95
|
- test/helper.rb
|
96
|
+
- test/test_adapter.rb
|
92
97
|
- test/test_evaluator.rb
|
93
98
|
- test/test_konfig.rb
|
94
99
|
- test/test_store.rb
|
data/lib/konfig/railtie.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'konfig'
|
2
|
-
require 'rails'
|
3
|
-
|
4
|
-
module Konfig
|
5
|
-
class InitializeKonfig < Rails::Railtie
|
6
|
-
initializer "initialize_konfig.configure_rails_initialization" do
|
7
|
-
|
8
|
-
path = File.join(Rails.root, "config", "settings")
|
9
|
-
Konfig.load_directory(path)
|
10
|
-
|
11
|
-
begin
|
12
|
-
c = Konfig[:email][:smtp][Rails.env]
|
13
|
-
ActionMailer::Base.smtp_settings = c.symbolize_keys
|
14
|
-
rescue
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|