benry-config 0.1.0 → 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.
- checksums.yaml +5 -5
- data/CHANGES.md +19 -0
- data/{MIT-LICENSE.txt → MIT-LICENSE} +1 -1
- data/README.md +99 -36
- data/Rakefile.rb +14 -0
- data/benry-config.gemspec +32 -0
- data/doc/benry-config.html +139 -0
- data/doc/css/style.css +168 -0
- data/examples/config/app.rb +13 -0
- data/examples/config/app.secret +5 -0
- data/examples/config/app_dev.rb +7 -0
- data/examples/config/app_prod.rb +10 -0
- data/examples/main.rb +25 -0
- data/lib/benry/config.rb +93 -51
- data/task/common-task.rb +144 -0
- data/task/package-task.rb +72 -0
- data/task/readme-task.rb +125 -0
- data/task/test-task.rb +81 -0
- data/test/config_test.rb +272 -95
- metadata +34 -35
- data/Rakefile +0 -83
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 29ac681e125266660c141ed00cd5c1d8b1667a2769b89810a4747ea5d0fa144b
|
4
|
+
data.tar.gz: 619ca8af95d35aebe618c2b87e8438bbaf7300658a4fdf8dac62705946b759a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45113ff1e524a0c92053e30488c8963e64ea0b87b941cd44ffdb1fd93e7f3a76a2e24fa8b75348260c851577c7398aa5eef16408b4e4c6ee2db47c28c1b508fd
|
7
|
+
data.tar.gz: 36a644e4fb0f053bda69836abca724470a212743a7bbfd297fbe2c50b50114ba6d7b7ae1d2240923b36a310705f7466adec260e48c9ebf33431926d762b5792f
|
data/CHANGES.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
CHANGES
|
2
|
+
=======
|
3
|
+
|
4
|
+
|
5
|
+
Release 0.2.0 (2023-10-11)
|
6
|
+
--------------------------
|
7
|
+
|
8
|
+
* [change] Rename 'Benry::BaseConfig' class to 'Benry::Config' class. (Old name is still available for compatibility.)
|
9
|
+
* [enhance] Add `SECRET` which represents secret value.
|
10
|
+
* [enhance] Enhance `ABSTRACT` to support `ABSTRACT['NAME']` style setting.
|
11
|
+
* [enhance] Define `#defined?()` in `Benry::Config` class.
|
12
|
+
* [enhance] Define `#each()` and `#each!()` in `Benry::Config` class.
|
13
|
+
* [chnage] Switch unit test library from MiniTest to Oktest.
|
14
|
+
|
15
|
+
|
16
|
+
Release 0.1.0 (2016-09-04)
|
17
|
+
--------------------------
|
18
|
+
|
19
|
+
* First public release.
|
data/README.md
CHANGED
@@ -1,65 +1,128 @@
|
|
1
|
-
|
2
|
-
============
|
1
|
+
# Benry-Config
|
3
2
|
|
4
|
-
($Release: 0.
|
3
|
+
($Release: 0.2.0 $)
|
5
4
|
|
6
5
|
|
7
|
-
|
8
|
-
--------
|
6
|
+
## What's this?
|
9
7
|
|
10
8
|
Utility class to support configuration.
|
11
9
|
|
10
|
+
Features:
|
11
|
+
|
12
12
|
* Easy to define configuration for environments (production, development, ...).
|
13
13
|
* Raises error when configuration name is wrong (typo).
|
14
|
-
* Represents secret configurations which should be set in
|
14
|
+
* Represents secret configurations which should be set by environment var or in secret file.
|
15
|
+
|
16
|
+
Links:
|
17
|
+
|
18
|
+
* Document: <https://kwatch.github.io/benry-ruby/benry-config.html>
|
19
|
+
* GitHub: <https://github.com/kwatch/benry-ruby/tree/main/benry-config>
|
20
|
+
* Changes: <https://github.com/kwatch/benry-ruby/tree/main/benry-config/CHANGES.md>
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
### Table of Contents
|
25
|
+
|
26
|
+
<!-- TOC -->
|
27
|
+
|
28
|
+
* [What's this?](#whats-this)
|
29
|
+
* [Example](#example)
|
30
|
+
* [Copyright and License](#copyright-and-license)
|
15
31
|
|
32
|
+
<!-- /TOC -->
|
16
33
|
|
17
|
-
|
18
|
-
|
34
|
+
|
35
|
+
|
36
|
+
## Example
|
37
|
+
|
38
|
+
File: config/app.rb
|
19
39
|
|
20
40
|
```ruby
|
21
|
-
#----- config/common.rb -----
|
22
41
|
require 'benry/config'
|
23
|
-
|
24
|
-
|
25
|
-
add
|
26
|
-
add :
|
27
|
-
add :
|
42
|
+
|
43
|
+
class AppConfigBase < Benry::Config
|
44
|
+
## add names and values
|
45
|
+
add :db_host , "localhost"
|
46
|
+
add :db_user , "user1"
|
47
|
+
add :db_pass , ABSTRACT # should be set value in subclass
|
48
|
+
add :session_cookie , "sess"
|
49
|
+
add :session_secret , SECRET
|
50
|
+
## or:
|
51
|
+
#add :db_pass , ABSTRACT['DB_PASS'] # get value from ENV
|
52
|
+
#add :session_secret , SECRET['SESS_SECRET'] # get secret value from ENV
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
File: config/app_dev.rb (for development environment)
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
require_relative './app'
|
60
|
+
|
61
|
+
## for development environment
|
62
|
+
class AppConfig < AppConfigBase
|
63
|
+
## set (= override) existing values
|
64
|
+
set :db_pass , "pass1" # set ABSTRACT value
|
28
65
|
end
|
66
|
+
```
|
67
|
+
|
68
|
+
File: config/app_prod.rb (for production environment)
|
29
69
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
70
|
+
```ruby
|
71
|
+
require_relative './app'
|
72
|
+
|
73
|
+
## for production environment
|
74
|
+
class AppConfig < AppConfigBase
|
75
|
+
## set (= override) existing values
|
76
|
+
set :db_host , "db-master" # override existing value
|
77
|
+
set :db_pass , "passXXX" # set ABSTRACT value
|
78
|
+
## error because `:db_name` is not defined in paremnt class.
|
79
|
+
set :db_name , "prod1" #=> Benry::ConfigError (not defined)
|
34
80
|
end
|
81
|
+
```
|
82
|
+
|
83
|
+
File: config/app.secret (should be ignored by `.gitignore`)
|
35
84
|
|
36
|
-
|
37
|
-
|
38
|
-
|
85
|
+
```ruby
|
86
|
+
## this file should be ignored by '.gitignore', and
|
87
|
+
## file permission should be `600`.
|
88
|
+
AppConfig.class_eval do
|
89
|
+
set :session_secret , "YRjCIAiPlCBvwLUq5mnZ" # set SECRET value
|
39
90
|
end
|
91
|
+
```
|
40
92
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
require "./config
|
47
|
-
|
93
|
+
File: main.rb
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
## load config files
|
97
|
+
app_env = ENV['APP_ENV'] or raise "$APP_ENV required."
|
98
|
+
require "./config/app.rb" # define AppConfigBase class
|
99
|
+
require "./config/app_#{app_env}.rb" # define AppConfig class
|
100
|
+
load "./config/app.secret" # modify AppConfig class
|
101
|
+
## or:
|
102
|
+
#load "./config/app.#{app_env}.secret"
|
103
|
+
|
104
|
+
## create a config object
|
105
|
+
$config = AppConfig.new.freeze
|
48
106
|
#
|
49
|
-
$config = Config.new.freeze
|
50
107
|
p $config.db_user #=> "user1"
|
51
108
|
p $config.db_pass #=> "pass1"
|
52
109
|
p $config.session_cookie #=> "sess"
|
53
|
-
p $config.session_secret #=> "
|
110
|
+
p $config.session_secret #=> "YRjCIAiPlCBvwLUq5mnZ"
|
111
|
+
#
|
112
|
+
p $config.defined?(:db_user) #=> true
|
113
|
+
p $config.defined?(:db_pass) #=> true
|
114
|
+
p $config.defined?(:db_name) #=> false
|
115
|
+
#
|
116
|
+
p $config.get_all(:db_) #=> {:host=>"localhost", :user=>"user1", :pass=>"pass1"}
|
117
|
+
p $config.get_all(:session_) #=> {:cookie=>"sess", :secret=>"YRjCIAiPlCBvwLUq5mnZ"}
|
54
118
|
#
|
55
|
-
|
56
|
-
|
119
|
+
$config.each {|k, v| puts "#{k}=#{v.inspect}" } # hide secret values as "(secret)"
|
120
|
+
$config.each! {|k, v| puts "#{k}=#{v.inspect}" } # not hide secret values
|
57
121
|
```
|
58
122
|
|
59
123
|
|
60
|
-
Copyright and License
|
61
|
-
---------------------
|
62
124
|
|
63
|
-
|
125
|
+
## Copyright and License
|
64
126
|
|
65
|
-
$
|
127
|
+
* $Copyright: copyright(c) 2016 kwatch@gmail.com $
|
128
|
+
* $License: MIT License $
|
data/Rakefile.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
PROJECT = "benry-config"
|
5
|
+
RELEASE = ENV['RELEASE'] || "0.0.0"
|
6
|
+
COPYRIGHT = "copyright(c) 2016 kwatch@gmail.com"
|
7
|
+
LICENSE = "MIT License"
|
8
|
+
|
9
|
+
README_DESTDIR = "examples"
|
10
|
+
|
11
|
+
Dir.glob('./task/*-task.rb').sort.each {|x| require x }
|
12
|
+
|
13
|
+
desc "retrieve example code from README"
|
14
|
+
task :examples => "readme:retrieve"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "benry-config"
|
5
|
+
spec.version = "$Release: 0.2.0 $".split()[1]
|
6
|
+
spec.author = "kwatch"
|
7
|
+
spec.email = "kwatch@gmail.com"
|
8
|
+
spec.platform = Gem::Platform::RUBY
|
9
|
+
spec.homepage = "https://kwatch.github.io/benry-ruby/benry-config.html"
|
10
|
+
spec.summary = "Application configuration library"
|
11
|
+
spec.description = <<"END"
|
12
|
+
Small library for configuration of application.
|
13
|
+
|
14
|
+
See #{spec.homepage} for details.
|
15
|
+
END
|
16
|
+
spec.license = "MIT"
|
17
|
+
spec.files = Dir[
|
18
|
+
"README.md", "MIT-LICENSE", "CHANGES.md",
|
19
|
+
"Rakefile.rb", "#{spec.name}.gemspec",
|
20
|
+
"lib/**/*.rb", "test/**/*_test.rb", "task/**/*.rb",
|
21
|
+
"examples/**/*.*", #"bin/*",
|
22
|
+
"doc/*.html", "doc/css/*",
|
23
|
+
]
|
24
|
+
#spec.executables = []
|
25
|
+
spec.bindir = "bin"
|
26
|
+
spec.require_path = "lib"
|
27
|
+
spec.test_files = Dir["test/**/*_test.rb"] # or: ["test/run_all.rb"]
|
28
|
+
#spec.extra_rdoc_files = ["README.md", "CHANGES.md"]
|
29
|
+
|
30
|
+
spec.required_ruby_version = ">= 2.3"
|
31
|
+
spec.add_development_dependency "oktest" , "~> 1"
|
32
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8"/>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
6
|
+
<meta name="description" content="">
|
7
|
+
<meta name="theme-color" content="#fafafa">
|
8
|
+
<meta property="og:title" content="">
|
9
|
+
<meta property="og:type" content="">
|
10
|
+
<meta property="og:url" content="">
|
11
|
+
<meta property="og:image" content="">
|
12
|
+
<title></title>
|
13
|
+
<link rel="stylesheet" href="lib/sanitize.css/2.0.0/sanitize.min.css">
|
14
|
+
<link rel="stylesheet" href="css/style.css">
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<main>
|
18
|
+
<section class="chapter" id="benry-config">
|
19
|
+
<h1>Benry-Config</h1>
|
20
|
+
<nav class="nav">
|
21
|
+
<ul class="nav">
|
22
|
+
</ul>
|
23
|
+
</nav>
|
24
|
+
<p>($Release: 0.2.0 $)</p>
|
25
|
+
<section class="section" id="whats-this">
|
26
|
+
<h2>What's this?</h2>
|
27
|
+
<p>Utility class to support configuration.</p>
|
28
|
+
<p>Features:</p>
|
29
|
+
<ul>
|
30
|
+
<li>Easy to define configuration for environments (production, development, ...).</li>
|
31
|
+
<li>Raises error when configuration name is wrong (typo).</li>
|
32
|
+
<li>Represents secret configurations which should be set by environment var or in secret file.</li>
|
33
|
+
</ul>
|
34
|
+
<p>Links:</p>
|
35
|
+
<ul>
|
36
|
+
<li>Document: <a href="https://kwatch.github.io/benry-ruby/benry-config.html">https://kwatch.github.io/benry-ruby/benry-config.html</a></li>
|
37
|
+
<li>GitHub: <a href="https://github.com/kwatch/benry-ruby/tree/main/benry-config">https://github.com/kwatch/benry-ruby/tree/main/benry-config</a></li>
|
38
|
+
<li>Changes: <a href="https://github.com/kwatch/benry-ruby/tree/main/benry-config/CHANGES.md">https://github.com/kwatch/benry-ruby/tree/main/benry-config/CHANGES.md</a></li>
|
39
|
+
</ul>
|
40
|
+
<section class="subsection" id="table-of-contents">
|
41
|
+
<h3>Table of Contents</h3>
|
42
|
+
<div class="toc">
|
43
|
+
<ul>
|
44
|
+
<li><a href="#whats-this">What's this?</a></li>
|
45
|
+
<li><a href="#example">Example</a></li>
|
46
|
+
<li><a href="#copyright-and-license">Copyright and License</a></li>
|
47
|
+
</ul>
|
48
|
+
</div>
|
49
|
+
</section>
|
50
|
+
</section>
|
51
|
+
<section class="section" id="example">
|
52
|
+
<h2>Example</h2>
|
53
|
+
<p>File: config/app.rb</p>
|
54
|
+
<pre class="language-ruby">
|
55
|
+
<strong>require 'benry/config'</strong>
|
56
|
+
|
57
|
+
<strong>class AppConfigBase < Benry::Config</strong>
|
58
|
+
## add names and values
|
59
|
+
<strong>add</strong> :db_host , "localhost"
|
60
|
+
<strong>add</strong> :db_user , "user1"
|
61
|
+
<strong>add</strong> :db_pass , <strong>ABSTRACT</strong> # should be set value in subclass
|
62
|
+
<strong>add</strong> :session_cookie , "sess"
|
63
|
+
<strong>add</strong> :session_secret , <strong>SECRET</strong>
|
64
|
+
## or:
|
65
|
+
#add :db_pass , <strong>ABSTRACT['DB_PASS']</strong> # get value from ENV
|
66
|
+
#add :session_secret , <strong>SECRET['SESS_SECRET']</strong> # get secret value from ENV
|
67
|
+
end
|
68
|
+
</pre>
|
69
|
+
<p>File: config/app_dev.rb (for development environment)</p>
|
70
|
+
<pre class="language-ruby">
|
71
|
+
require_relative './app'
|
72
|
+
|
73
|
+
## for development environment
|
74
|
+
<strong>class AppConfig < AppConfigBase</strong>
|
75
|
+
## set (= override) existing values
|
76
|
+
<strong>set</strong> :db_pass , "pass1" # set ABSTRACT value
|
77
|
+
end
|
78
|
+
</pre>
|
79
|
+
<p>File: config/app_prod.rb (for production environment)</p>
|
80
|
+
<pre class="language-ruby">
|
81
|
+
require_relative './app'
|
82
|
+
|
83
|
+
## for production environment
|
84
|
+
<strong>class AppConfig < AppConfigBase</strong>
|
85
|
+
## set (= override) existing values
|
86
|
+
<strong>set</strong> :db_host , "db-master" # override existing value
|
87
|
+
<strong>set</strong> :db_pass , "passXXX" # set ABSTRACT value
|
88
|
+
## error because `:db_name` is not defined in paremnt class.
|
89
|
+
<strong>set</strong> :db_name , "prod1" #=> <strong>Benry::ConfigError (not defined)</strong>
|
90
|
+
end
|
91
|
+
</pre>
|
92
|
+
<p>File: config/app.secret (should be ignored by `.gitignore`)</p>
|
93
|
+
<pre class="language-ruby">
|
94
|
+
## this file should be ignored by '.gitignore', and
|
95
|
+
## file permission should be `600`.
|
96
|
+
<strong>AppConfig.class_eval do</strong>
|
97
|
+
<strong>set</strong> :session_secret , "YRjCIAiPlCBvwLUq5mnZ" # set SECRET value
|
98
|
+
end
|
99
|
+
</pre>
|
100
|
+
<p>File: main.rb</p>
|
101
|
+
<pre class="language-ruby">
|
102
|
+
## load config files
|
103
|
+
app_env = ENV['APP_ENV'] or raise "$APP_ENV required."
|
104
|
+
<strong>require "./config/app.rb"</strong> # define AppConfigBase class
|
105
|
+
<strong>require "./config/app_#{app_env}.rb"</strong> # define AppConfig class
|
106
|
+
<strong>load "./config/app.secret"</strong> # modify AppConfig class
|
107
|
+
## or:
|
108
|
+
#load "./config/app.#{app_env}.secret"
|
109
|
+
|
110
|
+
## create a config object
|
111
|
+
<strong>$config = AppConfig.new.freeze</strong>
|
112
|
+
#
|
113
|
+
p $config.db_user #=> "user1"
|
114
|
+
p $config.db_pass #=> "pass1"
|
115
|
+
p $config.session_cookie #=> "sess"
|
116
|
+
p $config.session_secret #=> "YRjCIAiPlCBvwLUq5mnZ"
|
117
|
+
#
|
118
|
+
p <strong>$config.defined?</strong>(:db_user) #=> true
|
119
|
+
p <strong>$config.defined?</strong>(:db_pass) #=> true
|
120
|
+
p <strong>$config.defined?</strong>(:db_name) #=> false
|
121
|
+
#
|
122
|
+
p <strong>$config.get_all(:db_)</strong> #=> {:host=>"localhost", :user=>"user1", :pass=>"pass1"}
|
123
|
+
p <strong>$config.get_all(:session_)</strong> #=> {:cookie=>"sess", :secret=>"YRjCIAiPlCBvwLUq5mnZ"}
|
124
|
+
#
|
125
|
+
<strong>$config.each</strong> {|k, v| puts "#{k}=#{v.inspect}" } # hide secret values as "(secret)"
|
126
|
+
<strong>$config.each!</strong> {|k, v| puts "#{k}=#{v.inspect}" } # not hide secret values
|
127
|
+
</pre>
|
128
|
+
</section>
|
129
|
+
<section class="section" id="copyright-and-license">
|
130
|
+
<h2>Copyright and License</h2>
|
131
|
+
<ul>
|
132
|
+
<li>$Copyright: copyright(c) 2016 kwatch@gmail.com $</li>
|
133
|
+
<li>$License: MIT License $</li>
|
134
|
+
</ul>
|
135
|
+
</section>
|
136
|
+
</section>
|
137
|
+
</main>
|
138
|
+
</body>
|
139
|
+
</html>
|
data/doc/css/style.css
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
@charset "UTF-8";
|
2
|
+
|
3
|
+
body {
|
4
|
+
font-family: "Helvetica Neue",Arial,"Hiragino Kaku Gothic ProN","Hiragino Sans",Meiryo,sans-serif;
|
5
|
+
color: #333;
|
6
|
+
line-height: 1.42857143;
|
7
|
+
background: #eef0f6;
|
8
|
+
margin-top: 0;
|
9
|
+
}
|
10
|
+
main {
|
11
|
+
max-width: 830px;
|
12
|
+
margin: 0 auto;
|
13
|
+
font-size: 16px;
|
14
|
+
color: #999;
|
15
|
+
}
|
16
|
+
|
17
|
+
|
18
|
+
h1 {
|
19
|
+
text-align: center;
|
20
|
+
margin: 0 0 30px 0;
|
21
|
+
padding: 50px 0 30px 0;
|
22
|
+
background: #39c;
|
23
|
+
color: #fff;
|
24
|
+
font-weight: normal;
|
25
|
+
font-size: 280%;
|
26
|
+
border-radius: 0 0 10px 10px;
|
27
|
+
}
|
28
|
+
h2 {
|
29
|
+
border: solid 0px #39c;
|
30
|
+
border-width: 0 0 0 15px;
|
31
|
+
padding: 20px 0 10px 15px;
|
32
|
+
font-size: 200%;
|
33
|
+
font-weight: normal;
|
34
|
+
color: #39c;
|
35
|
+
margin: 0 0 20px 0;
|
36
|
+
}
|
37
|
+
h3 {
|
38
|
+
color: #39c;
|
39
|
+
margin-top: 30px;
|
40
|
+
font-size: 180%;
|
41
|
+
font-weight: normal;
|
42
|
+
}
|
43
|
+
h2 > code, h3 > code {
|
44
|
+
color: #39c;
|
45
|
+
font-weight: bold;
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
section.section {
|
50
|
+
background: #fff;
|
51
|
+
border-radius: 10px;
|
52
|
+
padding: 30px 15px 30px 15px;
|
53
|
+
color: #333;
|
54
|
+
margin: 30px 0 30px 0;
|
55
|
+
}
|
56
|
+
section.subsection {
|
57
|
+
margin-top: 60px;
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
pre, code, kbd, var, samp {
|
62
|
+
font-family: 'Courier New',Courier,Menlo,Monaco,Consolas,Meiryo,monospace,monospace;
|
63
|
+
}
|
64
|
+
pre {
|
65
|
+
border: solid 1px #ddd;
|
66
|
+
border-radius: 4px;
|
67
|
+
background: #eee;
|
68
|
+
Xbackground: #f6f6f6;
|
69
|
+
padding: 5px 10px;
|
70
|
+
color: #444;
|
71
|
+
word-break: break-all;
|
72
|
+
}
|
73
|
+
pre > strong {
|
74
|
+
font-weight: bold;
|
75
|
+
color: #900;
|
76
|
+
}
|
77
|
+
pre.language-terminal {
|
78
|
+
background: #333;
|
79
|
+
color: #fff;
|
80
|
+
border-color: #000;
|
81
|
+
}
|
82
|
+
pre.language-terminal > strong {
|
83
|
+
color: #f66;
|
84
|
+
}
|
85
|
+
code {
|
86
|
+
border: solid 1px #e9e9e9;
|
87
|
+
border-radius: 2px;
|
88
|
+
background: #f6f6f6;
|
89
|
+
padding: 1px 3px;
|
90
|
+
color: #444;
|
91
|
+
}
|
92
|
+
h2 > code, h3 > code {
|
93
|
+
border: none;
|
94
|
+
background-color: transparent;
|
95
|
+
}
|
96
|
+
|
97
|
+
|
98
|
+
dt.bold {
|
99
|
+
font-weight: bold;
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
/**
|
104
|
+
nav.nav {
|
105
|
+
}
|
106
|
+
ul.nav {
|
107
|
+
padding: 0;
|
108
|
+
border: solid 1px #39c;
|
109
|
+
border-width: 0 0 6px 0;
|
110
|
+
}
|
111
|
+
li.nav {
|
112
|
+
display: inline-block;
|
113
|
+
margin-left: 10px;
|
114
|
+
padding: 5px 30px;
|
115
|
+
font-size: large;
|
116
|
+
Xfont-weight: bold;
|
117
|
+
background: #fff;
|
118
|
+
border-radius: 5px 5px 0 0;
|
119
|
+
border: solid 1px #39c;
|
120
|
+
border-width: 1px 1px 0 1px;
|
121
|
+
}
|
122
|
+
li.nav > a {
|
123
|
+
color: #39c;
|
124
|
+
text-decoration: none;
|
125
|
+
}
|
126
|
+
li.nav > a:hover {
|
127
|
+
text-decoration: underline;
|
128
|
+
}
|
129
|
+
li.nav.curr {
|
130
|
+
background: #39c;
|
131
|
+
}
|
132
|
+
li.nav.curr > a {
|
133
|
+
color: #fff;
|
134
|
+
}
|
135
|
+
**/
|
136
|
+
nav.nav {
|
137
|
+
text-align: center;
|
138
|
+
}
|
139
|
+
ul.nav {
|
140
|
+
padding-left: 0;
|
141
|
+
display: inline-block;
|
142
|
+
margin: 0;
|
143
|
+
font-size: 0;
|
144
|
+
}
|
145
|
+
li.nav {
|
146
|
+
display: inline-block;
|
147
|
+
padding: 0 20px;
|
148
|
+
border: solid #39c;
|
149
|
+
border-width: 0 0 0 1px;
|
150
|
+
margin: 0;
|
151
|
+
background: #eef0f6;
|
152
|
+
}
|
153
|
+
li.nav:first-child {
|
154
|
+
border-width: 0 0 0 0;
|
155
|
+
}
|
156
|
+
li.nav > a {
|
157
|
+
font-size: large;
|
158
|
+
text-decoration: none;
|
159
|
+
color: #39c;
|
160
|
+
margin: 0;
|
161
|
+
}
|
162
|
+
li.nav > a:hover {
|
163
|
+
text-decoration: underline;
|
164
|
+
}
|
165
|
+
li.nav.curr > a {
|
166
|
+
font-weight: bold;
|
167
|
+
text-decoration: underline;
|
168
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'benry/config'
|
2
|
+
|
3
|
+
class AppConfigBase < Benry::Config
|
4
|
+
## add names and values
|
5
|
+
add :db_host , "localhost"
|
6
|
+
add :db_user , "user1"
|
7
|
+
add :db_pass , ABSTRACT # should be set value in subclass
|
8
|
+
add :session_cookie , "sess"
|
9
|
+
add :session_secret , SECRET
|
10
|
+
## or:
|
11
|
+
#add :db_pass , ABSTRACT['DB_PASS'] # get value from ENV
|
12
|
+
#add :session_secret , SECRET['SESS_SECRET'] # get secret value from ENV
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative './app'
|
2
|
+
|
3
|
+
## for production environment
|
4
|
+
class AppConfig < AppConfigBase
|
5
|
+
## set (= override) existing values
|
6
|
+
set :db_host , "db-master" # override existing value
|
7
|
+
set :db_pass , "passXXX" # set ABSTRACT value
|
8
|
+
## error because `:db_name` is not defined in paremnt class.
|
9
|
+
set :db_name , "prod1" #=> Benry::ConfigError (not defined)
|
10
|
+
end
|
data/examples/main.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## load config files
|
2
|
+
app_env = ENV['APP_ENV'] or raise "$APP_ENV required."
|
3
|
+
require "./config/app.rb" # define AppConfigBase class
|
4
|
+
require "./config/app_#{app_env}.rb" # define AppConfig class
|
5
|
+
load "./config/app.secret" # modify AppConfig class
|
6
|
+
## or:
|
7
|
+
#load "./config/app.#{app_env}.secret"
|
8
|
+
|
9
|
+
## create a config object
|
10
|
+
$config = AppConfig.new.freeze
|
11
|
+
#
|
12
|
+
p $config.db_user #=> "user1"
|
13
|
+
p $config.db_pass #=> "pass1"
|
14
|
+
p $config.session_cookie #=> "sess"
|
15
|
+
p $config.session_secret #=> "YRjCIAiPlCBvwLUq5mnZ"
|
16
|
+
#
|
17
|
+
p $config.defined?(:db_user) #=> true
|
18
|
+
p $config.defined?(:db_pass) #=> true
|
19
|
+
p $config.defined?(:db_name) #=> false
|
20
|
+
#
|
21
|
+
p $config.get_all(:db_) #=> {:host=>"localhost", :user=>"user1", :pass=>"pass1"}
|
22
|
+
p $config.get_all(:session_) #=> {:cookie=>"sess", :secret=>"YRjCIAiPlCBvwLUq5mnZ"}
|
23
|
+
#
|
24
|
+
$config.each {|k, v| puts "#{k}=#{v.inspect}" } # hide secret values as "(secret)"
|
25
|
+
$config.each! {|k, v| puts "#{k}=#{v.inspect}" } # not hide secret values
|