dot_hash 1.0.1 → 1.1.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 +4 -4
- data/.rake_tasks +7 -0
- data/README.md +26 -3
- data/lib/dot_hash.rb +8 -1
- data/lib/dot_hash/loader.rb +14 -4
- data/lib/dot_hash/settings.rb +10 -6
- data/lib/dot_hash/version.rb +1 -1
- data/test/dot_hash/custom_settings_test.rb +11 -16
- data/test/dot_hash/loader_test.rb +14 -15
- data/test/dot_hash/settings_test.rb +25 -11
- data/test/{dot_hash/hash_to_properties_test.rb → dot_hash_test.rb} +7 -6
- data/test/fixtures/{configs1.yaml → configs1.yml} +0 -0
- data/test/fixtures/configs2.json +7 -0
- metadata +9 -9
- data/lib/dot_hash/hash_to_properties.rb +0 -9
- data/test/fixtures/configs2.yaml +0 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7018ca020ba869170194582fc6d71ec4cddbc187
|
|
4
|
+
data.tar.gz: e864953ad473baac57823386d63892028a24db4e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 288f017493329d2e3fba220f8eeaefba7720f36e1aa9087055a0a939c712d4660fde84c9b2ab9e712c842d4e5dbd330a5a3a1a7dae21e834697989601f29a328
|
|
7
|
+
data.tar.gz: 1a1f2c30f1ab511ffd5b08408c1f6c61812cb26f21a897d888ee396c03dfc1edc0223d960fde56f63dc93b4b8889ccc2ebb5cca9a3f55361ea7c9ed1939481bd
|
data/.rake_tasks
ADDED
data/README.md
CHANGED
|
@@ -20,18 +20,28 @@ Or install it yourself as:
|
|
|
20
20
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
|
+
You can convert and hash to DotHash's properties.
|
|
24
|
+
|
|
23
25
|
```ruby
|
|
24
26
|
some_hash = {size: {height: 100, width: 500}, "color" => "red"}
|
|
25
|
-
properties = some_hash
|
|
27
|
+
properties = DotHash.load(some_hash)
|
|
26
28
|
|
|
27
29
|
properties.size.height # returns 100, it is the same as some_hash[:size][:height]
|
|
28
30
|
properties.color # returns "red", it works with Strings and Symbol keys
|
|
29
31
|
properties[:color] # returns "red", can be used like a hash with string keys
|
|
30
32
|
properties["color"] # returns "red", can be used like a hash with symbol keys
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
You can use DotHash::Settings to manage all configs of your app it can load yml, json with or without ERB code embeded.
|
|
31
36
|
|
|
37
|
+
```ruby
|
|
32
38
|
# App Settings
|
|
33
39
|
class Settings < DotHash::Settings
|
|
34
|
-
load
|
|
40
|
+
load(
|
|
41
|
+
'path/to/some/settings.json',
|
|
42
|
+
'path/to/settings-directory/',
|
|
43
|
+
{something: 'Some Value'}
|
|
44
|
+
)
|
|
35
45
|
end
|
|
36
46
|
|
|
37
47
|
# Use the settings as a Singleton
|
|
@@ -40,10 +50,23 @@ Settings.other.stuff.from_yml_settings
|
|
|
40
50
|
|
|
41
51
|
# Create a settings instance from some YML
|
|
42
52
|
swagger = Settings.new Rails.root.join('config', 'my-swagger.yml')
|
|
43
|
-
|
|
44
53
|
swagger.info.title # returns the title from swagger doc
|
|
45
54
|
```
|
|
46
55
|
|
|
56
|
+
DotHash supports Rails and is very easy to manage fancy settings with it.
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
class Settings < DotHash::Settings
|
|
60
|
+
load(
|
|
61
|
+
Rails.root.join('config', 'settings.yml'), # loads config/settings.yml
|
|
62
|
+
Rails.root.join('package.json'), # loads package.json
|
|
63
|
+
*Dir(Rails.root.join('config', 'settings', '*.yml')), # loads all config/settings/*.yml but dont go to nested directories
|
|
64
|
+
Rails.root.join('config', 'settings', Rails.env), # loads all files on config/settings/<env>/
|
|
65
|
+
Rails.root.join('config', 'settings.local.yml') # loads config/settings.local.yml
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
```
|
|
69
|
+
|
|
47
70
|
Check the tests for more details.
|
|
48
71
|
|
|
49
72
|
## Contributing
|
data/lib/dot_hash.rb
CHANGED
|
@@ -4,7 +4,14 @@ require 'yaml'
|
|
|
4
4
|
require 'json'
|
|
5
5
|
require 'erb'
|
|
6
6
|
require 'dot_hash/properties'
|
|
7
|
-
require 'dot_hash/hash_to_properties'
|
|
8
7
|
require 'dot_hash/loader'
|
|
9
8
|
require 'dot_hash/settings'
|
|
10
9
|
require 'dot_hash/version'
|
|
10
|
+
|
|
11
|
+
module DotHash
|
|
12
|
+
class << self
|
|
13
|
+
def load(*args)
|
|
14
|
+
Loader.new(*args).properties
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/dot_hash/loader.rb
CHANGED
|
@@ -6,12 +6,16 @@ module DotHash
|
|
|
6
6
|
@hashes = hashes
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
def
|
|
9
|
+
def hash
|
|
10
10
|
hashes.inject({}) do |hash, arg|
|
|
11
11
|
merge_hashes hash, get_hash_from(arg)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
def properties
|
|
16
|
+
Properties.new hash
|
|
17
|
+
end
|
|
18
|
+
|
|
15
19
|
def merge_hashes(h1, h2)
|
|
16
20
|
return h1 unless h2
|
|
17
21
|
return h2 unless h1
|
|
@@ -29,7 +33,7 @@ module DotHash
|
|
|
29
33
|
def get_hash_from arg
|
|
30
34
|
if arg.is_a? Hash
|
|
31
35
|
arg
|
|
32
|
-
elsif File.file? arg
|
|
36
|
+
elsif File.file? arg.to_s
|
|
33
37
|
get_hash_from_file arg
|
|
34
38
|
elsif File.directory? arg
|
|
35
39
|
get_hash_from_directory arg
|
|
@@ -37,8 +41,14 @@ module DotHash
|
|
|
37
41
|
end
|
|
38
42
|
|
|
39
43
|
def get_hash_from_file(file)
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
case file
|
|
45
|
+
when /\.ya?ml(\.erb)?$/
|
|
46
|
+
YAML.load load_erb(file)
|
|
47
|
+
when /\.json(\.erb)?$/
|
|
48
|
+
JSON.parse load_erb(file)
|
|
49
|
+
else
|
|
50
|
+
{}
|
|
51
|
+
end
|
|
42
52
|
end
|
|
43
53
|
|
|
44
54
|
def load_erb(file)
|
data/lib/dot_hash/settings.rb
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
module DotHash
|
|
2
2
|
class Settings < Properties
|
|
3
3
|
def initialize(*args)
|
|
4
|
-
super Loader.new(*args).
|
|
4
|
+
super Loader.new(*args).hash
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
def load(*args)
|
|
8
|
+
@hash = Loader.new(hash, *args).hash
|
|
9
|
+
end
|
|
9
10
|
|
|
11
|
+
class << self
|
|
10
12
|
def method_missing(*args, &block)
|
|
11
13
|
instance.public_send(*args, &block)
|
|
12
14
|
end
|
|
@@ -16,11 +18,13 @@ module DotHash
|
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
def load(*args)
|
|
19
|
-
|
|
21
|
+
instance.load(*args)
|
|
20
22
|
end
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def instance
|
|
27
|
+
@instance ||= new({})
|
|
24
28
|
end
|
|
25
29
|
end
|
|
26
30
|
end
|
data/lib/dot_hash/version.rb
CHANGED
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
require_relative "../test_helper"
|
|
2
2
|
|
|
3
3
|
class CustomSettings < DotHash::Settings
|
|
4
|
-
load
|
|
4
|
+
load(
|
|
5
|
+
fixtures_path, # load from many sources and merges everything
|
|
6
|
+
attributes: {power: 10, skills: ["fireball", "frost"]}
|
|
7
|
+
)
|
|
5
8
|
end
|
|
6
9
|
|
|
7
10
|
describe CustomSettings do
|
|
8
|
-
it "loads the given settings" do
|
|
9
|
-
assert_equal CustomSettings.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
load attributes: {power: 10, name: "Eden", skills: ["fireball", "frost"]}
|
|
16
|
-
namespace :attributes
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
describe CustomSettings2 do
|
|
20
|
-
it "loads the settings within the namespace" do
|
|
21
|
-
assert_equal CustomSettings2.power, 10
|
|
22
|
-
assert_equal CustomSettings2.skills, ["fireball", "frost"]
|
|
11
|
+
it "loads the all given settings" do
|
|
12
|
+
assert_equal CustomSettings.to_hash, {
|
|
13
|
+
"default"=>{"attr"=>{"speed"=>10, "power"=>11}},
|
|
14
|
+
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}},
|
|
15
|
+
"hero"=>{"name"=>"Eden", "power"=>100, "location"=> TESTS_PATH},
|
|
16
|
+
:attributes=>{:power=>10, :skills=>["fireball", "frost"]}
|
|
17
|
+
}
|
|
23
18
|
end
|
|
24
19
|
end
|
|
@@ -2,59 +2,58 @@ require_relative "../test_helper"
|
|
|
2
2
|
|
|
3
3
|
module DotHash
|
|
4
4
|
describe Loader do
|
|
5
|
-
|
|
6
|
-
describe "#load" do
|
|
5
|
+
describe "#hash" do
|
|
7
6
|
it "merges the given hashes" do
|
|
8
7
|
loader = Loader.new(
|
|
9
8
|
{a: 1, b: {c: 2}},
|
|
10
9
|
{b: {x: {z: 10}}}
|
|
11
10
|
)
|
|
12
|
-
assert_equal loader.
|
|
11
|
+
assert_equal loader.hash, {a: 1, b: {c: 2, x: {z: 10}}}
|
|
13
12
|
end
|
|
14
13
|
|
|
15
14
|
it "loads from a file" do
|
|
16
|
-
loader = Loader.new fixtures_path("configs1.
|
|
15
|
+
loader = Loader.new fixtures_path("configs1.yml")
|
|
17
16
|
|
|
18
|
-
assert_equal loader.
|
|
17
|
+
assert_equal loader.hash, {
|
|
19
18
|
"default" => {"attr" => {"speed"=>10, "power"=>11}},
|
|
20
19
|
"rogue" => {"attr" => {"speed"=>20, "power"=>11}}
|
|
21
|
-
}
|
|
20
|
+
}
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
it "loads from two files" do
|
|
25
24
|
loader = Loader.new(
|
|
26
|
-
fixtures_path("configs1.
|
|
27
|
-
fixtures_path("configs2.
|
|
25
|
+
fixtures_path("configs1.yml"),
|
|
26
|
+
fixtures_path("configs2.json")
|
|
28
27
|
)
|
|
29
28
|
|
|
30
|
-
assert_equal loader.
|
|
29
|
+
assert_equal loader.hash,({
|
|
31
30
|
"default"=>{"attr"=>{"speed"=>10, "power"=>11}},
|
|
32
31
|
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}}
|
|
33
32
|
})
|
|
34
33
|
end
|
|
35
34
|
|
|
36
|
-
it "does not
|
|
35
|
+
it "does not hash files without the yaml extension" do
|
|
37
36
|
loader = Loader.new fixtures_path("config.yaml.example")
|
|
38
37
|
|
|
39
|
-
assert_equal loader.
|
|
38
|
+
assert_equal loader.hash, {}
|
|
40
39
|
end
|
|
41
40
|
|
|
42
41
|
it "loads from a directory" do
|
|
43
42
|
loader = Loader.new fixtures_path
|
|
44
43
|
|
|
45
|
-
assert_equal loader.
|
|
44
|
+
assert_equal loader.hash, {
|
|
46
45
|
"default"=>{"attr"=>{"speed"=>10, "power"=>11}},
|
|
47
46
|
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}},
|
|
48
47
|
"hero"=>{"name"=>"Eden", "power"=>100, "location"=>TESTS_PATH}
|
|
49
|
-
}
|
|
48
|
+
}
|
|
50
49
|
end
|
|
51
50
|
|
|
52
51
|
it "loads ERB files" do
|
|
53
52
|
loader = Loader.new fixtures_path("configs3.yaml.erb")
|
|
54
53
|
|
|
55
|
-
assert_equal loader.
|
|
54
|
+
assert_equal loader.hash, {
|
|
56
55
|
"hero"=>{"name"=>"Eden", "power"=>100, "location"=>TESTS_PATH}
|
|
57
|
-
}
|
|
56
|
+
}
|
|
58
57
|
end
|
|
59
58
|
end
|
|
60
59
|
end
|
|
@@ -38,14 +38,28 @@ module DotHash
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
describe "
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
Settings.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
describe "#load" do
|
|
42
|
+
it 'merges new hashes' do
|
|
43
|
+
# starts as a empty hash
|
|
44
|
+
settings = Settings.new
|
|
45
|
+
assert_equal settings.hash, {}
|
|
46
|
+
|
|
47
|
+
# loads a new hash
|
|
48
|
+
settings.load({"name" => 'bar'})
|
|
49
|
+
assert_equal settings.hash, {"name" => "bar"}
|
|
50
|
+
|
|
51
|
+
# replaces existent props
|
|
52
|
+
settings.load({"name" => 'foo'})
|
|
53
|
+
assert_equal settings.hash, {"name" => "foo"}
|
|
54
|
+
|
|
55
|
+
# loads more stuff from a file
|
|
56
|
+
settings.load(fixtures_path)
|
|
57
|
+
assert_equal settings.hash, {
|
|
58
|
+
"name" => "foo",
|
|
59
|
+
"default" => {"attr" => {"speed"=>10, "power"=>11}},
|
|
60
|
+
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}},
|
|
61
|
+
"hero"=>{"name"=>"Eden", "power"=>100, "location"=> TESTS_PATH}
|
|
62
|
+
}
|
|
49
63
|
end
|
|
50
64
|
end
|
|
51
65
|
|
|
@@ -93,15 +107,15 @@ module DotHash
|
|
|
93
107
|
|
|
94
108
|
describe "loading from files" do
|
|
95
109
|
it "loads from a file" do
|
|
96
|
-
Settings.load fixtures_path("configs1.
|
|
110
|
+
Settings.load fixtures_path("configs1.yml")
|
|
97
111
|
assert_equal Settings.rogue.attr.speed, 20
|
|
98
112
|
assert_equal Settings.rogue.attr.power, 11
|
|
99
113
|
end
|
|
100
114
|
|
|
101
115
|
it "loads from two files" do
|
|
102
116
|
Settings.load(
|
|
103
|
-
fixtures_path("configs1.
|
|
104
|
-
fixtures_path("configs2.
|
|
117
|
+
fixtures_path("configs1.yml"),
|
|
118
|
+
fixtures_path("configs2.json")
|
|
105
119
|
)
|
|
106
120
|
|
|
107
121
|
assert_equal Settings.rogue.attr.speed, 25
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
require_relative "
|
|
1
|
+
require_relative "./test_helper"
|
|
2
2
|
|
|
3
|
-
describe
|
|
3
|
+
describe DotHash do
|
|
4
4
|
attr_reader :properties
|
|
5
5
|
|
|
6
|
-
describe "
|
|
6
|
+
describe ".load" do
|
|
7
7
|
before do
|
|
8
|
-
@properties = {
|
|
9
|
-
"price" => 10,
|
|
10
|
-
|
|
8
|
+
@properties = DotHash.load({
|
|
9
|
+
"price" => 10,
|
|
10
|
+
info: {name: "eagle"}
|
|
11
|
+
})
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
it "returns a DotHash object" do
|
|
File without changes
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dot_hash
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Marcelo Eden
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-04-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -46,6 +46,7 @@ extensions: []
|
|
|
46
46
|
extra_rdoc_files: []
|
|
47
47
|
files:
|
|
48
48
|
- ".gitignore"
|
|
49
|
+
- ".rake_tasks"
|
|
49
50
|
- ".travis.yml"
|
|
50
51
|
- Gemfile
|
|
51
52
|
- LICENSE
|
|
@@ -53,19 +54,18 @@ files:
|
|
|
53
54
|
- Rakefile
|
|
54
55
|
- dot_hash.gemspec
|
|
55
56
|
- lib/dot_hash.rb
|
|
56
|
-
- lib/dot_hash/hash_to_properties.rb
|
|
57
57
|
- lib/dot_hash/loader.rb
|
|
58
58
|
- lib/dot_hash/properties.rb
|
|
59
59
|
- lib/dot_hash/settings.rb
|
|
60
60
|
- lib/dot_hash/version.rb
|
|
61
61
|
- test/dot_hash/custom_settings_test.rb
|
|
62
|
-
- test/dot_hash/hash_to_properties_test.rb
|
|
63
62
|
- test/dot_hash/loader_test.rb
|
|
64
63
|
- test/dot_hash/properties_test.rb
|
|
65
64
|
- test/dot_hash/settings_test.rb
|
|
65
|
+
- test/dot_hash_test.rb
|
|
66
66
|
- test/fixtures/config.yaml.example
|
|
67
|
-
- test/fixtures/configs1.
|
|
68
|
-
- test/fixtures/configs2.
|
|
67
|
+
- test/fixtures/configs1.yml
|
|
68
|
+
- test/fixtures/configs2.json
|
|
69
69
|
- test/fixtures/configs3.yaml.erb
|
|
70
70
|
- test/test_helper.rb
|
|
71
71
|
homepage: https://github.com/3den/dot_hash
|
|
@@ -93,12 +93,12 @@ specification_version: 4
|
|
|
93
93
|
summary: Converts hash.to_properties so you can access values using properties.some_key
|
|
94
94
|
test_files:
|
|
95
95
|
- test/dot_hash/custom_settings_test.rb
|
|
96
|
-
- test/dot_hash/hash_to_properties_test.rb
|
|
97
96
|
- test/dot_hash/loader_test.rb
|
|
98
97
|
- test/dot_hash/properties_test.rb
|
|
99
98
|
- test/dot_hash/settings_test.rb
|
|
99
|
+
- test/dot_hash_test.rb
|
|
100
100
|
- test/fixtures/config.yaml.example
|
|
101
|
-
- test/fixtures/configs1.
|
|
102
|
-
- test/fixtures/configs2.
|
|
101
|
+
- test/fixtures/configs1.yml
|
|
102
|
+
- test/fixtures/configs2.json
|
|
103
103
|
- test/fixtures/configs3.yaml.erb
|
|
104
104
|
- test/test_helper.rb
|
data/test/fixtures/configs2.yaml
DELETED