typed 0.1.5 → 0.2.0

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.rdoc CHANGED
@@ -65,7 +65,7 @@ We need some typed variables to avoid silly and stealth mistakes.
65
65
  => []
66
66
  >> vars[:a] = 1
67
67
  >> vars.changes.keys
68
- => [:a]
68
+ => ["a"]
69
69
  >> vars.changes.reset
70
70
  >> vars.changes.keys
71
71
  => []
@@ -92,6 +92,7 @@ We need some typed variables to avoid silly and stealth mistakes.
92
92
 
93
93
  * Typed::Hash can't assign Class/Module cause they are treated as type definitions
94
94
  * must gem adds Object#must method
95
+ * All keys are forced to String [since: verson 0.2.0]
95
96
 
96
97
 
97
98
  == INSTALL:
data/lib/typed/changes.rb CHANGED
@@ -9,7 +9,7 @@ module Typed
9
9
  end
10
10
 
11
11
  def touch(key)
12
- @hash[key] = Time.now
12
+ @hash[key.to_s] = Time.now
13
13
  end
14
14
 
15
15
  def keys
data/lib/typed/default.rb CHANGED
@@ -5,14 +5,14 @@ module Typed
5
5
  end
6
6
 
7
7
  def []=(key, val)
8
- return if @kvs.exist?(key)
9
- @kvs[key] = val
8
+ return if @kvs.exist?(key.to_s)
9
+ @kvs[key.to_s] = val
10
10
  end
11
11
 
12
12
  def regsiter_lazy(key, block)
13
- return if @kvs.exist?(key)
13
+ return if @kvs.exist?(key.to_s)
14
14
  raise ArgumentError, "Lazy default value needs block: #{key}" unless block
15
- @kvs[key] = Schema::LazyValue.new(block)
15
+ @kvs[key.to_s] = Schema::LazyValue.new(block)
16
16
  end
17
17
  end
18
18
  end
data/lib/typed/hash.rb CHANGED
@@ -47,7 +47,7 @@ module Typed
47
47
  def [](key)
48
48
  if exist?(key)
49
49
  val = load(key)
50
- @events.fire(:read, key, val)
50
+ @events.fire(:read, key.to_s, val)
51
51
  return val
52
52
  else
53
53
  from = caller.is_a?(Array) ? caller.first : self.class
@@ -56,8 +56,8 @@ module Typed
56
56
  end
57
57
 
58
58
  def update(key, val)
59
- @hash[key] = val
60
- @events.fire(:write, key, val)
59
+ @hash[key.to_s] = val
60
+ @events.fire(:write, key.to_s, val)
61
61
  @changes.touch(key)
62
62
  end
63
63
 
@@ -87,7 +87,7 @@ module Typed
87
87
  ### Testing
88
88
 
89
89
  def exist?(key)
90
- @hash.has_key?(key)
90
+ @hash.has_key?(key.to_s)
91
91
  end
92
92
 
93
93
  def set?(key)
@@ -96,7 +96,7 @@ module Typed
96
96
 
97
97
  def check(key, type = nil)
98
98
  type ||= @schema[key]
99
- @schema.validate!(key, @hash[key], type)
99
+ @schema.validate!(key, @hash[key.to_s], type)
100
100
  end
101
101
 
102
102
  ######################################################################
@@ -117,13 +117,13 @@ module Typed
117
117
  ### Utils
118
118
 
119
119
  def inspect
120
- keys = @hash.keys.map(&:to_s).sort.join(',')
120
+ keys = @hash.keys.sort.join(',')
121
121
  "{#{keys}}"
122
122
  end
123
123
 
124
124
  private
125
125
  def load(key)
126
- value = @hash[key]
126
+ value = @hash[key.to_s]
127
127
 
128
128
  # LazyValue should be evaluated at runtime
129
129
  return (self[key] = value.value.call) if value.is_a?(Schema::LazyValue)
data/lib/typed/schema.rb CHANGED
@@ -38,34 +38,34 @@ module Typed
38
38
  end
39
39
 
40
40
  def definition(key)
41
- @types[key]
41
+ @types[key.to_s]
42
42
  end
43
43
 
44
44
  def [](key)
45
- @types[key].value
45
+ @types[key.to_s].value
46
46
  end
47
47
 
48
48
  def declare!(key, declare)
49
49
  case declare.must.be.kind_of(Explicit, Implicit)
50
50
  when Explicit
51
- case @types[key]
51
+ case @types[key.to_s]
52
52
  when Explicit
53
- raise TypeError, "%s has already been declared as `%s'" % [key, @types[key].value.inspect]
53
+ raise TypeError, "%s has already been declared as `%s'" % [key, @types[key.to_s].value.inspect]
54
54
  when Implicit
55
55
  # update schema if sub-class, otherwise raises
56
- declare.value.must.struct?(@types[key].value) or
57
- raise TypeError, "%s has already been typed as `%s'" % [key, @types[key].value.inspect]
56
+ declare.value.must.struct?(@types[key.to_s].value) or
57
+ raise TypeError, "%s has already been typed as `%s'" % [key, @types[key.to_s].value.inspect]
58
58
  end
59
59
  explicit(key, declare)
60
60
 
61
61
  when Implicit
62
- case @types[key]
62
+ case @types[key.to_s]
63
63
  when Explicit
64
64
  # nop
65
65
  when Implicit
66
66
  # update schema if sub-struct
67
67
  struct = self.class.struct(declare.value)
68
- if struct.must.struct?(@types[key].value)
68
+ if struct.must.struct?(@types[key.to_s].value)
69
69
  implicit(key, struct)
70
70
  end
71
71
  else
@@ -91,12 +91,12 @@ module Typed
91
91
  private
92
92
  def implicit(key, val)
93
93
  val = Implicit.new(val) unless val.is_a?(Implicit)
94
- @types[key] = val
94
+ @types[key.to_s] = val
95
95
  end
96
96
 
97
97
  def explicit(key, val)
98
98
  val = Explicit.new(val) unless val.is_a?(Explicit)
99
- @types[key] = val
99
+ @types[key.to_s] = val
100
100
  end
101
101
  end
102
102
  end
data/lib/typed/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Typed
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
data/spec/changes_spec.rb CHANGED
@@ -8,25 +8,25 @@ describe Typed::Changes do
8
8
 
9
9
  it "should return [:a] after touch(:a)" do
10
10
  subject.touch(:a)
11
- subject.keys.should == [:a]
11
+ subject.keys.should == ["a"]
12
12
  end
13
13
 
14
14
  it "should return [:a,:b] after touch(:a) and touch(:b)" do
15
15
  subject.touch(:a)
16
16
  subject.touch(:b)
17
- subject.keys.should == [:a, :b]
17
+ subject.keys.should == ["a", "b"]
18
18
  end
19
19
 
20
20
  it "should return [:b,:a] after touch(:b) and touch(:a)" do
21
21
  subject.touch(:b)
22
22
  subject.touch(:a)
23
- subject.keys.should == [:b, :a]
23
+ subject.keys.should == ["b", "a"]
24
24
  end
25
25
 
26
26
  it "should return [:a] after touch(:a) twice" do
27
27
  subject.touch(:a)
28
28
  subject.touch(:a)
29
- subject.keys.should == [:a]
29
+ subject.keys.should == ["a"]
30
30
  end
31
31
 
32
32
  it "should return [] after touch(:a) and reset" do
data/spec/events_spec.rb CHANGED
@@ -13,7 +13,7 @@ describe Typed::Events do
13
13
 
14
14
  data[:a]
15
15
 
16
- read.should == [[:a,1]]
16
+ read.should == [["a",1]]
17
17
  end
18
18
 
19
19
  it "should observe :write event" do
@@ -28,7 +28,7 @@ describe Typed::Events do
28
28
 
29
29
  data[:a] = 3
30
30
  data[:c] = 5
31
- written.should == [[:a,3], [:c,5]]
31
+ written.should == [["a",3], ["c",5]]
32
32
  end
33
33
 
34
34
  it "should not fire :read event on :write" do
data/spec/hash_spec.rb CHANGED
@@ -22,17 +22,24 @@ describe Typed::Hash do
22
22
  data.values.sort.should == [1, 2]
23
23
  end
24
24
 
25
- describe "#[]" do
26
- it "should return value if exists" do
27
- data[:foo] = 1
28
- data[:foo].should == 1
29
- end
25
+ it "should stringify keys" do
26
+ data["a"] = 1
27
+ data[:a].should == 1
28
+ data[:a] = 2
29
+ data["a"].should == 2
30
+ end
30
31
 
32
+ describe "#[]" do
31
33
  it "should raise NotDefined if value not exists" do
32
34
  lambda {
33
- data[:foo]
35
+ data["foo"]
34
36
  }.should raise_error(Typed::NotDefined)
35
37
  end
38
+
39
+ it "should return value if exists" do
40
+ data["foo"] = 1
41
+ data["foo"].should == 1
42
+ end
36
43
  end
37
44
 
38
45
  describe "#[]=" do
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: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 5
10
- version: 0.1.5
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - maiha
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-01 00:00:00 +09:00
18
+ date: 2012-05-02 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency