proper_properties 0.0.1 → 0.0.2
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 +9 -5
- data/lib/proper_properties/properties.rb +59 -1
- data/lib/proper_properties/version.rb +2 -2
- data/spec/proper_properties_spec.rb +46 -4
- 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: ded64a75f7f400f69264e135dcc370f07b252e25
|
4
|
+
data.tar.gz: 984275d92225e8b14861b2a393dbffb908ddb5fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0be5d7ecbe24ebe704ebc8f76ece60cfe8cf467d0b4e1ac13af45859010fd9ef71ff6dad5c026f6cf243abee1d30d4a1e6a46f8984e5c97b658bdbd3862b3e7a
|
7
|
+
data.tar.gz: d84a9d989339e7ac198fcab17275da556566fd3e16835a0f58d48b618e213acd2c5b2035e31fe901b6121db33fdee74befc081beec3c79ea40e45a532e4c9eb6
|
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[properties_documentation]: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader)
|
2
|
+
|
1
3
|
# ProperProperties
|
2
4
|
|
3
5
|
[](https://travis-ci.org/tnarik/proper_properties)
|
@@ -6,7 +8,7 @@
|
|
6
8
|
[](http://rubygems.org/gems/proper_properties)
|
7
9
|
[](https://gemnasium.com/tnarik/proper_properties)
|
8
10
|
|
9
|
-
A ruby library to read and write [Java properties files](http://en.wikipedia.org/wiki/.properties), which format is better describe [in the Java documentation]
|
11
|
+
A ruby library to read and write [Java properties files](http://en.wikipedia.org/wiki/.properties), which format is better describe [in the Java documentation][properties_documentation].
|
10
12
|
|
11
13
|
## Installation
|
12
14
|
|
@@ -23,6 +25,7 @@ You can load a valid Java properties file from the file system using a path:
|
|
23
25
|
```ruby
|
24
26
|
properties = ProperProperties.load("path/to/my.properties")
|
25
27
|
properties[:foo] # => "bar"
|
28
|
+
properties['foo'] # => "bar"
|
26
29
|
```
|
27
30
|
|
28
31
|
If have already the content of the properties file at hand than parse the content as:
|
@@ -30,14 +33,15 @@ If have already the content of the properties file at hand than parse the conten
|
|
30
33
|
```ruby
|
31
34
|
properties = ProperProperties.load("foo=bar")
|
32
35
|
properties[:foo] # => "bar"
|
36
|
+
properties['foo'] # => "bar"
|
33
37
|
```
|
34
38
|
|
35
39
|
## Writing files
|
36
40
|
|
37
|
-
You can write any Hash-like structure as a properties file:
|
41
|
+
You can write any Hash-like structure (with symbol or string keys) as a properties file:
|
38
42
|
|
39
43
|
```ruby
|
40
|
-
hash = {:foo => "bar"}
|
44
|
+
hash = {:foo => "bar", "foobar" => "barfoo"}
|
41
45
|
ProperProperties.write(hash, "path/to/my.properties")
|
42
46
|
```
|
43
47
|
|
@@ -93,11 +97,11 @@ In the opposite direction line breaks will be correctly escaped but the generato
|
|
93
97
|
## Author
|
94
98
|
|
95
99
|
- Tnarik Innael (@tnarik)
|
96
|
-
- Jonas Thiel (@jonasthiel) : [original project](https://github.com/jnbt/java-properties)
|
100
|
+
- Jonas Thiel (@jonasthiel) : [original project](https://github.com/jnbt/java-properties) upto [1f2c4b008d69d0eae1084b1adfdea814e2b29899](https://github.com/tnarik/proper_properties/commit/1f2c4b008d69d0eae1084b1adfdea814e2b29899)
|
97
101
|
|
98
102
|
## References
|
99
103
|
|
100
|
-
For a proper description about the properties file format have a look at the [Java Plattform documentation]
|
104
|
+
For a proper description about the properties file format have a look at the [Java Plattform documentation][properties_documentation].
|
101
105
|
|
102
106
|
## License
|
103
107
|
|
@@ -1,6 +1,64 @@
|
|
1
1
|
module ProperProperties
|
2
2
|
# Simple representation of a properties file content
|
3
|
-
# by a
|
3
|
+
# by an extension of a Hash object a la ActiveSupport::HashWithIndifferentAccess, with underlying symbol keys
|
4
4
|
class Properties < Hash
|
5
|
+
|
6
|
+
# Assigns a new value to the hash:
|
7
|
+
#
|
8
|
+
# hash = ProperProperties::Properties.new
|
9
|
+
# hash[:key] = 'value'
|
10
|
+
#
|
11
|
+
# This value can be later fetched using either +:key+ or +'key'+.
|
12
|
+
def []=(key, value)
|
13
|
+
super(convert_key(key), value)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Checks the hash for a key matching the argument passed in:
|
17
|
+
#
|
18
|
+
# hash = ProperProperties::Properties.new
|
19
|
+
# hash['key'] = 'value'
|
20
|
+
# hash.key?(:key) # => true
|
21
|
+
# hash.key?('key') # => true
|
22
|
+
def key?(key)
|
23
|
+
super(convert_key(key))
|
24
|
+
end
|
25
|
+
|
26
|
+
# Same as <tt>Hash#fetch</tt> where the key passed as argument can be
|
27
|
+
# either a string or a symbol:
|
28
|
+
#
|
29
|
+
# counters = ProperProperties::Properties.new
|
30
|
+
# counters[:foo] = 1
|
31
|
+
#
|
32
|
+
# counters.fetch('foo') # => 1
|
33
|
+
# counters.fetch(:bar, 0) # => 0
|
34
|
+
# counters.fetch(:bar) {|key| 0} # => 0
|
35
|
+
# counters.fetch(:zoo) # => KeyError: key not found: "zoo"
|
36
|
+
def fetch(key, *extras)
|
37
|
+
super(convert_key(key), *extras)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns an array of the values at the specified indices:
|
41
|
+
#
|
42
|
+
# hash = ProperProperties::Properties.new
|
43
|
+
# hash[:a] = 'x'
|
44
|
+
# hash[:b] = 'y'
|
45
|
+
# hash.values_at('a', 'b') # => ["x", "y"]
|
46
|
+
def values_at(*indices)
|
47
|
+
indices.collect {|key| self[convert_key(key)]}
|
48
|
+
end
|
49
|
+
|
50
|
+
# Removes the specified key from the hash.
|
51
|
+
def delete(key)
|
52
|
+
super(convert_key(key))
|
53
|
+
end
|
54
|
+
|
55
|
+
def [](key)
|
56
|
+
self.fetch(key)
|
57
|
+
end
|
58
|
+
|
59
|
+
protected
|
60
|
+
def convert_key(key)
|
61
|
+
key.kind_of?(String) ? key.to_sym : key
|
62
|
+
end
|
5
63
|
end
|
6
64
|
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module ProperProperties
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.2"
|
3
|
+
end
|
@@ -4,29 +4,71 @@ require 'tempfile'
|
|
4
4
|
describe ProperProperties do
|
5
5
|
subject{ ProperProperties }
|
6
6
|
|
7
|
-
it "parses from string" do
|
7
|
+
it "parses from string to symbol hash" do
|
8
8
|
subject.parse("item1=item1").must_equal({:item1 => "item1"})
|
9
9
|
end
|
10
10
|
|
11
11
|
it "generates from hash" do
|
12
12
|
subject.generate({:item1 => "item1"}).must_equal("item1=item1")
|
13
|
+
subject.generate({"item2" => "item2"}).must_equal("item2=item2")
|
13
14
|
end
|
14
15
|
|
15
|
-
it "loads from file" do
|
16
|
+
it "loads from file and create a hash" do
|
16
17
|
with_temp_file do |file|
|
17
18
|
file << "item1=item1"
|
18
19
|
file.flush
|
19
20
|
|
20
21
|
subject.load(file.path).must_equal({:item1 => "item1"})
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "loads from file and allows symbol/string access" do
|
27
|
+
with_temp_file do |file|
|
28
|
+
file << "item1=item1"
|
29
|
+
file.flush
|
30
|
+
|
31
|
+
properties = subject.load(file.path)
|
32
|
+
properties[:item1].must_equal("item1")
|
33
|
+
properties['item1'].must_equal("item1")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "loads from file and allows manipulation" do
|
38
|
+
with_temp_file do |file|
|
39
|
+
file << "item1=item1\n"
|
40
|
+
file << "item2=item2\n"
|
41
|
+
file << "item3=item3\n"
|
42
|
+
file << "item4=item4"
|
43
|
+
file.flush
|
44
|
+
|
45
|
+
properties = subject.load(file.path)
|
46
|
+
|
47
|
+
properties.values_at(:item1, "item2", 'item3').must_equal(["item1", "item2", "item3"])
|
48
|
+
|
49
|
+
|
50
|
+
properties[:item2].must_equal("item2")
|
51
|
+
properties.delete(:item2).must_equal("item2")
|
52
|
+
proc{ properties[:item2] }.must_raise(KeyError)
|
53
|
+
|
54
|
+
properties['item3'].must_equal("item3")
|
55
|
+
properties.delete('item3').must_equal("item3")
|
56
|
+
proc{ properties['item3'] }.must_raise(KeyError)
|
57
|
+
|
58
|
+
properties.key?(:item4).must_equal(true)
|
59
|
+
properties.key?('item4').must_equal(true)
|
60
|
+
|
61
|
+
properties.key?(:item5).must_equal(false)
|
62
|
+
properties.key?('item5').must_equal(false)
|
21
63
|
end
|
22
64
|
end
|
23
65
|
|
24
66
|
it "writes to file" do
|
25
67
|
with_temp_file do |file|
|
26
|
-
subject.write({:item1 => "item1"}, file.path)
|
68
|
+
subject.write({:item1 => "item1", "item2" => "item2"}, file.path)
|
27
69
|
|
28
70
|
file.rewind
|
29
|
-
file.read.must_equal "item1=item1"
|
71
|
+
file.read.must_equal "item1=item1\nitem2=item2"
|
30
72
|
end
|
31
73
|
end
|
32
74
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proper_properties
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tnarik Innael
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|