dot_hash 0.5.9 → 1.0.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/.travis.yml +2 -0
- data/README.md +16 -1
- data/lib/dot_hash/properties.rb +2 -2
- data/lib/dot_hash/settings.rb +8 -18
- data/lib/dot_hash/version.rb +1 -1
- data/test/dot_hash/custom_settings_test.rb +4 -5
- data/test/dot_hash/hash_to_properties_test.rb +2 -2
- data/test/dot_hash/loader_test.rb +6 -6
- data/test/dot_hash/properties_test.rb +17 -19
- data/test/dot_hash/settings_test.rb +21 -15
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edb87b60438f87476c0a33567b0b23270e6d76a4
|
4
|
+
data.tar.gz: 84051d724b4f4e1d207fd66fbcfed2266a923f81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d615ed0055a00c5f7696a10e67902f4802235ee770438ebf284b6cc232db6e3ab3800f402ee372ea944d9e5e67a1c3d4e3656c58c5edca61ab112357a84c4f65
|
7
|
+
data.tar.gz: c754aad3c0ba2d9d24335b260b327692f466f2e9ff9e7960dcd2f09acf8de413346f593372a86cf0387eebcbd1288a5de69548197ced1984041430ab20fea796
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
# DotHash
|
3
2
|
[](https://codeclimate.com/github/3den/dot_hash) [](https://travis-ci.org/3den/dot_hash)
|
4
3
|
|
@@ -29,8 +28,24 @@ properties.size.height # returns 100, it is the same as some_hash[:size][:height
|
|
29
28
|
properties.color # returns "red", it works with Strings and Symbol keys
|
30
29
|
properties[:color] # returns "red", can be used like a hash with string keys
|
31
30
|
properties["color"] # returns "red", can be used like a hash with symbol keys
|
31
|
+
|
32
|
+
# App Settings
|
33
|
+
class Settings < DotHash::Settings
|
34
|
+
load 'path/to/some/settings.yaml', 'path/to/settings-directory/', {something: 'Some Value'}
|
35
|
+
end
|
36
|
+
|
37
|
+
# Use the settings as a Singleton
|
38
|
+
Settings.something
|
39
|
+
Settings.other.stuff.from_yml_settings
|
40
|
+
|
41
|
+
# Create a settings instance from some YML
|
42
|
+
swagger = Settings.new Rails.root.join('config', 'my-swagger.yml')
|
43
|
+
|
44
|
+
swagger.info.title # returns the title from swagger doc
|
32
45
|
```
|
33
46
|
|
47
|
+
Check the tests for more details.
|
48
|
+
|
34
49
|
## Contributing
|
35
50
|
|
36
51
|
1. Fork it
|
data/lib/dot_hash/properties.rb
CHANGED
data/lib/dot_hash/settings.rb
CHANGED
@@ -1,32 +1,22 @@
|
|
1
1
|
module DotHash
|
2
|
-
class Settings
|
3
|
-
|
4
|
-
|
5
|
-
def initialize(configs, wrapper=Properties)
|
6
|
-
@configs = wrapper.new(configs)
|
7
|
-
end
|
8
|
-
|
9
|
-
def method_missing(key, *args, &block)
|
10
|
-
configs.send(key, *args, &block)
|
11
|
-
end
|
12
|
-
|
13
|
-
def respond_to?(key)
|
14
|
-
configs.respond_to?(key)
|
2
|
+
class Settings < Properties
|
3
|
+
def initialize(*args)
|
4
|
+
super Loader.new(*args).load
|
15
5
|
end
|
16
6
|
|
17
7
|
class << self
|
18
8
|
attr_reader :instance
|
19
9
|
|
20
|
-
def method_missing(
|
21
|
-
instance.public_send
|
10
|
+
def method_missing(*args, &block)
|
11
|
+
instance.public_send(*args, &block)
|
22
12
|
end
|
23
13
|
|
24
|
-
def
|
25
|
-
|
14
|
+
def respond_to_missing?(*args)
|
15
|
+
instance.respond_to?(*args)
|
26
16
|
end
|
27
17
|
|
28
18
|
def load(*args)
|
29
|
-
@instance = new
|
19
|
+
@instance = new(*args)
|
30
20
|
end
|
31
21
|
|
32
22
|
def namespace(namespace)
|
data/lib/dot_hash/version.rb
CHANGED
@@ -6,12 +6,11 @@ end
|
|
6
6
|
|
7
7
|
describe CustomSettings do
|
8
8
|
it "loads the given settings" do
|
9
|
-
CustomSettings.attributes.power
|
10
|
-
CustomSettings.attributes.skills
|
9
|
+
assert_equal CustomSettings.attributes.power, 10
|
10
|
+
assert_equal CustomSettings.attributes.skills, ["fireball", "frost"]
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
14
|
class CustomSettings2 < DotHash::Settings
|
16
15
|
load attributes: {power: 10, name: "Eden", skills: ["fireball", "frost"]}
|
17
16
|
namespace :attributes
|
@@ -19,7 +18,7 @@ end
|
|
19
18
|
|
20
19
|
describe CustomSettings2 do
|
21
20
|
it "loads the settings within the namespace" do
|
22
|
-
CustomSettings2.power
|
23
|
-
CustomSettings2.skills
|
21
|
+
assert_equal CustomSettings2.power, 10
|
22
|
+
assert_equal CustomSettings2.skills, ["fireball", "frost"]
|
24
23
|
end
|
25
24
|
end
|
@@ -15,11 +15,11 @@ describe Hash do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "gets nested properties" do
|
18
|
-
properties.info.name
|
18
|
+
assert_equal properties.info.name, "eagle"
|
19
19
|
end
|
20
20
|
|
21
21
|
it "gets simple properties" do
|
22
|
-
properties.price
|
22
|
+
assert_equal properties.price, 10
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -9,13 +9,13 @@ module DotHash
|
|
9
9
|
{a: 1, b: {c: 2}},
|
10
10
|
{b: {x: {z: 10}}}
|
11
11
|
)
|
12
|
-
loader.load
|
12
|
+
assert_equal loader.load,({a: 1, b: {c: 2, x: {z: 10}}})
|
13
13
|
end
|
14
14
|
|
15
15
|
it "loads from a file" do
|
16
16
|
loader = Loader.new fixtures_path("configs1.yaml")
|
17
17
|
|
18
|
-
loader.load
|
18
|
+
assert_equal loader.load,({
|
19
19
|
"default" => {"attr" => {"speed"=>10, "power"=>11}},
|
20
20
|
"rogue" => {"attr" => {"speed"=>20, "power"=>11}}
|
21
21
|
})
|
@@ -27,7 +27,7 @@ module DotHash
|
|
27
27
|
fixtures_path("configs2.yaml")
|
28
28
|
)
|
29
29
|
|
30
|
-
loader.load
|
30
|
+
assert_equal loader.load,({
|
31
31
|
"default"=>{"attr"=>{"speed"=>10, "power"=>11}},
|
32
32
|
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}}
|
33
33
|
})
|
@@ -36,13 +36,13 @@ module DotHash
|
|
36
36
|
it "does not load files without the yaml extension" do
|
37
37
|
loader = Loader.new fixtures_path("config.yaml.example")
|
38
38
|
|
39
|
-
loader.load
|
39
|
+
assert_equal loader.load,({})
|
40
40
|
end
|
41
41
|
|
42
42
|
it "loads from a directory" do
|
43
43
|
loader = Loader.new fixtures_path
|
44
44
|
|
45
|
-
loader.load
|
45
|
+
assert_equal loader.load,({
|
46
46
|
"default"=>{"attr"=>{"speed"=>10, "power"=>11}},
|
47
47
|
"rogue"=>{"attr"=>{"speed"=>25, "power"=>11}},
|
48
48
|
"hero"=>{"name"=>"Eden", "power"=>100, "location"=>TESTS_PATH}
|
@@ -52,7 +52,7 @@ module DotHash
|
|
52
52
|
it "loads ERB files" do
|
53
53
|
loader = Loader.new fixtures_path("configs3.yaml.erb")
|
54
54
|
|
55
|
-
loader.load
|
55
|
+
assert_equal loader.load,({
|
56
56
|
"hero"=>{"name"=>"Eden", "power"=>100, "location"=>TESTS_PATH}
|
57
57
|
})
|
58
58
|
end
|
@@ -11,7 +11,7 @@ module DotHash
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "gets a hash property using the dot notation" do
|
14
|
-
properties.speed
|
14
|
+
assert_equal properties.speed, "15"
|
15
15
|
end
|
16
16
|
|
17
17
|
it "raises an error if the method is not on the hash" do
|
@@ -21,17 +21,15 @@ module DotHash
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "gets a property from a stringed key" do
|
24
|
-
properties.power
|
24
|
+
assert_equal properties.power, 100
|
25
25
|
end
|
26
26
|
|
27
27
|
it "gets all values from a given property" do
|
28
|
-
properties.values
|
28
|
+
assert_equal properties.values, ["15", 100]
|
29
29
|
end
|
30
30
|
|
31
31
|
it "responds to a block method" do
|
32
|
-
properties.map
|
33
|
-
[key, value]
|
34
|
-
end.must_equal [[:speed, "15"], ["power", 100]]
|
32
|
+
assert_equal properties.map { |k, v| [k, v] }, [[:speed, "15"], ["power", 100]]
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
@@ -47,12 +45,12 @@ module DotHash
|
|
47
45
|
end
|
48
46
|
|
49
47
|
it "gets chained properties" do
|
50
|
-
properties.user.info.name
|
51
|
-
properties.user.info.is_admin
|
48
|
+
assert_equal properties.user.info.name, "dude"
|
49
|
+
assert_equal properties.user.info.is_admin, false
|
52
50
|
end
|
53
51
|
|
54
52
|
it 'preserves nil-value nodes' do
|
55
|
-
properties.user.info.favorite_thing
|
53
|
+
assert_nil properties.user.info.favorite_thing
|
56
54
|
end
|
57
55
|
end
|
58
56
|
|
@@ -62,15 +60,15 @@ module DotHash
|
|
62
60
|
end
|
63
61
|
|
64
62
|
it "accesses properties like a symbol hash" do
|
65
|
-
properties[:user][:name]
|
63
|
+
assert_equal properties[:user][:name], "dude"
|
66
64
|
end
|
67
65
|
|
68
66
|
it "accesses properties like a string hash" do
|
69
|
-
properties["user"]["name"]
|
67
|
+
assert_equal properties["user"]["name"], "dude"
|
70
68
|
end
|
71
69
|
|
72
70
|
it 'returns nil when value not present' do
|
73
|
-
properties['missing']
|
71
|
+
assert_nil properties['missing']
|
74
72
|
end
|
75
73
|
end
|
76
74
|
end
|
@@ -81,7 +79,7 @@ module DotHash
|
|
81
79
|
end
|
82
80
|
|
83
81
|
it "returns a hash" do
|
84
|
-
properties.to_hash
|
82
|
+
assert_equal properties.to_hash, user: {name: "dude"}
|
85
83
|
end
|
86
84
|
end
|
87
85
|
|
@@ -91,7 +89,7 @@ module DotHash
|
|
91
89
|
end
|
92
90
|
|
93
91
|
it "returns a hash" do
|
94
|
-
properties.to_json
|
92
|
+
assert_equal properties.to_json, '{"user":{"name":"dude"}}'
|
95
93
|
end
|
96
94
|
end
|
97
95
|
|
@@ -104,7 +102,7 @@ module DotHash
|
|
104
102
|
end
|
105
103
|
|
106
104
|
it "returns the hash as a string" do
|
107
|
-
properties.to_s
|
105
|
+
assert_equal properties.to_s, hash.to_s
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
@@ -144,16 +142,16 @@ module DotHash
|
|
144
142
|
end
|
145
143
|
|
146
144
|
it 'has a capturable method for a simple property' do
|
147
|
-
@properties.method(:speed).call
|
145
|
+
assert_equal @properties.method(:speed).call, "100"
|
148
146
|
end
|
149
147
|
|
150
148
|
it 'has a capturable method for a nested property' do
|
151
|
-
@properties.info.method(:name).call
|
152
|
-
@properties.method(:info).call.name
|
149
|
+
assert_equal @properties.info.method(:name).call, "Eden"
|
150
|
+
assert_equal @properties.method(:info).call.name, "Eden"
|
153
151
|
end
|
154
152
|
|
155
153
|
it 'has a capturable method for a string property' do
|
156
|
-
@properties.method(:color).call
|
154
|
+
assert_equal @properties.method(:color).call, "#00FFBB"
|
157
155
|
end
|
158
156
|
|
159
157
|
it 'does not have a capturable method for a missing property' do
|
@@ -11,13 +11,13 @@ module DotHash
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "gets hash properties" do
|
14
|
-
settings.site
|
15
|
-
settings[:site]
|
14
|
+
assert_equal settings.site, "skyo.com"
|
15
|
+
assert_equal settings[:site], "skyo.com"
|
16
16
|
end
|
17
17
|
|
18
18
|
it "gets a nested hash property" do
|
19
|
-
settings.facebook.api
|
20
|
-
settings['facebook']['api']
|
19
|
+
assert_equal settings.facebook.api, "123"
|
20
|
+
assert_equal settings['facebook']['api'], "123"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -29,6 +29,12 @@ module DotHash
|
|
29
29
|
|
30
30
|
it "responds to a property on the configs" do
|
31
31
|
settings.must_respond_to :site
|
32
|
+
settings.must_respond_to :hash
|
33
|
+
settings.must_respond_to :to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
it "does not responds to crasy stuff" do
|
37
|
+
settings.wont_respond_to :foobar
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
@@ -50,8 +56,8 @@ module DotHash
|
|
50
56
|
end
|
51
57
|
|
52
58
|
it "gets hash properties" do
|
53
|
-
Settings.site
|
54
|
-
Settings['site']
|
59
|
+
assert_equal Settings.site, "skyo.com"
|
60
|
+
assert_equal Settings['site'], "skyo.com"
|
55
61
|
end
|
56
62
|
end
|
57
63
|
|
@@ -73,23 +79,23 @@ module DotHash
|
|
73
79
|
end
|
74
80
|
|
75
81
|
it "adds new properties to the previous hash" do
|
76
|
-
Settings.b.x.z
|
82
|
+
assert_equal Settings.b.x.z, 10
|
77
83
|
end
|
78
84
|
|
79
85
|
it "keeps non-changed properties untouched" do
|
80
|
-
Settings.a
|
86
|
+
assert_equal Settings.a, 1
|
81
87
|
end
|
82
88
|
|
83
89
|
it "merges nested hashes correctly" do
|
84
|
-
Settings.b.c
|
90
|
+
assert_equal Settings.b.c, 2
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
88
94
|
describe "loading from files" do
|
89
95
|
it "loads from a file" do
|
90
96
|
Settings.load fixtures_path("configs1.yaml")
|
91
|
-
Settings.rogue.attr.speed
|
92
|
-
Settings.rogue.attr.power
|
97
|
+
assert_equal Settings.rogue.attr.speed, 20
|
98
|
+
assert_equal Settings.rogue.attr.power, 11
|
93
99
|
end
|
94
100
|
|
95
101
|
it "loads from two files" do
|
@@ -98,8 +104,8 @@ module DotHash
|
|
98
104
|
fixtures_path("configs2.yaml")
|
99
105
|
)
|
100
106
|
|
101
|
-
Settings.rogue.attr.speed
|
102
|
-
Settings.rogue.attr.power
|
107
|
+
assert_equal Settings.rogue.attr.speed, 25
|
108
|
+
assert_equal Settings.rogue.attr.power, 11
|
103
109
|
end
|
104
110
|
|
105
111
|
it "does not load files without the yaml extension" do
|
@@ -110,8 +116,8 @@ module DotHash
|
|
110
116
|
|
111
117
|
it "loads from a directory" do
|
112
118
|
Settings.load fixtures_path
|
113
|
-
Settings.rogue.attr.speed
|
114
|
-
Settings.rogue.attr.power
|
119
|
+
assert_equal Settings.rogue.attr.speed, 25
|
120
|
+
assert_equal Settings.rogue.attr.power, 11
|
115
121
|
end
|
116
122
|
end
|
117
123
|
end
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dot_hash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.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:
|
11
|
+
date: 2017-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
description: Access hash values using the dot notation
|
@@ -31,8 +31,8 @@ executables: []
|
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
-
- .gitignore
|
35
|
-
- .travis.yml
|
34
|
+
- ".gitignore"
|
35
|
+
- ".travis.yml"
|
36
36
|
- Gemfile
|
37
37
|
- LICENSE
|
38
38
|
- README.md
|
@@ -63,17 +63,17 @@ require_paths:
|
|
63
63
|
- lib
|
64
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- -
|
71
|
+
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '0'
|
74
74
|
requirements: []
|
75
75
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.6.8
|
77
77
|
signing_key:
|
78
78
|
specification_version: 4
|
79
79
|
summary: Converts hash.to_properties so you can access values using properties.some_key
|