shash 0.0.4 → 0.0.5

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/README.md CHANGED
@@ -34,6 +34,14 @@ You can of course set values directly from a Shash object
34
34
  Settings.has_key?("name") #=> true
35
35
  Settings.name #=> "Shash!"
36
36
 
37
+ Slash keys are defaulted to strings. But what about symbols? You can tell Shash to handle keys the way you want
38
+
39
+ Settings = Shash.new{ |key| key.to_sym }
40
+ Settings.name = "Shash!"
41
+ Settings.has_key?(:name) #=> true
42
+ Settings.inspect #=> {:name=>"Shash!"}
43
+ Settings.name #=> "Shash!"
44
+
37
45
  From a YAML file, or any other key/value kind of file
38
46
 
39
- Settings = YAML.load_file( "path/to/your/file.yml" ).to_shash
47
+ Settings = YAML.load_file( File.open("path/to/your/file.yml") ).to_shash
data/lib/shash.rb CHANGED
@@ -1,18 +1,21 @@
1
- class Shash
2
- attr_reader :_hash
3
-
4
- def initialize(hash={})
1
+ class Shash
2
+ def initialize(hash={}, &proc)
5
3
  @_hash = hash
4
+ @_proc = proc
6
5
  end
6
+
7
+ def _key key
8
+ @_proc ? @_proc.call(key) : key
9
+ end
7
10
 
8
11
  def method_missing(key, *args, &block)
9
12
  if key[/=$/]
10
- @_hash[key[0...-1]] = args.first
13
+ @_hash[_key(key[0...-1])] = args.first
11
14
  else
12
- if value = @_hash[key.to_s]
15
+ if value = @_hash[_key(key.to_s)]
13
16
  case value
14
17
  when Hash
15
- Shash.new(value)
18
+ Shash.new(value, &@_proc)
16
19
  else
17
20
  value
18
21
  end
@@ -23,12 +26,12 @@ class Shash
23
26
  end
24
27
 
25
28
  def has_key?(key)
26
- @_hash.has_key?(key.to_s)
29
+ @_hash.has_key?(key)
27
30
  end
28
31
  alias_method :key?, :has_key?
29
32
 
30
33
  def ==(other)
31
- @_hash == other._hash
34
+ other == @_hash
32
35
  end
33
36
 
34
37
  def []=(key,value)
data/lib/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class Shash
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- BUILD = 4
4
+ BUILD = 5
5
5
 
6
6
  VERSION = "#{MAJOR}.#{MINOR}.#{BUILD}"
7
7
  end
data/test/test_shash.rb CHANGED
@@ -2,7 +2,7 @@ require File.join(File.dirname(__FILE__), "..", "lib", "shash")
2
2
 
3
3
  describe Hash do
4
4
  it "#to_shash should returns a new Shash object" do
5
- {"a"=>1}.to_shash.should == Shash.new({"a"=>1})
5
+ {"a"=>1}.to_shash.should == Shash.new("a"=>1)
6
6
  end
7
7
  end
8
8
 
@@ -43,4 +43,28 @@ describe Shash do
43
43
  h.b.should == 2
44
44
  end
45
45
 
46
+ it "#initialize should take a block and call it for each key before set/get" do
47
+ h = Shash.new(:a=>1){ |k| k.to_sym }
48
+ h.b = 2
49
+ h.should == {:a=>1, :b=>2}.to_shash
50
+ h.has_key?(:b).should == true
51
+ h.b.should == 2
52
+ end
53
+
54
+ it "#initialize should propagates the proc to sub-shashes when given" do
55
+ h = Shash.new{ |k| k.to_sym }
56
+ h.a = {}
57
+ h.a.b = 1
58
+ h.should == {:a=>{:b=>1}}
59
+ end
60
+
61
+ it "should handles all sort of fancy things" do
62
+ h = Shash.new{ |k| k.upcase.reverse }
63
+ h.test = "are you sure?"
64
+ h.has_key?("test").should == false
65
+ h.has_key?("TSET").should == true
66
+ h.test.should == "are you sure?"
67
+ h.should == {"TSET"=>"are you sure?"}.to_shash
68
+ end
69
+
46
70
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-31 00:00:00.000000000Z
12
+ date: 2011-09-01 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: Replace hash keys with method calls
15
15
  email: