hashr 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.md +18 -5
- data/lib/hashr.rb +2 -6
- data/lib/hashr/version.rb +1 -1
- metadata +5 -5
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[![Build Status](https://secure.travis-ci.org/svenfuchs/hashr.png)](http://travis-ci.org/svenfuchs/hashr)
|
2
|
+
|
1
3
|
# Hashr
|
2
4
|
|
3
5
|
Hashr is a very simple and tiny class derived from Ruby's core Hash class which makes using nested hashes for configuration (and other purposes) easier and less repetive and error prone.
|
@@ -5,7 +7,7 @@ Hashr is a very simple and tiny class derived from Ruby's core Hash class which
|
|
5
7
|
It supports the following features:
|
6
8
|
|
7
9
|
* method read and write access
|
8
|
-
* automatic predicate (boolean, i.e.
|
10
|
+
* automatic predicate (boolean, i.e. `?`) methods
|
9
11
|
* easy defaults
|
10
12
|
* easy inclusion of modules into nested hashes
|
11
13
|
* automatic symbolized keys
|
@@ -22,19 +24,19 @@ Directly use Hashr instances like this:
|
|
22
24
|
config.foo.bar? # => true
|
23
25
|
config.foo.bar # => 'bar'
|
24
26
|
|
25
|
-
config.foo.bar = '
|
26
|
-
config.foo.bar # => '
|
27
|
+
config.foo.bar = 'bar!'
|
28
|
+
config.foo.bar # => 'bar!'
|
27
29
|
|
28
30
|
config.foo.baz = 'baz'
|
29
31
|
config.foo.baz # => 'baz'
|
30
32
|
|
31
|
-
Be aware that by default missing keys won't raise
|
33
|
+
Be aware that by default missing keys won't raise an exception but instead behave like Hash access:
|
32
34
|
|
33
35
|
config = Hashr.new
|
34
36
|
config.foo? # => false
|
35
37
|
config.foo # => nil
|
36
38
|
|
37
|
-
You can make Hashr to raise an IndexError though like this:
|
39
|
+
You can make Hashr to raise an `IndexError` though like this:
|
38
40
|
|
39
41
|
Hashr.raise_missing_keys = true
|
40
42
|
config = Hashr.new
|
@@ -98,3 +100,14 @@ You can run the tests as follows:
|
|
98
100
|
|
99
101
|
# using just ruby
|
100
102
|
ruby -rubygems -Ilib:test test/hashr_test.rb
|
103
|
+
|
104
|
+
## Other libraries
|
105
|
+
|
106
|
+
You also might want to check out OpenStruct and Hashie.
|
107
|
+
|
108
|
+
* [OpenStruct](http://ruby-doc.org/stdlib/libdoc/ostruct/rdoc/classes/OpenStruct.html) does less but comes as a Ruby standard library.
|
109
|
+
* [Hashie](https://github.com/intridea/hashie) has a bunch of support classes (like `Mash`, `Dash`, `Trash`) which all support different features that you might need.
|
110
|
+
|
111
|
+
## License
|
112
|
+
|
113
|
+
[MIT License](https://github.com/svenfuchs/hashr/blob/master/MIT-LICENSE)
|
data/lib/hashr.rb
CHANGED
@@ -35,17 +35,13 @@ class Hashr < Hash
|
|
35
35
|
when '='
|
36
36
|
self[name.to_s[0..-2].to_sym] = args.first
|
37
37
|
else
|
38
|
-
|
38
|
+
raise(IndexError.new("Key #{name.inspect} is not defined.")) if !key?(name) && self.class.raise_missing_keys
|
39
|
+
self[name]
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
42
43
|
protected
|
43
44
|
|
44
|
-
def read(key)
|
45
|
-
raise(IndexError.new("Key #{key.inspect} is not defined.")) if !key?(key) && self.class.raise_missing_keys
|
46
|
-
self[key]
|
47
|
-
end
|
48
|
-
|
49
45
|
def include_modules(modules)
|
50
46
|
Array(modules).each { |mod| meta_class.send(:include, mod) } if modules
|
51
47
|
end
|
data/lib/hashr/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sven Fuchs
|
@@ -48,7 +48,7 @@ dependencies:
|
|
48
48
|
version: 0.0.2
|
49
49
|
type: :development
|
50
50
|
version_requirements: *id002
|
51
|
-
description: Simple Hash extension
|
51
|
+
description: Simple Hash extension to make working with nested hashes (e.g. for configuration) easier and less error-prone.
|
52
52
|
email: svenfuchs@artweb-design.de
|
53
53
|
executables: []
|
54
54
|
|
@@ -100,6 +100,6 @@ rubyforge_project: "[none]"
|
|
100
100
|
rubygems_version: 1.6.2
|
101
101
|
signing_key:
|
102
102
|
specification_version: 3
|
103
|
-
summary: Simple Hash extension
|
103
|
+
summary: Simple Hash extension to make working with nested hashes (e.g. for configuration) easier and less error-prone
|
104
104
|
test_files: []
|
105
105
|
|