typed 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,12 +1,27 @@
1
1
  = typed
2
2
 
3
- A Ruby library for Typed variables
3
+ A Ruby library for Typed variables
4
4
 
5
5
 
6
6
  == DESCRIPTION:
7
7
 
8
- No more "NoMethodError: undefined method"!
9
- We need some typed variables to avoid silly and stealth mistakes.
8
+ No more "NoMethodError: undefined method"!
9
+ We need some typed variables to avoid silly and stealth mistakes.
10
+
11
+ # Ruby
12
+ irb> name = "foo"
13
+ irb> name = 10
14
+
15
+ # Scala
16
+ scala> var name = "foo"
17
+ scala> name = 10
18
+ <console>:8: error: type mismatch;
19
+
20
+ # Ruby + typed.gem
21
+ irb> vars = Typed::Hash.new
22
+ irb> vars[:name] = "foo"
23
+ irb> vars[:name] = 10
24
+ TypeError: name(String) got Fixnum: 10
10
25
 
11
26
 
12
27
  == SYNOPSIS:
@@ -41,6 +56,17 @@
41
56
  >> vars[:services] = {22 => {:tcp => "ssh"}}
42
57
  TypeError: services({Integer=>[{Symbol=>String}]}) got {Fixnum=>{Symbol=>String}}: {22=>{:tcp=>"ssh"}}
43
58
 
59
+ # changes object tells whether a key is changed or not
60
+ >> vars = Typed::Hash.new
61
+ >> vars.changes.keys
62
+ => []
63
+ >> vars[:a] = 1
64
+ >> vars.changes.keys
65
+ => [:a]
66
+ >> vars.changes.reset
67
+ >> vars.changes.keys
68
+ => []
69
+
44
70
 
45
71
  == REQUIREMENTS:
46
72
 
data/lib/typed.rb CHANGED
@@ -6,7 +6,8 @@ require "typed/hash"
6
6
  module Typed
7
7
  NotDefined = Class.new(RuntimeError)
8
8
 
9
- autoload :Default, "typed/default"
10
9
  autoload :Schema , "typed/schema"
10
+ autoload :Default, "typed/default"
11
+ autoload :Changes, "typed/changes"
11
12
  end
12
13
 
@@ -0,0 +1,20 @@
1
+ module Typed
2
+ class Changes
3
+ def initialize
4
+ @hash = {}
5
+ end
6
+
7
+ def reset
8
+ @hash = {}
9
+ end
10
+
11
+ def touch(key)
12
+ @hash[key] = Time.now
13
+ end
14
+
15
+ def keys
16
+ @hash.to_a.sort_by(&:last).map(&:first)
17
+ end
18
+ end
19
+ end
20
+
data/lib/typed/hash.rb CHANGED
@@ -7,12 +7,14 @@ module Typed
7
7
  }
8
8
 
9
9
  delegate :keys, :to=>"@hash"
10
+ attr_reader :changes
10
11
 
11
12
  def initialize(options = {})
12
13
  @hash = {}
13
14
  @options = DEFAULT_OPTIONS.merge(options.must(::Hash))
14
15
  @schema = Schema.new
15
16
  @default = Default.new(self)
17
+ @changes = Changes.new
16
18
  end
17
19
 
18
20
  ######################################################################
@@ -51,6 +53,7 @@ module Typed
51
53
 
52
54
  def update(key, val)
53
55
  @hash[key] = val
56
+ @changes.touch(key)
54
57
  end
55
58
 
56
59
  def []=(key, val)
data/lib/typed/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Typed
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ describe Typed::Changes do
4
+ describe "#keys" do
5
+ it "should return []" do
6
+ subject.keys.should == []
7
+ end
8
+
9
+ it "should return [:a] after touch(:a)" do
10
+ subject.touch(:a)
11
+ subject.keys.should == [:a]
12
+ end
13
+
14
+ it "should return [:a,:b] after touch(:a) and touch(:b)" do
15
+ subject.touch(:a)
16
+ subject.touch(:b)
17
+ subject.keys.should == [:a, :b]
18
+ end
19
+
20
+ it "should return [:b,:a] after touch(:b) and touch(:a)" do
21
+ subject.touch(:b)
22
+ subject.touch(:a)
23
+ subject.keys.should == [:b, :a]
24
+ end
25
+
26
+ it "should return [:a] after touch(:a) twice" do
27
+ subject.touch(:a)
28
+ subject.touch(:a)
29
+ subject.keys.should == [:a]
30
+ end
31
+
32
+ it "should return [] after touch(:a) and reset" do
33
+ subject.touch(:a)
34
+ subject.reset
35
+ subject.keys.should == []
36
+ end
37
+ end
38
+ end
data/spec/hash_spec.rb CHANGED
@@ -269,5 +269,12 @@ describe Typed::Hash do
269
269
  data[:foo].should == 2
270
270
  end
271
271
  end
272
+
273
+ ######################################################################
274
+ ### Changes
275
+
276
+ describe "#changes" do
277
+ its(:changes) {should be_kind_of(Typed::Changes)}
278
+ end
272
279
  end
273
280
 
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: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
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-02-13 00:00:00 +09:00
18
+ date: 2012-04-26 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -77,10 +77,12 @@ files:
77
77
  - README.rdoc
78
78
  - Rakefile
79
79
  - lib/typed.rb
80
+ - lib/typed/changes.rb
80
81
  - lib/typed/default.rb
81
82
  - lib/typed/hash.rb
82
83
  - lib/typed/schema.rb
83
84
  - lib/typed/version.rb
85
+ - spec/changes_spec.rb
84
86
  - spec/hash_spec.rb
85
87
  - spec/schema_spec.rb
86
88
  - spec/spec_helper.rb