app-config 0.1.1 → 0.1.2
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/.travis.yml +6 -0
- data/README.md +155 -0
- data/app-config.gemspec +7 -9
- data/lib/app-config.rb +2 -3
- data/lib/app-config/app-config.rb +4 -2
- data/lib/app-config/errors.rb +4 -4
- data/lib/app-config/version.rb +4 -2
- metadata +6 -5
- data/README.rdoc +0 -113
data/.travis.yml
ADDED
data/README.md
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
# AppConfig
|
2
|
+
|
3
|
+
AppConfig is a library to manage your (web) application dynamic settings with flexible access and configuration strategy.
|
4
|
+
|
5
|
+
Primary datasource for AppConfig is an ActiveRecord model.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
via rubygems:
|
10
|
+
|
11
|
+
gem install app-config
|
12
|
+
|
13
|
+
via github:
|
14
|
+
|
15
|
+
git clone git://github.com/sosedoff/app-config.git
|
16
|
+
cd app-config
|
17
|
+
gem build
|
18
|
+
gem install app-config-x.y.z.gem
|
19
|
+
|
20
|
+
## Supported platforms
|
21
|
+
|
22
|
+
- Ruby 1.8.7
|
23
|
+
- Ruby EE 1.8.7
|
24
|
+
- Ruby 1.9.2
|
25
|
+
|
26
|
+
## Data Formats
|
27
|
+
|
28
|
+
You can use following formats:
|
29
|
+
- String
|
30
|
+
- Boolean
|
31
|
+
- Array
|
32
|
+
- Hash
|
33
|
+
|
34
|
+
String format is a default format. Everything is a string by default.
|
35
|
+
|
36
|
+
Boolean format is just a flag, values 'true', 'on', 'yes', 'y', '1' are equal to True. Everything else is False.
|
37
|
+
|
38
|
+
Array format is a multiline text which is transformed into array. Each evelemnt will be trimmed. Empty strings are ignored.
|
39
|
+
|
40
|
+
Hash format is special key-value string, "foo: bar, user: username", which is transformed into Hash instance.
|
41
|
+
Only format "keyname: value, keyname2: value2" is supported. No nested hashes allowed.
|
42
|
+
|
43
|
+
## Usage
|
44
|
+
|
45
|
+
AppConfig is designed to work with ActiveRecord model. Only ActiveRecord >= 3.0.0 is supported.
|
46
|
+
|
47
|
+
By default model "Setting" will be used as a data source.
|
48
|
+
|
49
|
+
### Setup
|
50
|
+
|
51
|
+
In order to use AppConfig you should have a source table, similar to this:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
class CreateSettings < ActiveRecord::Migration
|
55
|
+
def self.up
|
56
|
+
create_table :settings do |t|
|
57
|
+
t.string :keyname, :null => false, :limit => 64
|
58
|
+
t.text :value, :null => false
|
59
|
+
t.string :value_format, :limit => 64, :default => "string"
|
60
|
+
t.string :name, :limit => 64
|
61
|
+
t.string :description, :limit => 512
|
62
|
+
t.timestamps
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.down
|
67
|
+
drop_table :settings
|
68
|
+
end
|
69
|
+
end
|
70
|
+
```
|
71
|
+
|
72
|
+
Required columns are:
|
73
|
+
|
74
|
+
- keyname
|
75
|
+
- value
|
76
|
+
- value_format
|
77
|
+
|
78
|
+
Columns **:name** and **:description** are optional and used only for informative purpose (ex: show name and description in admin panel).
|
79
|
+
|
80
|
+
There is no need in indexes since the data is being loaded only once on application start.
|
81
|
+
|
82
|
+
Simple model with validations should look like this:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
class Setting < ActiveRecord::Base
|
86
|
+
validates_presence_of :keyname, :value
|
87
|
+
validates_uniqueness_of :keyname
|
88
|
+
end
|
89
|
+
```
|
90
|
+
|
91
|
+
### Configuration
|
92
|
+
|
93
|
+
Default configuration method is:
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
AppConfig.configure
|
97
|
+
```
|
98
|
+
|
99
|
+
If your settings model has a different schema, you can redefine columns:
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
AppConfig.configure(
|
103
|
+
:model => Setting, # model class name as source
|
104
|
+
:key => 'KEYNAME_FIELD', # field that contains name
|
105
|
+
:format => 'FORMAT_FIELD', # field that contains key format
|
106
|
+
:value => 'VALUE_FIELD', # field that contains value data
|
107
|
+
)
|
108
|
+
```
|
109
|
+
|
110
|
+
Load all settings somewhere in your application. In Rails it should be initializer file.
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
AppConfig.load
|
114
|
+
```
|
115
|
+
|
116
|
+
Configuration in Rails 3: (you can put this into environment/ENV or application.rb)
|
117
|
+
Make sure your application does not have any critical parts depending on AppConfig at startup.
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
config.after_initialize do
|
121
|
+
AppConfig.configure(:model => Setting)
|
122
|
+
AppConfig.load if Setting.table_exists?
|
123
|
+
end
|
124
|
+
```
|
125
|
+
|
126
|
+
AppConfig gives you 3 ways to access variables:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
AppConfig.my_setting # method-like
|
130
|
+
AppConfig[:my_setting] # hash-like by symbol key
|
131
|
+
AppConfig['my_setting'] # hash-like by string key
|
132
|
+
```
|
133
|
+
|
134
|
+
You can define settings items manually.
|
135
|
+
**NOTE:** *THESE KEYS WILL BE REMOVED ON RELOAD/LOAD.*
|
136
|
+
|
137
|
+
```ruby
|
138
|
+
AppConfig.set_key('KEYNAME', 'VALUE', 'FORMAT')
|
139
|
+
```
|
140
|
+
|
141
|
+
Everytime you change your settings on the fly, use reload:
|
142
|
+
|
143
|
+
```ruby
|
144
|
+
AppConfig.reload
|
145
|
+
```
|
146
|
+
|
147
|
+
Cleanup everything:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
AppConfig.flush
|
151
|
+
```
|
152
|
+
|
153
|
+
## Copyright
|
154
|
+
|
155
|
+
Copyright (c) 2011 Dan Sosedoff.
|
data/app-config.gemspec
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
require File.expand_path('../lib/app-config/version', __FILE__)
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
@@ -10,18 +11,15 @@ Gem::Specification.new do |s|
|
|
10
11
|
s.email = ["dan.sosedoff@gmail.com"]
|
11
12
|
s.license = "MIT"
|
12
13
|
|
13
|
-
s.add_development_dependency 'rake', '~> 0.8'
|
14
|
-
s.add_development_dependency 'rspec', '~> 2.6'
|
15
|
-
s.add_development_dependency 'simplecov', '~> 0.4'
|
16
|
-
s.add_development_dependency 'sqlite3', '~> 1.3'
|
17
|
-
|
18
|
-
s.add_runtime_dependency 'activerecord', '~> 3.0.0'
|
19
|
-
|
20
14
|
s.files = `git ls-files`.split("\n")
|
21
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
|
23
17
|
s.require_paths = ["lib"]
|
24
18
|
|
25
|
-
s.
|
26
|
-
s.
|
19
|
+
s.add_development_dependency 'rake', '~> 0.8'
|
20
|
+
s.add_development_dependency 'rspec', '~> 2.6'
|
21
|
+
s.add_development_dependency 'simplecov', '~> 0.4'
|
22
|
+
s.add_development_dependency 'sqlite3', '~> 1.3'
|
23
|
+
|
24
|
+
s.add_runtime_dependency 'activerecord', '~> 3.0'
|
27
25
|
end
|
data/lib/app-config.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
1
3
|
module AppConfig
|
2
4
|
extend AppConfig::Processor
|
3
5
|
|
@@ -96,8 +98,8 @@ module AppConfig
|
|
96
98
|
|
97
99
|
# Fetch data from model
|
98
100
|
def self.fetch
|
99
|
-
raise InvalidSource, 'Model is not defined!'
|
100
|
-
raise InvalidSource, 'Model was not found!'
|
101
|
+
raise InvalidSource, 'Model is not defined!' if @@options[:model].nil?
|
102
|
+
raise InvalidSource, 'Model was not found!' unless @@options[:model].superclass == ActiveRecord::Base
|
101
103
|
raise InvalidSource, 'Model fields are invalid!' unless check_structure
|
102
104
|
|
103
105
|
records = {}
|
data/lib/app-config/errors.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module AppConfig
|
2
|
-
class InvalidType <
|
3
|
-
class InvalidKeyName <
|
4
|
-
class InvalidSource <
|
5
|
-
class UndefinedKey <
|
2
|
+
class InvalidType < RuntimeError ; end
|
3
|
+
class InvalidKeyName < RuntimeError ; end
|
4
|
+
class InvalidSource < RuntimeError ; end
|
5
|
+
class UndefinedKey < RuntimeError ; end
|
6
6
|
end
|
data/lib/app-config/version.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: app-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Dan Sosedoff
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-08-05 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.0
|
68
|
+
version: "3.0"
|
69
69
|
type: :runtime
|
70
70
|
version_requirements: *id005
|
71
71
|
description: Flexible and simple configuration settings for your Rails/Sinatra applications.
|
@@ -80,9 +80,10 @@ extra_rdoc_files: []
|
|
80
80
|
files:
|
81
81
|
- .gitignore
|
82
82
|
- .rspec
|
83
|
+
- .travis.yml
|
83
84
|
- Gemfile
|
84
85
|
- LICENSE.txt
|
85
|
-
- README.
|
86
|
+
- README.md
|
86
87
|
- Rakefile
|
87
88
|
- app-config.gemspec
|
88
89
|
- lib/app-config.rb
|
@@ -114,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
115
|
requirements:
|
115
116
|
- - ">="
|
116
117
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
118
|
+
version: "0"
|
118
119
|
requirements: []
|
119
120
|
|
120
121
|
rubyforge_project:
|
data/README.rdoc
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
= AppConfig
|
2
|
-
|
3
|
-
AppConfig is a library to manage your (web) application dynamic settings with flexible access and configuration strategy.
|
4
|
-
|
5
|
-
Primary datasource for AppConfig is an ActiveRecord model.
|
6
|
-
|
7
|
-
== Installation
|
8
|
-
|
9
|
-
via rubygems:
|
10
|
-
|
11
|
-
gem install app-config
|
12
|
-
|
13
|
-
via github:
|
14
|
-
|
15
|
-
git clone git://github.com/sosedoff/app-config.git
|
16
|
-
cd app-config
|
17
|
-
gem build
|
18
|
-
gem install app-config-x.y.z.gem
|
19
|
-
|
20
|
-
== Supported platforms
|
21
|
-
|
22
|
-
- Ruby 1.8.7
|
23
|
-
- Ruby REE 1.8.7
|
24
|
-
- Ruby 1.9.2
|
25
|
-
|
26
|
-
== Data Formats
|
27
|
-
|
28
|
-
You can use following formats:
|
29
|
-
- String
|
30
|
-
- Boolean
|
31
|
-
- Array
|
32
|
-
- Hash
|
33
|
-
|
34
|
-
String format is a default format. Everything is a string by default.
|
35
|
-
|
36
|
-
Boolean format is just a flag, values 'true', 'on', 'yes', 'y', '1' are equal to True. Everything else is False.
|
37
|
-
|
38
|
-
Array format is a multiline text which is transformed into array. Each evelemnt will be trimmed. Empty strings are ignored.
|
39
|
-
|
40
|
-
Hash format is special key-value string, "foo: bar, user: username", which is transformed into Hash instance.
|
41
|
-
Only format "keyname: value, keyname2: value2" is supported. No nested hashes allowed.
|
42
|
-
|
43
|
-
== Usage
|
44
|
-
|
45
|
-
AppConfig is designed to work with ActiveRecord model. Only ActiveRecord >= 3.0.0 is supported.
|
46
|
-
|
47
|
-
By default model "Setting" will be used as a data source.
|
48
|
-
|
49
|
-
Default migration:
|
50
|
-
|
51
|
-
class CreateSettings < ActiveRecord::Migration
|
52
|
-
def self.up
|
53
|
-
create_table :settings do |t|
|
54
|
-
t.string :keyname, :null => false, :limit => 64
|
55
|
-
t.string :name, :null => false, :limit => 64
|
56
|
-
t.text :value, :null => false
|
57
|
-
t.string :value_format, :limit => 64, :default => "string"
|
58
|
-
t.string :description, :limit => 512, :null => false
|
59
|
-
t.timestamps
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.down
|
64
|
-
drop_table :settings
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
Now, configure:
|
69
|
-
|
70
|
-
AppConfig.configure
|
71
|
-
|
72
|
-
If your settings model has a different schema, you can redefine columns:
|
73
|
-
|
74
|
-
AppConfig.configure(
|
75
|
-
:model => Setting, # define your model as a source
|
76
|
-
:key => 'KEYNAME_FIELD', # field that contains name
|
77
|
-
:format => 'FORMAT_FIELD', # field that contains key format
|
78
|
-
:value => 'VALUE_FIELD', #field that contains value data
|
79
|
-
)
|
80
|
-
|
81
|
-
Load all settings somewhere in your application. In Rails it should be initializer file.
|
82
|
-
|
83
|
-
AppConfig.load
|
84
|
-
|
85
|
-
Configuration in Rails 3: (you can put this into environment/ENV or application.rb)
|
86
|
-
Make sure your application does not have any critical parts depending on AppConfig at startup.
|
87
|
-
|
88
|
-
config.after_initialize do
|
89
|
-
AppConfig.configure(:model => Setting)
|
90
|
-
AppConfig.load if Setting.table_exists?
|
91
|
-
end
|
92
|
-
|
93
|
-
AppConfig gives you 3 ways to access variables:
|
94
|
-
|
95
|
-
AppConfig.my_setting # method-like
|
96
|
-
AppConfig[:my_setting] # hash-like by symbol key
|
97
|
-
AppConfig['my_setting'] # hash-like by string key
|
98
|
-
|
99
|
-
You can define settings items manually. NOTE: THESE KEYS WILL BE REMOVED ON RELOAD/LOAD.
|
100
|
-
|
101
|
-
AppConfig.set('KEYNAME, 'VALUE', 'FORMAT')
|
102
|
-
|
103
|
-
Everytime you change your settings on the fly, use reload:
|
104
|
-
|
105
|
-
AppConfig.reload
|
106
|
-
|
107
|
-
Cleanup everything:
|
108
|
-
|
109
|
-
AppConfig.flush
|
110
|
-
|
111
|
-
== Copyright
|
112
|
-
|
113
|
-
Copyright (c) 2011 Dan Sosedoff.
|