asetus 0.0.6 → 0.0.7
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 +4 -4
- data/README.md +8 -0
- data/asetus.gemspec +1 -1
- data/lib/asetus.rb +53 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffddca763a36284504ce06cc389c15fb12dfd823
|
4
|
+
data.tar.gz: 47fde4f5d41ceccf13a910d9b13e2f14beaba9f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2992513481cbabfbef49fe4fd3e67413a6292e800c6305d70025c52c5b885d7e54ccef04ed79872301517cd3558e58e83de352ade7a6c2c89ecf0e3632a67bd2
|
7
|
+
data.tar.gz: 4dbe149a790b539b24607003e6b744ba81c0e341dd12eb53296822e3f47f22d8451fe516e6bfc88d4708409c2044fd27ea9bc2a387ed8d862de7dd8dc261c38a
|
data/README.md
CHANGED
@@ -44,6 +44,14 @@ asetus.system # system only
|
|
44
44
|
asetus.user # user only
|
45
45
|
```
|
46
46
|
|
47
|
+
## Reserved methods
|
48
|
+
|
49
|
+
* each - iterate all config keys in current level
|
50
|
+
* has_key?(arg) - check if current level has key arg
|
51
|
+
* [arg] - fetch arg (useful for non-literal retrieval, instead of using #send)
|
52
|
+
* key? - all keys have question mark version reserved, checks if key exists+true (true), exists+false (false), not-exists (nil)
|
53
|
+
+ all object class methods
|
54
|
+
|
47
55
|
## TODO
|
48
56
|
|
49
57
|
* should I add feature to raise on unconfigured/unset?
|
data/asetus.gemspec
CHANGED
data/lib/asetus.rb
CHANGED
@@ -7,6 +7,20 @@ class AsetusError < StandardError; end
|
|
7
7
|
class NoName < AsetusError; end
|
8
8
|
class UnknownOption < AsetusError; end
|
9
9
|
|
10
|
+
# @example common use case
|
11
|
+
# CFGS = Asetus.new :name=>'my_sweet_program' :load=>false # do not load config from filesystem
|
12
|
+
# CFGS.default.ssh.port = 22
|
13
|
+
# CFGS.default.ssh.hosts = %w(host1.example.com host2.example.com)
|
14
|
+
# CFGS.default.auth.user = lana
|
15
|
+
# CFGS.default.auth.password = dangerzone
|
16
|
+
# CFGS.load # load system config and user config from filesystem and merge with defaults to #cfg
|
17
|
+
# raise StandardError, 'edit ~/.config/my_sweet_program/config' if CFGS.create # create user config from default config if no system or user config exists
|
18
|
+
# # use the damn thing
|
19
|
+
# CFG = CFGS.cfg
|
20
|
+
# user = CFG.auth.user
|
21
|
+
# password = CFG.auth.password
|
22
|
+
# ssh_port = CFG.ssh.port
|
23
|
+
# ssh_hosts = CFG.ssh.hosts
|
10
24
|
class Asetus
|
11
25
|
CONFIG_FILE = 'config'
|
12
26
|
attr_reader :cfg, :default
|
@@ -18,6 +32,12 @@ class Asetus
|
|
18
32
|
end
|
19
33
|
end
|
20
34
|
|
35
|
+
# When this is called, by default :system and :user are loaded from
|
36
|
+
# filesystem and merged with defefault, so that user overrides system which
|
37
|
+
# overrides default
|
38
|
+
#
|
39
|
+
# @param [Symbol] level which configuration level to load, by defaukt :all
|
40
|
+
# @return [void]
|
21
41
|
def load level=:all
|
22
42
|
if level == :default or level == :all
|
23
43
|
@cfg = merge @cfg, @default
|
@@ -32,6 +52,8 @@ class Asetus
|
|
32
52
|
end
|
33
53
|
end
|
34
54
|
|
55
|
+
# @param [Symbol] level which configuration level to save, by default :user
|
56
|
+
# @return [void]
|
35
57
|
def save level=:user
|
36
58
|
if level == :user
|
37
59
|
save_cfg @usrdir, @user
|
@@ -40,8 +62,39 @@ class Asetus
|
|
40
62
|
end
|
41
63
|
end
|
42
64
|
|
65
|
+
# @example create user config from default config and raise error, if no config was found
|
66
|
+
# raise StandardError, 'edit ~/.config/name/config' if asetus.create
|
67
|
+
# @param [Hash] opts options for Asetus
|
68
|
+
# @option opts [Symbol] :source source to use for settings to save, by defaylt :default
|
69
|
+
# @option opts [Symbol] :destination destinatino to use for settings to save, by default :user
|
70
|
+
# @option opts [boolean] :load load config once saved, by default false
|
71
|
+
# @return [boolean] true if config didn't exist and was created, false if config already exists
|
72
|
+
def create opts={}
|
73
|
+
src = opts.delete :source
|
74
|
+
src ||= :default
|
75
|
+
dst = opts.delete :destination
|
76
|
+
dst ||= :user
|
77
|
+
no_config = false
|
78
|
+
no_config = true if @system.empty? and @user.empty?
|
79
|
+
if no_config
|
80
|
+
src = instance_variable_get '@' + src.to_s
|
81
|
+
instance_variable_set('@'+dst.to_s, src.dup)
|
82
|
+
save dst
|
83
|
+
load if opts.delete :load
|
84
|
+
end
|
85
|
+
no_config
|
86
|
+
end
|
87
|
+
|
43
88
|
private
|
44
89
|
|
90
|
+
# @param [Hash] opts options for Asetus.new
|
91
|
+
# @option opts [String] :name name to use for asetus (/etc/name/, ~/.config/name/) - autodetected if not defined
|
92
|
+
# @option opts [String] :adapter adapter to use 'yaml' or 'json' for now
|
93
|
+
# @option opts [String] :usrdir directory for storing user config ~/.config/name/ by default
|
94
|
+
# @option opts [String] :sysdir directory for storing system config /etc/name/ by default
|
95
|
+
# @option opts [Hash] :default default settings to use
|
96
|
+
# @option opts [boolean] :load automatically load+merge system+user config with defaults in #cfg
|
97
|
+
# @option opts [boolean] :key_to_s convert keys to string by calling #to_s for keys
|
45
98
|
def initialize opts={}
|
46
99
|
@name = (opts.delete(:name) or metaname)
|
47
100
|
@adapter = (opts.delete(:adapter) or 'yaml')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asetus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Saku Ytti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|