typed 0.2.0 → 0.2.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/lib/typed/default.rb +7 -1
- data/lib/typed/hash.rb +16 -1
- data/lib/typed/version.rb +1 -1
- data/spec/default_spec.rb +24 -0
- data/spec/merge_spec.rb +28 -0
- data/spec/path_spec.rb +29 -0
- metadata +6 -3
data/lib/typed/default.rb
CHANGED
@@ -9,7 +9,13 @@ module Typed
|
|
9
9
|
@kvs[key.to_s] = val
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def merge!(hash)
|
13
|
+
hash.each_pair do |key, val|
|
14
|
+
self[key] = val
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def register_lazy(key, block)
|
13
19
|
return if @kvs.exist?(key.to_s)
|
14
20
|
raise ArgumentError, "Lazy default value needs block: #{key}" unless block
|
15
21
|
@kvs[key.to_s] = Schema::LazyValue.new(block)
|
data/lib/typed/hash.rb
CHANGED
@@ -24,7 +24,7 @@ module Typed
|
|
24
24
|
|
25
25
|
def default(key = nil, &block)
|
26
26
|
if key
|
27
|
-
@default.
|
27
|
+
@default.register_lazy(key, block)
|
28
28
|
else
|
29
29
|
@default
|
30
30
|
end
|
@@ -113,6 +113,21 @@ module Typed
|
|
113
113
|
keys.map{|key| self[key]}
|
114
114
|
end
|
115
115
|
|
116
|
+
def merge!(hash)
|
117
|
+
hash.each_pair do |key, val|
|
118
|
+
self[key] = val
|
119
|
+
end
|
120
|
+
|
121
|
+
return self
|
122
|
+
end
|
123
|
+
|
124
|
+
######################################################################
|
125
|
+
### Conversions
|
126
|
+
|
127
|
+
def path(key)
|
128
|
+
self[key].must.coerced(Pathname, String=>proc{|i| Pathname(i)})
|
129
|
+
end
|
130
|
+
|
116
131
|
######################################################################
|
117
132
|
### Utils
|
118
133
|
|
data/lib/typed/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Typed::Default do
|
4
|
+
describe "#merge" do
|
5
|
+
it "should merge to hash" do
|
6
|
+
data = Typed::Hash.new
|
7
|
+
data.default.merge!(:a=>1, :b=>2)
|
8
|
+
data.keys.sort.should == ["a", "b"]
|
9
|
+
data["a"].should == 1
|
10
|
+
data["b"].should == 2
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should merge to hash only when the key is not set" do
|
14
|
+
data = Typed::Hash.new
|
15
|
+
data[:a] = 10
|
16
|
+
|
17
|
+
data.default.merge!(:a=>1, :b=>2)
|
18
|
+
data.keys.sort.should == ["a", "b"]
|
19
|
+
data["a"].should == 10
|
20
|
+
data["b"].should == 2
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/spec/merge_spec.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Typed::Hash do
|
4
|
+
describe "#merge!" do
|
5
|
+
context "(empty)" do
|
6
|
+
it "should merge given hash as same as Hash" do
|
7
|
+
data = Typed::Hash.new
|
8
|
+
data.merge!("a" => 1, :b => "x")
|
9
|
+
data.keys.sort.should == ["a", "b"]
|
10
|
+
data["a"].should == 1
|
11
|
+
data["b"].should == "x"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "(elements exist)" do
|
16
|
+
it "should merge given hash as same as Hash" do
|
17
|
+
data = Typed::Hash.new
|
18
|
+
data["a"] = 1
|
19
|
+
|
20
|
+
data.merge!("a" => 2, :b => "x", :c => [])
|
21
|
+
data.keys.sort.should == ["a", "b", "c"]
|
22
|
+
data["a"].should == 2
|
23
|
+
data["b"].should == "x"
|
24
|
+
data["c"].should == []
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/path_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Typed::Hash do
|
4
|
+
describe "#path" do
|
5
|
+
it "should return a Pathname when it is a String" do
|
6
|
+
data = Typed::Hash.new
|
7
|
+
data["dir"] = "tmp/foo"
|
8
|
+
|
9
|
+
data.path("dir").should == Pathname("tmp/foo")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return itself when it is a Pathname" do
|
13
|
+
data = Typed::Hash.new
|
14
|
+
data["dir"] = Pathname("tmp/foo")
|
15
|
+
|
16
|
+
data.path("dir").should == Pathname("tmp/foo")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should raise Must::Invalid if not pathname-able" do
|
20
|
+
data = Typed::Hash.new
|
21
|
+
data["dir"] = 10
|
22
|
+
|
23
|
+
lambda {
|
24
|
+
data.path("dir")
|
25
|
+
}.should raise_error(Must::Invalid)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- maiha
|
@@ -84,8 +84,11 @@ files:
|
|
84
84
|
- lib/typed/schema.rb
|
85
85
|
- lib/typed/version.rb
|
86
86
|
- spec/changes_spec.rb
|
87
|
+
- spec/default_spec.rb
|
87
88
|
- spec/events_spec.rb
|
88
89
|
- spec/hash_spec.rb
|
90
|
+
- spec/merge_spec.rb
|
91
|
+
- spec/path_spec.rb
|
89
92
|
- spec/schema_spec.rb
|
90
93
|
- spec/spec_helper.rb
|
91
94
|
- typed.gemspec
|