rtype 0.6.3 → 0.6.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4edbfe36753db1a9d6a413bf31ccbed37c499df5
4
- data.tar.gz: bfa734ba5689e7fca457b247e0f03dbcde507f8e
3
+ metadata.gz: 272dbec168fe9d7b24c0b73b7ba9096b4567cf40
4
+ data.tar.gz: 7a3323d9bf39563681e79f058f5f35cf595a8b1f
5
5
  SHA512:
6
- metadata.gz: 60031209128806548c02edc8944e18a103c3f34a2ddca144dd53716050e939d9f7e4baf9ec7d33a3cf70da28ef156b5fcafd8177cddba6f11be6029cf0a4357a
7
- data.tar.gz: 5f40a360733043804e02478347ec2a8a3c187b3d7ea943e31d470a7b4727fa4d89770ad93d1e08bb349550ea1a733fc4f2908d0776db4df777567dcc6083b8e1
6
+ metadata.gz: 6f10da6933a0dec59ff8b60d026b19fa365594721a7ff1e97b0729c93e3d2f5329c085056b72d172500e13345be26b897b945951998174c2c79b596cd726d132
7
+ data.tar.gz: 75e312d85ac8f8f7a8b84b780eb1eb8f2925fef496fbf5d299959fbb8414b74d14a5dcd1a5f87ae71680b2cca68d41b32fa4e02cebcc1d2811a23ffc887d8fe6
data/README.md CHANGED
@@ -3,8 +3,6 @@
3
3
  [![Build Status](https://travis-ci.org/sputnikgugja/rtype.svg?branch=master)](https://travis-ci.org/sputnikgugja/rtype)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/sputnikgugja/rtype/badge.svg?branch=master)](https://coveralls.io/github/sputnikgugja/rtype?branch=master)
5
5
 
6
- You can do the type checking in Ruby with this gem!
7
-
8
6
  ```ruby
9
7
  require 'rtype'
10
8
 
@@ -38,10 +36,12 @@ Test::invert(state: 0)
38
36
 
39
37
  ## Features
40
38
  - Provides type checking for arguments and return
41
- - Supports type checking for [keyword argument](#keyword-argument)
39
+ - Provides type checking for [Keyword Argument](#keyword-argument)
42
40
  - [Type checking for hash elements](#hash)
43
- - [Duck typing](#duck-typing)
41
+ - [Duck Typing](#duck-typing)
42
+ - [Typed Array](#typed-array)
44
43
  - Custom type behavior
44
+ - ...
45
45
 
46
46
  ## Installation
47
47
  Run `gem install rtype` or add `gem 'rtype'` to your `Gemfile`
@@ -55,7 +55,7 @@ require 'rtype'
55
55
  Rtype itself is pure-ruby gem. but you can make it more faster by using native extension.
56
56
 
57
57
  #### Native extension for MRI
58
- Just run
58
+ Run
59
59
  ```ruby
60
60
  gem install rtype-native
61
61
  ```
@@ -63,10 +63,10 @@ or add to your `Gemfile`:
63
63
  ```ruby
64
64
  gem 'rtype-native'
65
65
  ```
66
- then, Rtype use it. (Do not `require 'rtype-native'`)
66
+ then, Rtype uses it. (**Do not** `require 'rtype-native'`)
67
67
 
68
68
  #### Java extension for JRuby
69
- Just run
69
+ Run
70
70
  ```ruby
71
71
  gem install rtype-java
72
72
  ```
@@ -74,67 +74,71 @@ or add to your `Gemfile`:
74
74
  ```ruby
75
75
  gem 'rtype-java'
76
76
  ```
77
- then, Rtype use it. (Do not `require 'rtype-java'`)
77
+ then, Rtype uses it. (**Do not** `require 'rtype-java'`)
78
78
 
79
79
  ## Usage
80
80
 
81
81
  ### Supported Type Behaviors
82
82
  - `Module`
83
- - A value must be an instance of the module/class or one of its superclasses (`is_a?`)
84
- - `Any` : An alias for `BasicObject` (means Any Object)
83
+ - Value must be of this module (`is_a?`)
84
+ - `Any` : Alias for `BasicObject` (means Any Object)
85
85
  - `Boolean` : `true` or `false`
86
86
  - `Symbol`
87
- - A value must have(respond to) a method with the name
87
+ - Value must respond to a method with this name
88
88
  - `Regexp`
89
- - A value must match the regexp pattern
89
+ - Value must match this regexp pattern
90
90
  - `Range`
91
- - A value must be included in the range
91
+ - Value must be included in this range
92
92
  - `Array`
93
- - A value can be any type in the array
93
+ - Value can be any type in this array
94
94
  - `Hash`
95
- - A value must be a hash
96
- - Each of the value’s elements must be valid
97
- - The value's key list must be equal to the hash's key list
95
+ - Value must be a hash
96
+ - Each of elements must be valid
97
+ - Value's keys must be equal to this hash's keys
98
98
  - **String** key is **different** from **symbol** key
99
99
  - vs. Keyword arguments (e.g.)
100
- - `[{}]` is **not** hash type argument. it is keyword argument, because its position is last
101
- - `[{}, {}]` is empty hash type argument (first), and one empty keyword argument (second)
102
- - `[{}, {}, {}]` is two empty hash type argument (first, second), and empty keyword argument (last)
100
+ - `[{}]` is **not** hash argument. it is keyword argument, because its position is last
101
+ - `[{}, {}]` is hash argument (first) and keyword argument (second)
102
+ - `[{}, {}, {}]` is two hash argument (first, second) and keyword argument (last)
103
103
  - `{}` is keyword argument. non-keyword arguments must be in array.
104
104
  - Of course, nested hash works
105
105
  - Example: [Hash](#hash)
106
106
  - `Proc`
107
- - A value must return a truthy value for the proc
107
+ - Value must return a truthy value for this proc
108
108
  - `true`
109
- - A value must be **truthy**
109
+ - Value must be truthy
110
110
  - `false`
111
- - A value must be **falsy**
111
+ - Value must be falsy
112
112
  - `nil`
113
- - A value must be nil
113
+ - Value must be nil
114
114
 
115
115
  - Special Behaviors
116
- - `Rtype::TypedArray` : Ensures a value is an array with the type (type signature)
116
+ - `TypedArray` : Ensures value is an array with the type (type signature)
117
117
  - `Array::of(type)` (recommended)
118
- - `Rtype::Behavior::TypedArray[type]`
118
+ - or `Rtype::Behavior::TypedArray[type]`
119
119
  - Example: [TypedArray](#typed-array)
120
+
121
+ - `Num, Int, Flo` : Numeric check
122
+ - `Num/Int/Flo >/>=/</<=/== x`
123
+ - e.g. `Num >= 2` means value must be a `Numeric` and >= 2
124
+ - e.g. `Int >= 2` means value must be a `Integer` and >= 2
125
+ - e.g. `Flo >= 2` means value must be a `Float` and >= 2
126
+
127
+ - `And` : Ensures value is valid for all given types
128
+ - `Rtype::and(*types)`, `Rtype::Behavior::And[*types]`
129
+ - or `Array#comb`, `Object#and(*others)`
120
130
 
121
- - `Rtype::and(*types)` : Ensures a value is valid for all the types
122
- - `Rtype::and(*types)`, `Rtype::Behavior::And[*types]`, `include Rtype::Behavior; And[...]`
123
- - `Array#comb`
124
- - `Object#and(*others)`
125
-
126
- - `Rtype::xor(*types)` : Ensures a value is valid for only one of the types
127
- - `Rtype::xor(*types)`, `Rtype::Behavior::Xor[*types]`, `include Rtype::Behavior; Xor[...]`
128
- - `Object#xor(*others)`
131
+ - `Xor` : Ensures value is valid for only one of given types
132
+ - `Rtype::xor(*types)`, `Rtype::Behavior::Xor[*types]`
133
+ - or `Object#xor(*others)`
129
134
 
130
- - `Rtype::not(*types)` : Ensures a value is not valid for all the types
131
- - `Rtype::not(*types)`, `Rtype::Behavior::Not[*types]`, `include Rtype::Behavior; Not[...]`
132
- - `Object#not`
135
+ - `Not` : Ensures value is not valid for all given types
136
+ - `Rtype::not(*types)`, `Rtype::Behavior::Not[*types]`
137
+ - or `Object#not`
133
138
 
134
- - `Rtype::nilable(type)` : Ensures a value can be nil
135
- - `Rtype::nilable(type)`, `Rtype::Behavior::Nilable[type]`, `include Rtype::Behavior; Nilable[...]`
136
- - `Object#nilable`
137
- - `Object#or_nil`
139
+ - `Nilable` : Value can be nil
140
+ - `Rtype::nilable(type)`, `Rtype::Behavior::Nilable[type]`
141
+ - or `Object#nilable`, `Object#or_nil`
138
142
 
139
143
  - You can create custom behavior by extending `Rtype::Behavior::Base`
140
144
 
@@ -234,7 +238,7 @@ def func(hash)
234
238
  puts hash[:msg]
235
239
  end
236
240
 
237
- # last hash is keyword arguments
241
+ # last hash is not hash argument but keyword arguments
238
242
  func({}, {})
239
243
  # (Rtype::ArgumentTypeError) for 1st argument:
240
244
  # Expected {} to be a hash with 1 elements:
@@ -315,83 +319,18 @@ sum([1, 2, 3]) # => 6
315
319
  sum([1.0, 2, 3]) # => 6.0
316
320
  ```
317
321
 
318
- #### Combined type
319
- ```ruby
320
- ### TEST 1 ###
321
- require 'rtype'
322
-
323
- class Example
324
- rtype [[String, :func].comb] => Any
325
- # also works:
326
- # rtype [Rtype::and(String, :func)] => Any
327
- def and_test(arg)
328
- end
329
- end
330
-
331
- Example.new.and_test("A string")
332
- # (Rtype::ArgumentTypeError) for 1st argument:
333
- # Expected "A string" to be a String
334
- # AND Expected "A string" to respond to :func
335
- ```
336
- ```ruby
337
- ### TEST 2 ###
338
- # ... require rtype and define Example the same as above ...
339
-
340
- class String
341
- def func; end
342
- end
343
-
344
- Example.new.and_test("A string") # Works!
345
- ```
346
-
347
- #### Combined duck type
348
- Application of duck typing and combined type
349
-
350
- ```ruby
351
- require 'rtype'
352
-
353
- module Game
354
- ENEMY = [
355
- :name,
356
- :level
357
- ].comb
358
-
359
- class Player < Entity
360
- include Rtype::Behavior
361
-
362
- rtype [ENEMY] => Any
363
- def attacks(enemy)
364
- "Player attacks '#{enemy.name}' (level #{enemy.level})!"
365
- end
366
- end
367
-
368
- class Slime < Entity
369
- def name
370
- "Powerful Slime"
371
- end
372
-
373
- def level
374
- 123
375
- end
376
- end
377
- end
378
-
379
- Game::Player.new.attacks Game::Slime.new
380
- # Player attacks 'Powerful Slime' (level 123)!
381
- ```
382
-
383
- #### Position of `rtype` && (specifying method name || annotation mode) && (symbol || string)
322
+ #### `rtype`
384
323
  ```ruby
385
324
  require 'rtype'
386
325
 
387
326
  class Example
388
- # Recommended. Annotation mode (no method name required)
327
+ # Recommended. With annotation mode (no method name required)
389
328
  rtype [Integer, String] => String
390
329
  def hello_world(i, str)
391
330
  puts "Hello? #{i} #{st
392
331
  end
393
332
 
394
- # Works (specifying method name)
333
+ # Works (with specifying method name)
395
334
  rtype :hello_world, [Integer, String] => String
396
335
  def hello_world(i, str)
397
336
  puts "Hello? #{i} #{st
@@ -409,7 +348,7 @@ class Example
409
348
  puts "Hello? #{i} #{str}"
410
349
  end
411
350
 
412
- # Doesn't work. `rtype` works for following (next) method
351
+ # Doesn't work. annotation mode works for following (next) method
413
352
  def hello_world_four(i, str)
414
353
  puts "Hello? #{i} #{str}"
415
354
  end
@@ -417,8 +356,8 @@ class Example
417
356
  end
418
357
  ```
419
358
 
420
- #### Outside of module (root)
421
- In the outside of module, annotation mode don't works. You must specify method name.
359
+ #### In the outside of module (root)
360
+ In the outside of module, annotation mode doesn't work. You must specify method name.
422
361
 
423
362
  ```ruby
424
363
  rtype :say, [String] => Any
@@ -429,11 +368,11 @@ end
429
368
  Test.new.say "Hello" # Hello
430
369
 
431
370
  rtype [String] => Any
432
- # (ArgumentError) Annotation mode not working out of module
371
+ # (ArgumentError) Annotation mode not working in the outside of module
433
372
  ```
434
373
 
435
374
  #### Class method
436
- rtype annotation mode works both instance and class method
375
+ Annotation mode works for both instance method and class method
437
376
 
438
377
  ```ruby
439
378
  require 'rtype'
@@ -463,8 +402,8 @@ end
463
402
  Example::say_ya(3) #say ya ya ya
464
403
  ```
465
404
 
466
- #### Checking type information
467
- This is just the 'information'
405
+ #### Type information
406
+ This is just 'information'
468
407
 
469
408
  Any change of this doesn't affect type checking
470
409
 
data/Rakefile CHANGED
@@ -3,10 +3,10 @@ require "rspec/core/rake_task"
3
3
  # Default pattern is 'spec/**{,/*/**}/*_spec.rb'
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task :default => [:spec]
7
7
 
8
8
  # Benchmark
9
9
  desc "Compare with pure ruby and other gems"
10
10
  task :benchmark do
11
11
  ruby "benchmark/benchmark.rb"
12
- end
12
+ end
@@ -1,28 +1,160 @@
1
1
  class Object
2
+ # @return [Rtype::Behavior::And]
2
3
  def and(*others)
3
4
  ::Rtype::and(self, *others)
4
5
  end
5
6
 
7
+ # @return [Rtype::Behavior::Nilable]
6
8
  def nilable
7
9
  ::Rtype::nilable(self)
8
10
  end
9
11
  alias_method :or_nil, :nilable
10
12
 
13
+ # @return [Rtype::Behavior::Not]
11
14
  def not
12
15
  ::Rtype::not(self)
13
16
  end
14
17
 
18
+ # @return [Rtype::Behavior::Xor]
15
19
  def xor(*others)
16
20
  ::Rtype::xor(self, *others)
17
21
  end
18
22
  end
19
23
 
20
24
  class Array
25
+ # @return [Rtype::Behavior::TypedArray]
21
26
  def self.of(type_sig)
22
27
  ::Rtype::Behavior::TypedArray.new(type_sig)
23
28
  end
24
29
 
30
+ # @return [Rtype::Behavior::And]
25
31
  def comb
26
32
  ::Rtype::Behavior::And[*self]
27
33
  end
28
34
  end
35
+
36
+ class Num
37
+ # @param [Numeric] x
38
+ # @return [Proc]
39
+ # @example Value must be a Numeric and > 2
40
+ # rtype [Num > 2] => Any
41
+ def self.>(x)
42
+ lambda { |obj| obj.is_a?(Numeric) && obj > x }
43
+ end
44
+
45
+ # @param [Numeric] x
46
+ # @return [Proc]
47
+ # @example Value must be a Numeric and > 2
48
+ # rtype [Num > 2] => Any
49
+ def self.>=(x)
50
+ lambda { |obj| obj.is_a?(Numeric) && obj >= x }
51
+ end
52
+
53
+ # @param [Numeric] x
54
+ # @return [Proc]
55
+ # @example Value must be a Numeric and > 2
56
+ # rtype [Num > 2] => Any
57
+ def self.<(x)
58
+ lambda { |obj| obj.is_a?(Numeric) && obj < x }
59
+ end
60
+
61
+ # @param [Numeric] x
62
+ # @return [Proc]
63
+ # @example Value must be a Numeric and > 2
64
+ # rtype [Num > 2] => Any
65
+ def self.<=(x)
66
+ lambda { |obj| obj.is_a?(Numeric) && obj <= x }
67
+ end
68
+
69
+ # @param [Numeric] x
70
+ # @return [Proc]
71
+ # @example Value must be a Numeric and > 2
72
+ # rtype [Num > 2] => Any
73
+ def self.==(x)
74
+ lambda { |obj| obj.is_a?(Numeric) && obj == x }
75
+ end
76
+ end
77
+
78
+ class Int
79
+ # @param [Numeric] x
80
+ # @return [Proc]
81
+ # @example Value must be a Integer and > 2
82
+ # rtype [Int > 2] => Any
83
+ def self.>(x)
84
+ lambda { |obj| obj.is_a?(Integer) && obj > x }
85
+ end
86
+
87
+ # @param [Numeric] x
88
+ # @return [Proc]
89
+ # @example Value must be a Integer and > 2
90
+ # rtype [Int > 2] => Any
91
+ def self.>=(x)
92
+ lambda { |obj| obj.is_a?(Integer) && obj >= x }
93
+ end
94
+
95
+ # @param [Numeric] x
96
+ # @return [Proc]
97
+ # @example Value must be a Integer and > 2
98
+ # rtype [Int > 2] => Any
99
+ def self.<(x)
100
+ lambda { |obj| obj.is_a?(Integer) && obj < x }
101
+ end
102
+
103
+ # @param [Numeric] x
104
+ # @return [Proc]
105
+ # @example Value must be a Integer and > 2
106
+ # rtype [Int > 2] => Any
107
+ def self.<=(x)
108
+ lambda { |obj| obj.is_a?(Integer) && obj <= x }
109
+ end
110
+
111
+ # @param [Numeric] x
112
+ # @return [Proc]
113
+ # @example Value must be a Integer and > 2
114
+ # rtype [Int > 2] => Any
115
+ def self.==(x)
116
+ lambda { |obj| obj.is_a?(Integer) && obj == x }
117
+ end
118
+ end
119
+
120
+ class Flo
121
+ # @param [Numeric] x
122
+ # @return [Proc]
123
+ # @example Value must be a Float and > 2
124
+ # rtype [Flo > 2] => Any
125
+ def self.>(x)
126
+ lambda { |obj| obj.is_a?(Float) && obj > x }
127
+ end
128
+
129
+ # @param [Numeric] x
130
+ # @return [Proc]
131
+ # @example Value must be a Float and > 2
132
+ # rtype [Flo > 2] => Any
133
+ def self.>=(x)
134
+ lambda { |obj| obj.is_a?(Float) && obj >= x }
135
+ end
136
+
137
+ # @param [Numeric] x
138
+ # @return [Proc]
139
+ # @example Value must be a Float and > 2
140
+ # rtype [Flo > 2] => Any
141
+ def self.<(x)
142
+ lambda { |obj| obj.is_a?(Float) && obj < x }
143
+ end
144
+
145
+ # @param [Numeric] x
146
+ # @return [Proc]
147
+ # @example Value must be a Float and > 2
148
+ # rtype [Flo > 2] => Any
149
+ def self.<=(x)
150
+ lambda { |obj| obj.is_a?(Float) && obj <= x }
151
+ end
152
+
153
+ # @param [Numeric] x
154
+ # @return [Proc]
155
+ # @example Value must be a Float and > 2
156
+ # rtype [Flo > 2] => Any
157
+ def self.==(x)
158
+ lambda { |obj| obj.is_a?(Float) && obj == x }
159
+ end
160
+ end
data/lib/rtype/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Rtype
2
- VERSION = "0.6.3".freeze
2
+ VERSION = "0.6.4".freeze
3
3
  # rtype java extension version. nil If the extension is not used
4
4
  JAVA_EXT_VERSION = nil unless defined?(JAVA_EXT_VERSION)
5
5
  # rtype c extension version. nil If the extension is not used
data/lib/rtype.rb CHANGED
@@ -1,17 +1,20 @@
1
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
2
- begin
3
- require 'java'
4
- require 'rtype/rtype_java'
5
- # puts "Rtype with Java extension"
6
- rescue LoadError
7
- # puts "Rtype without native extension"
8
- end
9
- else
10
- begin
11
- require "rtype/rtype_native"
12
- # puts "Rtype with C native extension"
13
- rescue LoadError
14
- # puts "Rtype without native extension"
1
+ if defined?(RUBY_ENGINE)
2
+ case RUBY_ENGINE
3
+ when "jruby"
4
+ begin
5
+ require 'java'
6
+ require 'rtype/rtype_java'
7
+ # puts "Rtype with Java extension"
8
+ rescue LoadError
9
+ # puts "Rtype without native extension"
10
+ end
11
+ when "ruby"
12
+ begin
13
+ require "rtype/rtype_native"
14
+ # puts "Rtype with C native extension"
15
+ rescue LoadError
16
+ # puts "Rtype without native extension"
17
+ end
15
18
  end
16
19
  end
17
20
 
@@ -322,7 +325,7 @@ module Rtype
322
325
  # Validates arguments
323
326
  #
324
327
  # @param [Array] expected_args A type signature for non-keyword arguments
325
- # @param args
328
+ # @param [Array] args
326
329
  # @return [void]
327
330
  #
328
331
  # @raise [TypeSignatureError] If expected_args is invalid
@@ -346,9 +349,9 @@ module Rtype
346
349
  # Validates arguments and keyword arguments
347
350
  #
348
351
  # @param [Array] expected_args A type signature for non-keyword arguments
349
- # @param args Arguments
352
+ # @param [Array] args Arguments
350
353
  # @param [Hash] expected_kwargs A type signature for keyword arguments
351
- # @param kwargs Keword arguments
354
+ # @param [Hash] kwargs Keword arguments
352
355
  # @return [void]
353
356
  #
354
357
  # @raise [TypeSignatureError] If expected_args or expected_kwargs are invalid
data/spec/rtype_spec.rb CHANGED
@@ -474,6 +474,68 @@ describe Rtype do
474
474
  instance.return_nil([])
475
475
  end
476
476
  end
477
+
478
+ describe 'Numeric check' do
479
+ it 'Num (Numeric)' do
480
+ klass.send :rtype, :return_nil, [Num >= 0] => Any
481
+ expect { instance.return_nil("hello") }.to raise_error Rtype::ArgumentTypeError
482
+ expect { instance.return_nil(-1) }.to raise_error Rtype::ArgumentTypeError
483
+ instance.return_nil(2)
484
+ instance.return_nil(2.0)
485
+
486
+ klass.send :rtype, :return_nil, [Num > 0] => Any
487
+ expect { instance.return_nil("non numeric") }.to raise_error Rtype::ArgumentTypeError
488
+ expect { instance.return_nil(0) }.to raise_error Rtype::ArgumentTypeError
489
+
490
+ klass.send :rtype, :return_nil, [Num < 0] => Any
491
+ expect { instance.return_nil("non numeric") }.to raise_error Rtype::ArgumentTypeError
492
+ expect { instance.return_nil(0) }.to raise_error Rtype::ArgumentTypeError
493
+
494
+ klass.send :rtype, :return_nil, [Num <= 0] => Any
495
+ expect { instance.return_nil("non numeric") }.to raise_error Rtype::ArgumentTypeError
496
+ expect { instance.return_nil(1) }.to raise_error Rtype::ArgumentTypeError
497
+ end
498
+
499
+ it 'Int (Integer)' do
500
+ klass.send :rtype, :return_nil, [Int >= 0] => Any
501
+ expect { instance.return_nil("hello") }.to raise_error Rtype::ArgumentTypeError
502
+ expect { instance.return_nil(1.0) }.to raise_error Rtype::ArgumentTypeError
503
+ expect { instance.return_nil(-1) }.to raise_error Rtype::ArgumentTypeError
504
+ instance.return_nil(2)
505
+
506
+ klass.send :rtype, :return_nil, [Int > 0] => Any
507
+ expect { instance.return_nil(1.0) }.to raise_error Rtype::ArgumentTypeError
508
+ expect { instance.return_nil(0) }.to raise_error Rtype::ArgumentTypeError
509
+
510
+ klass.send :rtype, :return_nil, [Int < 0] => Any
511
+ expect { instance.return_nil(-1.0) }.to raise_error Rtype::ArgumentTypeError
512
+ expect { instance.return_nil(0) }.to raise_error Rtype::ArgumentTypeError
513
+
514
+ klass.send :rtype, :return_nil, [Int <= 0] => Any
515
+ expect { instance.return_nil(0.0) }.to raise_error Rtype::ArgumentTypeError
516
+ expect { instance.return_nil(1) }.to raise_error Rtype::ArgumentTypeError
517
+ end
518
+
519
+ it 'Flo (Float)' do
520
+ klass.send :rtype, :return_nil, [Flo >= 0] => Any
521
+ expect { instance.return_nil("hello") }.to raise_error Rtype::ArgumentTypeError
522
+ expect { instance.return_nil(1) }.to raise_error Rtype::ArgumentTypeError
523
+ expect { instance.return_nil(-1.0) }.to raise_error Rtype::ArgumentTypeError
524
+ instance.return_nil(2.0)
525
+
526
+ klass.send :rtype, :return_nil, [Flo > 0] => Any
527
+ expect { instance.return_nil(1) }.to raise_error Rtype::ArgumentTypeError
528
+ expect { instance.return_nil(0.0) }.to raise_error Rtype::ArgumentTypeError
529
+
530
+ klass.send :rtype, :return_nil, [Flo < 0] => Any
531
+ expect { instance.return_nil(-1) }.to raise_error Rtype::ArgumentTypeError
532
+ expect { instance.return_nil(0.0) }.to raise_error Rtype::ArgumentTypeError
533
+
534
+ klass.send :rtype, :return_nil, [Flo <= 0] => Any
535
+ expect { instance.return_nil(0) }.to raise_error Rtype::ArgumentTypeError
536
+ expect { instance.return_nil(1.0) }.to raise_error Rtype::ArgumentTypeError
537
+ end
538
+ end
477
539
  end
478
540
  end
479
541
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtype
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sputnik Gugja
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-21 00:00:00.000000000 Z
11
+ date: 2016-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '10.0'
19
+ version: '11.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '10.0'
26
+ version: '11.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement