typed 0.1.2 → 0.1.3

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
@@ -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