typed 0.2.4 → 0.2.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/lib/typed/schema.rb +5 -3
 - data/lib/typed/version.rb +1 -1
 - data/spec/hash_spec.rb +48 -0
 - metadata +4 -4
 
    
        data/lib/typed/schema.rb
    CHANGED
    
    | 
         @@ -52,9 +52,11 @@ module Typed 
     | 
|
| 
       52 
52 
     | 
    
         
             
                    when Explicit
         
     | 
| 
       53 
53 
     | 
    
         
             
                      raise TypeError, "%s has already been declared as `%s'" % [key, @types[key.to_s].value.inspect]
         
     | 
| 
       54 
54 
     | 
    
         
             
                    when Implicit
         
     | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
       56 
     | 
    
         
            -
                       
     | 
| 
       57 
     | 
    
         
            -
                      declare.value 
     | 
| 
      
 55 
     | 
    
         
            +
                      type = @types[key.to_s].value
         
     | 
| 
      
 56 
     | 
    
         
            +
                      # update schema if same or sub-class or ancestor, otherwise raises
         
     | 
| 
      
 57 
     | 
    
         
            +
                      declare.value == type            or # need this hack due to bug of Must#struct?
         
     | 
| 
      
 58 
     | 
    
         
            +
                      declare.value.must.struct?(type) or # sub-class
         
     | 
| 
      
 59 
     | 
    
         
            +
                      type.must.struct?(declare.value) or # ancestor
         
     | 
| 
       58 
60 
     | 
    
         
             
                        raise TypeError, "%s has already been typed as `%s'" % [key, @types[key.to_s].value.inspect]
         
     | 
| 
       59 
61 
     | 
    
         
             
                      explicit(key, declare)
         
     | 
| 
       60 
62 
     | 
    
         
             
                    else          
         
     | 
    
        data/lib/typed/version.rb
    CHANGED
    
    
    
        data/spec/hash_spec.rb
    CHANGED
    
    | 
         @@ -136,6 +136,36 @@ describe Typed::Hash do 
     | 
|
| 
       136 
136 
     | 
    
         
             
                  }.should_not raise_error
         
     | 
| 
       137 
137 
     | 
    
         
             
                end
         
     | 
| 
       138 
138 
     | 
    
         | 
| 
      
 139 
     | 
    
         
            +
                it "should accept atomic ancestor class (like Numeric) for its schema" do
         
     | 
| 
      
 140 
     | 
    
         
            +
                  data[:foo] = 1
         
     | 
| 
      
 141 
     | 
    
         
            +
                  data.schema(:foo).should == Fixnum # implicitly defined
         
     | 
| 
      
 142 
     | 
    
         
            +
                  lambda {
         
     | 
| 
      
 143 
     | 
    
         
            +
                    data[:foo] = Numeric
         
     | 
| 
      
 144 
     | 
    
         
            +
                  }.should_not raise_error
         
     | 
| 
      
 145 
     | 
    
         
            +
                  data.schema(:foo).should == Numeric
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            =begin
         
     | 
| 
      
 149 
     | 
    
         
            +
                it "should accept atomic ancestor class (like Object) for its schema" do
         
     | 
| 
      
 150 
     | 
    
         
            +
                  data[:foo] = [:a]
         
     | 
| 
      
 151 
     | 
    
         
            +
                  data.schema(:foo).should == [Symbol] # implicitly defined
         
     | 
| 
      
 152 
     | 
    
         
            +
                  lambda {
         
     | 
| 
      
 153 
     | 
    
         
            +
                    data[:foo] = Object
         
     | 
| 
      
 154 
     | 
    
         
            +
                  }.should_not raise_error
         
     | 
| 
      
 155 
     | 
    
         
            +
                  data.schema(:foo).should == Object
         
     | 
| 
      
 156 
     | 
    
         
            +
                  data[:foo] = 1
         
     | 
| 
      
 157 
     | 
    
         
            +
                  data[:foo].should == 1
         
     | 
| 
      
 158 
     | 
    
         
            +
                end
         
     | 
| 
      
 159 
     | 
    
         
            +
            =end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
                it "should reject atomic non-ancestor class (like String) for its schema" do
         
     | 
| 
      
 162 
     | 
    
         
            +
                  data[:foo] = 1
         
     | 
| 
      
 163 
     | 
    
         
            +
                  data.schema(:foo).should == Fixnum # implicitly defined
         
     | 
| 
      
 164 
     | 
    
         
            +
                  lambda {
         
     | 
| 
      
 165 
     | 
    
         
            +
                    data[:foo] = String
         
     | 
| 
      
 166 
     | 
    
         
            +
                  }.should raise_error(TypeError)
         
     | 
| 
      
 167 
     | 
    
         
            +
                end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
       139 
169 
     | 
    
         
             
                it "should accept complex classes (like [Fixnum]) for its schema" do
         
     | 
| 
       140 
170 
     | 
    
         
             
                  data[:foo] = [1]
         
     | 
| 
       141 
171 
     | 
    
         
             
                  lambda {
         
     | 
| 
         @@ -150,6 +180,24 @@ describe Typed::Hash do 
     | 
|
| 
       150 
180 
     | 
    
         
             
                  }.should_not raise_error
         
     | 
| 
       151 
181 
     | 
    
         
             
                end
         
     | 
| 
       152 
182 
     | 
    
         | 
| 
      
 183 
     | 
    
         
            +
            =begin
         
     | 
| 
      
 184 
     | 
    
         
            +
                it "should accept complex ancestor class (like {String=>Integer}) for its schema" do
         
     | 
| 
      
 185 
     | 
    
         
            +
                  data[:foo] = {"a" => 1}
         
     | 
| 
      
 186 
     | 
    
         
            +
                  data.schema(:foo).should == {String => Fixnum} # implicitly defined
         
     | 
| 
      
 187 
     | 
    
         
            +
                  lambda {
         
     | 
| 
      
 188 
     | 
    
         
            +
                    data[:foo] = {String => Integer}
         
     | 
| 
      
 189 
     | 
    
         
            +
                  }.should_not raise_error
         
     | 
| 
      
 190 
     | 
    
         
            +
                  data.schema(:foo).should == {String => Integer}
         
     | 
| 
      
 191 
     | 
    
         
            +
                end
         
     | 
| 
      
 192 
     | 
    
         
            +
            =end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                it "should reject complex non-ancestor class (like String) for its schema" do
         
     | 
| 
      
 195 
     | 
    
         
            +
                  data[:foo] = {"a" => 1}
         
     | 
| 
      
 196 
     | 
    
         
            +
                  lambda {
         
     | 
| 
      
 197 
     | 
    
         
            +
                    data[:foo] = {String => Symbol}
         
     | 
| 
      
 198 
     | 
    
         
            +
                  }.should raise_error(TypeError)
         
     | 
| 
      
 199 
     | 
    
         
            +
                end
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
       153 
201 
     | 
    
         
             
                it "can override implicitly declared schema by sub-struct schema" do
         
     | 
| 
       154 
202 
     | 
    
         
             
                  data[:foo] = {}
         
     | 
| 
       155 
203 
     | 
    
         
             
                  data[:foo].should == {}
         
     | 
    
        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: 29
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 2
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.2. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 5
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.2.5
         
     | 
| 
       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- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2012-08-17 00:00:00 Z
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
21 
     | 
    
         
             
              name: activesupport
         
     |