proper_properties 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](http://img.shields.io/travis/tnarik/proper_properties.svg)](https://travis-ci.org/tnarik/proper_properties)
|
@@ -6,7 +8,7 @@
|
|
6
8
|
[![RubyGems](http://img.shields.io/gem/v/proper_properties.svg)](http://rubygems.org/gems/proper_properties)
|
7
9
|
[![Gemnasium](http://img.shields.io/gemnasium/tnarik/proper_properties.svg)](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
|