hashconfig 0.0.1
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.
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/Gemfile +5 -0
- data/LICENSE +17 -0
- data/README.md +45 -0
- data/Rakefile +2 -0
- data/hashconfig.gemspec +17 -0
- data/lib/hashconfig/version.rb +3 -0
- data/lib/hashconfig.rb +32 -0
- data/spec/hashconfig_spec.rb +66 -0
- data/spec/spec_helper.rb +5 -0
- metadata +58 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
(General Public License)
|
2
|
+
|
3
|
+
Copyright (c) 2012 Philipp Böhm
|
4
|
+
|
5
|
+
This program is free software; you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU General Public License as published by
|
7
|
+
the Free Software Foundation in version 3 of the License.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
17
|
+
MA 02110-1301, USA.
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Hashconfig
|
2
|
+
|
3
|
+
Extends the Ruby Hash class with a method (merge_with_serialized) that
|
4
|
+
merges a hash instance with an serialized (YAML) instance of a hash. So
|
5
|
+
it is a lightweight mechanism for configuration.
|
6
|
+
|
7
|
+
[http://github.com/pboehm/hashconfig](http://github.com/pboehm/hashconfig)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'hashconfig'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install hashconfig
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
require 'hashconfig'
|
26
|
+
|
27
|
+
STANDARD_CONFIG = {
|
28
|
+
:default_directory => File.join(File.expand_path("~"), "Downloads"),
|
29
|
+
:store_episode_info => false,
|
30
|
+
:store_path => File.join(CONFIG_DIR, "information_storage.yml"),
|
31
|
+
:byte_count_for_md5 => 2048,
|
32
|
+
}
|
33
|
+
|
34
|
+
config = STANDARD_CONFIG.merge_with_serialized('path/to/yaml/file')
|
35
|
+
|
36
|
+
# config now holds the data from STANDARD_CONFIG updated with values from
|
37
|
+
# the yaml file
|
38
|
+
|
39
|
+
## Contributing
|
40
|
+
|
41
|
+
1. Fork it
|
42
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
43
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
44
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
45
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/hashconfig.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/hashconfig/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Philipp Böhm"]
|
6
|
+
gem.email = ["philipp@i77i.de"]
|
7
|
+
gem.description = %q{Simple configuration mechanism through serialized hash}
|
8
|
+
gem.summary = %q{Simple configuration mechanism through serialized hash}
|
9
|
+
gem.homepage = "http://github.com/pboehm/hashconfig"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "hashconfig"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Hashconfig::VERSION
|
17
|
+
end
|
data/lib/hashconfig.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "hashconfig/version"
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Hashconfig
|
5
|
+
|
6
|
+
class ::Hash
|
7
|
+
|
8
|
+
# this method merges a YAML-serialized hash-instance
|
9
|
+
# with self. if the given File is not exisiting this will write
|
10
|
+
# a serialized version of self to this file.
|
11
|
+
#
|
12
|
+
# if the given yaml file does not contain a serialized hash than it
|
13
|
+
# merges with an empty hash that returns self unchanged.
|
14
|
+
#
|
15
|
+
# returns a new Hash merged with deserialized version from the file
|
16
|
+
def merge_with_serialized(yaml_file)
|
17
|
+
|
18
|
+
unless File.file? yaml_file
|
19
|
+
File.open(yaml_file, 'w') {|f| f.write(self.to_yaml) }
|
20
|
+
end
|
21
|
+
|
22
|
+
persistent_config = YAML.load(File.new(yaml_file, "rb").read)
|
23
|
+
persistent_config = Hash.new unless persistent_config.is_a? Hash
|
24
|
+
|
25
|
+
config = self.merge(persistent_config)
|
26
|
+
File.open(yaml_file, 'w') {|f| f.write(config.to_yaml) }
|
27
|
+
|
28
|
+
return config
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
require File.dirname(__FILE__) + '/../lib/hashconfig'
|
5
|
+
|
6
|
+
TEST_DATA = {
|
7
|
+
:first => "first parameter",
|
8
|
+
:second => "second parameter",
|
9
|
+
:third => "third parameter"
|
10
|
+
}
|
11
|
+
|
12
|
+
TEST_DIR = File.join( File.dirname(__FILE__), "testfiles")
|
13
|
+
TEST_CONFIG_FILE = File.join(TEST_DIR, "config.yml")
|
14
|
+
TEST_EMPTY_CONFIG_FILE = File.join(TEST_DIR, "empty.yml")
|
15
|
+
TEST_INVALID_CONFIG_FILE = File.join(TEST_DIR, "invalid.yml")
|
16
|
+
TEST_NOT_EXISTING = File.join(TEST_DIR, "not_exisiting.yml")
|
17
|
+
|
18
|
+
|
19
|
+
describe Hashconfig do
|
20
|
+
|
21
|
+
before(:all) do
|
22
|
+
|
23
|
+
@modified = TEST_DATA.merge({:third => "modified third parameter"})
|
24
|
+
|
25
|
+
FileUtils.mkdir(TEST_DIR) unless File.directory? TEST_DIR
|
26
|
+
File.open(TEST_CONFIG_FILE, 'w') {|f| f.write(@modified.to_yaml) }
|
27
|
+
File.open(TEST_EMPTY_CONFIG_FILE, 'w') {|f| f.write(Hash.new.to_yaml) }
|
28
|
+
File.open(TEST_EMPTY_CONFIG_FILE, 'w') {|f| f.write("invalid") }
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
after(:all) do
|
33
|
+
FileUtils.remove_dir(TEST_DIR) if File.directory? TEST_DIR
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should add a method to the Ruby Hash class" do
|
37
|
+
Hash.new.respond_to?(:merge_with_serialized).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return an updated hash when yaml file is valid" do
|
41
|
+
config = TEST_DATA.merge_with_serialized(TEST_CONFIG_FILE)
|
42
|
+
config[:third].should eq "modified third parameter"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return original hash when yaml file is empty" do
|
46
|
+
config = TEST_DATA.merge_with_serialized(TEST_EMPTY_CONFIG_FILE)
|
47
|
+
config[:third].should eq "third parameter"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return original hash when yaml file is invalid" do
|
51
|
+
config = TEST_DATA.merge_with_serialized(TEST_INVALID_CONFIG_FILE)
|
52
|
+
config[:third].should eq "third parameter"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return original hash when yaml file is not exisiting" do
|
56
|
+
config = TEST_DATA.merge_with_serialized(TEST_INVALID_CONFIG_FILE)
|
57
|
+
config[:third].should eq "third parameter"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should update the yaml when it is merged with a different hash" do
|
61
|
+
updated = TEST_DATA.merge({:fourth => "parameter number 4"})
|
62
|
+
config = updated.merge_with_serialized(TEST_CONFIG_FILE)
|
63
|
+
config[:fourth].should eq "parameter number 4"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hashconfig
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Philipp Böhm
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-23 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Simple configuration mechanism through serialized hash
|
15
|
+
email:
|
16
|
+
- philipp@i77i.de
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- .rspec
|
23
|
+
- Gemfile
|
24
|
+
- LICENSE
|
25
|
+
- README.md
|
26
|
+
- Rakefile
|
27
|
+
- hashconfig.gemspec
|
28
|
+
- lib/hashconfig.rb
|
29
|
+
- lib/hashconfig/version.rb
|
30
|
+
- spec/hashconfig_spec.rb
|
31
|
+
- spec/spec_helper.rb
|
32
|
+
homepage: http://github.com/pboehm/hashconfig
|
33
|
+
licenses: []
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 1.8.19
|
53
|
+
signing_key:
|
54
|
+
specification_version: 3
|
55
|
+
summary: Simple configuration mechanism through serialized hash
|
56
|
+
test_files:
|
57
|
+
- spec/hashconfig_spec.rb
|
58
|
+
- spec/spec_helper.rb
|