sting 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b4cb2c0a668bf879e98ac401f7419678288949857b8ed055daf23a41cc6b7e7
4
- data.tar.gz: e3c52cd17082f8cd7ce774aaa404ec1bc87091f09d3d5b5223d8e8fb70377b4c
3
+ metadata.gz: 271132274baa28e3ded663cbd4abda0b371b948cdc71b2a6b1cd6a9e0dd444aa
4
+ data.tar.gz: 424dc73b1871a68e87f0206b354a40995f9fef20a9b35892d0ec71102f293c0c
5
5
  SHA512:
6
- metadata.gz: 00dd281cbc65ec4365686ae4137c011397a18f1e12bef0bea99ae46d63a119d9f30063f3601de1ddc294cfe921808df515ad1d58454eba14e027413dc56dd044
7
- data.tar.gz: ae1d6134e99010e99d9a06a836b28db0429c23236fcbb1ca614cfa1a06582825af0e728bfba7d28c265a9408b79984392e81f9ddaa12e89bb97f43c1d33cbbf9
6
+ metadata.gz: aa0836070e5db815867796c726b4e3eea387d9f3fd859ecb17abe770d224994142c478295f4340eeecb5f42e89a39f3dbd18374ca4b76f50d361675930704093
7
+ data.tar.gz: ba50fce961c36bee99fbbc05b8ab06dcbda5112d26d04a14f0320df572fdba9791f062d9cc7bd6cb25ad72f9de40f2dd8f231d5266efd3a4cce0636c308f033e
data/README.md CHANGED
@@ -33,6 +33,7 @@ Features
33
33
 
34
34
  - [Aggressively minimalistic][1], no dependencies, no monkey-patching, no magic.
35
35
  - Settings are accessible through a globally available class.
36
+ - Can be used either as a singleton class or as an instance.
36
37
  - Load and merge one or more YAML files or hashes.
37
38
  - Settings objects are standard ruby hashes, arrays and basic types.
38
39
  - Ability to update settings at runtime.
@@ -43,7 +44,7 @@ Nonfeatures
43
44
  --------------------------------------------------
44
45
 
45
46
  - No dot notation access to nested values - Use `Settings.server['host']`
46
- instead of `Settings.server.host` - to avoid having to monkey-patch hashes.
47
+ instead of `Settings.server.host`.
47
48
  - No special generators for Rails.
48
49
  [Usage with rails is still trivial](#using-with-rails).
49
50
 
@@ -51,6 +52,8 @@ Nonfeatures
51
52
  Usage
52
53
  --------------------------------------------------
53
54
 
55
+ ### Using as a singleton class
56
+
54
57
  ```ruby
55
58
  require 'sting'
56
59
 
@@ -62,6 +65,11 @@ Settings = Sting
62
65
  Settings << 'one'
63
66
  Settings << 'two.yml'
64
67
 
68
+ # Adding additional files can also be done with `#push`. These two are the
69
+ # same.
70
+ Settings << 'one'
71
+ Settings.push 'one'
72
+
65
73
  # Merge with another options hash
66
74
  Settings << { port: 3000, host: 'localhost' }
67
75
 
@@ -92,6 +100,23 @@ Settings.port = 3000
92
100
  Settings.reset!
93
101
  ```
94
102
 
103
+ ### Using as an instance
104
+
105
+ All the above operations are also available to instances of `Sting`.
106
+
107
+ ```ruby
108
+ require 'sting'
109
+
110
+ # Create an instance.
111
+ config = Sting.new
112
+
113
+ # Or, create an instance, and provide the first source file to it.
114
+ config = Sting.new 'settings'
115
+
116
+ # Load additional YAML files.
117
+ config << 'local_settings'
118
+ ```
119
+
95
120
 
96
121
  Using with Rails
97
122
  --------------------------------------------------
@@ -122,4 +147,4 @@ Create four config files:
122
147
  - config/settings/**test**.yml
123
148
 
124
149
 
125
- [1]: https://github.com/DannyBen/sting/blob/master/lib/sting.rb
150
+ [1]: https://github.com/DannyBen/sting/blob/master/lib/sting/sting_operations.rb
@@ -0,0 +1,70 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+
4
+ class Sting
5
+ module StingOperations
6
+ def initialize(source = nil)
7
+ self << source if source
8
+ end
9
+
10
+ def <<(source)
11
+ if source.is_a? Hash
12
+ content = source.collect{ |k,v| [k.to_s, v] }.to_h
13
+ else
14
+ source = "#{source}.yml" unless source =~ /\.ya?ml$/
15
+ content = File.read source
16
+ content = YAML.load(ERB.new(content).result)
17
+ end
18
+ settings.merge! content if content
19
+ end
20
+ alias_method :push, :<<
21
+
22
+ def [](key)
23
+ settings[key.to_s]
24
+ end
25
+
26
+ def method_missing(name, *args, &blk)
27
+ name = name.to_s
28
+ return settings[name] if has_key? name
29
+
30
+ suffix = nil
31
+
32
+ if name.end_with? *['=', '!', '?']
33
+ suffix = name[-1]
34
+ name = name[0..-2]
35
+ end
36
+
37
+ case suffix
38
+ when "="
39
+ settings[name] = args.first
40
+
41
+ when "?"
42
+ !!settings[name]
43
+
44
+ when "!"
45
+ if has_key? name
46
+ return settings[name]
47
+ else
48
+ raise ArgumentError, "Key '#{name}' does not exist"
49
+ end
50
+
51
+ else
52
+ nil
53
+
54
+ end
55
+
56
+ end
57
+
58
+ def settings
59
+ @settings ||= {}
60
+ end
61
+
62
+ def reset!
63
+ @settings = nil
64
+ end
65
+
66
+ def has_key?(key)
67
+ settings.has_key? key.to_s
68
+ end
69
+ end
70
+ end
data/lib/sting/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Sting
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/sting.rb CHANGED
@@ -1,65 +1,11 @@
1
1
  require 'yaml'
2
2
  require 'erb'
3
+ require 'sting/sting_operations'
3
4
 
4
5
  class Sting
5
- class << self
6
- def <<(source)
7
- if source.is_a? Hash
8
- content = source.collect{ |k,v| [k.to_s, v] }.to_h
9
- else
10
- source = "#{source}.yml" unless source =~ /\.ya?ml$/
11
- content = File.read source
12
- content = YAML.load(ERB.new(content).result)
13
- end
14
- settings.merge! content if content
15
- end
16
-
17
- def [](key)
18
- settings[key.to_s]
19
- end
20
-
21
- def method_missing(name, *args, &blk)
22
- name = name.to_s
23
- return settings[name] if has_key? name
24
-
25
- suffix = nil
26
-
27
- if name.end_with? *['=', '!', '?']
28
- suffix = name[-1]
29
- name = name[0..-2]
30
- end
31
-
32
- case suffix
33
- when "="
34
- settings[name] = args.first
35
-
36
- when "?"
37
- !!settings[name]
6
+ include StingOperations
38
7
 
39
- when "!"
40
- if has_key? name
41
- return settings[name]
42
- else
43
- raise ArgumentError, "Key '#{name}' does not exist"
44
- end
45
-
46
- else
47
- nil
48
-
49
- end
50
-
51
- end
52
-
53
- def settings
54
- @settings ||= {}
55
- end
56
-
57
- def reset!
58
- @settings = nil
59
- end
60
-
61
- def has_key?(key)
62
- settings.has_key? key.to_s
63
- end
8
+ class << self
9
+ include StingOperations
64
10
  end
65
11
  end
metadata CHANGED
@@ -1,99 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-04 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: byebug
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '10.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '10.0'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '3.6'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '3.6'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec_fixtures
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.3'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.3'
55
- - !ruby/object:Gem::Dependency
56
- name: runfile
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.10'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.10'
69
- - !ruby/object:Gem::Dependency
70
- name: runfile-tasks
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.4'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.4'
83
- - !ruby/object:Gem::Dependency
84
- name: simplecov
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.15'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.15'
11
+ date: 2019-01-05 00:00:00.000000000 Z
12
+ dependencies: []
97
13
  description: Minimal, lightweight, multi-YAML settings
98
14
  email: db@dannyben.com
99
15
  executables: []
@@ -102,6 +18,7 @@ extra_rdoc_files: []
102
18
  files:
103
19
  - README.md
104
20
  - lib/sting.rb
21
+ - lib/sting/sting_operations.rb
105
22
  - lib/sting/version.rb
106
23
  homepage: https://github.com/dannyben/sting
107
24
  licenses: