I made a gem library around the configuration file with ruby. This library supports:
I had a lot of haze around the configuration file, and I wanted a library that could solve it all at once. The content of the haze is just the flip side of the above support, but I don't want to write the settings in plain text in a text file. I don't want to write different setting items for production, development, etc. and all common setting items in the same file. We have created such thoughts as a starting point.
~~ This library has not been fully tested, so the specifications and reliability have not been fully refined. If you have a better library than this, please let us know in the comments. ,,, ~~ Gefun Gefun. From now on, I will find dissatisfaction points and bugs and update them slowly and slowly for myself. (Perhaps)
Suppose you have the following configuration file:
project_config.yml
---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :animal:
:value: |-
?0thjXJj2wR4kzp3EidmJ+bgWtYXs7/DZpTlcDFiLjDbsSB2YWnZEB+ovMTNC
37kx
:desc: ''
:fruit:
:value: |-
?wIGrSC/bf5om/rlfIlz7hAIOjaZFjIgw4ulguIKI7YpBrx4JOcmUo3cLH1vC
eDeW
:desc: This fruit color is yellow.
When using this in the program, it can be used as follows.
require 'dinomischus'
# ex1
hash = Dinomischus.load_file('config_project.yml')
# => {:animal=>"owl",
# :fruit=>"Lemon"}
p hash[:animal] # => owl
p hash[:fruit] # => Lemon
If you want to get the description (desc) item as well, add `` `true``` to the argument.
# ex2
hash = Dinomischus.load_file('project_config.yml', true)
# => {:animal=>{:value=>"owl", :desc=>""},
# :fruit=>{:value=>"Lemon", :desc=>"This fruit color is yellow."} }
p hash[:fruit][:value] # => Lemon
p hash[:fruit][:desc] # => This fruit color is yellow.
Even if there are multiple configuration files, they can be read at once. In that case, a separate file that defines the reading order is required. (Project_config_index.yml in the example) If the setting items are duplicated, the setting value of the file read later is given priority. By using this, it is possible to prepare a setting file for the default value and separate the setting file for the development environment and the setting file for the production environment.
project_config_index.yml
---
- :conf_path: "/path/to/config/project_config_default.yml"
- :conf_path: "/path/to/config/project_config_product.yml"
project_config_default.yml
---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :animal:
:value: |-
?0thjXJj2wR4kzp3EidmJ+bgWtYXs7/DZpTlcDFiLjDbsSB2YWnZEB+ovMTNC
37kx
:desc: ''
:fruit:
:value: |-
?wIGrSC/bf5om/rlfIlz7hAIOjaZFjIgw4ulguIKI7YpBrx4JOcmUo3cLH1vC
eDeW
:desc: This fruit color is yellow.
project_config_product.yml
---
- :key_path: "/home/vagrant/.crypt_config/project_key.yml"
- :fruit:
:value: banana
:desc:Yellow fruit
:furniture:
:value: chair
:desc:Things to sit on
After reading the above, it will be as follows.
require 'dinomischus'
hash = Dinomischus.load_file('project_name_config_index.yml')
# => {:animal=>"owl",
# :fruit=>"banana",
# :furniture=>"chair"}
: The setting value of fruit
changed to `` `banana``` depending on the file read later.
Especially for the first time, there are various rules, so Use it by calling a menu from a shell command.
(It is assumed that the installation described later has been completed.)
$ cd /path/to/Project settings directory(config)Location
$ dinomischus
****** Welcome Egoistic Config ******
1. Make Template
2. Add or Update Crypted Value
3. List Configs Simple
4. List Configs Specify
c. Clear Screen
h. Ruby Command List
z. End
-----------> Select Menu [1-4,c,h,z]:
Select 1 when the ↑ menu appears.
-----------> Select Menu [1-4,c,h,z]: 1
****** Make Template ******
Input Your Config Prefix Name : ____
If you select 1, you will be asked for the first character string for identification in the configuration file. Please enter any characters. (Here prj) (If there is a file that already exists with the identification character set once, the file creation process is skipped.)
Input Your Config Prefix Name : prj
Make File Default Value is ...
Key File Place [/path/to/Home directory/.crypt_config/prj_key.yml]
Config File Place [/path/to/Current directory/config/prj_config.yml]
Define File Place [/path/to/Current directory/config/prj_config_index.yml]
Press Enter Key to Next Step...
Check the created file and press the enter key.
.crypt_config
and `` `config``` directories if they do not exist.Done!
Next Step is Add Crypt Config|Plain Config to /path/to/Current directory/config/prj_config.yml .
Add Config Value then You Select Menu No.2 .
-----------> Select Menu [1-4,c,h,z]:
This completes the template creation. After that, copy the completed file as appropriate or change the save destination to change it to the configuration you want. If you change the directory, the path of each file is written at the beginning of the configuration file, so Please change that as well.
Call the menu from the dinomischus
command as before.
$ cd /path/to/Project settings directory(config)Location
$ dinomischus
****** Welcome Egoistic Config ******
1. Make Template
2. Add or Update Crypted Value
3. List Configs Simple
4. List Configs Specify
c. Clear Screen
h. Ruby Command List
z. End
-----------> Select Menu [1-4,c,h,z]:
Select 2 when the ↑ menu appears.
-----------> Select Menu [1-4,c,h,z]: 2
****** Crypted Value Setting ******"
Input Your Config Path : config/prj_config.yml
Input Your Key : email
Input Your Value : [email protected]
Input Your Description :Setting sample E-mail Address. It doesn't exist.
Done!
After entering the configuration file path you want to edit Enter the value you want to set for each item that appears. The encryption of the setting value is over. If all goes well, you should have a configuration file like the one below.
config/prj_config_index.yml
---
- :conf_path: "/home/vagrant/project/config/prj_config.yml"
/path/to/project/config/prj_config.yml
---
- :key_path: "~/.crypt_config/prj_key.yml"
- :dummy:
:value: ''
:desc: ''
:email:
:value: |-
?Afo3Ccn307HZgQgBRwmyUQtCqDus3063wz1h9CIpRMIWdpRC07yfd2TG5jKa
OrQiDDMfySjQIhWfL1Gt0UJ8tngSiUJT4gfgvjN7/+LHpdk=
:desc:Setting sample E-mail Address. It doesn't exist.
yaml:~/.crypt_config/prj_key.yml
---
:key:
:type: sha256
:value: eUIZzgKKnsJCoLcRX5pXXg
Since the installation is registered in ruby gem, it can be done by gem install.
$ gem install dinomischus
* _ config_index.yml
)Defines the reading order of the configuration files.
* _ config.yml
)The link to the key file (key_path) and the text of the setting value are saved.
* _ key.yml
)It stores the password used for encryption / decryption.
`type:`
is a preliminary item for future specification expansion. Currently, "sha256" is an option.It is available on KurokoSin / Dinomischus (Github).
Ubuntu 20.04LTS ruby 2.6.3 is. I make it for ruby, not for rails. I wish I could move on rails as well. .. .. ..