tinytyping 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad218feab5996c898d325cc3f44f9be37f6d4822
4
- data.tar.gz: 3f3701d19c755c1a7b9cb1eb5d97b42917909cfd
3
+ metadata.gz: c219fda2f7091c601dd8c91c5bfa98480a4102be
4
+ data.tar.gz: 90e73b4a5348db7639246eab6bdc48af95c5ba85
5
5
  SHA512:
6
- metadata.gz: 9314e8d4f56abaef43a9da56eb5d2b06b11b519ce8d70f027bc56cef0091c8ffdbf62767c9321267c7cdcf95b21159a5513d706ef0a8535610be14eb457f42e0
7
- data.tar.gz: 29eceec1230f8667faee9ff81444bbf4710d10acddf684e629755ca648480d153ab5c11b86e10bee23c14dab125ecbbc1da8407b50789513b9990ac36b568135
6
+ metadata.gz: ac1093b555c1f3d420047d5fba233db96a8b9d642612b376833daaa98da8eaee0a59c8ec274f95b77e7d26aa62fda66e308f92caa85429601cdeb31053654720
7
+ data.tar.gz: 63eb63c60d8f310c82a66ca0c2e3b20364a6873a6046f2bdc816f25bc427eaa983976918567b0d52c91032c8695915e4c36ecfb85e73298bdef2c3eea4c60198
@@ -1,3 +1,3 @@
1
1
  module TinyTyping
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/tinytyping.rb CHANGED
@@ -9,13 +9,15 @@ module TinyTyping
9
9
 
10
10
  def test!(value, *types)
11
11
  check!(types, value)
12
+ nil
12
13
  end
13
14
 
14
15
  private
15
16
 
16
17
  def check!(types, value)
17
- return if types.any? { |type| check?(type, value) }
18
- raise ArgumentError, "#{value.inspect} isn't #{types.map(&:inspect).join(' or ')}."
18
+ index = types.index { |type| check?(type, value) }
19
+ raise ArgumentError, "#{value.inspect} isn't #{types.map(&:inspect).join(' or ')}." unless index
20
+ types[index]
19
21
  end
20
22
 
21
23
  def check?(type, value)
@@ -30,7 +32,20 @@ module TinyTyping
30
32
  true
31
33
  when Hash
32
34
  return false unless value.is_a?(Hash)
33
- type.each { |key, val| check!(Array.try_convert(val) || [val], value[key]) }
35
+ class_key_types = []
36
+ named_key_types = []
37
+ type.each_key do |key|
38
+ if [Class, Array, Hash].any? { |klass| key.is_a?(klass) }
39
+ class_key_types << key
40
+ else
41
+ named_key_types << key
42
+ end
43
+ end
44
+ (value.keys + named_key_types).uniq.each do |key|
45
+ ktype = type.include?(key) ? key : check!(class_key_types, key)
46
+ vtype = type[ktype]
47
+ check!(Array.try_convert(vtype) || [vtype], value[key])
48
+ end
34
49
  true
35
50
  else
36
51
  raise TypeError, "no implicit conversion of #{type.class} into Class"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tinytyping
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ofk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.6.10
108
+ rubygems_version: 2.6.8
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: tinytyping is simply type check.